{-# LANGUAGE OverloadedStrings #-}
module Cheapskate (markdown,
def,
walk,
walkM,
module Cheapskate.Types
) where
import Cheapskate.Types
import Cheapskate.Parse
import Cheapskate.Html
import Data.Default (def)
import Data.Data
import Data.Generics.Uniplate.Data
import Text.Blaze.Html (ToMarkup(..))
instance ToMarkup Doc
where toMarkup = renderDoc
-- | Apply a transformation bottom-up to every node of a parsed document.
-- This can be used, for example, to transform specially marked code blocks
-- to highlighted code or images. Here is a simple example that promotes
-- the levels of headers:
--
-- > promoteHeaders :: Doc -> Doc
-- > promoteHeaders = walk promoteHeader
-- > where promoteHeader (Header n ils) = Header (n+1) ils
-- > promoteHeader x = x
walk :: (Data a, Data b) => (a -> a) -> (b -> b)
walk = transformBi
-- | Monadic version of 'walk'.
walkM :: (Data a, Data b, Monad m) => (a -> m a) -> (b -> m b)
walkM = transformBiM