diff options
| -rw-r--r-- | src/HaddockDevHelp.hs | 76 | ||||
| -rw-r--r-- | src/HaddockHtml.hs | 10 | 
2 files changed, 82 insertions, 4 deletions
| diff --git a/src/HaddockDevHelp.hs b/src/HaddockDevHelp.hs new file mode 100644 index 00000000..95987230 --- /dev/null +++ b/src/HaddockDevHelp.hs @@ -0,0 +1,76 @@ +module HaddockDevHelp(ppDevHelpFile) where + +import HsSyn hiding(Doc) + +#if __GLASGOW_HASKELL__ < 503 +import Pretty +import FiniteMap +#else +import Text.PrettyPrint +import Data.FiniteMap +import Data.Char +#endif + +import Maybe	( fromMaybe ) +import HaddockModuleTree +import HaddockUtil +import HaddockTypes + + +ppDevHelpFile :: FilePath -> String -> Maybe String -> [(Module,Interface)] -> IO () +ppDevHelpFile odir doctitle maybe_package ifaces = do +  let devHelpFile = package++".devhelp" +      tree = mkModuleTree [(mod,iface_package iface) | (mod,iface) <- ifaces] +      doc = +        text "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>" $$ +        (text "<book xmlns=\"http://www.devhelp.net/book\" title=\""<>text doctitle<> +            text "\" link=\""<>text contentsHtmlFile<>text"\" author=\"\" name=\""<>text package<>text "\">") $$ +        text "<chapters>" $$ +        nest 4 (ppModuleTree [] tree) $+$ +        text "</chapters>" $$ +        text "<functions>" $$ +        nest 4 (ppList index) $+$ +        text "</functions>" $$ +        text "</book>" +  writeFile (odir ++ pathSeparator:devHelpFile) (render doc) +  where     +    package = fromMaybe "pkg" maybe_package + +    ppModuleTree :: [String] -> [ModuleTree] -> Doc +    ppModuleTree ss [x]    = ppNode ss x +    ppModuleTree ss (x:xs) = ppNode ss x $$ ppModuleTree ss xs +    ppModuleTree _  []     = error "HaddockHH.ppHHContents.fn: no module trees given" + +    ppNode :: [String] -> ModuleTree -> Doc +    ppNode ss (Node s leaf _pkg ts) = +        case ts of +          [] -> text "<sub"<+>ppAttribs<>text "/>" +          ts ->  +            text "<sub"<+>ppAttribs<>text ">" $$ +            nest 4 (ppModuleTree (s:ss) ts) $+$ +            text "</sub>" +        where +          ppLink | leaf      = text (moduleHtmlFile "" mdl) +                 | otherwise = empty + +          ppAttribs = text "name="<>doubleQuotes (text s)<+>text "link="<>doubleQuotes ppLink + +          mdl = foldr (++) "" (s' : map ('.':) ss') +          (s':ss') = reverse (s:ss) +		-- reconstruct the module name + +    index :: [(HsName, [Module])] +    index = fmToList (foldr getIfaceIndex emptyFM ifaces) + +    getIfaceIndex (mdl,iface) fm = +		addListToFM_C (++) fm [(name, [mdl]) | (name, Qual mdl' _) <- fmToList (iface_env iface), mdl == mdl'] +	 +    ppList [] = empty +    ppList ((name,refs):mdls)  = +      ppReference name refs $$ +      ppList mdls + +    ppReference name [] = empty +    ppReference name (Module mdl:refs) = +      text "<function name=\""<>text (escapeStr (show name))<>text"\" link=\""<>text (nameHtmlRef "" mdl name)<>text"\"/>" $$ +      ppReference name refs diff --git a/src/HaddockHtml.hs b/src/HaddockHtml.hs index 719186ab..2c6fedb9 100644 --- a/src/HaddockHtml.hs +++ b/src/HaddockHtml.hs @@ -17,6 +17,7 @@ import HaddockUtil  import HaddockModuleTree  import HaddockHH  import HaddockHH2 +import HaddockDevHelp  import HsSyn  import Maybe	( fromJust, isJust ) @@ -86,13 +87,12 @@ ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format =  do    -- Generate index and contents page for Html Help if requested    case maybe_html_help_format of -    Just "mshelp" -> do -		ppHHProject odir doctitle maybe_package visible_ifaces +    Just "mshelp"  -> ppHHProject odir doctitle maybe_package visible_ifaces      Just "mshelp2" -> do  		ppHH2Files      odir maybe_package visible_ifaces  		ppHH2Collection odir doctitle maybe_package -    _ -> return () - +    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 = @@ -234,6 +234,7 @@ ppHtmlContents odir doctitle maybe_package maybe_html_help_format maybe_index_ur      Nothing        -> return ()      Just "mshelp"  -> ppHHContents  odir maybe_package tree      Just "mshelp2" -> ppHH2Contents odir maybe_package tree +    Just "devhelp" -> return ()      Just format    -> fail ("The "++format++" format is not implemented")  ppPrologue :: String -> Maybe Doc -> HtmlTable @@ -319,6 +320,7 @@ ppHtmlIndex odir doctitle maybe_package maybe_html_help_format maybe_contents_ur      Nothing        -> return ()      Just "mshelp"  -> ppHHIndex  odir maybe_package ifaces      Just "mshelp2" -> ppHH2Index odir maybe_package ifaces +    Just "devhelp" -> return ()      Just format    -> fail ("The "++format++" format is not implemented")   where    split_indices = length index > 50 | 
