module Text.Highlighter.Lexers.Smarty (lexer) where
import qualified Text.Highlighter.Lexers.Php as Php
import Text.Regex.PCRE.Light
import Text.Highlighter.Types

lexer :: Lexer
lexer = Lexer
    { lName = "\80\104\112"
    , lAliases = ["\115\109\97\114\116\121"]
    , lExtensions = ["\46\116\112\108"]
    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\109\97\114\116\121"]
    , lStart = root'
    , lFlags = [multiline, dotall]
    }

root' :: TokenMatcher
root' =
    [ tok "\91\94\123\93\43" (Arbitrary "\79\116\104\101\114")
    , tok "\40\92\123\41\40\92\42\46\42\63\92\42\41\40\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\67\111\109\109\101\110\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
    , tok "\40\92\123\112\104\112\92\125\41\40\46\42\63\41\40\92\123\47\112\104\112\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Php.lexer), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
    , tokNext "\40\92\123\41\40\47\63\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")]) (GoTo smarty')
    , tokNext "\92\123" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo smarty')
    ]

smarty' :: TokenMatcher
smarty' =
    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tokNext "\92\125" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
    , tok "\35\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\35" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tok "\92\36\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\92\46\91\97\45\122\65\45\90\48\45\57\95\93\43\41\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tok "\91\126\33\37\94\38\42\40\41\43\61\124\92\91\92\93\58\59\44\46\60\62\47\63\123\125\64\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\8" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
    , tok "\91\48\45\57\93\40\92\46\91\48\45\57\93\42\41\63\40\101\69\91\43\45\93\91\48\45\57\93\41\63\91\102\108\70\76\100\68\93\63\124\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
    ]