Elm-0.13: compiler/Generate/Markdown.hs
module Generate.Markdown where
import qualified Cheapskate as CS
import qualified Cheapskate.Html as CS
import qualified Data.Set as Set
import qualified Data.Text as Text
import qualified Text.Blaze.Html.Renderer.String as Blaze
import qualified Text.Highlighting.Kate as Kate
import Debug.Trace
(|>) :: a -> (a -> b) -> b
x |> f = f x
toHtml :: String -> String
toHtml rawMarkdown =
Text.pack rawMarkdown
|> CS.markdown options
|> CS.walk highlightCode
|> CS.renderDoc
|> Blaze.renderHtml
options :: CS.Options
options =
CS.Options
{ CS.sanitize = False
, CS.allowRawHtml = True
, CS.preserveHardBreaks = False
, CS.debug = False
}
highlightCode :: CS.Block -> CS.Block
highlightCode block =
case block of
CS.CodeBlock (CS.CodeAttr lang _info) src ->
Kate.highlightAs (Text.unpack lang) (Text.unpack src)
|> Kate.formatHtmlBlock Kate.defaultFormatOpts
|> Blaze.renderHtml
|> Text.pack
|> CS.HtmlBlock
_ -> block