diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/HaddockDevHelp.hs | 4 | ||||
| -rw-r--r-- | src/HaddockHH.hs | 29 | ||||
| -rw-r--r-- | src/HaddockHH2.hs | 35 | ||||
| -rw-r--r-- | src/HaddockHtml.hs | 25 | ||||
| -rw-r--r-- | src/HaddockUtil.hs | 14 | ||||
| -rw-r--r-- | src/Main.hs | 10 | 
6 files changed, 63 insertions, 54 deletions
| diff --git a/src/HaddockDevHelp.hs b/src/HaddockDevHelp.hs index 95987230..3ebfc1c3 100644 --- a/src/HaddockDevHelp.hs +++ b/src/HaddockDevHelp.hs @@ -50,7 +50,7 @@ ppDevHelpFile odir doctitle maybe_package ifaces = do              nest 4 (ppModuleTree (s:ss) ts) $+$              text "</sub>"          where -          ppLink | leaf      = text (moduleHtmlFile "" mdl) +          ppLink | leaf      = text (moduleHtmlFile mdl)                   | otherwise = empty            ppAttribs = text "name="<>doubleQuotes (text s)<+>text "link="<>doubleQuotes ppLink @@ -72,5 +72,5 @@ ppDevHelpFile odir doctitle maybe_package ifaces = do      ppReference name [] = empty      ppReference name (Module mdl:refs) = -      text "<function name=\""<>text (escapeStr (show name))<>text"\" link=\""<>text (nameHtmlRef "" mdl name)<>text"\"/>" $$ +      text "<function name=\""<>text (escapeStr (show name))<>text"\" link=\""<>text (nameHtmlRef mdl name)<>text"\"/>" $$        ppReference name refs diff --git a/src/HaddockHH.hs b/src/HaddockHH.hs index 98dac72a..6a41f738 100644 --- a/src/HaddockHH.hs +++ b/src/HaddockHH.hs @@ -61,7 +61,7 @@ ppHHContents odir maybe_package tree = do  		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 "" mdl) <> text "\">" else empty) $$ +			 (if isleaf then text "<PARAM name=\"Local\" value=\"" <> text (moduleHtmlFile mdl) <> text "\">" else empty) $$  			 text "</OBJECT>") $+$  		text "</LI>"  		where  @@ -107,12 +107,12 @@ ppHHIndex odir maybe_package ifaces = do  	ppReference name [] = empty  	ppReference name (Module mdl:refs) = -		text "<PARAM name=\"Local\" value=\"" <> text (nameHtmlRef "" mdl name) <> text "\">" $$ +		text "<PARAM name=\"Local\" value=\"" <> text (nameHtmlRef mdl name) <> text "\">" $$  		ppReference name refs -ppHHProject :: FilePath -> String -> Maybe String -> [(Module,Interface)] -> IO () -ppHHProject odir doctitle maybe_package ifaces = do +ppHHProject :: FilePath -> String -> Maybe String -> [(Module,Interface)] -> [FilePath] -> IO () +ppHHProject odir doctitle maybe_package ifaces pkg_paths = do    let projectHHFile = package++".hhp"        doc =          text "[OPTIONS]" $$ @@ -129,24 +129,33 @@ ppHHProject odir doctitle maybe_package ifaces = do          text contentsHtmlFile $$          text indexHtmlFile $$          ppIndexFiles chars $$ -        text cssFile $$ -        text iconFile $$ -        text jsFile $$ -        text plusFile $$ -        text minusFile +        ppLibFiles ("":pkg_paths)    writeFile (odir ++ pathSeparator:projectHHFile) (render doc)    where      package = fromMaybe "pkg" maybe_package      ppMods [] = empty      ppMods ((Module mdl,_):ifaces) = -        text (moduleHtmlFile "" mdl) $$ +        text (moduleHtmlFile mdl) $$          ppMods ifaces      ppIndexFiles []     = empty      ppIndexFiles (c:cs) =          text (subIndexHtmlFile c) $$          ppIndexFiles cs +         +    ppLibFiles []           = empty +    ppLibFiles (path:paths) = +        ppLibFile cssFile   $$ +    	ppLibFile iconFile  $$ +    	ppLibFile jsFile    $$ +    	ppLibFile plusFile  $$ +        ppLibFile minusFile $$ +        ppLibFiles paths +        where +            toPath fname | null path = fname +	                 | otherwise = path++pathSeparator:fname +            ppLibFile fname = text (toPath fname)      chars :: [Char]      chars = keysFM (foldr getIfaceIndex emptyFM ifaces) diff --git a/src/HaddockHH2.hs b/src/HaddockHH2.hs index cea0f2e0..ce4d488e 100644 --- a/src/HaddockHH2.hs +++ b/src/HaddockHH2.hs @@ -56,7 +56,7 @@ ppHH2Contents odir maybe_package tree = do  	    ppTitle = text "Title=" <> doubleQuotes (text (head ss)) -	    ppUrl | isleaf    = text " Url=" <> doubleQuotes (text (moduleHtmlFile "" mdl)) +	    ppUrl | isleaf    = text " Url=" <> doubleQuotes (text (moduleHtmlFile mdl))  	          | otherwise = empty  ----------------------------------------------------------------------------------- @@ -98,17 +98,13 @@ ppHH2Index odir maybe_package ifaces = do  		text "</Keyword>" $$
  		ppList vs -	ppJump name (Module mdl) = text "<Jump Url=\"" <> text (nameHtmlRef fp mdl name) <> text "\"/>" -	  where -	    fp = case lookupFM html_xrefs (Module mdl) of -	      Nothing  -> "" -	      Just fp0 -> fp0 +	ppJump name (Module mdl) = text "<Jump Url=\"" <> text (nameHtmlRef mdl name) <> text "\"/>"  ----------------------------------------------------------------------------------- -ppHH2Files :: FilePath -> Maybe String -> [(Module,Interface)] -> IO () -ppHH2Files odir maybe_package ifaces = do +ppHH2Files :: FilePath -> Maybe String -> [(Module,Interface)] -> [FilePath] -> IO () +ppHH2Files odir maybe_package ifaces pkg_paths = do    let filesHH2File = package++".HxF"        doc =          text "<?xml version=\"1.0\"?>" $$
 @@ -118,11 +114,7 @@ ppHH2Files odir maybe_package ifaces = do                  text "<File Url=\""<>text contentsHtmlFile<>text "\"/>" $$
                  text "<File Url=\""<>text indexHtmlFile<>text "\"/>" $$
                  ppIndexFiles chars $$
 -                text "<File Url=\""<>text cssFile  <>text "\"/>" $$
 -                text "<File Url=\""<>text iconFile <>text "\"/>" $$
 -                text "<File Url=\""<>text jsFile   <>text "\"/>" $$
 -                text "<File Url=\""<>text plusFile <>text "\"/>" $$
 -                text "<File Url=\""<>text minusFile<>text "\"/>") $$
 +                ppLibFiles ("":pkg_paths)) $$
          text "</HelpFileList>"
    writeFile (odir ++ pathSeparator:filesHH2File) (render doc)    where @@ -130,14 +122,27 @@ ppHH2Files odir maybe_package ifaces = do      ppMods [] = empty      ppMods ((Module mdl,_):ifaces) = -		text "<File Url=\"" <> text (moduleHtmlFile "" mdl) <> text "\"/>" $$
 +		text "<File Url=\"" <> text (moduleHtmlFile mdl) <> text "\"/>" $$
  		ppMods ifaces      ppIndexFiles []     = empty      ppIndexFiles (c:cs) =          text "<File Url=\""<>text (subIndexHtmlFile c)<>text "\"/>" $$
          ppIndexFiles cs -	 +        
 +    ppLibFiles []           = empty
 +    ppLibFiles (path:paths) =        
 +        ppLibFile cssFile   $$
 +	ppLibFile iconFile  $$
 +	ppLibFile jsFile    $$
 +	ppLibFile plusFile  $$
 +        ppLibFile minusFile $$
 +        ppLibFiles paths
 +        where
 +            toPath fname | null path = fname
 +                         | otherwise = path++pathSeparator:fname
 +            ppLibFile fname = text "<File Url=\""<>text (toPath fname)<>text "\"/>"
 +      chars :: [Char]      chars = keysFM (foldr getIfaceIndex emptyFM ifaces) diff --git a/src/HaddockHtml.hs b/src/HaddockHtml.hs index 2c6fedb9..466fd413 100644 --- a/src/HaddockHtml.hs +++ b/src/HaddockHtml.hs @@ -68,7 +68,7 @@ ppHtml doctitle maybe_package source_url ifaces odir prologue maybe_html_help_fo      ppHtmlIndex odir doctitle maybe_package maybe_html_help_format maybe_contents_url visible_ifaces    when (not (isJust maybe_contents_url && isJust maybe_index_url)) $  -	ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format +	ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format []    mapM_ (ppHtmlModule odir doctitle source_url   	   maybe_contents_url maybe_index_url) visible_ifaces @@ -79,17 +79,19 @@ ppHtmlHelpFiles  	-> [(Module, Interface)]  	-> FilePath                 -- destination directory  	-> Maybe String             -- the Html Help format (--html-help) +	-> [FilePath]               -- external packages paths  	-> IO () -ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format =  do +ppHtmlHelpFiles doctitle maybe_package ifaces odir maybe_html_help_format pkg_paths =  do    let  	visible_ifaces = filter visible ifaces  	visible (_, i) = OptHide `notElem` iface_options i    -- Generate index and contents page for Html Help if requested    case maybe_html_help_format of -    Just "mshelp"  -> ppHHProject odir doctitle maybe_package visible_ifaces +    Nothing        -> return () +    Just "mshelp"  -> ppHHProject odir doctitle maybe_package visible_ifaces pkg_paths      Just "mshelp2" -> do -		ppHH2Files      odir maybe_package visible_ifaces +		ppHH2Files      odir maybe_package visible_ifaces pkg_paths  		ppHH2Collection odir doctitle maybe_package      Just "devhelp" -> ppDevHelpFile odir doctitle maybe_package visible_ifaces      Just format    -> fail ("The "++format++" format is not implemented") @@ -433,7 +435,7 @@ ppHtmlModule odir doctitle source_url  	    ifaceToHtml mdl iface </> s15 </>  	    footer           ) -  writeFile (moduleHtmlFile odir mdl) (renderHtml html False) +  writeFile (odir++moduleHtmlFile mdl) (renderHtml html False)  ifaceToHtml :: String -> Interface -> HtmlTable  ifaceToHtml _ iface  @@ -974,17 +976,12 @@ ppHsBindIdent (HsSpecial str) =  toHtml str  linkId :: Module -> Maybe HsName -> Html -> Html  linkId (Module mdl) mbName = anchor ! [href hr]    where hr = case mbName of -                  Nothing   -> moduleHtmlFile fp mdl -                  Just name -> nameHtmlRef fp mdl name -        fp = case lookupFM html_xrefs (Module mdl) of -		  Nothing  -> "" -		  Just fp0 -> fp0 +                  Nothing   -> moduleHtmlFile mdl +                  Just name -> nameHtmlRef mdl name  ppHsModule :: String -> Html -ppHsModule mdl = anchor ! [href ((moduleHtmlFile fp modname) ++ ref)] << toHtml mdl -  where fp = case lookupFM html_xrefs (Module modname) of -		Just fp0 -> fp0  -		Nothing  -> "" +ppHsModule mdl = anchor ! [href ((moduleHtmlFile modname) ++ ref)] << toHtml mdl +  where           (modname,ref) = break (== '#') mdl  -- ----------------------------------------------------------------------------- diff --git a/src/HaddockUtil.hs b/src/HaddockUtil.hs index 03796532..f7dab157 100644 --- a/src/HaddockUtil.hs +++ b/src/HaddockUtil.hs @@ -23,7 +23,7 @@ module HaddockUtil (    getProgramName, bye, die, dieMsg, mapSnd, mapMaybeM, escapeStr,    -- * HTML cross reference mapping -  html_xrefs_ref, html_xrefs, +  html_xrefs_ref,   ) where  import HsSyn @@ -272,12 +272,14 @@ isPathSeparator ch =    ch == '/'  #endif -moduleHtmlFile :: FilePath -> String -> FilePath -moduleHtmlFile "" mod0  = mod0 ++ ".html" -- ToDo: Z-encode filename? -moduleHtmlFile dir mod0 = dir ++ pathSeparator : mod0 ++ ".html" +moduleHtmlFile :: String -> FilePath +moduleHtmlFile mdl = +  case lookupFM html_xrefs (Module mdl) of +    Nothing  -> mdl ++ ".html" +    Just fp0 -> fp0 ++ pathSeparator : mdl ++ ".html" -nameHtmlRef :: FilePath -> String -> HsName -> String	 -nameHtmlRef fp mdl str = moduleHtmlFile fp mdl ++ '#':escapeStr (hsAnchorNameStr str) +nameHtmlRef :: String -> HsName -> String	 +nameHtmlRef mdl str = moduleHtmlFile mdl ++ '#':escapeStr (hsAnchorNameStr str)  contentsHtmlFile, indexHtmlFile :: String  contentsHtmlFile = "index.html" diff --git a/src/Main.hs b/src/Main.hs index 797d8325..a0126fa3 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -139,9 +139,6 @@ options =  	"generate an HTML index from specified interfaces"    ] -saved_flags :: IORef [Flag] -saved_flags = unsafePerformIO (newIORef (error "no flags yet")) -  run :: [Flag] -> [FilePath] -> IO ()  run flags files = do    when (Flag_Help `elem` flags) $ do @@ -211,10 +208,9 @@ run flags files = do        visible_read_ifaces = filter ((OptHide `notElem`) . iface_options . snd)   				read_ifaces        external_mods = map fst read_ifaces +      pkg_paths = map fst ifaces_to_read -  updateHTMLXRefs (map fst ifaces_to_read) read_ifaces_s - -  writeIORef saved_flags flags +  updateHTMLXRefs pkg_paths read_ifaces_s    when ((Flag_GenIndex `elem` flags || Flag_GenContents `elem` flags)  	&& Flag_Html `elem` flags) $ @@ -229,7 +225,7 @@ run flags files = do          copyHtmlBits odir libdir css_file    when (Flag_GenContents `elem` flags && Flag_GenIndex `elem` flags) $ do -    ppHtmlHelpFiles title package visible_read_ifaces odir maybe_html_help_format		 +    ppHtmlHelpFiles title package visible_read_ifaces odir maybe_html_help_format pkg_paths    parsed_mods <- mapM parse_file files | 
