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

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

lexer :: Lexer
lexer = Lexer
    { lName = "\67\77\97\107\101"
    , lAliases = ["\99\109\97\107\101"]
    , lExtensions = ["\46\99\109\97\107\101"]
    , lMimetypes = ["\116\101\120\116\47\120\45\99\109\97\107\101"]
    , lStart = root'
    , lFlags = [multiline]
    }

keywords' :: TokenMatcher
keywords' =
    [ tok "\92\98\40\87\73\78\51\50\124\85\78\73\88\124\65\80\80\76\69\124\67\89\71\87\73\78\124\66\79\82\76\65\78\68\124\77\73\78\71\87\124\77\83\86\67\124\77\83\86\67\95\73\68\69\124\77\83\86\67\54\48\124\77\83\86\67\55\48\124\77\83\86\67\55\49\124\77\83\86\67\56\48\124\77\83\86\67\57\48\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
    ]

ws' :: TokenMatcher
ws' =
    [ tok "\91\32\92\116\93\43" (Arbitrary "\84\101\120\116")
    , tok "\35\46\43\92\110" (Arbitrary "\67\111\109\109\101\110\116")
    ]

args' :: TokenMatcher
args' =
    [ tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
    , tok "\40\92\36\123\41\40\46\43\63\41\40\125\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114")])
    , tok "\40\63\115\41\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
    , tok "\92\92\92\83\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\91\94\92\41\36\34\35\32\92\116\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
    , tok "\92\110" (Arbitrary "\84\101\120\116")
    , anyOf keywords'
    , anyOf ws'
    ]

root' :: TokenMatcher
root' =
    [ tokNext "\92\98\40\91\65\45\90\97\45\122\95\93\43\41\40\91\32\92\116\93\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo args')
    , anyOf keywords'
    , anyOf ws'
    ]

string' :: TokenMatcher
string' =
    [ 
    ]