highlighter-0.2: src/Text/Highlighter/Lexers/MuPAD.hs
module Text.Highlighter.Lexers.MuPAD (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "MuPAD"
, lAliases = ["mupad"]
, lExtensions = [".mu"]
, lMimetypes = []
, lStart = root'
, lFlags = [multiline]
}
comment' :: TokenMatcher
comment' =
[ tok "[^*/]" (Arbitrary "Comment" :. Arbitrary "Multiline")
, tokNext "/\\*" (Arbitrary "Comment" :. Arbitrary "Multiline") Push
, tokNext "\\*/" (Arbitrary "Comment" :. Arbitrary "Multiline") Pop
, tok "[*/]" (Arbitrary "Comment" :. Arbitrary "Multiline")
]
root' :: TokenMatcher
root' =
[ tok "//.*?$" (Arbitrary "Comment" :. Arbitrary "Single")
, tokNext "/\\*" (Arbitrary "Comment" :. Arbitrary "Multiline") (GoTo comment')
, tok "\"(?:[^\"\\\\]|\\\\.)*\"" (Arbitrary "Literal" :. Arbitrary "String")
, tok "\\(|\\)|\\[|\\]|\\{|\\}" (Arbitrary "Punctuation")
, tok "(?x)\\b(?:\10 next|break|end|\10 axiom|end_axiom|category|end_category|domain|end_domain|inherits|\10 if|%if|then|elif|else|end_if|\10 case|of|do|otherwise|end_case|\10 while|end_while|\10 repeat|until|end_repeat|\10 for|from|to|downto|step|end_for|\10 proc|local|option|save|begin|end_proc|\10 delete|frame\10 )\\b" (Arbitrary "Keyword")
, tok "(?x)\\b(?:\10 DOM_ARRAY|DOM_BOOL|DOM_COMPLEX|DOM_DOMAIN|DOM_EXEC|DOM_EXPR|\10 DOM_FAIL|DOM_FLOAT|DOM_FRAME|DOM_FUNC_ENV|DOM_HFARRAY|DOM_IDENT|\10 DOM_INT|DOM_INTERVAL|DOM_LIST|DOM_NIL|DOM_NULL|DOM_POLY|DOM_PROC|\10 DOM_PROC_ENV|DOM_RAT|DOM_SET|DOM_STRING|DOM_TABLE|DOM_VAR\10 )\\b" (Arbitrary "Name" :. Arbitrary "Class")
, tok "(?x)\\b(?:\10 PI|EULER|E|CATALAN|\10 NIL|FAIL|undefined|infinity|\10 TRUE|FALSE|UNKNOWN\10 )\\b" (Arbitrary "Name" :. Arbitrary "Constant")
, tok "\\b(?:dom|procname)\\b" (Arbitrary "Name" :. Arbitrary "Builtin" :. Arbitrary "Pseudo")
, tok "\\.|,|:|;|=|\\+|-|\\*|/|\\^|@|>|<|\\$|\\||!|\\'|%|\126=" (Arbitrary "Operator")
, tok "(?x)\\b(?:\10 and|or|not|xor|\10 assuming|\10 div|mod|\10 union|minus|intersect|in|subset\10 )\\b" (Arbitrary "Operator" :. Arbitrary "Word")
, tok "\\b(?:I|RDN_INF|RD_NINF|RD_NAN)\\b" (Arbitrary "Literal" :. Arbitrary "Number")
, tok "(?x)\10 ((?:[a-zA-Z_#][a-zA-Z_#0-9]*|`[^`]*`)\10 (?:::[a-zA-Z_#][a-zA-Z_#0-9]*|`[^`]*`)*)\\s*([(])" (ByGroups [(Arbitrary "Name" :. Arbitrary "Function"), (Arbitrary "Punctuation")])
, tok "(?x)\10 (?:[a-zA-Z_#][a-zA-Z_#0-9]*|`[^`]*`)\10 (?:::[a-zA-Z_#][a-zA-Z_#0-9]*|`[^`]*`)*" (Arbitrary "Name" :. Arbitrary "Variable")
, tok "[0-9]+(?:\\.[0-9]*)?(?:e[0-9]+)?" (Arbitrary "Literal" :. Arbitrary "Number")
, tok "\\.[0-9]+(?:e[0-9]+)?" (Arbitrary "Literal" :. Arbitrary "Number")
, tok "." (Arbitrary "Text")
]