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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\77\111\105\110\77\111\105\110\47\84\114\97\99\32\87\105\107\105\32\109\97\114\107\117\112"
    , lAliases = ["\116\114\97\99\45\119\105\107\105", "\109\111\105\110"]
    , lExtensions = []
    , lMimetypes = ["\116\101\120\116\47\120\45\116\114\97\99\45\119\105\107\105"]
    , lStart = root'
    , lFlags = [caseless, multiline]
    }

root' :: TokenMatcher
root' =
    [ tok "\94\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
    , tok "\40\33\41\40\92\83\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
    , tok "\94\40\61\43\41\40\91\94\61\93\43\41\40\61\43\41\40\92\115\42\35\46\43\41\63\36" (ByGroups [(Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103"), (Using lexer), (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
    , tokNext "\40\123\123\123\41\40\92\110\35\33\46\43\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")]) (GoTo codeblock')
    , tok "\40\92\39\92\39\92\39\63\124\92\124\92\124\124\96\124\95\95\124\126\126\124\92\94\124\44\44\124\58\58\41" (Arbitrary "\67\111\109\109\101\110\116")
    , tok "\94\40\32\43\41\40\91\46\42\45\93\41\40\32\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")])
    , tok "\94\40\32\43\41\40\91\97\45\122\105\118\120\93\123\49\44\53\125\92\46\41\40\32\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")])
    , tok "\92\91\92\91\92\119\43\46\42\63\92\93\92\93" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\40\92\91\91\94\92\115\92\93\93\43\41\40\92\115\43\91\94\92\93\93\43\63\41\63\40\92\93\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
    , tok "\94\45\45\45\45\43\36" (Arbitrary "\75\101\121\119\111\114\100")
    , tok "\91\94\92\110\92\39\92\91\123\33\95\126\94\44\124\93\43" (Arbitrary "\84\101\120\116")
    , tok "\92\110" (Arbitrary "\84\101\120\116")
    , tok "\46" (Arbitrary "\84\101\120\116")
    ]

codeblock' :: TokenMatcher
codeblock' =
    [ tokNext "\125\125\125" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") Pop
    , tokNext "\123\123\123" (Arbitrary "\84\101\120\116") Push
    , tok "\91\94\123\125\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    , tok "\46" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
    ]