content: {-
  This program converts Haskell source to HTML. Apart from the Haskell source
  files, it requires the cross reference information produced by running
  
         tstModules xrefs <files>
  
  on the complete program.
  -}
  
  import HsLexerPass1
  import System(getArgs)
  import Unlit(readHaskellFile)
  import MUtils
  import RefsTypes
  import HLex2html
  import PathUtils(normf)
  
  -- fix the hard coded path?
  main =
    do args <- getArgs
       fms <- mapFst normf # (readIO =<< readFile "hi/ModuleSourceFiles.hv")
       case args of
         ["file",m]   -> putStrLn . maybe "?" id . lookup m . map swap $ fms
         ["html",m]   -> module2html m fms
         ["f2html",f] -> file2html (normf f) fms
         ["all2html"] -> all2html fms
         ["modules"]  -> putStr . unlines . map (\(f,m)->m++" "++f) $ fms
         ["files"]  -> putStr . unlines . map fst $ fms
         _ -> fail "Usage: hs2html (file <module> | html <module> | f2html <file> | files | modules | all2html)"
  
  readl s = map read . lines $ s
  
  readModule = readRefs >#< lexHaskellFile
  readRefs :: Module -> IO Refs
  readRefs m = readl # readFile ("hi/"++m++".refs")
  lexHaskellFile f = lexerPass0 # readHaskellFile Nothing f
  
  all2html fms = mapM_ one2html fms
    where
      one2html (f,m) = writeFile h.hlex2html (f,fms)=<<readModule (m,f)
        where h = "hi/"++m++".html"
  
  module2html m fms =
    case [f|(f,m')<-fms,m'==m] of
      f:_ -> haskell2html (f, fms) (m, f)
      _ -> fail "Unknown module"
  
  file2html f fms =
    case [m|(f',m)<-fms,f'==f] of
      m:_ -> haskell2html (f, fms) (m,f)
      _ -> fail "Unknown source file"
  
  haskell2html ffm mf = putStrLn.hlex2html ffm=<<readModule mf
  