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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\83\109\97\108\108\116\97\108\107"
    , lAliases = ["\115\109\97\108\108\116\97\108\107", "\115\113\117\101\97\107"]
    , lExtensions = ["\46\115\116"]
    , lMimetypes = ["\116\101\120\116\47\120\45\115\109\97\108\108\116\97\108\107"]
    , lStart = root'
    , lFlags = [multiline]
    }

objects' :: TokenMatcher
objects' =
    [ tokNext "\92\91" (Arbitrary "\84\101\120\116") (GoTo blockvariables')
    , tokNext "\92\93" (Arbitrary "\84\101\120\116") (GoTo afterobject')
    , tokNext "\92\98\40\115\101\108\102\124\115\117\112\101\114\124\116\114\117\101\124\102\97\108\115\101\124\110\105\108\124\116\104\105\115\67\111\110\116\101\120\116\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111") (GoTo afterobject')
    , tokNext "\92\98\91\65\45\90\93\92\119\42\40\63\33\58\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") (GoTo afterobject')
    , tokNext "\92\98\91\97\45\122\93\92\119\42\40\63\33\58\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo afterobject')
    , tokNext "\35\40\34\91\94\34\93\42\34\124\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43\124\91\92\119\58\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo afterobject')
    , anyOf literals'
    ]

blockvariables' :: TokenMatcher
blockvariables' =
    [ anyOf whitespaces'
    , tok "\40\58\41\40\92\115\42\41\40\91\65\45\90\97\45\122\92\119\93\43\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
    , tokNext "\92\124" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
    , tokNext "" (Arbitrary "\84\101\120\116") Pop
    ]

_parenth_helper' :: TokenMatcher
_parenth_helper' =
    [ anyOf whitespaces'
    , tok "\40\92\100\43\114\41\63\45\63\92\100\43\40\92\46\92\100\43\41\63\40\101\45\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\91\45\43\42\47\92\92\126\60\62\61\124\38\35\33\63\44\64\37\92\119\43\58\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
    , tok "\92\39\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\92\36\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
    , tokNext "\35\42\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo inner_parenth')
    ]

afterobject' :: TokenMatcher
afterobject' =
    [ tokNext "\33\32\33\36" (Arbitrary "\75\101\121\119\111\114\100") Pop
    , anyOf whitespaces'
    , tokNext "\92\98\40\105\102\84\114\117\101\58\124\105\102\70\97\108\115\101\58\124\119\104\105\108\101\84\114\117\101\58\124\119\104\105\108\101\70\97\108\115\101\58\124\116\105\109\101\115\82\101\112\101\97\116\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") Pop
    , tok "\92\98\40\110\101\119\92\98\40\63\33\58\41\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tokNext "\92\58\61\124\92\95" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
    , tokNext "\92\98\91\97\45\122\65\45\90\93\43\92\119\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
    , tok "\92\98\91\97\45\122\65\45\90\93\43\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
    , tokNext "\92\119\43\58\63\124\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
    , tokNext "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\91\92\93\41\125\93" (Arbitrary "\84\101\120\116")
    , tokNext "\91\92\91\40\123\93" (Arbitrary "\84\101\120\116") Pop
    ]

literals' :: TokenMatcher
literals' =
    [ tokNext "\92\39\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo afterobject')
    , tokNext "\92\36\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114") (GoTo afterobject')
    , tokNext "\35\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo parenth')
    , tokNext "\92\41" (Arbitrary "\84\101\120\116") (GoTo afterobject')
    , tokNext "\40\92\100\43\114\41\63\45\63\92\100\43\40\92\46\92\100\43\41\63\40\101\45\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114") (GoTo afterobject')
    ]

methodDefinition' :: TokenMatcher
methodDefinition' =
    [ tok "\40\91\97\45\122\65\45\90\93\43\92\119\42\58\41\40\92\115\42\41\40\92\119\43\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
    , tok "\94\40\92\98\91\97\45\122\65\45\90\93\43\92\119\42\92\98\41\40\92\115\42\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")])
    , tok "\94\40\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43\41\40\92\115\42\41\40\92\119\43\41\40\92\115\42\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116")])
    ]

parenth' :: TokenMatcher
parenth' =
    [ tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (DoAll [(GoTo root'), (GoTo afterobject')])
    , anyOf _parenth_helper'
    ]

inner_parenth' :: TokenMatcher
inner_parenth' =
    [ tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") Pop
    , anyOf _parenth_helper'
    ]

whitespaces' :: TokenMatcher
whitespaces' =
    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\34\91\94\34\93\42\34" (Arbitrary "\67\111\109\109\101\110\116")
    ]

squeakFileout' :: TokenMatcher
squeakFileout' =
    [ tok "\94\34\91\94\34\93\42\34\33" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\94\39\91\94\39\93\42\39\33" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\94\40\33\41\40\92\119\43\41\40\32\99\111\109\109\101\110\116\83\116\97\109\112\58\32\41\40\46\42\63\41\40\32\112\114\105\111\114\58\32\46\42\63\33\92\110\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\94\40\33\41\40\92\119\43\40\63\58\32\99\108\97\115\115\41\63\41\40\32\109\101\116\104\111\100\115\70\111\114\58\32\41\40\92\39\91\94\92\39\93\42\92\39\41\40\46\42\63\33\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\94\40\92\119\43\41\40\32\115\117\98\99\108\97\115\115\58\32\41\40\35\92\119\43\41\40\92\115\43\105\110\115\116\97\110\99\101\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\92\115\43\99\108\97\115\115\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\92\115\43\112\111\111\108\68\105\99\116\105\111\110\97\114\105\101\115\58\32\41\40\46\42\63\41\40\92\115\43\99\97\116\101\103\111\114\121\58\32\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\94\40\92\119\43\40\63\58\32\99\108\97\115\115\41\63\41\40\92\115\43\105\110\115\116\97\110\99\101\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\40\33\92\110\41\40\92\93\46\42\41\40\33\32\33\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\33\32\33\36" (Arbitrary "\75\101\121\119\111\114\100")
    ]

root' :: TokenMatcher
root' =
    [ tok "\40\60\41\40\92\119\43\58\41\40\46\42\63\41\40\62\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\84\101\120\116")])
    , anyOf squeakFileout'
    , anyOf whitespaces'
    , anyOf methodDefinition'
    , tok "\40\92\124\41\40\91\92\119\92\115\93\42\41\40\92\124\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114")])
    , anyOf objects'
    , tok "\92\94\124\92\58\61\124\92\95" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\91\92\93\40\123\125\46\59\33\93" (Arbitrary "\84\101\120\116")
    ]