patat-0.2.0.0: src/Text/Pandoc/Extended.hs
--------------------------------------------------------------------------------
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE LambdaCase #-}
module Text.Pandoc.Extended
( module Text.Pandoc
, plainToPara
, newlineToSpace
, metaToJson
) where
--------------------------------------------------------------------------------
import qualified Data.Aeson as A
import Data.Data.Extended (grecT)
import qualified Data.Map as M
import Data.Monoid (mempty)
import Text.Pandoc
import Prelude
--------------------------------------------------------------------------------
plainToPara :: [Block] -> [Block]
plainToPara = map $ \case
Plain inlines -> Para inlines
block -> block
--------------------------------------------------------------------------------
newlineToSpace :: [Inline] -> [Inline]
newlineToSpace = grecT $ \case
SoftBreak -> Space
LineBreak -> Space
inline -> inline
--------------------------------------------------------------------------------
-- | Convert Pandoc's internal metadata value format to JSON. This makes
-- parsing some things a bit easier.
metaToJson :: MetaValue -> A.Value
metaToJson (MetaMap m) = A.toJSON $! M.map metaToJson m
metaToJson (MetaList l) = A.toJSON $! map metaToJson l
metaToJson (MetaBool b) = A.toJSON b
metaToJson (MetaString s) = A.toJSON s
metaToJson (MetaInlines i) =
let !t = writeMarkdown def (Pandoc mempty [Plain i]) :: String in
A.toJSON t
metaToJson (MetaBlocks b) =
let !t = writeMarkdown def (Pandoc mempty b) :: String in
A.toJSON t