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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\65\115\121\109\112\116\111\116\101"
    , lAliases = ["\97\115\121", "\97\115\121\109\112\116\111\116\101"]
    , lExtensions = ["\46\97\115\121"]
    , lMimetypes = ["\116\101\120\116\47\120\45\97\115\121\109\112\116\111\116\101"]
    , lStart = root'
    , lFlags = [multiline]
    }

function' :: TokenMatcher
function' =
    [ anyOf whitespace'
    , anyOf statements'
    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    ]

statements' :: TokenMatcher
statements' =
    [ 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")
    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\48\120\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" :. Arbitrary "\72\101\120")
    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\91\40\41\92\91\92\93\44\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\92\98\40\99\97\115\101\41\40\46\43\63\41\40\58\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Using lexer), (Arbitrary "\84\101\120\116")])
    , tok "\40\97\110\100\124\99\111\110\116\114\111\108\115\124\116\101\110\115\105\111\110\124\97\116\108\101\97\115\116\124\99\117\114\108\124\105\102\124\101\108\115\101\124\119\104\105\108\101\124\102\111\114\124\100\111\124\114\101\116\117\114\110\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\115\116\114\117\99\116\124\116\121\112\101\100\101\102\124\110\101\119\124\97\99\99\101\115\115\124\105\109\112\111\114\116\124\117\110\114\97\118\101\108\124\102\114\111\109\124\105\110\99\108\117\100\101\124\113\117\111\116\101\124\115\116\97\116\105\99\124\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\114\101\115\116\114\105\99\116\101\100\124\116\104\105\115\124\101\120\112\108\105\99\105\116\124\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\99\121\99\108\101\124\110\101\119\102\114\97\109\101\124\111\112\101\114\97\116\111\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\66\114\97\105\100\124\70\105\116\82\101\115\117\108\116\124\76\97\98\101\108\124\76\101\103\101\110\100\124\84\114\101\101\78\111\100\101\124\97\98\115\99\105\115\115\97\124\97\114\99\124\97\114\114\111\119\104\101\97\100\124\98\105\110\97\114\121\116\114\101\101\124\98\105\110\97\114\121\116\114\101\101\78\111\100\101\124\98\108\111\99\107\124\98\111\111\108\124\98\111\111\108\51\124\98\111\117\110\100\115\124\98\113\101\124\99\105\114\99\108\101\124\99\111\110\105\99\124\99\111\111\114\100\124\99\111\111\114\100\115\121\115\124\99\112\117\116\105\109\101\124\101\108\108\105\112\115\101\124\102\105\108\101\124\102\105\108\108\116\121\112\101\124\102\114\97\109\101\124\103\114\105\100\51\124\103\117\105\100\101\124\104\111\114\110\101\114\124\104\115\118\124\104\121\112\101\114\98\111\108\97\124\105\110\100\101\120\101\100\84\114\97\110\115\102\111\114\109\124\105\110\116\124\105\110\118\101\114\115\105\111\110\124\107\101\121\124\108\105\103\104\116\124\108\105\110\101\124\108\105\110\101\102\105\116\124\109\97\114\103\105\110\84\124\109\97\114\107\101\114\124\109\97\115\115\124\111\98\106\101\99\116\124\112\97\105\114\124\112\97\114\97\98\111\108\97\124\112\97\116\104\124\112\97\116\104\51\124\112\101\110\124\112\105\99\116\117\114\101\124\112\111\105\110\116\124\112\111\115\105\116\105\111\110\124\112\114\111\106\101\99\116\105\111\110\124\114\101\97\108\124\114\101\118\111\108\117\116\105\111\110\124\115\99\97\108\101\84\124\115\99\105\101\110\116\105\102\105\99\124\115\101\103\109\101\110\116\124\115\105\100\101\124\115\108\105\99\101\124\115\112\108\105\116\102\97\99\101\124\115\116\114\105\110\103\124\115\117\114\102\97\99\101\124\116\101\110\115\105\111\110\83\112\101\99\105\102\105\101\114\124\116\105\99\107\108\111\99\97\116\101\124\116\105\99\107\115\103\114\105\100\84\124\116\105\99\107\118\97\108\117\101\115\124\116\114\97\110\115\102\111\114\109\124\116\114\97\110\115\102\111\114\109\97\116\105\111\110\124\116\114\101\101\124\116\114\105\97\110\103\108\101\124\116\114\105\108\105\110\101\97\114\124\116\114\105\112\108\101\124\118\101\99\116\111\114\124\118\101\114\116\101\120\124\118\111\105\100\41\40\63\61\40\91\32\93\123\49\44\125\91\97\45\122\65\45\90\93\41\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
    , tok "\40\66\114\97\105\100\124\70\105\116\82\101\115\117\108\116\124\84\114\101\101\78\111\100\101\124\97\98\115\99\105\115\115\97\124\97\114\114\111\119\104\101\97\100\124\98\108\111\99\107\124\98\111\111\108\124\98\111\111\108\51\124\98\111\117\110\100\115\124\99\111\111\114\100\124\102\114\97\109\101\124\103\117\105\100\101\124\104\111\114\110\101\114\124\105\110\116\124\108\105\110\101\102\105\116\124\109\97\114\103\105\110\84\124\112\97\105\114\124\112\101\110\124\112\105\99\116\117\114\101\124\112\111\115\105\116\105\111\110\124\114\101\97\108\124\114\101\118\111\108\117\116\105\111\110\124\115\108\105\99\101\124\115\112\108\105\116\102\97\99\101\124\116\105\99\107\115\103\114\105\100\84\124\116\105\99\107\118\97\108\117\101\115\124\116\114\101\101\124\116\114\105\112\108\101\124\118\101\114\116\101\120\124\118\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\58\40\63\33\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
    , 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")
    ]

whitespace' :: TokenMatcher
whitespace' =
    [ tok "\92\110" (Arbitrary "\84\101\120\116")
    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116")
    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116")
    ]

statement' :: TokenMatcher
statement' =
    [ anyOf whitespace'
    , anyOf statements'
    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    ]

root' :: TokenMatcher
root' =
    [ anyOf whitespace'
    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\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\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\123\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo function')
    , tok "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\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\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\59\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo statement')
    ]

string' :: TokenMatcher
string' =
    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\63\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\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")
    , tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\91\94\92\92\39\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    ]