aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Haddock/Backends/Xhtml.hs49
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