highlighter-0.2: src/Text/Highlighter/Lexers/GoodDataCL.hs
module Text.Highlighter.Lexers.GoodDataCL (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "GoodData-CL"
, lAliases = ["gooddata-cl"]
, lExtensions = [".gdc"]
, lMimetypes = ["text/x-gooddata-cl"]
, lStart = root'
, lFlags = [caseless]
}
argsList' :: TokenMatcher
argsList' =
[ tokNext "\\)" (Arbitrary "Punctuation") Pop
, tok "," (Arbitrary "Punctuation")
, tok "[a-zA-Z]\\w*" (Arbitrary "Name" :. Arbitrary "Variable")
, tok "=" (Arbitrary "Operator")
, tokNext "\"" (Arbitrary "Literal" :. Arbitrary "String") (GoTo stringLiteral')
, tok "[0-9]+(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]{1,3})?" (Arbitrary "Literal" :. Arbitrary "Number")
, tok "\\s" (Arbitrary "Text")
]
root' :: TokenMatcher
root' =
[ tok "#.*" (Arbitrary "Comment" :. Arbitrary "Single")
, tok "[a-zA-Z]\\w*" (Arbitrary "Name" :. Arbitrary "Function")
, tokNext "\\(" (Arbitrary "Punctuation") (GoTo argsList')
, tok ";" (Arbitrary "Punctuation")
, tok "\\s+" (Arbitrary "Text")
]
stringLiteral' :: TokenMatcher
stringLiteral' =
[ tok "\\\\[tnrfbae\"\\\\]" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Escape")
, tokNext "\"" (Arbitrary "Literal" :. Arbitrary "String") Pop
, tok "[^\\\\\"]+" (Arbitrary "Literal" :. Arbitrary "String")
]