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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\80\114\111\108\111\103"
    , lAliases = ["\112\114\111\108\111\103"]
    , lExtensions = ["\46\112\114\111\108\111\103", "\46\112\114\111", "\46\112\108"]
    , lMimetypes = ["\116\101\120\116\47\120\45\112\114\111\108\111\103"]
    , lStart = root'
    , lFlags = [utf8]
    }

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

root' :: TokenMatcher
root' =
    [ tok "\94\35\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nestedComment')
    , tok "\37\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
    , tok "\91\92\91\92\93\40\41\123\125\124\46\44\59\33\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\58\45\124\45\45\62" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
    , tok "\34\40\63\58\92\92\120\91\48\45\57\97\45\102\65\45\70\93\43\92\92\124\92\92\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\92\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\92\92\91\48\45\55\93\43\92\92\124\92\92\91\92\119\92\87\93\124\91\94\34\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 "\39\40\63\58\39\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
    , tok "\40\105\115\124\60\124\62\124\61\60\124\62\61\124\61\61\124\61\58\61\124\61\124\47\124\47\47\124\92\42\124\92\43\124\45\41\40\63\61\92\115\124\91\97\45\122\65\45\90\48\45\57\92\91\93\41" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\109\111\100\124\100\105\118\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\95" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\91\97\45\122\93\43\41\40\58\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
    , tok "\40\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42\41\40\92\115\42\41\40\58\45\124\45\45\62\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
    , tok "\40\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
    , tok "\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
    , tok "\91\35\38\42\43\92\45\46\47\58\60\61\62\63\64\92\92\94\126\161\45\191\8208\45\12351\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
    , tok "\91\65\45\90\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
    , tok "\92\115\43\124\91\8192\45\8207\65520\45\65534\65519\93" (Arbitrary "\84\101\120\116")
    ]