sundown-0.3: src/Text/Sundown/Markdown/Foreign.hsc
{-# Language ForeignFunctionInterface #-}
module Text.Sundown.Markdown.Foreign
( Callbacks
, Extensions (..)
, c_sd_markdown_new
, c_sd_markdown_render
, c_sd_markdown_free
) where
import Foreign
import Foreign.C.String
import Foreign.C.Types
import Text.Sundown.Buffer.Foreign
import Text.Sundown.Flag
#include "markdown.h"
-- | A set of switches to enable or disable markdown features.
data Extensions = Extensions { extNoIntraEmphasis :: Bool -- ^ Turn off underscores insode a word
-- does designating emphasis.
, extTables :: Bool
, extFencedCode :: Bool -- ^ Turns on a non-indentation form of
-- code-blocks, by blocking off a regionwith ~
-- or \`.
, extAutolink :: Bool -- ^ Turn things that look like URLs and email
-- addresses into links
, extStrikethrough :: Bool -- ^ Surround text with `~` to designate it
-- as struck through
, extLaxHtmlBlocks :: Bool -- ^ Allow HTML markup inside of paragraphs,
-- instead requireing tags to be on separate
-- lines
, extSpaceHeaders :: Bool
, extSuperscript :: Bool
}
instance Flag Extensions where
flagIndexes exts = [ (0, extNoIntraEmphasis exts)
, (1, extTables exts)
, (2, extFencedCode exts)
, (3, extAutolink exts)
, (4, extStrikethrough exts)
, (5, extLaxHtmlBlocks exts)
, (6, extSpaceHeaders exts)
, (7, extSuperscript exts)
]
data Callbacks
instance Storable Callbacks where
sizeOf _ = (#size struct sd_callbacks)
alignment _ = alignment (undefined :: Ptr ())
peek _ = error "Callbacks.peek is not implemented"
poke _ _ = error "Callbacks.poke is not implemented"
data Markdown
instance Storable Markdown where
sizeOf _ = error "Markdown.sizeOf is not implemented"
alignment _ = alignment (undefined :: Ptr ())
peek _ = error "Markdown.peek is not implemented"
poke _ = error "Markdown.poke is not implemented"
c_sd_markdown_new :: Extensions -> CSize -> Ptr Callbacks -> Ptr () -> IO (Ptr Markdown)
c_sd_markdown_new extensions max_nesting callbacks opaque =
c_sd_markdown_new' (toCUInt extensions) max_nesting callbacks opaque
foreign import ccall "markdown.h sd_markdown_new"
c_sd_markdown_new' :: CUInt -> CSize -> Ptr Callbacks -> Ptr () -> IO (Ptr Markdown)
foreign import ccall "markdown.h sd_markdown_render"
c_sd_markdown_render :: Ptr Buffer -> CString -> CSize -> Ptr Markdown -> IO ()
foreign import ccall "markdown.h sd_markdown_free"
c_sd_markdown_free :: Ptr Markdown -> IO ()