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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\70\101\108\105\120"
    , lAliases = ["\102\101\108\105\120", "\102\108\120"]
    , lExtensions = ["\46\102\108\120", "\46\102\108\120\104"]
    , lMimetypes = ["\116\101\120\116\47\120\45\102\101\108\105\120"]
    , lStart = root'
    , lFlags = [multiline]
    }

comment' :: TokenMatcher
comment' =
    [ tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment2')
    ]

modulename2' :: TokenMatcher
modulename2' =
    [ anyOf whitespace'
    , tokNext "\40\91\97\45\122\65\45\90\95\93\92\119\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") (PopNum 2)
    ]

modulename' :: TokenMatcher
modulename' =
    [ anyOf whitespace'
    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [(GoTo modulename2'), (GoTo tvarlist')])
    , tokNext "" (Arbitrary "\69\114\114\111\114") (GoTo modulename2')
    ]

if0' :: TokenMatcher
if0' =
    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116") Push
    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116") Pop
    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
    ]

whitespace' :: TokenMatcher
whitespace' =
    [ tok "\92\110" (Arbitrary "\84\101\120\116")
    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , anyOf comment'
    , tokNext "\35\92\115\42\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo macro')
    ]

dqs' :: TokenMatcher
dqs' =
    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
    , anyOf strings'
    ]

sqs' :: TokenMatcher
sqs' =
    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
    , anyOf strings'
    ]

macro' :: TokenMatcher
macro' =
    [ anyOf comment'
    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\60\91\94\62\93\42\63\62\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\34\91\94\34\93\42\63\34\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\39\91\94\39\93\42\63\39\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
    , tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
    ]

operators' :: TokenMatcher
operators' =
    [ tok "\40\97\110\100\124\110\111\116\124\105\110\124\105\115\124\105\115\105\110\124\111\114\124\120\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\92\124\92\124\124\38\38\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\36\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    ]

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

comment2' :: TokenMatcher
comment2' =
    [ tok "\91\94\92\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    , tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
    , tokNext "\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
    , tok "\91\92\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    ]

classname' :: TokenMatcher
classname' =
    [ anyOf whitespace'
    , tokNext "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
    , tokNext "\40\63\61\92\123\41" (Arbitrary "\84\101\120\116") Pop
    ]

stringescape' :: TokenMatcher
stringescape' =
    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\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")
    ]

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

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

funcname' :: TokenMatcher
funcname' =
    [ anyOf whitespace'
    , tokNext "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
    , tokNext "\40\63\61\92\40\41" (Arbitrary "\84\101\120\116") Pop
    ]

root' :: TokenMatcher
root' =
    [ anyOf whitespace'
    , tokNext "\40\97\120\105\111\109\124\99\116\111\114\124\102\117\110\124\103\101\110\124\112\114\111\99\124\114\101\100\117\99\101\124\117\110\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo funcname')
    , tokNext "\40\99\108\97\115\115\124\99\99\108\97\115\115\124\99\115\116\114\117\99\116\124\111\98\106\124\115\116\114\117\99\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo classname')
    , tokNext "\40\105\110\115\116\97\110\99\101\124\109\111\100\117\108\101\124\116\121\112\101\99\108\97\115\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo modulename')
    , tok "\40\95\124\95\100\101\114\101\102\124\97\108\108\124\97\115\124\97\115\115\101\114\116\124\97\116\116\101\109\112\116\124\99\97\108\108\124\99\97\108\108\98\97\99\107\124\99\97\115\101\124\99\97\115\101\110\111\124\99\99\108\97\115\115\124\99\111\100\101\124\99\111\109\112\111\117\110\100\124\99\116\121\112\101\115\124\100\111\124\100\111\110\101\124\100\111\119\110\116\111\124\101\108\105\102\124\101\108\115\101\124\101\110\100\97\116\116\101\109\112\116\124\101\110\100\99\97\115\101\124\101\110\100\105\102\124\101\110\100\109\97\116\99\104\124\101\110\117\109\124\101\120\99\101\112\116\124\101\120\99\101\112\116\105\111\110\115\124\101\120\112\101\99\116\124\102\105\110\97\108\108\121\124\102\111\114\124\102\111\114\97\108\108\124\102\111\114\103\101\116\124\102\111\114\107\124\102\117\110\99\116\111\114\124\103\111\116\111\124\105\100\101\110\116\124\105\102\124\105\110\99\111\109\112\108\101\116\101\124\105\110\104\101\114\105\116\124\105\110\115\116\97\110\99\101\124\105\110\116\101\114\102\97\99\101\124\106\117\109\112\124\108\97\109\98\100\97\124\108\111\111\112\124\109\97\116\99\104\124\109\111\100\117\108\101\124\110\97\109\101\115\112\97\99\101\124\110\101\119\124\110\111\101\120\112\97\110\100\124\110\111\110\116\101\114\109\124\111\98\106\124\111\102\124\111\112\101\110\124\112\97\114\115\101\124\114\97\105\115\101\124\114\101\103\101\120\112\124\114\101\103\108\101\120\124\114\101\103\109\97\116\99\104\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\116\104\101\124\116\104\101\110\124\116\111\124\116\121\112\101\124\116\121\112\101\99\97\115\101\124\116\121\112\101\100\101\102\124\116\121\112\101\109\97\116\99\104\124\116\121\112\101\111\102\124\117\112\116\111\124\119\104\101\110\124\119\104\105\108\115\116\124\119\105\116\104\124\121\105\101\108\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\95\103\99\95\112\111\105\110\116\101\114\124\95\103\99\95\116\121\112\101\124\98\111\100\121\124\99\111\109\109\101\110\116\124\99\111\110\115\116\124\101\120\112\111\114\116\124\104\101\97\100\101\114\124\105\110\108\105\110\101\124\108\118\97\108\124\109\97\99\114\111\124\110\111\105\110\108\105\110\101\124\110\111\114\101\116\117\114\110\124\112\97\99\107\97\103\101\124\112\114\105\118\97\116\101\124\112\111\100\124\112\114\111\112\101\114\116\121\124\112\117\98\108\105\99\124\112\117\98\108\105\115\104\124\114\101\113\117\105\114\101\115\124\116\111\100\111\124\118\105\114\116\117\97\108\124\117\115\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
    , tok "\40\100\101\102\124\108\101\116\124\114\101\102\124\118\97\108\124\118\97\114\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\117\110\105\116\124\118\111\105\100\124\97\110\121\124\98\111\111\108\124\98\121\116\101\124\111\102\102\115\101\116\124\97\100\100\114\101\115\115\124\99\97\100\100\114\101\115\115\124\99\118\97\100\100\114\101\115\115\124\118\97\100\100\114\101\115\115\124\116\105\110\121\124\115\104\111\114\116\124\105\110\116\124\108\111\110\103\124\118\108\111\110\103\124\117\116\105\110\121\124\117\115\104\111\114\116\124\118\115\104\111\114\116\124\117\105\110\116\124\117\108\111\110\103\124\117\118\108\111\110\103\124\105\110\116\56\124\105\110\116\49\54\124\105\110\116\51\50\124\105\110\116\54\52\124\117\105\110\116\56\124\117\105\110\116\49\54\124\117\105\110\116\51\50\124\117\105\110\116\54\52\124\102\108\111\97\116\124\100\111\117\98\108\101\124\108\100\111\117\98\108\101\124\99\111\109\112\108\101\120\124\100\99\111\109\112\108\101\120\124\108\99\111\109\112\108\101\120\124\105\109\97\103\105\110\97\114\121\124\100\105\109\97\103\105\110\97\114\121\124\108\105\109\97\103\105\110\97\114\121\124\99\104\97\114\124\119\99\104\97\114\124\117\99\104\97\114\124\99\104\97\114\112\124\99\104\97\114\99\112\124\117\99\104\97\114\112\124\117\99\104\97\114\99\112\124\115\116\114\105\110\103\124\119\115\116\114\105\110\103\124\117\115\116\114\105\110\103\124\99\111\110\116\124\97\114\114\97\121\124\118\97\114\114\97\121\124\108\105\115\116\124\108\118\97\108\117\101\124\111\112\116\124\115\108\105\99\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
    , tok "\40\102\97\108\115\101\124\116\114\117\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
    , anyOf operators'
    , tok "\48\91\120\88\93\40\91\48\45\57\97\45\102\65\45\70\95\93\42\92\46\91\48\45\57\97\45\102\65\45\70\95\93\43\124\91\48\45\57\97\45\102\65\45\70\95\93\43\41\91\112\80\93\91\43\92\45\93\63\91\48\45\57\95\93\43\91\108\76\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\91\48\45\57\95\93\43\40\92\46\91\48\45\57\95\93\43\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\124\92\46\91\48\45\57\95\93\42\124\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\91\108\76\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\92\46\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\63\91\108\76\102\70\100\68\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\91\66\98\93\91\48\49\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\48\91\48\45\55\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
    , tok "\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
    , tok "\91\92\91\92\93\123\125\58\40\41\44\59\63\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\91\97\45\122\65\45\90\95\93\92\119\42\58\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
    , tok "\40\95\115\118\99\124\119\104\105\108\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tok "\40\114\111\111\116\124\115\101\108\102\124\116\104\105\115\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
    ]

strings' :: TokenMatcher
strings' =
    [ tok "\37\40\92\40\91\97\45\122\65\45\90\48\45\57\93\43\92\41\41\63\91\45\35\48\32\43\93\42\40\91\48\45\57\93\43\124\91\42\93\41\63\40\92\46\40\91\48\45\57\93\43\124\91\42\93\41\41\63\91\104\108\76\93\63\91\100\105\111\117\120\88\101\69\102\70\103\71\99\114\115\37\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
    , tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    ]

tvarlist' :: TokenMatcher
tvarlist' =
    [ anyOf whitespace'
    , anyOf operators'
    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
    , tokNext "\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\40\119\105\116\104\124\119\104\101\114\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
    ]