diff options
Diffstat (limited to 'src/Haddock/Backends/Xhtml.hs')
-rw-r--r-- | src/Haddock/Backends/Xhtml.hs | 49 |
1 files changed, 41 insertions, 8 deletions
diff --git a/src/Haddock/Backends/Xhtml.hs b/src/Haddock/Backends/Xhtml.hs index 5776111e..18204a2b 100644 --- a/src/Haddock/Backends/Xhtml.hs +++ b/src/Haddock/Backends/Xhtml.hs @@ -56,9 +56,10 @@ import Name import Module +-------------------------------------------------------------------------------- +-- * Generating HTML documentation +-------------------------------------------------------------------------------- --- ----------------------------------------------------------------------------- --- Generating HTML documentation ppHtml :: String -> Maybe String -- package @@ -98,6 +99,7 @@ ppHtml doctitle maybe_package ifaces odir prologue maybe_html_help_format maybe_source_url maybe_wiki_url maybe_contents_url maybe_index_url unicode) visible_ifaces + ppHtmlHelpFiles :: String -- doctitle -> Maybe String -- package @@ -121,6 +123,7 @@ ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format pkg_pa Just "devhelp" -> ppDevHelpFile odir doctitle maybe_package visible_ifaces Just format -> fail ("The "++format++" format is not implemented") + copyFile :: FilePath -> FilePath -> IO () copyFile fromFPath toFPath = (bracket (openFile fromFPath ReadMode) hClose $ \hFrom -> @@ -195,11 +198,13 @@ wikiButton (_, Just wiki_module_url, _) (Just mdl) = wikiButton _ _ = Nothing + contentsButton :: Maybe String -> Maybe Html contentsButton maybe_contents_url = Just (anchor ! [href url] << "Contents") where url = maybe contentsHtmlFile id maybe_contents_url + indexButton :: Maybe String -> Maybe Html indexButton maybe_index_url = Just (anchor ! [href url] << "Index") @@ -232,6 +237,7 @@ bodyHtml doctitle iface ) ] + moduleInfo :: Interface -> Html moduleInfo iface = let @@ -251,8 +257,11 @@ moduleInfo iface = [] -> noHtml _ -> defList entries ! [theclass "info"] --- --------------------------------------------------------------------------- --- Generate the module contents + +-------------------------------------------------------------------------------- +-- * Generate the module contents +-------------------------------------------------------------------------------- + ppHtmlContents :: FilePath @@ -291,15 +300,18 @@ ppHtmlContents odir doctitle Just "devhelp" -> return () Just format -> fail ("The "++format++" format is not implemented") + ppPrologue :: String -> Maybe (Doc GHC.RdrName) -> Html ppPrologue _ Nothing = noHtml ppPrologue title (Just doc) = docElement divDescription << (h1 << title +++ rdrDocToHtml doc) + ppModuleTree :: [ModuleTree] -> Html ppModuleTree ts = divModuleList << (sectionName << "Modules" +++ mkNodeList [] "n" ts) + mkNodeList :: [String] -> String -> [ModuleTree] -> Html mkNodeList ss p ts = case ts of [] -> noHtml @@ -307,6 +319,7 @@ mkNodeList ss p ts = case ts of where ps = [ p ++ '.' : show i | i <- [(1::Int)..]] + mkNode :: [String] -> String -> ModuleTree -> Html mkNode ss p (Node s leaf pkg short ts) = collBtn +++ htmlModule +++ shortDescr +++ htmlPkg +++ subtree @@ -350,6 +363,7 @@ flatModuleTree ifaces = anchor ! [href ((moduleHtmlFile mdl)), target mainFrameName] << toHtml txt + ppHtmlContentsFrame :: FilePath -> String -> [InstalledInterface] -> IO () ppHtmlContentsFrame odir doctitle ifaces = do let mods = flatModuleTree ifaces @@ -361,8 +375,11 @@ ppHtmlContentsFrame odir doctitle ifaces = do createDirectoryIfMissing True odir writeFile (joinPath [odir, frameIndexHtmlFile]) (renderToString html) --- --------------------------------------------------------------------------- --- Generate the index + +-------------------------------------------------------------------------------- +-- * Generate the index +-------------------------------------------------------------------------------- + ppHtmlIndex :: FilePath -> String @@ -483,8 +500,11 @@ ppHtmlIndex odir doctitle maybe_package maybe_html_help_format toHtml (moduleString mdl) | (mdl, visible) <- entries ]) --- --------------------------------------------------------------------------- --- Generate the HTML page for a module + +-------------------------------------------------------------------------------- +-- * Generate the HTML page for a module +-------------------------------------------------------------------------------- + ppHtmlModule :: FilePath -> String @@ -510,6 +530,7 @@ ppHtmlModule odir doctitle writeFile (joinPath [odir, moduleHtmlFile mdl]) (renderToString html) ppHtmlModuleMiniSynopsis odir doctitle iface unicode + ppHtmlModuleMiniSynopsis :: FilePath -> String -> Interface -> Bool -> IO () ppHtmlModuleMiniSynopsis odir _doctitle iface unicode = do let mdl = ifaceMod iface @@ -521,6 +542,7 @@ ppHtmlModuleMiniSynopsis odir _doctitle iface unicode = do createDirectoryIfMissing True odir writeFile (joinPath [odir, "mini_" ++ moduleHtmlFile mdl]) (renderToString html) + ifaceToHtml :: SourceURLs -> WikiURLs -> Interface -> Bool -> Html ifaceToHtml maybe_source_url maybe_wiki_url iface unicode = ppModuleContents exports +++ @@ -569,12 +591,14 @@ ifaceToHtml maybe_source_url maybe_wiki_url iface unicode linksInfo = (maybe_source_url, maybe_wiki_url) + miniSynopsis :: Module -> Interface -> Bool -> Html miniSynopsis mdl iface unicode = divInterface << mapMaybe (processForMiniSynopsis mdl unicode) exports where exports = numberSectionHeadings (ifaceRnExportItems iface) + processForMiniSynopsis :: Module -> Bool -> ExportItem DocName -> Maybe Html processForMiniSynopsis mdl unicode (ExportDecl (L _loc decl0) _doc _ _insts) = ((divTopDecl <<).(declElem <<)) `fmap` case decl0 of @@ -595,18 +619,21 @@ processForMiniSynopsis _ _ (ExportGroup lvl _id txt) = Just $ groupTag lvl << docToHtml txt processForMiniSynopsis _ _ _ = Nothing + ppNameMini :: Module -> OccName -> Html ppNameMini mdl nm = anchor ! [ href (moduleNameUrl mdl nm) , target mainFrameName ] << ppBinder' nm + ppTyClBinderWithVarsMini :: Module -> TyClDecl DocName -> Html ppTyClBinderWithVarsMini mdl decl = let n = unLoc $ tcdLName decl ns = tyvarNames $ tcdTyVars decl in ppTypeApp n ns (ppNameMini mdl . docNameOcc) ppTyName + ppModuleContents :: [ExportItem DocName] -> Html ppModuleContents exports | null sections = noHtml @@ -632,6 +659,7 @@ ppModuleContents exports mk_subsections [] = noHtml mk_subsections ss = unordList ss + -- we need to assign a unique id to each section heading so we can hyperlink -- them from the contents: numberSectionHeadings :: [ExportItem DocName] -> [ExportItem DocName] @@ -643,6 +671,7 @@ numberSectionHeadings exports = go 1 exports go n (other:es) = other : go n es + processExport :: Bool -> LinksInfo -> Bool -> (ExportItem DocName) -> Maybe Html processExport summary _ _ (ExportGroup lev id0 doc) = nothingIf summary $ groupTag lev << namedAnchor id0 << docToHtml doc @@ -657,18 +686,22 @@ processExport summary _ _ (ExportDoc doc) processExport summary _ _ (ExportModule mdl) = processDeclOneLiner summary $ toHtml "module" <+> ppModule mdl + nothingIf :: Bool -> a -> Maybe a nothingIf True _ = Nothing nothingIf False a = Just a + processDecl :: Bool -> Html -> Maybe Html processDecl True = Just processDecl False = Just . divTopDecl + processDeclOneLiner :: Bool -> Html -> Maybe Html processDeclOneLiner True = Just processDeclOneLiner False = Just . divTopDecl . declElem + groupTag :: Int -> Html -> Html groupTag lev | lev == 1 = h1 |