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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\66\111\111"
    , lAliases = ["\98\111\111"]
    , lExtensions = ["\46\98\111\111"]
    , lMimetypes = ["\116\101\120\116\47\120\45\98\111\111"]
    , lStart = root'
    , lFlags = [multiline]
    }

comment' :: TokenMatcher
comment' =
    [ 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\94\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    , tok "\91\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    ]

classname' :: TokenMatcher
classname' =
    [ tokNext "\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" :. Arbitrary "\67\108\97\115\115") Pop
    ]

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

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

funcname' :: TokenMatcher
funcname' =
    [ tokNext "\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" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
    ]