Don't import FastString in HsVersions.h
[ghc-hetmet.git] / compiler / hsSyn / HsDoc.hs
index 83fb3c4..fd721c0 100644 (file)
@@ -1,10 +1,3 @@
-{-# OPTIONS_GHC -w #-}
--- The above warning supression flag is a temporary kludge.
--- While working on this module you are encouraged to remove it and fix
--- any warnings in the module. See
---     http://hackage.haskell.org/trac/ghc/wiki/WorkingConventions#Warnings
--- for details
-
 module HsDoc (
   HsDoc(..),
   LHsDoc,
@@ -34,6 +27,7 @@ data HsDoc id
   | DocDefList [(HsDoc id, HsDoc id)]
   | DocCodeBlock (HsDoc id)
   | DocURL String
+  | DocPic String
   | DocAName String
   deriving (Eq, Show)
 
@@ -42,6 +36,7 @@ type LHsDoc a = Located (HsDoc a)
 instance Outputable (HsDoc a) where
   ppr _ = text "<document comment>"
 
+ppr_mbDoc :: Maybe (LHsDoc a) -> SDoc
 ppr_mbDoc (Just doc) = ppr doc
 ppr_mbDoc Nothing    = empty
 
@@ -68,16 +63,34 @@ docAppend d1 d2
 -- is a DocMonospaced and make it into a DocCodeBlock
 docParagraph :: HsDoc id -> HsDoc id
 docParagraph (DocMonospaced p)
-  = DocCodeBlock p
+  = DocCodeBlock (docCodeBlock p)
 docParagraph (DocAppend (DocString s1) (DocMonospaced p))
   | all isSpace s1
-  = DocCodeBlock p
+  = DocCodeBlock (docCodeBlock p)
 docParagraph (DocAppend (DocString s1)
     (DocAppend (DocMonospaced p) (DocString s2)))
   | all isSpace s1 && all isSpace s2
-  = DocCodeBlock p
+  = DocCodeBlock (docCodeBlock p)
 docParagraph (DocAppend (DocMonospaced p) (DocString s2))
   | all isSpace s2
-  = DocCodeBlock p
+  = DocCodeBlock (docCodeBlock p)
 docParagraph p
   = DocParagraph p
+
+
+-- Drop trailing whitespace from @..@ code blocks.  Otherwise this:
+--
+--    -- @
+--    -- foo
+--    -- @
+--
+-- turns into (DocCodeBlock "\nfoo\n ") which when rendered in HTML
+-- gives an extra vertical space after the code block.  The single space
+-- on the final line seems to trigger the extra vertical space.
+--
+docCodeBlock :: HsDoc id -> HsDoc id
+docCodeBlock (DocString s)
+  = DocString (reverse $ dropWhile (`elem` " \t") $ reverse s)
+docCodeBlock (DocAppend l r)
+  = DocAppend l (docCodeBlock r)
+docCodeBlock d = d