diff options
| -rw-r--r-- | html/xhaddock.css | 97 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml.hs | 59 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml/Layout.hs | 36 | ||||
| -rw-r--r-- | src/Haddock/Backends/Xhtml/Util.hs | 7 | 
4 files changed, 130 insertions, 69 deletions
diff --git a/html/xhaddock.css b/html/xhaddock.css index 3bb95166..f1c149b5 100644 --- a/html/xhaddock.css +++ b/html/xhaddock.css @@ -18,13 +18,18 @@ a:hover   { background-color: #e0e0ff; text-decoration: none }  /* <tt> font is a little too small in MSIE */  tt  { font-size: 100%; }  pre { font-size: 100%; } -span.keyword { text-decoration: underline; } +.keyword { text-decoration: underline; } +.caption { +	font-weight: bold; +	margin: 0; +	padding: 0; +}  h1 {    padding-top: 15px;    font-weight: bold; -  font-size: 150% -  } +  font-size: 150%; +}  h2 {    padding-top: 10px; @@ -43,6 +48,11 @@ h4, h5 {    font-size: 100%    } +h1, h2, h3, h4, h5 { +	margin-top: 0.5em; +	margin-bottom: 0.5em; +} +  p  {   	padding-top: 2px;  	padding-left: 10px; @@ -66,12 +76,8 @@ h2 + p, h3 + p, h4 + p {  	margin-top: 1em;  } -p.caption { -	margin: 0; -	padding: 0; -} -div.package-header { +#package-header {  	color: #ffffff;  	padding: 5px 5px 5px 31px;  	margin: 0 0 1px; @@ -79,10 +85,10 @@ div.package-header {  	position: relative;  } -div.package-header a:link    { color: #ffffff } -div.package-header a:visited { color: #ffff00 } -div.package-header a:hover   { background-color: #6060ff; } -div.package-header ul.links li:hover { background-color: #6060ff; } +#package-header a:link    { color: #ffffff } +#package-header a:visited { color: #ffff00 } +#package-header a:hover   { background-color: #6060ff; } +#package-header ul.links li:hover { background-color: #6060ff; }  ul.links {  	list-style: none; @@ -102,17 +108,18 @@ ul.links li {  	padding: 1px 5px;  } -div.module-header { +#module-header {  	background-color: #0077dd;  	padding: 5px;  	position: relative; -	height: 3em;  } -div.module-header p { +#module-header .caption {  	font-size: 200%;  	height: 1.5em;  	padding-top: .25em; +	font-weight: normal; +	font-style: normal;  }  dl.info { @@ -135,63 +142,71 @@ dl.info dd {  	padding-left: 6em;  } -div.table-of-contents { +#table-of-contents {  	margin-top: 1em; -	margin-bottom: 1em; +	margin-bottom: 2em;  } -div.table-of-contents p { -	font-weight: bold; -} - -div.table-of-contents ul { +#table-of-contents ul {  	margin-top: 1em;  	margin-bottom: 1em; -	margin-left: 10px; +	margin-left: 0;  	list-style-type: none; +	padding: 0; +} + +#table-of-contents ul ul { +	margin-left: 2.5em; +} + +#description .caption, +#synopsis .caption { +  padding-top: 15px; +  font-weight: bold; +  font-size: 150%	  } -ul.synopsis { -	margin-left: 0px; +#synopsis { +	margin-bottom: 2em;  } -ul.synopsis p.decl { +#synopsis p.src {  	padding: 0;  } -ul.synopsis li { +#synopsis li {    background-color: #f0f0f0;     font-family: monospace;    vertical-align: top; -	margin-top: 6px; -	margin-bottom: 6px; +	margin-top: 8px; +	margin-bottom: 8px;  	padding: 3px;  	list-style-type: none;  } -ul.synopsis li ul { +#synopsis ul {  	margin: 0;  	padding-top: 0;  } -ul.synopsis li ul li { +#synopsis li ul li {  	margin: 3px;  	padding: 0;  } -div.decldoc { +div.top {  	margin-top: 1em;  } -div.decldoc h5 { +div.top h5 {  	margin-left: 10px;  } -div.decldoc table, div.subdecl { +div.top table, div.subdecl {  	margin-left: 20px;  } -p.decl { +.src {    padding: 3px;    background-color: #f0f0f0;    font-family: monospace; @@ -199,7 +214,7 @@ p.decl {  } -p.decl a.link { +.src a.link {  	float: right;  	border-left-width: 1px;  	border-left-color: #000099; @@ -256,25 +271,25 @@ td.rdoc p { -div.bottom { +#footer {    background-color: #000099;    color: #ffffff;    padding: 4px    } -div.bottom p { +#footer p {  	padding: 1px;  	margin: 0;  } -div.bottom  a:link { +#footer  a:link {    color: #ffffff;    text-decoration: underline    } -div.bottom  a:visited { +#footer  a:visited {    color: #ffff00    } -div.bottom  a:hover { +#footer  a:hover {    background-color: #6060ff    } diff --git a/src/Haddock/Backends/Xhtml.hs b/src/Haddock/Backends/Xhtml.hs index c8a64ece..dc24acbd 100644 --- a/src/Haddock/Backends/Xhtml.hs +++ b/src/Haddock/Backends/Xhtml.hs @@ -152,7 +152,7 @@ copyHtmlBits odir libdir maybe_css = do  footer :: Html  footer = -  thediv ! [theclass "bottom"] << paragraph << ( +  divFooter << paragraph << (      "Produced by " +++       (anchor ! [href projectUrl] << toHtml projectName) +++      (" version " ++ projectVersion) @@ -194,8 +194,8 @@ simpleHeader :: String -> Maybe String -> Maybe String               -> SourceURLs -> WikiURLs -> Html  simpleHeader doctitle maybe_contents_url maybe_index_url    maybe_source_url maybe_wiki_url =  -  thediv ! [theclass "package-header"] << ( -    paragraph ! [theclass "caption"] << doctitle +++ +  divPackageHeader << ( +    sectionName << nonEmpty doctitle +++      unordList (catMaybes [         srcButton maybe_source_url Nothing,        wikiButton maybe_wiki_url Nothing, @@ -210,8 +210,8 @@ pageHeader :: String -> Interface -> String  pageHeader mdl iface doctitle             maybe_source_url maybe_wiki_url             maybe_contents_url maybe_index_url = -  thediv ! [theclass "package-header"] << ( -    paragraph ! [theclass "caption"] << (doctitle +++ spaceHtml) +++ +  divPackageHeader << ( +    sectionName << nonEmpty doctitle +++      unordList (catMaybes [           srcButton maybe_source_url (Just iface),          wikiButton maybe_wiki_url (Just $ ifaceMod iface), @@ -219,8 +219,8 @@ pageHeader mdl iface doctitle          indexButton maybe_index_url          ]) ! [theclass "links"]     ) +++ -  thediv ! [theclass "module-header"] << ( -    paragraph ! [theclass "caption"] << mdl +++ +  divModuleHeader << ( +    sectionName << mdl +++      moduleInfo iface    ) @@ -606,8 +606,7 @@ ifaceToHtml maybe_source_url maybe_wiki_url iface unicode    = ppModuleContents exports +++      description +++      synopsis +++ -    maybe_doc_hdr +++ -    bdy +    divInterface (maybe_doc_hdr +++ bdy)    where      exports = numberSectionHeadings (ifaceRnExportItems iface) @@ -623,16 +622,18 @@ ifaceToHtml maybe_source_url maybe_wiki_url iface unicode      description            = case ifaceRnDoc iface of                Nothing -> noHtml -              Just doc -> h1 << toHtml "Description" +++ docToHtml doc +              Just doc -> divDescription $ +                            sectionName << "Description" +++ docToHtml doc          -- omit the synopsis if there are no documentation annotations at all      synopsis        | no_doc_at_all = noHtml        | otherwise -      = h1 << "Synopsis" +++ -        unordList ( -            mapMaybe (processExport True linksInfo unicode) exports -        ) ! [theclass "synopsis"] +      = divSynposis $ +            sectionName << "Synopsis" +++ +            shortDeclList ( +                mapMaybe (processExport True linksInfo unicode) exports +            )          -- if the documentation doesn't begin with a section header, then          -- add one ("Documentation"). @@ -644,8 +645,7 @@ ifaceToHtml maybe_source_url maybe_wiki_url iface unicode      bdy =        foldr (+++) noHtml $ -        map (thediv ! [theclass "decldoc"]) $ -          mapMaybe (processExport False linksInfo unicode) exports +        mapMaybe (processExport False linksInfo unicode) exports      linksInfo = (maybe_source_url, maybe_wiki_url) @@ -702,8 +702,8 @@ ppModuleContents exports    | null sections = noHtml    | otherwise     = contentsDiv   where -  contentsDiv = thediv ! [theclass "table-of-contents"] << ( -    paragraph ! [theclass "caption"] << "Contents" +++ +  contentsDiv = divTableOfContents << ( +    sectionName << "Contents" +++      unordList sections)    (sections, _leftovers{-should be []-}) = process 0 exports @@ -737,20 +737,28 @@ processExport :: Bool -> LinksInfo -> Bool -> (ExportItem DocName) -> Maybe Html  processExport summary _ _ (ExportGroup lev id0 doc)    = nothingIf summary $ groupTag lev << namedAnchor id0 << docToHtml doc  processExport summary links unicode (ExportDecl decl doc subdocs insts) -  = Just $ ppDecl summary links decl doc insts subdocs unicode -processExport _ _ _ (ExportNoDecl y []) -  = Just $ ppDocName y -processExport _ _ _ (ExportNoDecl y subs) -  = Just $ ppDocName y +++ parenList (map ppDocName subs) +  = processDecl summary $ ppDecl summary links decl doc insts subdocs unicode +processExport summary _ _ (ExportNoDecl y []) +  = processDeclOneLiner summary $ ppDocName y +processExport summary _ _ (ExportNoDecl y subs) +  = processDeclOneLiner summary $ ppDocName y +++ parenList (map ppDocName subs)  processExport summary _ _ (ExportDoc doc)    = nothingIf summary $ docToHtml doc -processExport _ _ _ (ExportModule mdl) -  = Just $ toHtml "module" <+> ppModule mdl "" +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 @@ -760,4 +768,3 @@ groupTag lev - diff --git a/src/Haddock/Backends/Xhtml/Layout.hs b/src/Haddock/Backends/Xhtml/Layout.hs index ac6f5021..86c722b7 100644 --- a/src/Haddock/Backends/Xhtml/Layout.hs +++ b/src/Haddock/Backends/Xhtml/Layout.hs @@ -11,6 +11,14 @@  -- Portability :  portable  -----------------------------------------------------------------------------  module Haddock.Backends.Xhtml.Layout ( +  divPackageHeader, divModuleHeader, divFooter, +  divTableOfContents, divDescription, divSynposis, divInterface,  +   +  sectionName, +   +  shortDeclList, +  divTopDecl,  +      topDeclElem, declElem,    instHdr, atHdr, methHdr, constrHdr, @@ -29,10 +37,36 @@ import Text.XHtml hiding ( name, title, p, quote )  import FastString            ( unpackFS )  import GHC +-- Sections of the document + +divPackageHeader, divModuleHeader, divFooter :: Html -> Html +divPackageHeader = thediv ! [identifier "package-header"] +divModuleHeader  = thediv ! [identifier "module-header"] +divFooter        = thediv ! [identifier "footer"] + +divTableOfContents, divDescription, divSynposis, divInterface :: Html -> Html +divTableOfContents = thediv ! [identifier "table-of-contents"] +divDescription     = thediv ! [identifier "description"] +divSynposis        = thediv ! [identifier "synopsis"] +divInterface       = thediv ! [identifier "interface"] + +-- | The name of a section, used directly after opening a section +sectionName :: Html -> Html +sectionName = paragraph ! [theclass "caption"] + + +-- | Declaration containers  + +shortDeclList :: [Html] -> Html +shortDeclList items = ulist << map (li ! [theclass "src short"] <<) items + +divTopDecl :: Html -> Html +divTopDecl = thediv ! [theclass "top"] +  -- a box for displaying code  declElem :: Html -> Html -declElem = paragraph ! [theclass "decl"] +declElem = paragraph ! [theclass "src"]  -- a box for top level documented names  -- it adds a source and wiki link at the right hand side of the box diff --git a/src/Haddock/Backends/Xhtml/Util.hs b/src/Haddock/Backends/Xhtml/Util.hs index 9e13acd6..826b69f1 100644 --- a/src/Haddock/Backends/Xhtml/Util.hs +++ b/src/Haddock/Backends/Xhtml/Util.hs @@ -16,7 +16,7 @@ module Haddock.Backends.Xhtml.Util (    namedAnchor, linkedAnchor,    spliceURL, -  (<+>), char, empty, +  (<+>), char, empty, nonEmpty,    keyword, punctuate,    braces, brackets, pabrackets, parens, parenList, ubxParenList, @@ -110,6 +110,11 @@ char c = toHtml [c]  empty :: Html  empty  = noHtml +-- | ensure content contains at least something (a non-breaking space) +nonEmpty :: (HTML a) => a -> Html +nonEmpty a = if isNoHtml h then spaceHtml else h +    where h = toHtml a +  quote :: Html -> Html  quote h = char '`' +++ h +++ '`'  | 
