aboutsummaryrefslogtreecommitdiff
path: root/src/Text/Pandoc/Highlighting.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Text/Pandoc/Highlighting.hs')
-rw-r--r--src/Text/Pandoc/Highlighting.hs46
1 files changed, 22 insertions, 24 deletions
diff --git a/src/Text/Pandoc/Highlighting.hs b/src/Text/Pandoc/Highlighting.hs
index 62aa5afc4..3e02355f7 100644
--- a/src/Text/Pandoc/Highlighting.hs
+++ b/src/Text/Pandoc/Highlighting.hs
@@ -1,4 +1,5 @@
{-# LANGUAGE NoImplicitPrelude #-}
+{-# LANGUAGE OverloadedStrings #-}
{- |
Module : Text.Pandoc.Highlighting
Copyright : Copyright (C) 2008-2019 John MacFarlane
@@ -35,7 +36,6 @@ module Text.Pandoc.Highlighting ( highlightingStyles
) where
import Prelude
import Control.Monad
-import Data.Char (toLower)
import qualified Data.Map as M
import Data.Maybe (fromMaybe)
import qualified Data.Text as T
@@ -43,7 +43,7 @@ import Skylighting
import Text.Pandoc.Definition
import Text.Pandoc.Shared (safeRead)
-highlightingStyles :: [(String, Style)]
+highlightingStyles :: [(T.Text, Style)]
highlightingStyles =
[("pygments", pygments),
("tango", tango),
@@ -54,18 +54,18 @@ highlightingStyles =
("breezedark", breezeDark),
("haddock", haddock)]
-languages :: [String]
-languages = [T.unpack (T.toLower (sName s)) | s <- M.elems defaultSyntaxMap]
+languages :: [T.Text]
+languages = [T.toLower (sName s) | s <- M.elems defaultSyntaxMap]
-languagesByExtension :: String -> [String]
+languagesByExtension :: T.Text -> [T.Text]
languagesByExtension ext =
- [T.unpack (T.toLower (sName s)) | s <- syntaxesByExtension defaultSyntaxMap ext]
+ [T.toLower (sName s) | s <- syntaxesByExtension defaultSyntaxMap (T.unpack ext)]
highlight :: SyntaxMap
-> (FormatOptions -> [SourceLine] -> a) -- ^ Formatter
-> Attr -- ^ Attributes of the CodeBlock
- -> String -- ^ Raw contents of the CodeBlock
- -> Either String a
+ -> T.Text -- ^ Raw contents of the CodeBlock
+ -> Either T.Text a
highlight syntaxmap formatter (ident, classes, keyvals) rawCode =
let firstNum = fromMaybe 1 (safeRead (fromMaybe "1" $ lookup "startFrom" keyvals))
fmtOpts = defaultFormatOpts{
@@ -74,38 +74,36 @@ highlight syntaxmap formatter (ident, classes, keyvals) rawCode =
["line-anchors", "lineAnchors"]) classes,
numberLines = any (`elem`
["number","numberLines", "number-lines"]) classes,
- lineIdPrefix = if null ident
+ lineIdPrefix = if T.null ident
then mempty
- else T.pack (ident ++ "-") }
+ else ident <> "-" }
tokenizeOpts = TokenizerConfig{ syntaxMap = syntaxmap
, traceOutput = False }
- classes' = map T.pack classes
- rawCode' = T.pack rawCode
- in case msum (map (`lookupSyntax` syntaxmap) classes') of
+ in case msum (map (`lookupSyntax` syntaxmap) classes) of
Nothing
| numberLines fmtOpts -> Right
$ formatter fmtOpts{ codeClasses = [],
- containerClasses = classes' }
+ containerClasses = classes }
$ map (\ln -> [(NormalTok, ln)])
- $ T.lines rawCode'
+ $ T.lines rawCode
| otherwise -> Left ""
- Just syntax ->
+ Just syntax -> either (Left . T.pack) Right $
formatter fmtOpts{ codeClasses =
[T.toLower (sShortname syntax)],
- containerClasses = classes' } <$>
- tokenize tokenizeOpts syntax rawCode'
+ containerClasses = classes } <$>
+ tokenize tokenizeOpts syntax rawCode
-- Functions for correlating latex listings package's language names
-- with skylighting language names:
-langToListingsMap :: M.Map String String
+langToListingsMap :: M.Map T.Text T.Text
langToListingsMap = M.fromList langsList
-listingsToLangMap :: M.Map String String
+listingsToLangMap :: M.Map T.Text T.Text
listingsToLangMap = M.fromList $ map switch langsList
where switch (a,b) = (b,a)
-langsList :: [(String, String)]
+langsList :: [(T.Text, T.Text)]
langsList =
[("abap","ABAP"),
("acm","ACM"),
@@ -212,9 +210,9 @@ langsList =
("xslt","XSLT")]
-- | Determine listings language name from skylighting language name.
-toListingsLanguage :: String -> Maybe String
-toListingsLanguage lang = M.lookup (map toLower lang) langToListingsMap
+toListingsLanguage :: T.Text -> Maybe T.Text
+toListingsLanguage lang = M.lookup (T.toLower lang) langToListingsMap
-- | Determine skylighting language name from listings language name.
-fromListingsLanguage :: String -> Maybe String
+fromListingsLanguage :: T.Text -> Maybe T.Text
fromListingsLanguage lang = M.lookup lang listingsToLangMap