highlighter-0.2: src/Text/Highlighter/Lexers/MOOCode.hs
module Text.Highlighter.Lexers.MOOCode (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "MOOCode"
, lAliases = ["moocode"]
, lExtensions = [".moo"]
, lMimetypes = ["text/x-moocode"]
, lStart = root'
, lFlags = [multiline]
}
root' :: TokenMatcher
root' =
[ tok "(0|[1-9][0-9_]*)" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer")
, tok "\"(\\\\\\\\|\\\\\"|[^\"])*\"" (Arbitrary "Literal" :. Arbitrary "String")
, tok "(E_PERM|E_DIV)" (Arbitrary "Name" :. Arbitrary "Exception")
, tok "((#[-0-9]+)|(\\$[a-z_A-Z0-9]+))" (Arbitrary "Name" :. Arbitrary "Entity")
, tok "\\b(if|else|elseif|endif|for|endfor|fork|endfork|while|endwhile|break|continue|return|try|except|endtry|finally|in)\\b" (Arbitrary "Keyword")
, tok "(random|length)" (Arbitrary "Name" :. Arbitrary "Builtin")
, tok "(player|caller|this|args)" (Arbitrary "Name" :. Arbitrary "Variable" :. Arbitrary "Instance")
, tok "\\s+" (Arbitrary "Text")
, tok "\\n" (Arbitrary "Text")
, tok "([!;=,{}&\\|:\\.\\[\\]@\\(\\)\\<\\>\\?]+)" (Arbitrary "Operator")
, tok "([a-z_A-Z0-9]+)(\\()" (ByGroups [(Arbitrary "Name" :. Arbitrary "Function"), (Arbitrary "Operator")])
, tok "([a-zA-Z_0-9]+)" (Arbitrary "Text")
]