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") ]