{-# LANGUAGE OverloadedStrings #-} module Network.Wai.Middleware.ContentType.Pandoc where import Network.Wai.Middleware.ContentType.Types import Network.Wai.Middleware.ContentType.Builder import Network.HTTP.Types (RequestHeaders, Status, status200) import Network.Wai.Trans import qualified Data.Text.Lazy as LT import qualified Data.Text.Lazy.Encoding as LT import qualified Text.Pandoc as P import Control.Monad.Trans -- * Lifted Combinators -- | Uses the @Html@ key in the map, and @"text/html"@ as the content type. markdown :: MonadIO m => P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdown = markdownStatusHeaders status200 [("Content-Type", "text/markdown")] markdownWith :: MonadIO m => (Response -> Response) -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownWith f = markdownStatusHeadersWith f status200 [("Content-Type", "text/markdown")] markdownStatus :: MonadIO m => Status -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownStatus s = markdownStatusHeaders s [("Content-Type", "text/markdown")] markdownStatusWith :: MonadIO m => (Response -> Response) -> Status -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownStatusWith f s = markdownStatusHeadersWith f s [("Content-Type", "text/markdown")] markdownHeaders :: MonadIO m => RequestHeaders -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownHeaders = markdownStatusHeaders status200 markdownHeadersWith :: MonadIO m => (Response -> Response) -> RequestHeaders -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownHeadersWith f = markdownStatusHeadersWith f status200 markdownStatusHeaders :: MonadIO m => Status -> RequestHeaders -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownStatusHeaders = markdownStatusHeadersWith id markdownStatusHeadersWith :: MonadIO m => (Response -> Response) -> Status -> RequestHeaders -> P.Pandoc -> FileExtListenerT (MiddlewareT m) m () markdownStatusHeadersWith f s hs = builderStatusWith f Markdown s hs . LT.encodeUtf8Builder . LT.pack . P.writeMarkdown P.def -- * 'Network.Wai.Response' Only markdownOnly :: P.Pandoc -> Response markdownOnly = markdownOnlyStatusHeaders status200 [("Content-Type", "text/markdown")] markdownOnlyStatus :: Status -> P.Pandoc -> Response markdownOnlyStatus s = markdownOnlyStatusHeaders s [("Content-Type", "text/markdown")] markdownOnlyHeaders :: RequestHeaders -> P.Pandoc -> Response markdownOnlyHeaders = markdownOnlyStatusHeaders status200 markdownOnlyStatusHeaders :: Status -> RequestHeaders -> P.Pandoc -> Response markdownOnlyStatusHeaders s hs = builderOnlyStatus s hs . LT.encodeUtf8Builder . LT.pack . P.writeMarkdown P.def