module Text.Upskirt.Renderers.Xhtml
( renderHtml
, noXhtmlModes
, allXhtmlModes
, smartypants
, XhtmlRenderMode (..)
) where
import Foreign
import Data.ByteString (ByteString)
import qualified Data.ByteString as BS
import Text.Upskirt.Markdown.Foreign
import Text.Upskirt.Buffer.Foreign
import Text.Upskirt.Renderers.Xhtml.Foreign
renderHtml :: ByteString -> Extensions -> XhtmlRenderMode -> ByteString
renderHtml input exts mode =
unsafePerformIO $
alloca $ \renderer -> do
ob <- c_bufnew 64
ib <- c_bufnew $ fromInteger . toInteger $ BS.length input
c_bufputs ib input
c_ups_xhtml_renderer renderer mode
c_ups_markdown ob ib renderer exts
c_ups_free_renderer renderer
Buffer {bufData = output} <- peek ob
c_bufrelease ib
c_bufrelease ob
return output
noXhtmlModes :: XhtmlRenderMode
noXhtmlModes = XhtmlRenderMode False False False False False False False False False
allXhtmlModes :: XhtmlRenderMode
allXhtmlModes = XhtmlRenderMode True True True True True True True True True
smartypants :: ByteString -> ByteString
smartypants input =
unsafePerformIO $ do
ob <- c_bufnew 64
ib <- c_bufnew $ fromInteger . toInteger $ BS.length input
c_bufputs ib input
c_ups_xhtml_smartypants ob ib
Buffer {bufData = output} <- peek ob
c_bufrelease ib
c_bufrelease ob
return output