module Text.Pandoc.Highlighting ( languages, highlightHtml, defaultHighlightingCss, languagesByExtension ) where
import Text.XHtml
import Text.Pandoc.Definition
#ifdef _HIGHLIGHTING
import Text.Highlighting.Kate ( languages, highlightAs, formatAsXHtml, FormatOption (..), defaultHighlightingCss, languagesByExtension )
import Data.List (find)
import Data.Maybe (fromMaybe)
import Data.Char (toLower)
highlightHtml :: Bool
-> Attr
-> String
-> Either String Html
highlightHtml inline (_, classes, keyvals) rawCode =
let firstNum = read $ fromMaybe "1" $ lookup "startFrom" keyvals
fmtOpts = [OptNumberFrom firstNum] ++
[OptInline | inline] ++
case find (`elem` ["number","numberLines","number-lines"]) classes of
Nothing -> []
Just _ -> [OptNumberLines]
addBirdTracks = "literate" `elem` classes
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 $
if addBirdTracks
then map ((["Special"],"> "):) hl
else hl
#else
defaultHighlightingCss :: String
defaultHighlightingCss = ""
languages :: [String]
languages = []
languagesByExtension :: String -> [String]
languagesByExtension _ = []
highlightHtml :: Bool -> Attr -> String -> Either String Html
highlightHtml _ _ _ = Left "Pandoc was not compiled with support for highlighting"
#endif