module Text.Highlighter.Lexers.Coldfusion (lexer) where import Text.Regex.PCRE.Light import Text.Highlighter.Types lexer :: Lexer lexer = Lexer { lName = "cfstatement" , lAliases = ["cfs"] , lExtensions = [] , lMimetypes = [] , lStart = root' , lFlags = [caseless, multiline] } root' :: TokenMatcher root' = [ tok "//.*" (Arbitrary "Comment") , tok "\\+\\+|--" (Arbitrary "Operator") , tok "[-+*/^&=!]" (Arbitrary "Operator") , tok "<=|>=|<|>" (Arbitrary "Operator") , tok "mod\\b" (Arbitrary "Operator") , tok "(eq|lt|gt|lte|gte|not|is|and|or)\\b" (Arbitrary "Operator") , tok "\\|\\||&&" (Arbitrary "Operator") , tokNext "\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double") (GoTo string') , tok "'.*?'" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Single") , tok "\\d+" (Arbitrary "Literal" :. Arbitrary "Number") , tok "(if|else|len|var|case|default|break|switch)\\b" (Arbitrary "Keyword") , tok "([A-Za-z_$][A-Za-z0-9_.]*)\\s*(\\()" (ByGroups [(Arbitrary "Name" :. Arbitrary "Function"), (Arbitrary "Punctuation")]) , tok "[A-Za-z_$][A-Za-z0-9_.]*" (Arbitrary "Name" :. Arbitrary "Variable") , tok "[()\\[\\]{};:,.\\\\]" (Arbitrary "Punctuation") , tok "\\s+" (Arbitrary "Text") ] string' :: TokenMatcher string' = [ tok "\"\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double") , tok "#.+?#" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Interp") , tok "[^\"#]+" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double") , tok "#" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double") , tokNext "\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double") Pop ]