highlighter-0.2: src/Text/Highlighter/Lexers/Boo.hs
module Text.Highlighter.Lexers.Boo (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "Boo"
, lAliases = ["boo"]
, lExtensions = [".boo"]
, lMimetypes = ["text/x-boo"]
, lStart = root'
, lFlags = [multiline]
}
comment' :: TokenMatcher
comment' =
[ tokNext "/[*]" (Arbitrary "Comment" :. Arbitrary "Multiline") Push
, tokNext "[*]/" (Arbitrary "Comment" :. Arbitrary "Multiline") Pop
, tok "[^/*]" (Arbitrary "Comment" :. Arbitrary "Multiline")
, tok "[*/]" (Arbitrary "Comment" :. Arbitrary "Multiline")
]
classname' :: TokenMatcher
classname' =
[ tokNext "[a-zA-Z_][a-zA-Z0-9_]*" (Arbitrary "Name" :. Arbitrary "Class") Pop
]
namespace' :: TokenMatcher
namespace' =
[ tokNext "[a-zA-Z_][a-zA-Z0-9_.]*" (Arbitrary "Name" :. Arbitrary "Namespace") Pop
]
root' :: TokenMatcher
root' =
[ tok "\\s+" (Arbitrary "Text")
, tok "(#|//).*$" (Arbitrary "Comment" :. Arbitrary "Single")
, tokNext "/[*]" (Arbitrary "Comment" :. Arbitrary "Multiline") (GoTo comment')
, tok "[]{}:(),.;[]" (Arbitrary "Punctuation")
, tok "\\\\\\n" (Arbitrary "Text")
, tok "\\\\" (Arbitrary "Text")
, tok "(in|is|and|or|not)\\b" (Arbitrary "Operator" :. Arbitrary "Word")
, tok "/(\\\\\\\\|\\\\/|[^/\\s])/" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Regex")
, tok "@/(\\\\\\\\|\\\\/|[^/])*/" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Regex")
, tok "=\126|!=|==|<<|>>|[-+/*%=<>&^|]" (Arbitrary "Operator")
, tok "(as|abstract|callable|constructor|destructor|do|import|enum|event|final|get|interface|internal|of|override|partial|private|protected|public|return|set|static|struct|transient|virtual|yield|super|and|break|cast|continue|elif|else|ensure|except|for|given|goto|if|in|is|isa|not|or|otherwise|pass|raise|ref|try|unless|when|while|from|as)\\b" (Arbitrary "Keyword")
, tok "def(?=\\s+\\(.*?\\))" (Arbitrary "Keyword")
, tokNext "(def)(\\s+)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text")]) (GoTo funcname')
, tokNext "(class)(\\s+)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text")]) (GoTo classname')
, tokNext "(namespace)(\\s+)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text")]) (GoTo namespace')
, tok "(?<!\\.)(true|false|null|self|__eval__|__switch__|array|assert|checked|enumerate|filter|getter|len|lock|map|matrix|max|min|normalArrayIndexing|print|property|range|rawArrayIndexing|required|typeof|unchecked|using|yieldAll|zip)\\b" (Arbitrary "Name" :. Arbitrary "Builtin")
, tok "\"\"\"(\\\\|\\\"|.*?)\"\"\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double")
, tok "\"(\\\\|\\\"|[^\"]*?)\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double")
, tok "'(\\\\|\\'|[^']*?)'" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Single")
, tok "[a-zA-Z_][a-zA-Z0-9_]*" (Arbitrary "Name")
, tok "(\\d+\\.\\d*|\\d*\\.\\d+)([fF][+-]?[0-9]+)?" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Float")
, tok "[0-9][0-9\\.]*(m|ms|d|h|s)" (Arbitrary "Literal" :. Arbitrary "Number")
, tok "0\\d+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Oct")
, tok "0x[a-fA-F0-9]+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Hex")
, tok "\\d+L" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer" :. Arbitrary "Long")
, tok "\\d+" (Arbitrary "Literal" :. Arbitrary "Number" :. Arbitrary "Integer")
]
funcname' :: TokenMatcher
funcname' =
[ tokNext "[a-zA-Z_][a-zA-Z0-9_]*" (Arbitrary "Name" :. Arbitrary "Function") Pop
]