9 #include "HsVersions.h"
14 import Data.Char (isSpace)
18 | DocAppend (HsDoc id) (HsDoc id)
20 | DocParagraph (HsDoc id)
23 | DocEmphasis (HsDoc id)
24 | DocMonospaced (HsDoc id)
25 | DocUnorderedList [HsDoc id]
26 | DocOrderedList [HsDoc id]
27 | DocDefList [(HsDoc id, HsDoc id)]
28 | DocCodeBlock (HsDoc id)
33 type LHsDoc a = Located (HsDoc a)
35 instance Outputable (HsDoc a) where
36 ppr _ = text "<document comment>"
38 ppr_mbDoc (Just doc) = ppr doc
39 ppr_mbDoc Nothing = empty
41 -- used to make parsing easier; we group the list items later
42 docAppend :: HsDoc id -> HsDoc id -> HsDoc id
43 docAppend (DocUnorderedList ds1) (DocUnorderedList ds2)
44 = DocUnorderedList (ds1++ds2)
45 docAppend (DocUnorderedList ds1) (DocAppend (DocUnorderedList ds2) d)
46 = DocAppend (DocUnorderedList (ds1++ds2)) d
47 docAppend (DocOrderedList ds1) (DocOrderedList ds2)
48 = DocOrderedList (ds1++ds2)
49 docAppend (DocOrderedList ds1) (DocAppend (DocOrderedList ds2) d)
50 = DocAppend (DocOrderedList (ds1++ds2)) d
51 docAppend (DocDefList ds1) (DocDefList ds2)
52 = DocDefList (ds1++ds2)
53 docAppend (DocDefList ds1) (DocAppend (DocDefList ds2) d)
54 = DocAppend (DocDefList (ds1++ds2)) d
55 docAppend DocEmpty d = d
56 docAppend d DocEmpty = d
60 -- again to make parsing easier - we spot a paragraph whose only item
61 -- is a DocMonospaced and make it into a DocCodeBlock
62 docParagraph :: HsDoc id -> HsDoc id
63 docParagraph (DocMonospaced p)
65 docParagraph (DocAppend (DocString s1) (DocMonospaced p))
68 docParagraph (DocAppend (DocString s1)
69 (DocAppend (DocMonospaced p) (DocString s2)))
70 | all isSpace s1 && all isSpace s2
72 docParagraph (DocAppend (DocMonospaced p) (DocString s2))