module Text.Upskirt.Renderers.Html
( renderHtml
, noHtmlModes
, allHtmlModes
, smartypants
, HtmlRenderMode (..)
) 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.Html.Foreign
renderHtml :: ByteString -> Extensions -> HtmlRenderMode -> 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_upshtml_renderer renderer mode
c_ups_markdown ob ib renderer exts
c_upshtml_free_renderer renderer
Buffer {bufData = output} <- peek ob
c_bufrelease ib
c_bufrelease ob
return output
noHtmlModes :: HtmlRenderMode
noHtmlModes = HtmlRenderMode False False False False False False False False False False
allHtmlModes :: HtmlRenderMode
allHtmlModes = HtmlRenderMode True 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_upshtml_smartypants ob ib
Buffer {bufData = output} <- peek ob
c_bufrelease ib
c_bufrelease ob
return output