highlighter-0.2: src/Text/Highlighter/Lexers/Django.hs
module Text.Highlighter.Lexers.Django (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "Django/Jinja"
, lAliases = ["django", "jinja"]
, lExtensions = []
, lMimetypes = ["application/x-django-templating", "application/x-jinja"]
, lStart = root'
, lFlags = [multiline, dotall]
}
var' :: TokenMatcher
var' =
[ tok "\\s+" (Arbitrary "Text")
, tokNext "(-?)(\\}\\})" (ByGroups [(Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc")]) Pop
, anyOf varnames'
]
varnames' :: TokenMatcher
varnames' =
[ tok "(\\|)(\\s*)([a-zA-Z_][a-zA-Z0-9_]*)" (ByGroups [(Arbitrary "Operator"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Function")])
, tok "(is)(\\s+)(not)?(\\s+)?([a-zA-Z_][a-zA-Z0-9_]*)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Function")])
, tok "(_|true|false|none|True|False|None)\\b" (Arbitrary "Keyword" :. Arbitrary "Pseudo")
, tok "(in|as|reversed|recursive|not|and|or|is|if|else|import|with(?:(?:out)?\\s*context)?|scoped|ignore\\s+missing)\\b" (Arbitrary "Keyword")
, tok "(loop|block|super|forloop)\\b" (Arbitrary "Name" :. Arbitrary "Builtin")
, tok "[a-zA-Z][a-zA-Z0-9_-]*" (Arbitrary "Name" :. Arbitrary "Variable")
, tok "\\.[a-zA-Z0-9_]+" (Arbitrary "Name" :. Arbitrary "Variable")
, tok ":?\"(\\\\\\\\|\\\\\"|[^\"])*\"" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Double")
, tok ":?'(\\\\\\\\|\\\\'|[^'])*'" (Arbitrary "Literal" :. Arbitrary "String" :. Arbitrary "Single")
, tok "([{}()\\[\\]+\\-*/,:\126]|[><=]=?)" (Arbitrary "Operator")
, tok "[0-9](\\.[0-9]*)?(eE[+-][0-9])?[flFLdD]?|0[xX][0-9a-fA-F]+[Ll]?" (Arbitrary "Literal" :. Arbitrary "Number")
]
root' :: TokenMatcher
root' =
[ tok "[^{]+" (Arbitrary "Other")
, tokNext "\\{\\{" (Arbitrary "Comment" :. Arbitrary "Preproc") (GoTo var')
, tok "\\{[*#].*?[*#]\\}" (Arbitrary "Comment")
, tok "(\\{%)(-?\\s*)(comment)(\\s*-?)(%\\})(.*?)(\\{%)(-?\\s*)(endcomment)(\\s*-?)(%\\})" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Comment"), (Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc")])
, tok "(\\{%)(-?\\s*)(raw)(\\s*-?)(%\\})(.*?)(\\{%)(-?\\s*)(endraw)(\\s*-?)(%\\})" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc")])
, tokNext "(\\{%)(-?\\s*)(filter)(\\s+)([a-zA-Z_][a-zA-Z0-9_]*)" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Name" :. Arbitrary "Function")]) (GoTo block')
, tokNext "(\\{%)(-?\\s*)([a-zA-Z_][a-zA-Z0-9_]*)" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Arbitrary "Text"), (Arbitrary "Keyword")]) (GoTo block')
, tok "\\{" (Arbitrary "Other")
]
block' :: TokenMatcher
block' =
[ tok "\\s+" (Arbitrary "Text")
, tokNext "(-?)(%\\})" (ByGroups [(Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc")]) Pop
, anyOf varnames'
, tok "." (Arbitrary "Punctuation")
]