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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\66\97\115\104"
    , lAliases = ["\98\97\115\104", "\115\104", "\107\115\104"]
    , lExtensions = ["\46\115\104", "\46\107\115\104", "\46\98\97\115\104", "\46\101\98\117\105\108\100", "\46\101\99\108\97\115\115"]
    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\104", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\104\101\108\108\115\99\114\105\112\116"]
    , lStart = root'
    , lFlags = [multiline]
    }

curly' :: TokenMatcher
curly' =
    [ tokNext "\125" (Arbitrary "\75\101\121\119\111\114\100") Pop
    , tok "\58\45" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tok "\91\94\125\58\34\92\39\96\36\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , anyOf root'
    ]

backticks' :: TokenMatcher
backticks' =
    [ tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") Pop
    , anyOf root'
    ]

root' :: TokenMatcher
root' =
    [ anyOf basic'
    , tokNext "\92\36\92\40\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo math')
    , tokNext "\92\36\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paren')
    , tokNext "\92\36\123\35\63" (Arbitrary "\75\101\121\119\111\114\100") (GoTo curly')
    , tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") (GoTo backticks')
    , anyOf data'
    ]

basic' :: TokenMatcher
basic' =
    [ tok "\92\98\40\105\102\124\102\105\124\101\108\115\101\124\119\104\105\108\101\124\100\111\124\100\111\110\101\124\102\111\114\124\116\104\101\110\124\114\101\116\117\114\110\124\102\117\110\99\116\105\111\110\124\99\97\115\101\124\115\101\108\101\99\116\124\99\111\110\116\105\110\117\101\124\117\110\116\105\108\124\101\115\97\99\124\101\108\105\102\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\92\98\40\97\108\105\97\115\124\98\103\124\98\105\110\100\124\98\114\101\97\107\124\98\117\105\108\116\105\110\124\99\97\108\108\101\114\124\99\100\124\99\111\109\109\97\110\100\124\99\111\109\112\103\101\110\124\99\111\109\112\108\101\116\101\124\100\101\99\108\97\114\101\124\100\105\114\115\124\100\105\115\111\119\110\124\101\99\104\111\124\101\110\97\98\108\101\124\101\118\97\108\124\101\120\101\99\124\101\120\105\116\124\101\120\112\111\114\116\124\102\97\108\115\101\124\102\99\124\102\103\124\103\101\116\111\112\116\115\124\104\97\115\104\124\104\101\108\112\124\104\105\115\116\111\114\121\124\106\111\98\115\124\107\105\108\108\124\108\101\116\124\108\111\99\97\108\124\108\111\103\111\117\116\124\112\111\112\100\124\112\114\105\110\116\102\124\112\117\115\104\100\124\112\119\100\124\114\101\97\100\124\114\101\97\100\111\110\108\121\124\115\101\116\124\115\104\105\102\116\124\115\104\111\112\116\124\115\111\117\114\99\101\124\115\117\115\112\101\110\100\124\116\101\115\116\124\116\105\109\101\124\116\105\109\101\115\124\116\114\97\112\124\116\114\117\101\124\116\121\112\101\124\116\121\112\101\115\101\116\124\117\108\105\109\105\116\124\117\109\97\115\107\124\117\110\97\108\105\97\115\124\117\110\115\101\116\124\119\97\105\116\41\92\115\42\92\98\40\63\33\92\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , tok "\35\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
    , tok "\92\92\91\92\119\92\87\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
    , tok "\40\92\98\92\119\43\41\40\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
    , tok "\91\92\91\92\93\123\125\40\41\61\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\60\60\92\115\42\40\92\39\63\41\92\92\63\40\92\119\43\41\91\92\119\92\87\93\43\63\92\50" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\38\38\124\92\124\92\124" (Arbitrary "\79\112\101\114\97\116\111\114")
    ]

paren' :: TokenMatcher
paren' =
    [ tokNext "\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
    , anyOf root'
    ]

data' :: TokenMatcher
data' =
    [ tok "\40\63\115\41\92\36\63\34\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
    , tok "\40\63\115\41\92\36\63\39\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\39\92\92\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\59" (Arbitrary "\84\101\120\116")
    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\91\94\61\92\115\92\110\92\91\92\93\123\125\40\41\36\34\92\39\96\92\92\60\93\43" (Arbitrary "\84\101\120\116")
    , tok "\92\100\43\40\63\61\32\124\92\90\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\92\36\35\63\40\92\119\43\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tok "\60" (Arbitrary "\84\101\120\116")
    ]

math' :: TokenMatcher
math' =
    [ tokNext "\92\41\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
    , tok "\91\45\43\42\47\37\94\124\38\93\124\92\42\92\42\124\92\124\92\124" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , anyOf root'
    ]