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