module Text.Pandoc.Highlighting ( languages, highlightHtml, defaultHighlightingCss ) where
import Text.XHtml
import Text.Pandoc.Definition
#ifdef _HIGHLIGHTING
import Text.Highlighting.Kate ( languages, highlightAs, formatAsXHtml, FormatOption (..), defaultHighlightingCss )
import Data.List (find, lookup)
import Data.Maybe (fromMaybe)
import Data.Char (toLower)
highlightHtml :: Attr -> String -> Either String Html
highlightHtml (_, classes, keyvals) rawCode =
let firstNum = read $ fromMaybe "1" $ lookup "startFrom" keyvals
fmtOpts = [OptNumberFrom firstNum] ++
case find (`elem` ["number","numberLines","number-lines"]) classes of
Nothing -> []
Just _ -> [OptNumberLines]
lcLanguages = map (map toLower) languages
in case find (\c -> (map toLower c) `elem` lcLanguages) classes of
Nothing -> Left "Unknown or unsupported language"
Just language -> case highlightAs language rawCode of
Left err -> Left err
Right hl -> Right $ formatAsXHtml fmtOpts language hl
#else
defaultHighlightingCss :: String
defaultHighlightingCss = ""
languages :: [String]
languages = []
highlightHtml :: Attr -> String -> Either String Html
highlightHtml _ _ = Left "Pandoc was not compiled with support for highlighting"
#endif