on d87affe help sign in
elk/src/Generate/Markdown.hs
39 lines 1.0 kB history raw
1{-# OPTIONS_GHC -Wall #-}
2module Generate.Markdown where
4import qualified Cheapskate as CS
5import qualified Cheapskate.Html as CS
6import qualified Data.Text as Text
7import qualified Text.Blaze.Html.Renderer.String as Blaze
8import qualified Text.Highlighting.Kate as Kate
9import Elm.Utils ((|>))
12toHtml :: String -> String
13toHtml rawMarkdown =
14 Text.pack rawMarkdown
15 |> CS.markdown options
16 |> CS.walk highlightCode
17 |> CS.renderDoc
18 |> Blaze.renderHtml
20options :: CS.Options
21options =
22 CS.Options
23 { CS.sanitize = False
24 , CS.allowRawHtml = True
25 , CS.preserveHardBreaks = False
26 , CS.debug = False
27 }
29highlightCode :: CS.Block -> CS.Block
30highlightCode block =
31 case block of
32 CS.CodeBlock (CS.CodeAttr lang _info) src ->
33 Kate.highlightAs (Text.unpack lang) (Text.unpack src)
34 |> Kate.formatHtmlBlock Kate.defaultFormatOpts
35 |> Blaze.renderHtml
36 |> Text.pack
37 |> CS.HtmlBlock
39 _ -> block