{-# LANGUAGE NoImplicitPrelude #-} 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