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