diff options
author | simonmar <unknown> | 2002-07-10 10:26:11 +0000 |
---|---|---|
committer | simonmar <unknown> | 2002-07-10 10:26:11 +0000 |
commit | c9f149c64c44dcc7fa14d30767a205a991510430 (patch) | |
tree | 341044b69fb108f096e479e01f8b1562b31d9421 | |
parent | 3dc04655c5aa80676489dd45ad6bb7d61013ec5b (diff) |
[haddock @ 2002-07-10 10:26:11 by simonmar]
Tweaks to the MS Help support: the extra files are now only generated
if you ask for them (--ms-help).
-rw-r--r-- | src/HaddockHH.hs | 188 | ||||
-rw-r--r-- | src/HaddockHtml.hs | 13 | ||||
-rw-r--r-- | src/Main.hs | 25 |
3 files changed, 118 insertions, 108 deletions
diff --git a/src/HaddockHH.hs b/src/HaddockHH.hs index 05ff9243..5feac3e4 100644 --- a/src/HaddockHH.hs +++ b/src/HaddockHH.hs @@ -1,94 +1,94 @@ -module HaddockHH(ppHHContents, ppHHIndex) where
-
-import HsSyn hiding(Doc)
-import Text.PrettyPrint
-import Data.FiniteMap
-import HaddockModuleTree
-import HaddockUtil
-import HaddockTypes
-
-contentsHHFile = "index.hhc"
-indexHHFile = "index.hhk"
-
-ppHHContents :: FilePath -> [Module] -> IO ()
-ppHHContents odir mods = do
- let tree = mkModuleTree mods
- html =
- text "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">" $$
- text "<HTML>" $$
- text "<HEAD>" $$
- text "<META name=\"GENERATOR\" content=\"Haddock\">" $$
- text "<!-- Sitemap 1.0 -->" $$
- text "</HEAD><BODY>" $$
- ppModuleTree tree $$
- text "</BODY><HTML>"
- writeFile (odir ++ pathSeparator:contentsHHFile) (render html)
- where
- ppModuleTree :: [ModuleTree] -> Doc
- ppModuleTree ts =
- text "<OBJECT type=\"text/site properties\">" $$
- text "<PARAM name=\"FrameName\" value=\"main\">" $$
- text "</OBJECT>" $$
- text "<UL>" $+$
- nest 4 (fn [] ts) $+$
- text "</UL>"
-
- fn :: [String] -> [ModuleTree] -> Doc
- fn ss [x] = ppNode ss x
- fn ss (x:xs) = ppNode ss x $$ fn ss xs
-
- ppNode :: [String] -> ModuleTree -> Doc
- ppNode ss (Node s leaf []) =
- ppLeaf s ss leaf
- ppNode ss (Node s leaf ts) =
- ppLeaf s ss leaf $$
- text "<UL>" $+$
- nest 4 (fn (s:ss) ts) $+$
- text "</UL>"
-
- ppLeaf s ss isleaf =
- text "<LI>" <> nest 4
- (text "<OBJECT type=\"text/sitemap\">" $$
- text "<PARAM name=\"Name\" value=\"" <> text s <> text "\">" $$
- (if isleaf then text "<PARAM name=\"Local\" value=\"" <> text (moduleHtmlFile "" mod) <> text "\">" else empty) $$
- text "</OBJECT>") $+$
- text "</LI>"
- where
- mod = 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 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">" $$
- text "<HTML>" $$
- text "<HEAD>" $$
- text "<META name=\"GENERATOR\" content=\"Haddock\">" $$
- text "<!-- Sitemap 1.0 -->" $$
- text "</HEAD><BODY>" $$
- text "<UL>" $+$
- nest 4 (ppList index) $+$
- text "</UL>" $$
- text "</BODY><HTML>"
- 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 (mod,iface) = listToFM
- [ (name, mod) | (name, Qual mod' _) <- fmToList (iface_env iface), mod == mod']
-
- ppList [] = empty
- ppList ((name,Module mod):mods) =
- text "<LI>" <> nest 4
- (text "<OBJECT type=\"text/sitemap\">" $$
- text "<PARAM name=\"Name\" value=\"" <> text (show name) <> text "\">" $$
- text "<PARAM name=\"Local\" value=\"" <> text (moduleHtmlFile "" mod) <> char '#' <> text (show name) <> text "\">" $$
- text "</OBJECT>") $+$
- text "</LI>" $$
- ppList mods
\ No newline at end of file +module HaddockHH(ppHHContents, ppHHIndex) where + +import HsSyn hiding(Doc) +import Pretty +import FiniteMap +import HaddockModuleTree +import HaddockUtil +import HaddockTypes + +contentsHHFile = "index.hhc" +indexHHFile = "index.hhk" + +ppHHContents :: FilePath -> [Module] -> IO () +ppHHContents odir mods = do + let tree = mkModuleTree mods + html = + text "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">" $$ + text "<HTML>" $$ + text "<HEAD>" $$ + text "<META name=\"GENERATOR\" content=\"Haddock\">" $$ + text "<!-- Sitemap 1.0 -->" $$ + text "</HEAD><BODY>" $$ + ppModuleTree tree $$ + text "</BODY><HTML>" + writeFile (odir ++ pathSeparator:contentsHHFile) (render html) + where + ppModuleTree :: [ModuleTree] -> Doc + ppModuleTree ts = + text "<OBJECT type=\"text/site properties\">" $$ + text "<PARAM name=\"FrameName\" value=\"main\">" $$ + text "</OBJECT>" $$ + text "<UL>" $+$ + nest 4 (fn [] ts) $+$ + text "</UL>" + + fn :: [String] -> [ModuleTree] -> Doc + fn ss [x] = ppNode ss x + fn ss (x:xs) = ppNode ss x $$ fn ss xs + + ppNode :: [String] -> ModuleTree -> Doc + ppNode ss (Node s leaf []) = + ppLeaf s ss leaf + ppNode ss (Node s leaf ts) = + ppLeaf s ss leaf $$ + text "<UL>" $+$ + nest 4 (fn (s:ss) ts) $+$ + text "</UL>" + + ppLeaf s ss isleaf = + text "<LI>" <> nest 4 + (text "<OBJECT type=\"text/sitemap\">" $$ + text "<PARAM name=\"Name\" value=\"" <> text s <> text "\">" $$ + (if isleaf then text "<PARAM name=\"Local\" value=\"" <> text (moduleHtmlFile "" mod) <> text "\">" else empty) $$ + text "</OBJECT>") $+$ + text "</LI>" + where + mod = 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 "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\">" $$ + text "<HTML>" $$ + text "<HEAD>" $$ + text "<META name=\"GENERATOR\" content=\"Haddock\">" $$ + text "<!-- Sitemap 1.0 -->" $$ + text "</HEAD><BODY>" $$ + text "<UL>" $+$ + nest 4 (ppList index) $+$ + text "</UL>" $$ + text "</BODY><HTML>" + 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 (mod,iface) = listToFM + [ (name, mod) | (name, Qual mod' _) <- fmToList (iface_env iface), mod == mod'] + + ppList [] = empty + ppList ((name,Module mod):mods) = + text "<LI>" <> nest 4 + (text "<OBJECT type=\"text/sitemap\">" $$ + text "<PARAM name=\"Name\" value=\"" <> text (show name) <> text "\">" $$ + text "<PARAM name=\"Local\" value=\"" <> text (moduleHtmlFile "" mod) <> char '#' <> text (show name) <> text "\">" $$ + text "</OBJECT>") $+$ + text "</LI>" $$ + ppList mods diff --git a/src/HaddockHtml.hs b/src/HaddockHtml.hs index 23d4c512..3d5a4c95 100644 --- a/src/HaddockHtml.hs +++ b/src/HaddockHtml.hs @@ -49,9 +49,11 @@ ppHtml :: String -> String -- $libdir -> InstMaps -> Maybe Doc -- prologue text, maybe + -> Bool -- do MS Help stuff -> IO () -ppHtml title source_url ifaces odir maybe_css libdir inst_maps prologue = do +ppHtml title source_url ifaces odir maybe_css libdir inst_maps prologue + do_ms_help = do let css_file = case maybe_css of Nothing -> libdir ++ pathSeparator:cssFile @@ -71,10 +73,15 @@ ppHtml title source_url ifaces odir maybe_css libdir inst_maps prologue = do ppHtmlContents odir title source_url (map fst visible_ifaces) prologue ppHtmlIndex odir title visible_ifaces - ppHHContents odir (map fst visible_ifaces) - ppHHIndex odir visible_ifaces + + -- Generate index and contents page for MS help if requested + when do_ms_help $ do + ppHHContents odir (map fst visible_ifaces) + ppHHIndex odir visible_ifaces + mapM_ (ppHtmlModule odir title source_url inst_maps) visible_ifaces + contentsHtmlFile = "index.html" indexHtmlFile = "doc-index.html" subIndexHtmlFile k a = "doc-index-" ++ k:a:".html" diff --git a/src/Main.hs b/src/Main.hs index 30d670ec..6b814c1e 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -55,19 +55,20 @@ main = do usage = usageInfo "usage: haddock [OPTION] file...\n" options data Flag - = Flag_Verbose - | Flag_DocBook + = Flag_CSS String | Flag_Debug - | Flag_Html + | Flag_DocBook + | Flag_DumpInterface FilePath | Flag_Heading String - | Flag_Prologue FilePath - | Flag_SourceURL String - | Flag_CSS String + | Flag_Html | Flag_Lib String + | Flag_MSHtmlHelp + | Flag_NoImplicitPrelude | Flag_OutputDir FilePath + | Flag_Prologue FilePath | Flag_ReadInterface FilePath - | Flag_DumpInterface FilePath - | Flag_NoImplicitPrelude + | Flag_SourceURL String + | Flag_Verbose deriving (Eq) options = @@ -95,9 +96,11 @@ options = Option [] ["css"] (ReqArg Flag_CSS "FILE") "The CSS file to use for HTML output", Option [] ["lib"] (ReqArg Flag_Lib "DIR") - "Directory containing Haddock's auxiliary files", + "Location of Haddock's auxiliary files", Option [] ["no-implicit-prelude"] (NoArg Flag_NoImplicitPrelude) - "Do not assume Prelude is imported" + "Do not assume Prelude is imported", + Option [] ["ms-help"] (NoArg Flag_MSHtmlHelp) + "Produce Microsoft HTML Help files (with -h)" ] saved_flags :: IORef [Flag] @@ -178,7 +181,7 @@ run flags files = do when (Flag_Html `elem` flags) $ ppHtml title source_url these_mod_ifaces odir css_file - libdir inst_maps prologue + libdir inst_maps prologue (Flag_MSHtmlHelp `elem` flags) -- dump an interface if requested case dump_iface of |