module HaddockHH(ppHHContents, ppHHIndex) where import HsSyn hiding(Doc) #if __GLASGOW_HASKELL__ < 503 import Pretty import FiniteMap #else import Text.PrettyPrint import Data.FiniteMap #endif import HaddockModuleTree import HaddockUtil import HaddockTypes contentsHHFile, indexHHFile :: String contentsHHFile = "index.hhc" indexHHFile = "index.hhk" ppHHContents :: FilePath -> [Module] -> IO () ppHHContents odir mods = do let tree = mkModuleTree mods html = text "" $$ text "" $$ text "" $$ text "" $$ text "" $$ text "" $$ ppModuleTree tree $$ text "" writeFile (odir ++ pathSeparator:contentsHHFile) (render html) where ppModuleTree :: [ModuleTree] -> Doc ppModuleTree ts = text "" $$ text "" $$ text "" $$ text "" fn :: [String] -> [ModuleTree] -> Doc fn ss [x] = ppNode ss x fn ss (x:xs) = ppNode ss x $$ fn ss xs fn _ [] = error "HaddockHH.ppHHContents.fn: no module trees given" ppNode :: [String] -> ModuleTree -> Doc ppNode ss (Node s leaf []) = ppLeaf s ss leaf ppNode ss (Node s leaf ts) = ppLeaf s ss leaf $$ text "" ppLeaf s ss isleaf = text "
  • " <> nest 4 (text "" $$ text " text s <> text "\">" $$ (if isleaf then text " text (moduleHtmlFile "" mdl) <> text "\">" else empty) $$ text "") $+$ text "
  • " where mdl = foldr (++) "" (s' : map ('.':) ss') (s':ss') = reverse (s:ss) -- reconstruct the module name ------------------------------- ppHHIndex :: FilePath -> [(Module,Interface)] -> IO () ppHHIndex odir ifaces = do let html = text "" $$ text "" $$ text "" $$ text "" $$ text "" $$ text "" $$ text "" $$ text "" writeFile (odir ++ pathSeparator:indexHHFile) (render html) where index :: [(HsName, Module)] index = fmToList full_index iface_indices = map getIfaceIndex ifaces full_index = foldr1 plusFM iface_indices getIfaceIndex (mdl,iface) = listToFM [ (name, mdl) | (name, Qual mdl' _) <- fmToList (iface_env iface), mdl == mdl'] ppList [] = empty ppList ((name,Module mdl):mdls) = text "
  • " <> nest 4 (text "" $$ text " text (show name) <> text "\">" $$ text " text (moduleHtmlFile "" mdl) <> char '#' <> text (show name) <> text "\">" $$ text "") $+$ text "
  • " $$ ppList mdls