highlighter-0.2: src/Text/Highlighter/Lexers/GenshiText.hs
module Text.Highlighter.Lexers.GenshiText (lexer) where
import qualified Text.Highlighter.Lexers.Python as Python
import qualified Text.Highlighter.Lexers.Python as Python
import qualified Text.Highlighter.Lexers.Python as Python
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "Genshi Text"
, lAliases = ["genshitext"]
, lExtensions = []
, lMimetypes = ["application/x-genshi-text", "text/x-genshi"]
, lStart = root'
, lFlags = [multiline]
}
variable' :: TokenMatcher
variable' =
[ tok "(?<!\\$)(\\$\\{)(.+?)(\\})" (ByGroups [(Arbitrary "Comment" :. Arbitrary "Preproc"), (Using Python.lexer), (Arbitrary "Comment" :. Arbitrary "Preproc")])
, tok "(?<!\\$)(\\$)([a-zA-Z_][a-zA-Z0-9_\\.]*)" (Arbitrary "Name" :. Arbitrary "Variable")
]
root' :: TokenMatcher
root' =
[ tok "[^#\\$\\s]+" (Arbitrary "Other")
, tok "^(\\s*)(##.*)$" (ByGroups [(Arbitrary "Text"), (Arbitrary "Comment")])
, tokNext "^(\\s*)(#)" (ByGroups [(Arbitrary "Text"), (Arbitrary "Comment" :. Arbitrary "Preproc")]) (GoTo directive')
, anyOf variable'
, tok "[#\\$\\s]" (Arbitrary "Other")
]
directive' :: TokenMatcher
directive' =
[ tokNext "\\n" (Arbitrary "Text") Pop
, tokNext "(?:def|for|if)\\s+.*" (Using Python.lexer) Pop
, tokNext "(choose|when|with)([^\\S\\n]+)(.*)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Using Python.lexer)]) Pop
, tokNext "(choose|otherwise)\\b" (Arbitrary "Keyword") Pop
, tokNext "(end\\w*)([^\\S\\n]*)(.*)" (ByGroups [(Arbitrary "Keyword"), (Arbitrary "Text"), (Arbitrary "Comment")]) Pop
]