kitchen-sink-0.1.0.0: src/KitchenSink/Commonmark/Highlighting.hs
module KitchenSink.Commonmark.Highlighting (
CodeLanguage (..),
Code (..),
highlightCode,
) where
import Data.ByteString.Lazy qualified as LByteString
import Skylighting
import Text.Blaze.Html qualified as Blaze
import Text.Blaze.Renderer.Utf8 (renderMarkup)
import KitchenSink.Prelude
newtype CodeLanguage = CodeLanguage Text
newtype Code = Code Text
highlightCode :: CodeLanguage -> Code -> Maybe LByteString.ByteString
highlightCode fmt code = do
s <- syntaxByName defaultSyntaxMap (coerce fmt)
either (const Nothing) (Just . render)
$ tokenize (TokenizerConfig defaultSyntaxMap False) s (coerce code)
where
render tkns =
renderMarkup
$ Blaze.toHtml
$ formatHtmlBlock defaultFormatOpts tkns