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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\76\117\97"
    , lAliases = ["\108\117\97"]
    , lExtensions = ["\46\108\117\97"]
    , lMimetypes = ["\116\101\120\116\47\120\45\108\117\97", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\108\117\97"]
    , lStart = root'
    , lFlags = [multiline]
    }

classname' :: TokenMatcher
classname' =
    [ tokNext "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
    ]

stringescape' :: TokenMatcher
stringescape' =
    [ tok "\92\92\40\91\97\98\102\110\114\116\118\92\92\34\39\93\124\92\100\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
    ]

base' :: TokenMatcher
base' =
    [ tok "\40\63\115\41\45\45\92\91\40\61\42\41\92\91\46\42\63\92\93\92\49\92\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    , tok "\45\45\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\40\63\105\41\40\92\100\42\92\46\92\100\43\124\92\100\43\92\46\92\100\42\41\40\101\91\43\45\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\40\63\105\41\92\100\43\101\91\43\45\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\40\63\105\41\48\120\91\48\45\57\97\45\102\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    , tok "\92\110" (Arbitrary "\84\101\120\116")
    , tok "\91\94\92\83\92\110\93" (Arbitrary "\84\101\120\116")
    , tok "\40\63\115\41\92\91\40\61\42\41\92\91\46\42\63\92\93\92\49\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    , tok "\91\92\91\92\93\92\123\92\125\92\40\92\41\92\46\44\58\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\40\61\61\124\126\61\124\60\61\124\62\61\124\92\46\92\46\124\92\46\92\46\92\46\124\91\61\43\92\45\42\47\37\94\60\62\35\93\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
    , tok "\40\98\114\101\97\107\124\100\111\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\100\124\102\111\114\124\105\102\124\105\110\124\114\101\112\101\97\116\124\114\101\116\117\114\110\124\116\104\101\110\124\117\110\116\105\108\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\108\111\99\97\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\105\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
    , tokNext "\40\102\117\110\99\116\105\111\110\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
    , tokNext "\40\99\108\97\115\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
    , tok "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\40\92\46\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\41\63" (Arbitrary "\78\97\109\101")
    , tok "\40\63\115\41\92\91\40\61\42\41\92\91\40\46\42\63\41\92\93\92\49\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101") (Combined [stringescape', sqs'])
    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (Combined [stringescape', dqs'])
    ]

string' :: TokenMatcher
string' =
    [ tok "\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    ]

dqs' :: TokenMatcher
dqs' =
    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    , anyOf string'
    ]

sqs' :: TokenMatcher
sqs' =
    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    , anyOf string'
    ]

root' :: TokenMatcher
root' =
    [ tok "\35\33\40\46\42\63\41\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo base')
    ]

funcname' :: TokenMatcher
funcname' =
    [ tokNext "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    ]