highlighter-0.2: src/Text/Highlighter/Lexers/Ooc.hs
module Text.Highlighter.Lexers.Ooc (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "Ooc"
, lAliases = ["ooc"]
, lExtensions = [".ooc"]
, lMimetypes = ["text/x-ooc"]
, lStart = root'
, lFlags = [multiline]
}
include' :: TokenMatcher
include' =
[ tok "[\\w/]+" (Arbitrary "Name")
, tok "," (Arbitrary "Punctuation")
, tok "[ \\t]" (Arbitrary "Text")
, tokNext "[;\\n]" (Arbitrary "Text") Pop
]
root' :: TokenMatcher
root' =
[ tok "\\b(class|interface|implement|abstract|extends|from|this|super|new|const|final|static|import|use|extern|inline|proto|break|continue|fallthrough|operator|if|else|for|while|do|switch|case|as|in|version|return|true|false|null)\\b" (Arbitrary "Keyword")
, tokNext "include\\b" (Arbitrary "Keyword") (GoTo include')
, tok "(cover)([ \\t]+)(from)([ \\t]+)([a-zA-Z0-9_]+[*@]?)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Class")])
, tok "(func)((?:[ \\t]|\\\\\\n)+)(\126[a-z_][a-zA-Z0-9_]*)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Function")])
, tok "\\bfunc\\b" (Arbitrary "Keyword")
, tok "//.*" (Arbitrary "Comment")
, tok "(?s)/\\*.*?\\*/" (Arbitrary "Comment" :. Arbitrary "Multiline")
, tok "(==?|\\+=?|-[=>]?|\\*=?|/=?|:=|!=?|%=?|\\?|>{1,3}=?|<{1,3}=?|\\.\\.|&&?|\\|\\|?|\\^=?)" (Arbitrary "Operator")
, tok "(\\.)([ \\t]*)([a-z]\\w*)" (ByGroups [(Arbitrary "Operator"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Function")])
, tok "[A-Z][A-Z0-9_]+" (Arbitrary "Name" :. Arbitrary "Constant")
, tok "[A-Z][a-zA-Z0-9_]*([@*]|\\[[ \\t]*\\])?" (Arbitrary "Name" :. Arbitrary "Class")
, tok "([a-z][a-zA-Z0-9_]*(?:\126[a-z][a-zA-Z0-9_]*)?)((?:[ \\t]|\\\\\\n)*)(?=\\()" (ByGroups [(Arbitrary "Name" :. Arbitrary "Function"), (Arbitrary "Text")])
, tok "[a-z][a-zA-Z0-9_]*" (Arbitrary "Name" :. Arbitrary "Variable")
, tok "[:(){}\\[\\];,]" (Arbitrary "Punctuation")
, tok "0x[0-9a-fA-F]+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Hex")
, tok "0c[0-9]+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Oct")
, tok "0b[01]+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Binary")
, tok "[0-9_]\\.[0-9_]*(?!\\.)" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Float")
, tok "[0-9_]+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Decimal")
, tok "\"(?:\\\\.|\\\\[0-7]{1,3}|\\\\x[a-fA-F0-9]{1,2}|[^\\\\\\\"])*\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double")
, tok "'(?:\\\\.|\\\\[0-9]{1,3}|\\\\x[a-fA-F0-9]{1,2}|[^\\\\\\'\\n])'" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Char")
, tok "@" (Arbitrary "Punctuation")
, tok "\\." (Arbitrary "Punctuation")
, tok "\\\\[ \\t\\n]" (Arbitrary "Text")
, tok "[ \\t]+" (Arbitrary "Text")
]