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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\68\97\114\99\115\32\80\97\116\99\104"
    , lAliases = ["\100\112\97\116\99\104"]
    , lExtensions = ["\46\100\112\97\116\99\104", "\46\100\97\114\99\115\112\97\116\99\104"]
    , lMimetypes = []
    , lStart = root'
    , lFlags = [multiline]
    }

comment' :: TokenMatcher
comment' =
    [ tok "\91\94\92\93\93\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
    , tokNext "\92\93" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
    ]

insert' :: TokenMatcher
insert' =
    [ anyOf specialText'
    , tok "\92\91" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")
    , tok "\91\94\92\110\92\91\93\42" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")
    ]

delete' :: TokenMatcher
delete' =
    [ anyOf specialText'
    , tok "\92\91" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100")
    , tok "\91\94\92\110\92\91\93\42" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100")
    ]

root' :: TokenMatcher
root' =
    [ tok "\60" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\62" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\123" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\125" (Arbitrary "\79\112\101\114\97\116\111\114")
    , tok "\40\92\91\41\40\40\63\58\84\65\71\32\41\63\41\40\46\42\41\40\92\110\41\40\46\42\41\40\92\42\92\42\41\40\92\100\43\41\40\92\115\63\41\40\92\93\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\68\97\116\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
    , tokNext "\40\92\91\41\40\40\63\58\84\65\71\32\41\63\41\40\46\42\41\40\92\110\41\40\46\42\41\40\92\42\92\42\41\40\92\100\43\41\40\92\115\63\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\68\97\116\101"), (Arbitrary "\84\101\120\116")]) (GoTo comment')
    , tok "\78\101\119\32\112\97\116\99\104\101\115\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
    , tok "\67\111\110\116\101\120\116\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
    , tok "\80\97\116\99\104\32\98\117\110\100\108\101\32\104\97\115\104\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
    , tok "\40\92\115\42\41\40\104\117\110\107\124\97\100\100\102\105\108\101\124\97\100\100\100\105\114\124\114\109\102\105\108\101\124\114\109\100\105\114\124\109\111\118\101\124\114\101\112\108\97\99\101\41\40\46\42\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
    , tokNext "\92\43" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100") (GoTo insert')
    , tokNext "\45" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100") (GoTo delete')
    , tok "\46\42\92\110" (Arbitrary "\84\101\120\116")
    ]

specialText' :: TokenMatcher
specialText' =
    [ tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
    , tok "\92\91\95\91\94\95\93\42\95\93" (Arbitrary "\79\112\101\114\97\116\111\114")
    ]