@@ -1,39 +1,42 @@
1module Generate.Markdown where
1module Generate.Markdown where
3−import Text.Pandoc
3+import qualified Cheapskate as CS
4+import qualified Cheapskate.Html as CS
4import qualified Data.Set as Set
5import qualified Data.Set as Set
6+import qualified Data.Text as Text
7+import qualified Text.Blaze.Html.Renderer.String as Blaze
8+import qualified Text.Highlighting.Kate as Kate
12+(|>) :: a -> (a -> b) -> b
6toHtml :: String -> String
15toHtml :: String -> String
7−toHtml = writeHtmlString writeOptions . readMarkdown readOptions
16+toHtml rawMarkdown =
17+ Text.pack rawMarkdown
18+ |> CS.markdown options
19+ |> CS.walk highlightCode
9−readOptions =
23+options :: CS.Options
10− def { readerExtensions = elmExtensions
24+options =
11− , readerApplyMacros = False
25+ CS.Options
26+ { CS.sanitize = False
27+ , CS.allowRawHtml = True
28+ , CS.preserveHardBreaks = False
14−writeOptions =
32+highlightCode :: CS.Block -> CS.Block
15− def { writerExtensions = elmExtensions
33+highlightCode block =
16− , writerHighlight = True
34+ case block of
17− }
35+ CS.CodeBlock (CS.CodeAttr lang _info) src ->
36+ Kate.highlightAs (Text.unpack lang) (Text.unpack src)
37+ |> Kate.formatHtmlBlock Kate.defaultFormatOpts
19−elmExtensions :: Set.Set Extension
42+ _ -> block
20−elmExtensions = Set.fromList
22− , Ext_fenced_code_blocks
23− , Ext_fenced_code_attributes
24− , Ext_backtick_code_blocks
25− , Ext_inline_code_attributes
26− , Ext_markdown_in_html_blocks
27− , Ext_escaped_line_breaks
30− , Ext_definition_lists
32− , Ext_all_symbols_escapable
33− , Ext_intraword_underscores
34− , Ext_blank_before_blockquote
35− , Ext_blank_before_header
36− , Ext_auto_identifiers
37− , Ext_header_attributes
38− , Ext_implicit_header_references