module Bamboo.Type.Reader where
import Bamboo.Helper.ByteString
import Bamboo.Helper.PreludeEnv
import Data.Default
import Text.Pandoc
import Text.XHtml.Strict
import qualified Data.ByteString.Char8 as S
import qualified Data.ByteString.Char8 as S
import qualified Data.Map as Map
data Reader = Markdown | RST | HTML | Latex deriving (Show, Eq)
instance Default Reader where
def = Markdown
readers :: [(Reader, [String])]
readers =
[ (Markdown, ["markdown", "md"])
, (RST, ["rst"] )
, (HTML, ["html", "htm"])
, (Latex, ["tex", "latex"])
] .map_snd (map ("." ++))
reader_map :: Map.Map String Reader
reader_map = readers.map gen_lookup.join'.to_h
where gen_lookup (r, xs) = xs.labeling (const r)
guess_reader :: String -> Maybe Reader
guess_reader ext = reader_map.Map.lookup ext
to_html :: (ParserState -> a -> Pandoc) -> a -> Html
to_html r = r defaultParserState > writeHtml defaultWriterOptions
rr :: Reader -> S.ByteString -> Html
rr Markdown = to_us > to_html readMarkdown
rr RST = to_us > to_html readRST
rr HTML = to_us > primHtml
rr Latex = to_us > to_html readLaTeX
render_to_html :: Reader -> S.ByteString -> Html
render_to_html = rr