haggis-0.1.3.0: src/Text/Haggis/Utils.hs
module Text.Haggis.Utils where
import Blaze.ByteString.Builder
import qualified Data.ByteString.Lazy as BSL
import qualified Data.Map.Lazy as M
import qualified Data.Text as T
import qualified Text.Blaze.Html.Renderer.Utf8 as PHTML
import Text.Pandoc.Definition
import Text.Pandoc.Error
import Text.Pandoc.Options
import Text.Pandoc.Writers.HTML
import Text.XmlHtml
import Debug.Trace
renderHtml :: [Node] -> BSL.ByteString
renderHtml = toLazyByteString . renderHtmlFragment UTF8
mapAccum :: Ord a => [(a, b)] -> M.Map a [b]
mapAccum = foldr (\(k,v) -> M.insertWith (++) k [v]) M.empty
pandocToHtml :: Either PandocError Pandoc -> [Node]
pandocToHtml (Left err) = [TextNode (T.pack (show err))]
-- Text.Blaze.Renderer.XmlHtml's renderHtmlNodes doesn't render RawNodes in
-- pandoc correctly. Instead, we render the document to a string, and re-parse
-- it with XmlHtml's parseHTML, which parses them correctly into Nodes.
pandocToHtml (Right doc) =
let rendered = PHTML.renderHtml $ writeHtml def doc
result = parseHTML "foo" $ (trace (show rendered) (BSL.toStrict rendered))
in case result of
Left err -> [TextNode (T.pack (show err))]
Right doc2 -> docContent doc2