on fa264dd help sign in
elk/src/Generate/Markdown.hs
42 lines 1.1 kB history raw
1module Generate.Markdown where
3import qualified Cheapskate as CS
4import qualified Cheapskate.Html as CS
5import qualified Data.Set as Set
6import qualified Data.Text as Text
7import qualified Text.Blaze.Html.Renderer.String as Blaze
8import qualified Text.Highlighting.Kate as Kate
10import Debug.Trace
12(|>) :: a -> (a -> b) -> b
13x |> f = f x
15toHtml :: String -> String
16toHtml rawMarkdown =
17 Text.pack rawMarkdown
18 |> CS.markdown options
19 |> CS.walk highlightCode
20 |> CS.renderDoc
21 |> Blaze.renderHtml
23options :: CS.Options
24options =
25 CS.Options
26 { CS.sanitize = False
27 , CS.allowRawHtml = True
28 , CS.preserveHardBreaks = False
29 , CS.debug = False
30 }
32highlightCode :: CS.Block -> CS.Block
33highlightCode block =
34 case block of
35 CS.CodeBlock (CS.CodeAttr lang _info) src ->
36 Kate.highlightAs (Text.unpack lang) (Text.unpack src)
37 |> Kate.formatHtmlBlock Kate.defaultFormatOpts
38 |> Blaze.renderHtml
39 |> Text.pack
40 |> CS.HtmlBlock
42 _ -> block