highlighter-0.2: src/Text/Highlighter/Lexers/BBCode.hs
module Text.Highlighter.Lexers.BBCode (lexer) where
import Text.Regex.PCRE.Light
import Text.Highlighter.Types
lexer :: Lexer
lexer = Lexer
{ lName = "BBCode"
, lAliases = ["bbcode"]
, lExtensions = []
, lMimetypes = ["text/x-bbcode"]
, lStart = root'
, lFlags = [multiline]
}
tag' :: TokenMatcher
tag' =
[ tok "\\s+" (Arbitrary "Text")
, tok "(\\w+)(=)(\"?[^\\s\"\\]]+\"?)" (ByGroups [(Arbitrary "Name" :. Arbitrary "Attribute"), (Arbitrary "Operator"), (Arbitrary "Literal" :. Arbitrary "String")])
, tok "(=)(\"?[^\\s\"\\]]+\"?)" (ByGroups [(Arbitrary "Operator"), (Arbitrary "Literal" :. Arbitrary "String")])
, tokNext "\\]" (Arbitrary "Keyword") Pop
]
root' :: TokenMatcher
root' =
[ tok "[^[]+" (Arbitrary "Text")
, tokNext "\\[/?\\w+" (Arbitrary "Keyword") (GoTo tag')
, tok "\\[" (Arbitrary "Text")
]