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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\67\111\109\109\111\110\32\76\105\115\112"
    , lAliases = ["\99\111\109\109\111\110\45\108\105\115\112", "\99\108"]
    , lExtensions = ["\46\99\108", "\46\108\105\115\112", "\46\101\108"]
    , lMimetypes = ["\116\101\120\116\47\120\45\99\111\109\109\111\110\45\108\105\115\112"]
    , lStart = root'
    , lFlags = [caseless, multiline]
    }

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

body' :: TokenMatcher
body' =
    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\59\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tokNext "\35\92\124" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComment')
    , tok "\35\92\100\42\89\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\112\101\99\105\97\108")
    , tok "\34\40\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")
    , tok "\58\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
    , tok "\39\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
    , tok "\39" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\96" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\91\45\43\93\63\92\100\43\92\46\63\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
    , tok "\91\45\43\93\63\92\100\43\47\92\100\43\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\91\45\43\93\63\40\92\100\42\92\46\92\100\43\40\91\100\101\102\108\115\93\91\45\43\93\63\92\100\43\41\63\124\92\100\43\40\92\46\92\100\42\41\63\91\100\101\102\108\115\93\91\45\43\93\63\92\100\43\41\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
    , tok "\35\92\92\46\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
    , tok "\35\92\92\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
    , tokNext "\35\92\40" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo body')
    , tok "\35\92\100\42\92\42\91\48\49\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114")
    , tok "\35\58\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
    , tok "\35\91\46\44\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\35\92\39" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
    , tok "\35\91\98\66\93\91\43\45\93\63\91\48\49\93\43\40\47\91\48\49\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\35\91\111\79\93\91\43\45\93\63\91\48\45\55\93\43\40\47\91\48\45\55\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
    , tok "\35\91\120\88\93\91\43\45\93\63\91\48\45\57\97\45\102\65\45\70\93\43\40\47\91\48\45\57\97\45\102\65\45\70\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
    , tok "\35\92\100\43\91\114\82\93\91\43\45\93\63\91\48\45\57\97\45\122\65\45\90\93\43\40\47\91\48\45\57\97\45\122\65\45\90\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tokNext "\40\35\91\99\67\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
    , tokNext "\40\35\92\100\43\91\97\65\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
    , tokNext "\40\35\91\115\83\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
    , tok "\35\91\112\80\93\63\34\40\92\92\46\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114")
    , tok "\35\92\100\43\61" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\35\92\100\43\35" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tokNext "\35\43\110\105\108\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41\92\115\42\92\40" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo commentedForm')
    , tok "\35\91\43\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\44\64\124\44\124\92\46\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\116\124\110\105\108\41\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
    , tok "\92\42\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41\92\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
    , tok "\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo body')
    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    ]

root' :: TokenMatcher
root' =
    [ tokNext "" (Arbitrary "\84\101\120\116") (GoTo body')
    ]

commentedForm' :: TokenMatcher
commentedForm' =
    [ tokNext "\92\40" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
    , tokNext "\92\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
    , tok "\91\94\40\41\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    ]