/// // @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( seq( choice( $.else_insensitive, $.elseif_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", ), } });