module Text.Highlighter.Lexers.BBCode (lexer) where

import Text.Regex.PCRE.Light
import Text.Highlighter.Types

lexer :: Lexer
lexer = Lexer
    { lName = "\66\66\67\111\100\101"
    , lAliases = ["\98\98\99\111\100\101"]
    , lExtensions = []
    , lMimetypes = ["\116\101\120\116\47\120\45\98\98\99\111\100\101"]
    , lStart = root'
    , lFlags = [multiline]
    }

tag' :: TokenMatcher
tag' =
    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\40\92\119\43\41\40\61\41\40\34\63\91\94\92\115\34\92\93\93\43\34\63\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
    , tok "\40\61\41\40\34\63\91\94\92\115\34\92\93\93\43\34\63\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
    , tokNext "\92\93" (Arbitrary "\75\101\121\119\111\114\100") Pop
    ]

root' :: TokenMatcher
root' =
    [ tok "\91\94\91\93\43" (Arbitrary "\84\101\120\116")
    , tokNext "\92\91\47\63\92\119\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo tag')
    , tok "\92\91" (Arbitrary "\84\101\120\116")
    ]