content: {-# LANGUAGE OverloadedStrings #-}
  {-# OPTIONS_GHC -fno-warn-orphans #-}
  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
  