diff options
-rw-r--r-- | src/HaddockHtml.hs | 28 | ||||
-rw-r--r-- | src/HsParser.ly | 26 | ||||
-rw-r--r-- | src/Main.hs | 2 |
3 files changed, 34 insertions, 22 deletions
diff --git a/src/HaddockHtml.hs b/src/HaddockHtml.hs index 7f05d42f..06ff5db2 100644 --- a/src/HaddockHtml.hs +++ b/src/HaddockHtml.hs @@ -17,6 +17,7 @@ import FiniteMap import List ( sortBy ) import Char ( toUpper, toLower ) import Monad ( when ) +import IOExts import Html import qualified Html @@ -461,15 +462,14 @@ keepDecl _ = False -- ----------------------------------------------------------------------------- -- Data & newtype declarations -ppShortDataDecl doc_map summary is_newty +ppShortDataDecl :: Bool -> Bool -> HsDecl -> Html +ppShortDataDecl summary is_newty (HsDataDecl loc ctx nm args [con] drv) = - declBox ( -- single constructor special case - ppHsDataHeader summary is_newty nm args - <+> equals <+> ppShortConstr summary con - ) -ppShortDataDecl doc_map summary is_newty + ppHsDataHeader summary is_newty nm args + <+> equals <+> ppShortConstr summary con +ppShortDataDecl summary is_newty (HsDataDecl loc ctx nm args cons drv) = - declBox << vanillaTable << ( + vanillaTable << ( aboves ( (declBox (ppHsDataHeader summary is_newty nm args) : zipWith do_constr ('=':repeat '|') cons @@ -488,8 +488,9 @@ ppHsDataDecl doc_map summary is_newty (HsDataDecl loc ctx nm args [] drv) = -- The rest of the cases: ppHsDataDecl doc_map summary is_newty decl@(HsDataDecl loc ctx nm args cons drv) - | summary || (isNothing doc && all constr_has_no_doc cons) - = ppShortDataDecl doc_map summary is_newty decl + | summary || no_constr_docs + = declWithDoc summary (lookupFM doc_map nm) + (ppShortDataDecl summary is_newty decl) | otherwise = td << vanillaTable << (header </> datadoc </> constrs) @@ -512,10 +513,15 @@ ppHsDataDecl doc_map summary is_newty decl@(HsDataDecl loc ctx nm args cons drv) Just c = declMainBinder decl doc = lookupFM doc_map c + no_constr_docs = all constr_has_no_doc cons + constr_has_no_doc (HsConDecl _ nm _ _) = isNothing (lookupFM doc_map nm) - constr_has_no_doc (HsRecDecl _ nm _ _) - = isNothing (lookupFM doc_map nm) + constr_has_no_doc (HsRecDecl _ nm fields _) + = isNothing (lookupFM doc_map nm) && all field_has_no_doc fields + + field_has_no_doc (HsFieldDecl nms _ _) + = trace (show nms ++ show (map (isNothing . lookupFM doc_map) nms)) $ all isNothing (map (lookupFM doc_map) nms) ppShortConstr :: Bool -> HsConDecl -> Html diff --git a/src/HsParser.ly b/src/HsParser.ly index bae26ce6..fa0059b8 100644 --- a/src/HsParser.ly +++ b/src/HsParser.ly @@ -1,5 +1,5 @@ ----------------------------------------------------------------------------- -$Id: HsParser.ly,v 1.5 2002/04/26 11:18:57 simonmar Exp $ +$Id: HsParser.ly,v 1.6 2002/04/29 15:28:54 simonmar Exp $ (c) Simon Marlow, Sven Panne 1997-2000 @@ -16,6 +16,7 @@ ToDo: Differentiate between record updates and labeled construction. > { > module HsParser (parse) where > +> import Monad > import HsSyn > import HsParseMonad > import HsLexer @@ -442,17 +443,21 @@ Datatype declarations > | constr { [$1] } > constr :: { HsConDecl } -> : srcloc scontype maybe_doc -> { HsConDecl $1 (fst $2) (snd $2) $3 } -> | srcloc sbtype conop sbtype maybe_doc -> { HsConDecl $1 $3 [$2,$4] $5 } -> | srcloc con '{' fielddecls '}' maybe_doc -> { HsRecDecl $1 $2 $4 $6 } - -> maybe_doc :: { Maybe String } +> : srcloc maybe_docnext scontype maybe_docprev +> { HsConDecl $1 (fst $3) (snd $3) ($2 `mplus` $4) } +> | srcloc maybe_docnext sbtype conop sbtype maybe_docprev +> { HsConDecl $1 $4 [$3,$5] ($2 `mplus` $6) } +> | srcloc maybe_docnext con '{' fielddecls '}' maybe_docprev +> { HsRecDecl $1 $3 $5 ($2 `mplus` $7) } + +> maybe_docprev :: { Maybe String } > : DOCPREV { Just $1 } > | {- empty -} { Nothing } +> maybe_docnext :: { Maybe String } +> : DOCNEXT { Just $1 } +> | {- empty -} { Nothing } + > scontype :: { (HsName, [HsBangType]) } > : btype {% splitTyConApp $1 `thenP` \(c,ts) -> > returnP (toVarHsName c, @@ -481,7 +486,8 @@ Datatype declarations > | {- empty -} { [] } > fielddecl :: { HsFieldDecl } -> : vars '::' stype { HsFieldDecl (reverse $1) $3 Nothing } +> : maybe_docnext vars '::' stype maybe_docprev +> { HsFieldDecl (reverse $2) $4 ($1 `mplus` $5) } > stype :: { HsBangType } > : ctype { HsUnBangedTy $1 } diff --git a/src/Main.hs b/src/Main.hs index dd7aac64..9873d2f8 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -445,7 +445,7 @@ collect name doc_so_far (decl:ds) = Nothing -> collect name (doc_so_far ++ str) ds Just n -> finishedDoc n doc_so_far (collect Nothing str ds) - HsDocCommentPrev str -> collect name (doc_so_far++str) ds + HsDocCommentPrev str -> collect name (doc_so_far ++ str) ds _other -> docsFromDecl decl ++ |