tree-sitter-zanscript/grammar.js
2025-10-18 16:58:19 -05:00

1573 lines
26 KiB
JavaScript

/// <reference types="tree-sitter-cli/dsl" />
// @ts-check
module.exports = grammar({
name: 'zanscript',
extras: $ => [
/\s/,
$.comment,
],
word: $ => $.identifier,
rules: {
translation_unit: $ => repeat($._top_level_item),
_top_level_item: $ => choice(
$._directive,
$._command,
$._statement,
),
_directive: $ => choice(
$.define,
$.include,
),
define: $ => seq(
$.define_insensitive,
field('find', $.match),
$.match,
),
include: $ => seq(
$.include_insensitive,
$.identifier,
),
_command: $ => choice(
$.action,
$._control,
),
action: $ => seq(
$.action_insensitive,
field('name', $.identifier),
$.block,
$.complete_insensitive,
),
_control: $ => choice(
$.branch,
$.loop,
),
branch: $ => seq(
$.if_insensitive,
$.comparison,
$.block,
optional(
repeat(
seq(
$.elseif_insensitive,
$.comparison,
$.block,
),
),
),
optional(
seq(
$.else_insensitive,
$.block,
),
),
$.endif_insensitive,
),
loop: $ => seq(
$.while_insensitive,
$.comparison,
$.block,
$.endwhile_insensitive,
),
comparison: $ => seq(
$._argument,
choice(
'<',
'>',
'=',
),
$._argument,
),
block: $ => repeat1(
choice(
$._statement,
$._command,
),
),
_statement: $ => choice(
$._higher_order_function,
$.function,
$.assignment,
),
_higher_order_function: $ => choice(
$.detector,
$.invoke,
$.select,
),
detector: $ => seq(
$.detector_insensitive,
'(',
$.identifier,
',',
field('invoked_action', $.identifier),
')',
),
invoke: $ => seq(
$.invoke_insensitive,
'(',
field('invoked_action', $.identifier),
optional(
seq(
',',
$._argument,
),
),
')',
),
select: $ => seq(
$.select_insensitive,
'(',
field('first_action', $.identifier),
',',
field('second_action', $.identifier),
optional(
seq(
',',
$._argument,
),
),
')',
),
function: $ => seq(
field('name', $.identifier),
'(',
optional(
repeat(
seq(
$._argument,
',',
),
),
),
optional(
$._argument,
),
')',
),
_argument: $ => choice(
$.identifier,
$.number,
$.string,
$.variable,
),
assignment: $ => seq(
$.variable,
'=',
$._expression,
),
_expression: $ => seq(
$._argument,
optional(
repeat(
seq(
choice(
'+',
'-',
'*',
'/',
),
$._argument,
),
),
),
),
comment: $ => seq(
'#',
/.*/,
),
variable: $ => /@[a-zA-Z0-9_]+/,
match: $ => /[a-zA-Z0-9_.]+/,
identifier: $ => /[a-zA-Z_][a-zA-Z0-9_]*/,
number: $ => /\d+(\.\d+)?/,
string: $ => /['"].*['"]/,
builtin_command: $ => choice(
),
//builtin_function: $ => choice(
// "AUTOREFERENCE",
// "FEEDER",
// "LIGHTS",
// "LOAD",
// "LOG",
// "LOGAPPEND",
// "LOGCREATE",
// "LOGDATA",
// "LOGFIELD",
// "LOGRUN",
// "PANLIGHT",
// "PICTURE",
// "SET",
// "SETCOLOUR",
// "SETLIGHT",
//)
define_insensitive: $ => choice(
"define",
"definE",
"defiNe",
"defiNE",
"defIne",
"defInE",
"defINe",
"defINE",
"deFine",
"deFinE",
"deFiNe",
"deFiNE",
"deFIne",
"deFInE",
"deFINe",
"deFINE",
"dEfine",
"dEfinE",
"dEfiNe",
"dEfiNE",
"dEfIne",
"dEfInE",
"dEfINe",
"dEfINE",
"dEFine",
"dEFinE",
"dEFiNe",
"dEFiNE",
"dEFIne",
"dEFInE",
"dEFINe",
"dEFINE",
"Define",
"DefinE",
"DefiNe",
"DefiNE",
"DefIne",
"DefInE",
"DefINe",
"DefINE",
"DeFine",
"DeFinE",
"DeFiNe",
"DeFiNE",
"DeFIne",
"DeFInE",
"DeFINe",
"DeFINE",
"DEfine",
"DEfinE",
"DEfiNe",
"DEfiNE",
"DEfIne",
"DEfInE",
"DEfINe",
"DEfINE",
"DEFine",
"DEFinE",
"DEFiNe",
"DEFiNE",
"DEFIne",
"DEFInE",
"DEFINe",
"DEFINE",
),
include_insensitive: $ => choice(
"include",
"includE",
"incluDe",
"incluDE",
"inclUde",
"inclUdE",
"inclUDe",
"inclUDE",
"incLude",
"incLudE",
"incLuDe",
"incLuDE",
"incLUde",
"incLUdE",
"incLUDe",
"incLUDE",
"inClude",
"inCludE",
"inCluDe",
"inCluDE",
"inClUde",
"inClUdE",
"inClUDe",
"inClUDE",
"inCLude",
"inCLudE",
"inCLuDe",
"inCLuDE",
"inCLUde",
"inCLUdE",
"inCLUDe",
"inCLUDE",
"iNclude",
"iNcludE",
"iNcluDe",
"iNcluDE",
"iNclUde",
"iNclUdE",
"iNclUDe",
"iNclUDE",
"iNcLude",
"iNcLudE",
"iNcLuDe",
"iNcLuDE",
"iNcLUde",
"iNcLUdE",
"iNcLUDe",
"iNcLUDE",
"iNClude",
"iNCludE",
"iNCluDe",
"iNCluDE",
"iNClUde",
"iNClUdE",
"iNClUDe",
"iNClUDE",
"iNCLude",
"iNCLudE",
"iNCLuDe",
"iNCLuDE",
"iNCLUde",
"iNCLUdE",
"iNCLUDe",
"iNCLUDE",
"Include",
"IncludE",
"IncluDe",
"IncluDE",
"InclUde",
"InclUdE",
"InclUDe",
"InclUDE",
"IncLude",
"IncLudE",
"IncLuDe",
"IncLuDE",
"IncLUde",
"IncLUdE",
"IncLUDe",
"IncLUDE",
"InClude",
"InCludE",
"InCluDe",
"InCluDE",
"InClUde",
"InClUdE",
"InClUDe",
"InClUDE",
"InCLude",
"InCLudE",
"InCLuDe",
"InCLuDE",
"InCLUde",
"InCLUdE",
"InCLUDe",
"InCLUDE",
"INclude",
"INcludE",
"INcluDe",
"INcluDE",
"INclUde",
"INclUdE",
"INclUDe",
"INclUDE",
"INcLude",
"INcLudE",
"INcLuDe",
"INcLuDE",
"INcLUde",
"INcLUdE",
"INcLUDe",
"INcLUDE",
"INClude",
"INCludE",
"INCluDe",
"INCluDE",
"INClUde",
"INClUdE",
"INClUDe",
"INClUDE",
"INCLude",
"INCLudE",
"INCLuDe",
"INCLuDE",
"INCLUde",
"INCLUdE",
"INCLUDe",
"INCLUDE",
),
action_insensitive: $ => choice(
"action",
"actioN",
"actiOn",
"actiON",
"actIon",
"actIoN",
"actIOn",
"actION",
"acTion",
"acTioN",
"acTiOn",
"acTiON",
"acTIon",
"acTIoN",
"acTIOn",
"acTION",
"aCtion",
"aCtioN",
"aCtiOn",
"aCtiON",
"aCtIon",
"aCtIoN",
"aCtIOn",
"aCtION",
"aCTion",
"aCTioN",
"aCTiOn",
"aCTiON",
"aCTIon",
"aCTIoN",
"aCTIOn",
"aCTION",
"Action",
"ActioN",
"ActiOn",
"ActiON",
"ActIon",
"ActIoN",
"ActIOn",
"ActION",
"AcTion",
"AcTioN",
"AcTiOn",
"AcTiON",
"AcTIon",
"AcTIoN",
"AcTIOn",
"AcTION",
"ACtion",
"ACtioN",
"ACtiOn",
"ACtiON",
"ACtIon",
"ACtIoN",
"ACtIOn",
"ACtION",
"ACTion",
"ACTioN",
"ACTiOn",
"ACTiON",
"ACTIon",
"ACTIoN",
"ACTIOn",
"ACTION",
),
complete_insensitive: $ => choice(
"complete",
"completE",
"compleTe",
"compleTE",
"complEte",
"complEtE",
"complETe",
"complETE",
"compLete",
"compLetE",
"compLeTe",
"compLeTE",
"compLEte",
"compLEtE",
"compLETe",
"compLETE",
"comPlete",
"comPletE",
"comPleTe",
"comPleTE",
"comPlEte",
"comPlEtE",
"comPlETe",
"comPlETE",
"comPLete",
"comPLetE",
"comPLeTe",
"comPLeTE",
"comPLEte",
"comPLEtE",
"comPLETe",
"comPLETE",
"coMplete",
"coMpletE",
"coMpleTe",
"coMpleTE",
"coMplEte",
"coMplEtE",
"coMplETe",
"coMplETE",
"coMpLete",
"coMpLetE",
"coMpLeTe",
"coMpLeTE",
"coMpLEte",
"coMpLEtE",
"coMpLETe",
"coMpLETE",
"coMPlete",
"coMPletE",
"coMPleTe",
"coMPleTE",
"coMPlEte",
"coMPlEtE",
"coMPlETe",
"coMPlETE",
"coMPLete",
"coMPLetE",
"coMPLeTe",
"coMPLeTE",
"coMPLEte",
"coMPLEtE",
"coMPLETe",
"coMPLETE",
"cOmplete",
"cOmpletE",
"cOmpleTe",
"cOmpleTE",
"cOmplEte",
"cOmplEtE",
"cOmplETe",
"cOmplETE",
"cOmpLete",
"cOmpLetE",
"cOmpLeTe",
"cOmpLeTE",
"cOmpLEte",
"cOmpLEtE",
"cOmpLETe",
"cOmpLETE",
"cOmPlete",
"cOmPletE",
"cOmPleTe",
"cOmPleTE",
"cOmPlEte",
"cOmPlEtE",
"cOmPlETe",
"cOmPlETE",
"cOmPLete",
"cOmPLetE",
"cOmPLeTe",
"cOmPLeTE",
"cOmPLEte",
"cOmPLEtE",
"cOmPLETe",
"cOmPLETE",
"cOMplete",
"cOMpletE",
"cOMpleTe",
"cOMpleTE",
"cOMplEte",
"cOMplEtE",
"cOMplETe",
"cOMplETE",
"cOMpLete",
"cOMpLetE",
"cOMpLeTe",
"cOMpLeTE",
"cOMpLEte",
"cOMpLEtE",
"cOMpLETe",
"cOMpLETE",
"cOMPlete",
"cOMPletE",
"cOMPleTe",
"cOMPleTE",
"cOMPlEte",
"cOMPlEtE",
"cOMPlETe",
"cOMPlETE",
"cOMPLete",
"cOMPLetE",
"cOMPLeTe",
"cOMPLeTE",
"cOMPLEte",
"cOMPLEtE",
"cOMPLETe",
"cOMPLETE",
"Complete",
"CompletE",
"CompleTe",
"CompleTE",
"ComplEte",
"ComplEtE",
"ComplETe",
"ComplETE",
"CompLete",
"CompLetE",
"CompLeTe",
"CompLeTE",
"CompLEte",
"CompLEtE",
"CompLETe",
"CompLETE",
"ComPlete",
"ComPletE",
"ComPleTe",
"ComPleTE",
"ComPlEte",
"ComPlEtE",
"ComPlETe",
"ComPlETE",
"ComPLete",
"ComPLetE",
"ComPLeTe",
"ComPLeTE",
"ComPLEte",
"ComPLEtE",
"ComPLETe",
"ComPLETE",
"CoMplete",
"CoMpletE",
"CoMpleTe",
"CoMpleTE",
"CoMplEte",
"CoMplEtE",
"CoMplETe",
"CoMplETE",
"CoMpLete",
"CoMpLetE",
"CoMpLeTe",
"CoMpLeTE",
"CoMpLEte",
"CoMpLEtE",
"CoMpLETe",
"CoMpLETE",
"CoMPlete",
"CoMPletE",
"CoMPleTe",
"CoMPleTE",
"CoMPlEte",
"CoMPlEtE",
"CoMPlETe",
"CoMPlETE",
"CoMPLete",
"CoMPLetE",
"CoMPLeTe",
"CoMPLeTE",
"CoMPLEte",
"CoMPLEtE",
"CoMPLETe",
"CoMPLETE",
"COmplete",
"COmpletE",
"COmpleTe",
"COmpleTE",
"COmplEte",
"COmplEtE",
"COmplETe",
"COmplETE",
"COmpLete",
"COmpLetE",
"COmpLeTe",
"COmpLeTE",
"COmpLEte",
"COmpLEtE",
"COmpLETe",
"COmpLETE",
"COmPlete",
"COmPletE",
"COmPleTe",
"COmPleTE",
"COmPlEte",
"COmPlEtE",
"COmPlETe",
"COmPlETE",
"COmPLete",
"COmPLetE",
"COmPLeTe",
"COmPLeTE",
"COmPLEte",
"COmPLEtE",
"COmPLETe",
"COmPLETE",
"COMplete",
"COMpletE",
"COMpleTe",
"COMpleTE",
"COMplEte",
"COMplEtE",
"COMplETe",
"COMplETE",
"COMpLete",
"COMpLetE",
"COMpLeTe",
"COMpLeTE",
"COMpLEte",
"COMpLEtE",
"COMpLETe",
"COMpLETE",
"COMPlete",
"COMPletE",
"COMPleTe",
"COMPleTE",
"COMPlEte",
"COMPlEtE",
"COMPlETe",
"COMPlETE",
"COMPLete",
"COMPLetE",
"COMPLeTe",
"COMPLeTE",
"COMPLEte",
"COMPLEtE",
"COMPLETe",
"COMPLETE",
),
if_insensitive: $ => choice(
"if",
"iF",
"If",
"IF",
),
else_insensitive: $ => choice(
"else",
"elsE",
"elSe",
"elSE",
"eLse",
"eLsE",
"eLSe",
"eLSE",
"Else",
"ElsE",
"ElSe",
"ElSE",
"ELse",
"ELsE",
"ELSe",
"ELSE",
),
elseif_insensitive: $ => choice(
"elseif",
"elseiF",
"elseIf",
"elseIF",
"elsEif",
"elsEiF",
"elsEIf",
"elsEIF",
"elSeif",
"elSeiF",
"elSeIf",
"elSeIF",
"elSEif",
"elSEiF",
"elSEIf",
"elSEIF",
"eLseif",
"eLseiF",
"eLseIf",
"eLseIF",
"eLsEif",
"eLsEiF",
"eLsEIf",
"eLsEIF",
"eLSeif",
"eLSeiF",
"eLSeIf",
"eLSeIF",
"eLSEif",
"eLSEiF",
"eLSEIf",
"eLSEIF",
"Elseif",
"ElseiF",
"ElseIf",
"ElseIF",
"ElsEif",
"ElsEiF",
"ElsEIf",
"ElsEIF",
"ElSeif",
"ElSeiF",
"ElSeIf",
"ElSeIF",
"ElSEif",
"ElSEiF",
"ElSEIf",
"ElSEIF",
"ELseif",
"ELseiF",
"ELseIf",
"ELseIF",
"ELsEif",
"ELsEiF",
"ELsEIf",
"ELsEIF",
"ELSeif",
"ELSeiF",
"ELSeIf",
"ELSeIF",
"ELSEif",
"ELSEiF",
"ELSEIf",
"ELSEIF",
),
endif_insensitive: $ => choice(
"endif",
"endiF",
"endIf",
"endIF",
"enDif",
"enDiF",
"enDIf",
"enDIF",
"eNdif",
"eNdiF",
"eNdIf",
"eNdIF",
"eNDif",
"eNDiF",
"eNDIf",
"eNDIF",
"Endif",
"EndiF",
"EndIf",
"EndIF",
"EnDif",
"EnDiF",
"EnDIf",
"EnDIF",
"ENdif",
"ENdiF",
"ENdIf",
"ENdIF",
"ENDif",
"ENDiF",
"ENDIf",
"ENDIF",
),
while_insensitive: $ => choice(
"while",
"whilE",
"whiLe",
"whiLE",
"whIle",
"whIlE",
"whILe",
"whILE",
"wHile",
"wHilE",
"wHiLe",
"wHiLE",
"wHIle",
"wHIlE",
"wHILe",
"wHILE",
"While",
"WhilE",
"WhiLe",
"WhiLE",
"WhIle",
"WhIlE",
"WhILe",
"WhILE",
"WHile",
"WHilE",
"WHiLe",
"WHiLE",
"WHIle",
"WHIlE",
"WHILe",
"WHILE",
),
endwhile_insensitive: $ => choice(
"endwhile",
"endwhilE",
"endwhiLe",
"endwhiLE",
"endwhIle",
"endwhIlE",
"endwhILe",
"endwhILE",
"endwHile",
"endwHilE",
"endwHiLe",
"endwHiLE",
"endwHIle",
"endwHIlE",
"endwHILe",
"endwHILE",
"endWhile",
"endWhilE",
"endWhiLe",
"endWhiLE",
"endWhIle",
"endWhIlE",
"endWhILe",
"endWhILE",
"endWHile",
"endWHilE",
"endWHiLe",
"endWHiLE",
"endWHIle",
"endWHIlE",
"endWHILe",
"endWHILE",
"enDwhile",
"enDwhilE",
"enDwhiLe",
"enDwhiLE",
"enDwhIle",
"enDwhIlE",
"enDwhILe",
"enDwhILE",
"enDwHile",
"enDwHilE",
"enDwHiLe",
"enDwHiLE",
"enDwHIle",
"enDwHIlE",
"enDwHILe",
"enDwHILE",
"enDWhile",
"enDWhilE",
"enDWhiLe",
"enDWhiLE",
"enDWhIle",
"enDWhIlE",
"enDWhILe",
"enDWhILE",
"enDWHile",
"enDWHilE",
"enDWHiLe",
"enDWHiLE",
"enDWHIle",
"enDWHIlE",
"enDWHILe",
"enDWHILE",
"eNdwhile",
"eNdwhilE",
"eNdwhiLe",
"eNdwhiLE",
"eNdwhIle",
"eNdwhIlE",
"eNdwhILe",
"eNdwhILE",
"eNdwHile",
"eNdwHilE",
"eNdwHiLe",
"eNdwHiLE",
"eNdwHIle",
"eNdwHIlE",
"eNdwHILe",
"eNdwHILE",
"eNdWhile",
"eNdWhilE",
"eNdWhiLe",
"eNdWhiLE",
"eNdWhIle",
"eNdWhIlE",
"eNdWhILe",
"eNdWhILE",
"eNdWHile",
"eNdWHilE",
"eNdWHiLe",
"eNdWHiLE",
"eNdWHIle",
"eNdWHIlE",
"eNdWHILe",
"eNdWHILE",
"eNDwhile",
"eNDwhilE",
"eNDwhiLe",
"eNDwhiLE",
"eNDwhIle",
"eNDwhIlE",
"eNDwhILe",
"eNDwhILE",
"eNDwHile",
"eNDwHilE",
"eNDwHiLe",
"eNDwHiLE",
"eNDwHIle",
"eNDwHIlE",
"eNDwHILe",
"eNDwHILE",
"eNDWhile",
"eNDWhilE",
"eNDWhiLe",
"eNDWhiLE",
"eNDWhIle",
"eNDWhIlE",
"eNDWhILe",
"eNDWhILE",
"eNDWHile",
"eNDWHilE",
"eNDWHiLe",
"eNDWHiLE",
"eNDWHIle",
"eNDWHIlE",
"eNDWHILe",
"eNDWHILE",
"Endwhile",
"EndwhilE",
"EndwhiLe",
"EndwhiLE",
"EndwhIle",
"EndwhIlE",
"EndwhILe",
"EndwhILE",
"EndwHile",
"EndwHilE",
"EndwHiLe",
"EndwHiLE",
"EndwHIle",
"EndwHIlE",
"EndwHILe",
"EndwHILE",
"EndWhile",
"EndWhilE",
"EndWhiLe",
"EndWhiLE",
"EndWhIle",
"EndWhIlE",
"EndWhILe",
"EndWhILE",
"EndWHile",
"EndWHilE",
"EndWHiLe",
"EndWHiLE",
"EndWHIle",
"EndWHIlE",
"EndWHILe",
"EndWHILE",
"EnDwhile",
"EnDwhilE",
"EnDwhiLe",
"EnDwhiLE",
"EnDwhIle",
"EnDwhIlE",
"EnDwhILe",
"EnDwhILE",
"EnDwHile",
"EnDwHilE",
"EnDwHiLe",
"EnDwHiLE",
"EnDwHIle",
"EnDwHIlE",
"EnDwHILe",
"EnDwHILE",
"EnDWhile",
"EnDWhilE",
"EnDWhiLe",
"EnDWhiLE",
"EnDWhIle",
"EnDWhIlE",
"EnDWhILe",
"EnDWhILE",
"EnDWHile",
"EnDWHilE",
"EnDWHiLe",
"EnDWHiLE",
"EnDWHIle",
"EnDWHIlE",
"EnDWHILe",
"EnDWHILE",
"ENdwhile",
"ENdwhilE",
"ENdwhiLe",
"ENdwhiLE",
"ENdwhIle",
"ENdwhIlE",
"ENdwhILe",
"ENdwhILE",
"ENdwHile",
"ENdwHilE",
"ENdwHiLe",
"ENdwHiLE",
"ENdwHIle",
"ENdwHIlE",
"ENdwHILe",
"ENdwHILE",
"ENdWhile",
"ENdWhilE",
"ENdWhiLe",
"ENdWhiLE",
"ENdWhIle",
"ENdWhIlE",
"ENdWhILe",
"ENdWhILE",
"ENdWHile",
"ENdWHilE",
"ENdWHiLe",
"ENdWHiLE",
"ENdWHIle",
"ENdWHIlE",
"ENdWHILe",
"ENdWHILE",
"ENDwhile",
"ENDwhilE",
"ENDwhiLe",
"ENDwhiLE",
"ENDwhIle",
"ENDwhIlE",
"ENDwhILe",
"ENDwhILE",
"ENDwHile",
"ENDwHilE",
"ENDwHiLe",
"ENDwHiLE",
"ENDwHIle",
"ENDwHIlE",
"ENDwHILe",
"ENDwHILE",
"ENDWhile",
"ENDWhilE",
"ENDWhiLe",
"ENDWhiLE",
"ENDWhIle",
"ENDWhIlE",
"ENDWhILe",
"ENDWhILE",
"ENDWHile",
"ENDWHilE",
"ENDWHiLe",
"ENDWHiLE",
"ENDWHIle",
"ENDWHIlE",
"ENDWHILe",
"ENDWHILE",
),
detector_insensitive: $ => choice(
"detector",
"detectoR",
"detectOr",
"detectOR",
"detecTor",
"detecToR",
"detecTOr",
"detecTOR",
"deteCtor",
"deteCtoR",
"deteCtOr",
"deteCtOR",
"deteCTor",
"deteCToR",
"deteCTOr",
"deteCTOR",
"detEctor",
"detEctoR",
"detEctOr",
"detEctOR",
"detEcTor",
"detEcToR",
"detEcTOr",
"detEcTOR",
"detECtor",
"detECtoR",
"detECtOr",
"detECtOR",
"detECTor",
"detECToR",
"detECTOr",
"detECTOR",
"deTector",
"deTectoR",
"deTectOr",
"deTectOR",
"deTecTor",
"deTecToR",
"deTecTOr",
"deTecTOR",
"deTeCtor",
"deTeCtoR",
"deTeCtOr",
"deTeCtOR",
"deTeCTor",
"deTeCToR",
"deTeCTOr",
"deTeCTOR",
"deTEctor",
"deTEctoR",
"deTEctOr",
"deTEctOR",
"deTEcTor",
"deTEcToR",
"deTEcTOr",
"deTEcTOR",
"deTECtor",
"deTECtoR",
"deTECtOr",
"deTECtOR",
"deTECTor",
"deTECToR",
"deTECTOr",
"deTECTOR",
"dEtector",
"dEtectoR",
"dEtectOr",
"dEtectOR",
"dEtecTor",
"dEtecToR",
"dEtecTOr",
"dEtecTOR",
"dEteCtor",
"dEteCtoR",
"dEteCtOr",
"dEteCtOR",
"dEteCTor",
"dEteCToR",
"dEteCTOr",
"dEteCTOR",
"dEtEctor",
"dEtEctoR",
"dEtEctOr",
"dEtEctOR",
"dEtEcTor",
"dEtEcToR",
"dEtEcTOr",
"dEtEcTOR",
"dEtECtor",
"dEtECtoR",
"dEtECtOr",
"dEtECtOR",
"dEtECTor",
"dEtECToR",
"dEtECTOr",
"dEtECTOR",
"dETector",
"dETectoR",
"dETectOr",
"dETectOR",
"dETecTor",
"dETecToR",
"dETecTOr",
"dETecTOR",
"dETeCtor",
"dETeCtoR",
"dETeCtOr",
"dETeCtOR",
"dETeCTor",
"dETeCToR",
"dETeCTOr",
"dETeCTOR",
"dETEctor",
"dETEctoR",
"dETEctOr",
"dETEctOR",
"dETEcTor",
"dETEcToR",
"dETEcTOr",
"dETEcTOR",
"dETECtor",
"dETECtoR",
"dETECtOr",
"dETECtOR",
"dETECTor",
"dETECToR",
"dETECTOr",
"dETECTOR",
"Detector",
"DetectoR",
"DetectOr",
"DetectOR",
"DetecTor",
"DetecToR",
"DetecTOr",
"DetecTOR",
"DeteCtor",
"DeteCtoR",
"DeteCtOr",
"DeteCtOR",
"DeteCTor",
"DeteCToR",
"DeteCTOr",
"DeteCTOR",
"DetEctor",
"DetEctoR",
"DetEctOr",
"DetEctOR",
"DetEcTor",
"DetEcToR",
"DetEcTOr",
"DetEcTOR",
"DetECtor",
"DetECtoR",
"DetECtOr",
"DetECtOR",
"DetECTor",
"DetECToR",
"DetECTOr",
"DetECTOR",
"DeTector",
"DeTectoR",
"DeTectOr",
"DeTectOR",
"DeTecTor",
"DeTecToR",
"DeTecTOr",
"DeTecTOR",
"DeTeCtor",
"DeTeCtoR",
"DeTeCtOr",
"DeTeCtOR",
"DeTeCTor",
"DeTeCToR",
"DeTeCTOr",
"DeTeCTOR",
"DeTEctor",
"DeTEctoR",
"DeTEctOr",
"DeTEctOR",
"DeTEcTor",
"DeTEcToR",
"DeTEcTOr",
"DeTEcTOR",
"DeTECtor",
"DeTECtoR",
"DeTECtOr",
"DeTECtOR",
"DeTECTor",
"DeTECToR",
"DeTECTOr",
"DeTECTOR",
"DEtector",
"DEtectoR",
"DEtectOr",
"DEtectOR",
"DEtecTor",
"DEtecToR",
"DEtecTOr",
"DEtecTOR",
"DEteCtor",
"DEteCtoR",
"DEteCtOr",
"DEteCtOR",
"DEteCTor",
"DEteCToR",
"DEteCTOr",
"DEteCTOR",
"DEtEctor",
"DEtEctoR",
"DEtEctOr",
"DEtEctOR",
"DEtEcTor",
"DEtEcToR",
"DEtEcTOr",
"DEtEcTOR",
"DEtECtor",
"DEtECtoR",
"DEtECtOr",
"DEtECtOR",
"DEtECTor",
"DEtECToR",
"DEtECTOr",
"DEtECTOR",
"DETector",
"DETectoR",
"DETectOr",
"DETectOR",
"DETecTor",
"DETecToR",
"DETecTOr",
"DETecTOR",
"DETeCtor",
"DETeCtoR",
"DETeCtOr",
"DETeCtOR",
"DETeCTor",
"DETeCToR",
"DETeCTOr",
"DETeCTOR",
"DETEctor",
"DETEctoR",
"DETEctOr",
"DETEctOR",
"DETEcTor",
"DETEcToR",
"DETEcTOr",
"DETEcTOR",
"DETECtor",
"DETECtoR",
"DETECtOr",
"DETECtOR",
"DETECTor",
"DETECToR",
"DETECTOr",
"DETECTOR",
),
invoke_insensitive: $ => choice(
"invoke",
"invokE",
"invoKe",
"invoKE",
"invOke",
"invOkE",
"invOKe",
"invOKE",
"inVoke",
"inVokE",
"inVoKe",
"inVoKE",
"inVOke",
"inVOkE",
"inVOKe",
"inVOKE",
"iNvoke",
"iNvokE",
"iNvoKe",
"iNvoKE",
"iNvOke",
"iNvOkE",
"iNvOKe",
"iNvOKE",
"iNVoke",
"iNVokE",
"iNVoKe",
"iNVoKE",
"iNVOke",
"iNVOkE",
"iNVOKe",
"iNVOKE",
"Invoke",
"InvokE",
"InvoKe",
"InvoKE",
"InvOke",
"InvOkE",
"InvOKe",
"InvOKE",
"InVoke",
"InVokE",
"InVoKe",
"InVoKE",
"InVOke",
"InVOkE",
"InVOKe",
"InVOKE",
"INvoke",
"INvokE",
"INvoKe",
"INvoKE",
"INvOke",
"INvOkE",
"INvOKe",
"INvOKE",
"INVoke",
"INVokE",
"INVoKe",
"INVoKE",
"INVOke",
"INVOkE",
"INVOKe",
"INVOKE",
),
select_insensitive: $ => choice(
"select",
"selecT",
"seleCt",
"seleCT",
"selEct",
"selEcT",
"selECt",
"selECT",
"seLect",
"seLecT",
"seLeCt",
"seLeCT",
"seLEct",
"seLEcT",
"seLECt",
"seLECT",
"sElect",
"sElecT",
"sEleCt",
"sEleCT",
"sElEct",
"sElEcT",
"sElECt",
"sElECT",
"sELect",
"sELecT",
"sELeCt",
"sELeCT",
"sELEct",
"sELEcT",
"sELECt",
"sELECT",
"Select",
"SelecT",
"SeleCt",
"SeleCT",
"SelEct",
"SelEcT",
"SelECt",
"SelECT",
"SeLect",
"SeLecT",
"SeLeCt",
"SeLeCT",
"SeLEct",
"SeLEcT",
"SeLECt",
"SeLECT",
"SElect",
"SElecT",
"SEleCt",
"SEleCT",
"SElEct",
"SElEcT",
"SElECt",
"SElECT",
"SELect",
"SELecT",
"SELeCt",
"SELeCT",
"SELEct",
"SELEcT",
"SELECt",
"SELECT",
),
}
});