lit-0.1.0.5: src/Markdown.hs
{-# LANGUAGE OverloadedStrings #-}
module Markdown ( generate ) where
import qualified Data.Text as T
import Types
import Highlight (getLang)
generate :: String -> [Chunk] -> T.Text
generate name chunks =
let
lang = getLang name
toMarkDown = chunkToMarkdown lang
in
T.concat $ map toMarkDown chunks
(<++>) :: T.Text -> T.Text -> T.Text
(<++>) = T.append
chunkToMarkdown lang chunk =
case chunk of
Prose text -> text
Def _ name parts ->
let
lang' = T.pack lang
header = "<< " <++> (T.strip name) <++> " >>="
mdParts = T.concat $ map (partToText lang) parts
in
"```" <++> lang' <++>
"\n" <++> header <++>
"\n" <++> mdParts <++> "```\n"
partToText :: String -> Part -> T.Text
partToText lang part =
case part of
Code txt -> txt
Ref txt -> ("<< " <++> (T.strip txt) <++> " >>\n")