packages feed

sundown-0.5: src/Text/Sundown/Html/Foreign.hsc

{-# Language ForeignFunctionInterface #-}
module Text.Sundown.Html.Foreign
    ( HtmlRenderMode (..)
    , sdhtml_renderer
    , sdhtml_torenderer
    , sdhtml_smartypants
    ) where

import Foreign
import Foreign.C.String
import Foreign.C.Types

import Text.Sundown.Buffer.Foreign
import Text.Sundown.Flag
import Text.Sundown.Foreign

#include "html.h"

data HtmlRenderMode = HtmlRenderMode
    { htmlSkipHtml   :: Bool -- ^ Drop in-line HTML tags from the output
    , htmlSkipStyle  :: Bool -- ^ Don't add any style tags to the output
    , htmlSkipImages :: Bool -- ^ Don't include images in the output
    , htmlSkipLinks  :: Bool -- ^ Don't include links in the output
    , htmlExpandTabs :: Bool
    , htmlSafelink   :: Bool -- ^ Sanity check links for known URL schemes
    , htmlToc        :: Bool -- ^ Include a table of contents in the output
    , htmlHardWrap   :: Bool
    , htmlUseXhtml   :: Bool -- ^ Produce XHTML output instead of HTML
    , htmlEscape     :: Bool
    }


instance Flag HtmlRenderMode where
    flagIndexes mode = [ (#{const HTML_SKIP_HTML},   htmlSkipHtml mode)
                       , (#{const HTML_SKIP_STYLE},  htmlSkipStyle mode)
                       , (#{const HTML_SKIP_IMAGES}, htmlSkipImages mode)
                       , (#{const HTML_SKIP_LINKS},  htmlSkipLinks mode)
                       , (#{const HTML_EXPAND_TABS}, htmlExpandTabs mode)
                       , (#{const HTML_SAFELINK},    htmlSafelink mode)
                       , (#{const HTML_TOC},         htmlToc mode)
                       , (#{const HTML_HARD_WRAP},   htmlHardWrap mode)
                       , (#{const HTML_USE_XHTML},   htmlUseXhtml mode)
                       , (#{const HTML_ESCAPE},      htmlEscape mode)
                       ]

data HtmlRenderOptions

instance Storable HtmlRenderOptions where
    sizeOf _    = (#size struct html_renderopt)
    alignment _ = alignment (undefined :: Ptr ())
    peek _      = error "HtmlRenderopt.peek is not implemented"
    poke _      = error "HtmlRenderopt.poke is not implemented"

sdhtml_renderer
    :: Ptr Callbacks -> Ptr HtmlRenderOptions -> HtmlRenderMode -> IO ()
sdhtml_renderer rndr options mode = sdhtml_renderer' rndr options (toCUInt mode)
foreign import ccall "html.h sdhtml_renderer"
    sdhtml_renderer' :: Ptr Callbacks -> Ptr HtmlRenderOptions -> CUInt -> IO ()

foreign import ccall "html.h sdhtml_toc_renderer"
    sdhtml_torenderer :: Ptr Callbacks -> Ptr HtmlRenderOptions -> IO ()

foreign import ccall "html.h sdhtml_smartypants"
    sdhtml_smartypants :: Ptr Buffer -> CString -> CSize -> IO ()