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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\73\111"
    , lAliases = ["\105\111"]
    , lExtensions = ["\46\105\111"]
    , lMimetypes = ["\116\101\120\116\47\120\45\105\111\115\114\99"]
    , lStart = root'
    , lFlags = [multiline]
    }

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

root' :: TokenMatcher
root' =
    [ tok "\92\110" (Arbitrary "\84\101\120\116")
    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
    , tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\35\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nestedcomment')
    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\58\58\61\124\58\61\124\61\124\92\40\124\92\41\124\59\124\44\124\92\42\124\45\124\92\43\124\62\124\60\124\64\124\33\124\47\124\92\124\124\92\94\124\92\46\124\37\124\38\124\92\91\124\92\93\124\92\123\124\92\125" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\99\108\111\110\101\124\100\111\124\100\111\70\105\108\101\124\100\111\83\116\114\105\110\103\124\109\101\116\104\111\100\124\102\111\114\124\105\102\124\101\108\115\101\124\101\108\115\101\105\102\124\116\104\101\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\110\105\108\124\102\97\108\115\101\124\116\114\117\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
    , tok "\40\79\98\106\101\99\116\124\108\105\115\116\124\76\105\115\116\124\77\97\112\124\97\114\103\115\124\83\101\113\117\101\110\99\101\124\67\111\114\111\117\116\105\110\101\124\70\105\108\101\41\8" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
    , 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\63\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\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 "\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")
    ]