packages feed

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