{-# OPTIONS_GHC -fno-warn-orphans #-}

module Haddock.Doc
  ( module Documentation.Haddock.Doc
  , docCodeBlock
  , combineDocumentation
  ) where

import Data.Maybe

import Documentation.Haddock.Doc
import Haddock.Types
import Haddock.Utils (mkMeta)

combineDocumentation :: Documentation name -> Maybe (MDoc name)
combineDocumentation (Documentation Nothing Nothing) = Nothing
combineDocumentation (Documentation mDoc mWarning) =
  Just
    ( maybe emptyMetaDoc mkMeta mWarning
        `metaDocAppend` fromMaybe emptyMetaDoc mDoc
    )

-- 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 :: DocH mod id -> DocH mod id
docCodeBlock (DocString s) =
  DocString (reverse $ dropWhile (`elem` " \t") $ reverse s)
docCodeBlock (DocAppend l r) =
  DocAppend l (docCodeBlock r)
docCodeBlock d = d
