on 2a930fd help sign in
elk/src/Generate/Markdown.hs
41 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
11(|>) :: a -> (a -> b) -> b
12x |> f = f x
14toHtml :: String -> String
15toHtml rawMarkdown =
16 Text.pack rawMarkdown
17 |> CS.markdown options
18 |> CS.walk highlightCode
19 |> CS.renderDoc
20 |> Blaze.renderHtml
22options :: CS.Options
23options =
24 CS.Options
25 { CS.sanitize = False
26 , CS.allowRawHtml = True
27 , CS.preserveHardBreaks = False
28 , CS.debug = False
29 }
31highlightCode :: CS.Block -> CS.Block
32highlightCode block =
33 case block of
34 CS.CodeBlock (CS.CodeAttr lang _info) src ->
35 Kate.highlightAs (Text.unpack lang) (Text.unpack src)
36 |> Kate.formatHtmlBlock Kate.defaultFormatOpts
37 |> Blaze.renderHtml
38 |> Text.pack
39 |> CS.HtmlBlock
41 _ -> block