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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\82\97\103\101\108"
    , lAliases = ["\114\97\103\101\108"]
    , lExtensions = []
    , lMimetypes = []
    , lStart = root'
    , lFlags = [multiline]
    }

host' :: TokenMatcher
host' =
    [ tok "\40\91\94\123\125\92\39\34\47\35\93\43\124\91\94\92\92\93\91\92\92\93\91\123\125\93\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\47\47\46\42\36\92\110\63\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\92\35\46\42\36\92\110\63\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\124\47\41\43" (Arbitrary "\79\116\104\101\114")
    , 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
    ]

literals' :: TokenMatcher
literals' =
    [ 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")
    , 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")
    , tok "\92\91\40\92\92\92\92\124\92\92\92\93\124\91\94\92\93\93\41\42\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
    ]

whitespace' :: TokenMatcher
whitespace' =
    [ tok "\92\115\43" (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")
    ]

keywords' :: TokenMatcher
keywords' =
    [ tok "\40\97\99\99\101\115\115\124\97\99\116\105\111\110\124\97\108\112\104\116\121\112\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\103\101\116\107\101\121\124\119\114\105\116\101\124\109\97\99\104\105\110\101\124\105\110\99\108\117\100\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\97\110\121\124\97\115\99\105\105\124\101\120\116\101\110\100\124\97\108\112\104\97\124\100\105\103\105\116\124\97\108\110\117\109\124\108\111\119\101\114\124\117\112\112\101\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\120\100\105\103\105\116\124\99\110\116\114\108\124\103\114\97\112\104\124\112\114\105\110\116\124\112\117\110\99\116\124\115\112\97\99\101\124\122\108\101\110\124\101\109\112\116\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    ]

operators' :: TokenMatcher
operators' =
    [ tok "\44" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\124\124\38\124\45\124\45\45" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\46\124\60\58\124\58\62\124\58\62\62" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\58" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\45\62" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\47\124\101\111\102\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\33\124\101\114\114\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\92\94\124\108\101\114\114\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\126\124\116\111\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\92\42\124\102\114\111\109\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\62\124\64\124\92\36\124\37" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\42\124\92\63\124\92\43\124\123\91\48\45\57\93\42\44\91\48\45\57\93\42\125" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\33\124\92\94" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\40\124\92\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    ]

identifiers' :: TokenMatcher
identifiers' =
    [ tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\95\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    ]

root' :: TokenMatcher
root' =
    [ anyOf literals'
    , anyOf whitespace'
    , anyOf comments'
    , anyOf keywords'
    , anyOf numbers'
    , anyOf identifiers'
    , anyOf operators'
    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo host')
    , tok "\61" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    ]

comments' :: TokenMatcher
comments' =
    [ tok "\92\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
    ]

numbers' :: TokenMatcher
numbers' =
    [ tok "\48\120\91\48\45\57\65\45\70\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
    , tok "\91\43\45\93\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    ]