index.mjs 212 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786
  1. /*! @author Toru Nagashima <https://github.com/mysticatea> */
  2. var ast = Object.freeze({
  3. });
  4. function assert(condition, message) {
  5. if (!condition) {
  6. throw new Error(message || "AssertionError");
  7. }
  8. }
  9. function last(xs) {
  10. return xs.length === 0 ? undefined : xs[xs.length - 1];
  11. }
  12. const legacyImpl = {
  13. at(s, end, i) {
  14. return i < end ? s.charCodeAt(i) : -1;
  15. },
  16. width(c) {
  17. return 1;
  18. },
  19. };
  20. const unicodeImpl = {
  21. at(s, end, i) {
  22. return i < end ? s.codePointAt(i) : -1;
  23. },
  24. width(c) {
  25. return c > 0xffff ? 2 : 1;
  26. },
  27. };
  28. class Reader {
  29. constructor() {
  30. this._impl = legacyImpl;
  31. this._s = "";
  32. this._i = 0;
  33. this._end = 0;
  34. this._cp1 = -1;
  35. this._w1 = 1;
  36. this._cp2 = -1;
  37. this._w2 = 1;
  38. this._cp3 = -1;
  39. this._w3 = 1;
  40. this._cp4 = -1;
  41. }
  42. get source() {
  43. return this._s;
  44. }
  45. get index() {
  46. return this._i;
  47. }
  48. get currentCodePoint() {
  49. return this._cp1;
  50. }
  51. get nextCodePoint() {
  52. return this._cp2;
  53. }
  54. get nextCodePoint2() {
  55. return this._cp3;
  56. }
  57. get nextCodePoint3() {
  58. return this._cp4;
  59. }
  60. reset(source, start, end, uFlag) {
  61. this._impl = uFlag ? unicodeImpl : legacyImpl;
  62. this._s = source;
  63. this._end = end;
  64. this.rewind(start);
  65. }
  66. rewind(index) {
  67. const impl = this._impl;
  68. this._i = index;
  69. this._cp1 = impl.at(this._s, this._end, index);
  70. this._w1 = impl.width(this._cp1);
  71. this._cp2 = impl.at(this._s, this._end, index + this._w1);
  72. this._w2 = impl.width(this._cp2);
  73. this._cp3 = impl.at(this._s, this._end, index + this._w1 + this._w2);
  74. this._w3 = impl.width(this._cp3);
  75. this._cp4 = impl.at(this._s, this._end, index + this._w1 + this._w2 + this._w3);
  76. }
  77. advance() {
  78. if (this._cp1 !== -1) {
  79. const impl = this._impl;
  80. this._i += this._w1;
  81. this._cp1 = this._cp2;
  82. this._w1 = this._w2;
  83. this._cp2 = this._cp3;
  84. this._w2 = impl.width(this._cp2);
  85. this._cp3 = this._cp4;
  86. this._w3 = impl.width(this._cp3);
  87. this._cp4 = impl.at(this._s, this._end, this._i + this._w1 + this._w2 + this._w3);
  88. }
  89. }
  90. eat(cp) {
  91. if (this._cp1 === cp) {
  92. this.advance();
  93. return true;
  94. }
  95. return false;
  96. }
  97. eat2(cp1, cp2) {
  98. if (this._cp1 === cp1 && this._cp2 === cp2) {
  99. this.advance();
  100. this.advance();
  101. return true;
  102. }
  103. return false;
  104. }
  105. eat3(cp1, cp2, cp3) {
  106. if (this._cp1 === cp1 && this._cp2 === cp2 && this._cp3 === cp3) {
  107. this.advance();
  108. this.advance();
  109. this.advance();
  110. return true;
  111. }
  112. return false;
  113. }
  114. }
  115. class RegExpSyntaxError extends SyntaxError {
  116. constructor(source, uFlag, index, message) {
  117. if (source) {
  118. if (source[0] !== "/") {
  119. source = `/${source}/${uFlag ? "u" : ""}`;
  120. }
  121. source = `: ${source}`;
  122. }
  123. super(`Invalid regular expression${source}: ${message}`);
  124. this.index = index;
  125. }
  126. }
  127. function isIdStart(cp) {
  128. if (cp < 0x41)
  129. return false;
  130. if (cp < 0x5b)
  131. return true;
  132. if (cp < 0x61)
  133. return false;
  134. if (cp < 0x7b)
  135. return true;
  136. return isLargeIdStart(cp);
  137. }
  138. function isIdContinue(cp) {
  139. if (cp < 0x30)
  140. return false;
  141. if (cp < 0x3a)
  142. return true;
  143. if (cp < 0x41)
  144. return false;
  145. if (cp < 0x5b)
  146. return true;
  147. if (cp === 0x5f)
  148. return true;
  149. if (cp < 0x61)
  150. return false;
  151. if (cp < 0x7b)
  152. return true;
  153. return isLargeIdStart(cp) || isLargeIdContinue(cp);
  154. }
  155. function isLargeIdStart(cp) {
  156. if (cp < 0x303c) {
  157. if (cp < 0xeaa) {
  158. if (cp < 0xa2a) {
  159. if (cp < 0x6d5) {
  160. if (cp < 0x37a) {
  161. if (cp < 0x294) {
  162. if (cp < 0xf8) {
  163. if (cp === 0xaa)
  164. return true;
  165. if (cp === 0xb5)
  166. return true;
  167. if (cp === 0xba)
  168. return true;
  169. if (cp < 0xc0)
  170. return false;
  171. if (cp < 0xd7)
  172. return true;
  173. if (cp < 0xd8)
  174. return false;
  175. if (cp < 0xf7)
  176. return true;
  177. return false;
  178. }
  179. if (cp < 0x1bb)
  180. return true;
  181. if (cp === 0x1bb)
  182. return true;
  183. if (cp < 0x1bc)
  184. return false;
  185. if (cp < 0x1c0)
  186. return true;
  187. if (cp < 0x1c0)
  188. return false;
  189. if (cp < 0x1c4)
  190. return true;
  191. if (cp < 0x1c4)
  192. return false;
  193. if (cp < 0x294)
  194. return true;
  195. return false;
  196. }
  197. if (cp < 0x2ec) {
  198. if (cp === 0x294)
  199. return true;
  200. if (cp < 0x295)
  201. return false;
  202. if (cp < 0x2b0)
  203. return true;
  204. if (cp < 0x2b0)
  205. return false;
  206. if (cp < 0x2c2)
  207. return true;
  208. if (cp < 0x2c6)
  209. return false;
  210. if (cp < 0x2d2)
  211. return true;
  212. if (cp < 0x2e0)
  213. return false;
  214. if (cp < 0x2e5)
  215. return true;
  216. return false;
  217. }
  218. if (cp === 0x2ec)
  219. return true;
  220. if (cp === 0x2ee)
  221. return true;
  222. if (cp < 0x370)
  223. return false;
  224. if (cp < 0x374)
  225. return true;
  226. if (cp === 0x374)
  227. return true;
  228. if (cp < 0x376)
  229. return false;
  230. if (cp < 0x378)
  231. return true;
  232. return false;
  233. }
  234. if (cp < 0x531) {
  235. if (cp < 0x38c) {
  236. if (cp === 0x37a)
  237. return true;
  238. if (cp < 0x37b)
  239. return false;
  240. if (cp < 0x37e)
  241. return true;
  242. if (cp === 0x37f)
  243. return true;
  244. if (cp === 0x386)
  245. return true;
  246. if (cp < 0x388)
  247. return false;
  248. if (cp < 0x38b)
  249. return true;
  250. return false;
  251. }
  252. if (cp === 0x38c)
  253. return true;
  254. if (cp < 0x38e)
  255. return false;
  256. if (cp < 0x3a2)
  257. return true;
  258. if (cp < 0x3a3)
  259. return false;
  260. if (cp < 0x3f6)
  261. return true;
  262. if (cp < 0x3f7)
  263. return false;
  264. if (cp < 0x482)
  265. return true;
  266. if (cp < 0x48a)
  267. return false;
  268. if (cp < 0x530)
  269. return true;
  270. return false;
  271. }
  272. if (cp < 0x620) {
  273. if (cp < 0x531)
  274. return false;
  275. if (cp < 0x557)
  276. return true;
  277. if (cp === 0x559)
  278. return true;
  279. if (cp < 0x561)
  280. return false;
  281. if (cp < 0x588)
  282. return true;
  283. if (cp < 0x5d0)
  284. return false;
  285. if (cp < 0x5eb)
  286. return true;
  287. if (cp < 0x5f0)
  288. return false;
  289. if (cp < 0x5f3)
  290. return true;
  291. return false;
  292. }
  293. if (cp < 0x640)
  294. return true;
  295. if (cp === 0x640)
  296. return true;
  297. if (cp < 0x641)
  298. return false;
  299. if (cp < 0x64b)
  300. return true;
  301. if (cp < 0x66e)
  302. return false;
  303. if (cp < 0x670)
  304. return true;
  305. if (cp < 0x671)
  306. return false;
  307. if (cp < 0x6d4)
  308. return true;
  309. return false;
  310. }
  311. if (cp < 0x904) {
  312. if (cp < 0x7f4) {
  313. if (cp < 0x710) {
  314. if (cp === 0x6d5)
  315. return true;
  316. if (cp < 0x6e5)
  317. return false;
  318. if (cp < 0x6e7)
  319. return true;
  320. if (cp < 0x6ee)
  321. return false;
  322. if (cp < 0x6f0)
  323. return true;
  324. if (cp < 0x6fa)
  325. return false;
  326. if (cp < 0x6fd)
  327. return true;
  328. if (cp === 0x6ff)
  329. return true;
  330. return false;
  331. }
  332. if (cp === 0x710)
  333. return true;
  334. if (cp < 0x712)
  335. return false;
  336. if (cp < 0x730)
  337. return true;
  338. if (cp < 0x74d)
  339. return false;
  340. if (cp < 0x7a6)
  341. return true;
  342. if (cp === 0x7b1)
  343. return true;
  344. if (cp < 0x7ca)
  345. return false;
  346. if (cp < 0x7eb)
  347. return true;
  348. return false;
  349. }
  350. if (cp < 0x828) {
  351. if (cp < 0x7f4)
  352. return false;
  353. if (cp < 0x7f6)
  354. return true;
  355. if (cp === 0x7fa)
  356. return true;
  357. if (cp < 0x800)
  358. return false;
  359. if (cp < 0x816)
  360. return true;
  361. if (cp === 0x81a)
  362. return true;
  363. if (cp === 0x824)
  364. return true;
  365. return false;
  366. }
  367. if (cp === 0x828)
  368. return true;
  369. if (cp < 0x840)
  370. return false;
  371. if (cp < 0x859)
  372. return true;
  373. if (cp < 0x860)
  374. return false;
  375. if (cp < 0x86b)
  376. return true;
  377. if (cp < 0x8a0)
  378. return false;
  379. if (cp < 0x8b5)
  380. return true;
  381. if (cp < 0x8b6)
  382. return false;
  383. if (cp < 0x8be)
  384. return true;
  385. return false;
  386. }
  387. if (cp < 0x9b2) {
  388. if (cp < 0x972) {
  389. if (cp < 0x904)
  390. return false;
  391. if (cp < 0x93a)
  392. return true;
  393. if (cp === 0x93d)
  394. return true;
  395. if (cp === 0x950)
  396. return true;
  397. if (cp < 0x958)
  398. return false;
  399. if (cp < 0x962)
  400. return true;
  401. if (cp === 0x971)
  402. return true;
  403. return false;
  404. }
  405. if (cp < 0x981)
  406. return true;
  407. if (cp < 0x985)
  408. return false;
  409. if (cp < 0x98d)
  410. return true;
  411. if (cp < 0x98f)
  412. return false;
  413. if (cp < 0x991)
  414. return true;
  415. if (cp < 0x993)
  416. return false;
  417. if (cp < 0x9a9)
  418. return true;
  419. if (cp < 0x9aa)
  420. return false;
  421. if (cp < 0x9b1)
  422. return true;
  423. return false;
  424. }
  425. if (cp < 0x9df) {
  426. if (cp === 0x9b2)
  427. return true;
  428. if (cp < 0x9b6)
  429. return false;
  430. if (cp < 0x9ba)
  431. return true;
  432. if (cp === 0x9bd)
  433. return true;
  434. if (cp === 0x9ce)
  435. return true;
  436. if (cp < 0x9dc)
  437. return false;
  438. if (cp < 0x9de)
  439. return true;
  440. return false;
  441. }
  442. if (cp < 0x9e2)
  443. return true;
  444. if (cp < 0x9f0)
  445. return false;
  446. if (cp < 0x9f2)
  447. return true;
  448. if (cp === 0x9fc)
  449. return true;
  450. if (cp < 0xa05)
  451. return false;
  452. if (cp < 0xa0b)
  453. return true;
  454. if (cp < 0xa0f)
  455. return false;
  456. if (cp < 0xa11)
  457. return true;
  458. if (cp < 0xa13)
  459. return false;
  460. if (cp < 0xa29)
  461. return true;
  462. return false;
  463. }
  464. if (cp < 0xc2a) {
  465. if (cp < 0xb2a) {
  466. if (cp < 0xaaa) {
  467. if (cp < 0xa5e) {
  468. if (cp < 0xa2a)
  469. return false;
  470. if (cp < 0xa31)
  471. return true;
  472. if (cp < 0xa32)
  473. return false;
  474. if (cp < 0xa34)
  475. return true;
  476. if (cp < 0xa35)
  477. return false;
  478. if (cp < 0xa37)
  479. return true;
  480. if (cp < 0xa38)
  481. return false;
  482. if (cp < 0xa3a)
  483. return true;
  484. if (cp < 0xa59)
  485. return false;
  486. if (cp < 0xa5d)
  487. return true;
  488. return false;
  489. }
  490. if (cp === 0xa5e)
  491. return true;
  492. if (cp < 0xa72)
  493. return false;
  494. if (cp < 0xa75)
  495. return true;
  496. if (cp < 0xa85)
  497. return false;
  498. if (cp < 0xa8e)
  499. return true;
  500. if (cp < 0xa8f)
  501. return false;
  502. if (cp < 0xa92)
  503. return true;
  504. if (cp < 0xa93)
  505. return false;
  506. if (cp < 0xaa9)
  507. return true;
  508. return false;
  509. }
  510. if (cp < 0xae0) {
  511. if (cp < 0xaaa)
  512. return false;
  513. if (cp < 0xab1)
  514. return true;
  515. if (cp < 0xab2)
  516. return false;
  517. if (cp < 0xab4)
  518. return true;
  519. if (cp < 0xab5)
  520. return false;
  521. if (cp < 0xaba)
  522. return true;
  523. if (cp === 0xabd)
  524. return true;
  525. if (cp === 0xad0)
  526. return true;
  527. return false;
  528. }
  529. if (cp < 0xae2)
  530. return true;
  531. if (cp === 0xaf9)
  532. return true;
  533. if (cp < 0xb05)
  534. return false;
  535. if (cp < 0xb0d)
  536. return true;
  537. if (cp < 0xb0f)
  538. return false;
  539. if (cp < 0xb11)
  540. return true;
  541. if (cp < 0xb13)
  542. return false;
  543. if (cp < 0xb29)
  544. return true;
  545. return false;
  546. }
  547. if (cp < 0xb92) {
  548. if (cp < 0xb5f) {
  549. if (cp < 0xb2a)
  550. return false;
  551. if (cp < 0xb31)
  552. return true;
  553. if (cp < 0xb32)
  554. return false;
  555. if (cp < 0xb34)
  556. return true;
  557. if (cp < 0xb35)
  558. return false;
  559. if (cp < 0xb3a)
  560. return true;
  561. if (cp === 0xb3d)
  562. return true;
  563. if (cp < 0xb5c)
  564. return false;
  565. if (cp < 0xb5e)
  566. return true;
  567. return false;
  568. }
  569. if (cp < 0xb62)
  570. return true;
  571. if (cp === 0xb71)
  572. return true;
  573. if (cp === 0xb83)
  574. return true;
  575. if (cp < 0xb85)
  576. return false;
  577. if (cp < 0xb8b)
  578. return true;
  579. if (cp < 0xb8e)
  580. return false;
  581. if (cp < 0xb91)
  582. return true;
  583. return false;
  584. }
  585. if (cp < 0xba8) {
  586. if (cp < 0xb92)
  587. return false;
  588. if (cp < 0xb96)
  589. return true;
  590. if (cp < 0xb99)
  591. return false;
  592. if (cp < 0xb9b)
  593. return true;
  594. if (cp === 0xb9c)
  595. return true;
  596. if (cp < 0xb9e)
  597. return false;
  598. if (cp < 0xba0)
  599. return true;
  600. if (cp < 0xba3)
  601. return false;
  602. if (cp < 0xba5)
  603. return true;
  604. return false;
  605. }
  606. if (cp < 0xbab)
  607. return true;
  608. if (cp < 0xbae)
  609. return false;
  610. if (cp < 0xbba)
  611. return true;
  612. if (cp === 0xbd0)
  613. return true;
  614. if (cp < 0xc05)
  615. return false;
  616. if (cp < 0xc0d)
  617. return true;
  618. if (cp < 0xc0e)
  619. return false;
  620. if (cp < 0xc11)
  621. return true;
  622. if (cp < 0xc12)
  623. return false;
  624. if (cp < 0xc29)
  625. return true;
  626. return false;
  627. }
  628. if (cp < 0xd5f) {
  629. if (cp < 0xcbd) {
  630. if (cp < 0xc85) {
  631. if (cp < 0xc2a)
  632. return false;
  633. if (cp < 0xc3a)
  634. return true;
  635. if (cp === 0xc3d)
  636. return true;
  637. if (cp < 0xc58)
  638. return false;
  639. if (cp < 0xc5b)
  640. return true;
  641. if (cp < 0xc60)
  642. return false;
  643. if (cp < 0xc62)
  644. return true;
  645. if (cp === 0xc80)
  646. return true;
  647. return false;
  648. }
  649. if (cp < 0xc8d)
  650. return true;
  651. if (cp < 0xc8e)
  652. return false;
  653. if (cp < 0xc91)
  654. return true;
  655. if (cp < 0xc92)
  656. return false;
  657. if (cp < 0xca9)
  658. return true;
  659. if (cp < 0xcaa)
  660. return false;
  661. if (cp < 0xcb4)
  662. return true;
  663. if (cp < 0xcb5)
  664. return false;
  665. if (cp < 0xcba)
  666. return true;
  667. return false;
  668. }
  669. if (cp < 0xd0e) {
  670. if (cp === 0xcbd)
  671. return true;
  672. if (cp === 0xcde)
  673. return true;
  674. if (cp < 0xce0)
  675. return false;
  676. if (cp < 0xce2)
  677. return true;
  678. if (cp < 0xcf1)
  679. return false;
  680. if (cp < 0xcf3)
  681. return true;
  682. if (cp < 0xd05)
  683. return false;
  684. if (cp < 0xd0d)
  685. return true;
  686. return false;
  687. }
  688. if (cp < 0xd11)
  689. return true;
  690. if (cp < 0xd12)
  691. return false;
  692. if (cp < 0xd3b)
  693. return true;
  694. if (cp === 0xd3d)
  695. return true;
  696. if (cp === 0xd4e)
  697. return true;
  698. if (cp < 0xd54)
  699. return false;
  700. if (cp < 0xd57)
  701. return true;
  702. return false;
  703. }
  704. if (cp < 0xe46) {
  705. if (cp < 0xdbd) {
  706. if (cp < 0xd5f)
  707. return false;
  708. if (cp < 0xd62)
  709. return true;
  710. if (cp < 0xd7a)
  711. return false;
  712. if (cp < 0xd80)
  713. return true;
  714. if (cp < 0xd85)
  715. return false;
  716. if (cp < 0xd97)
  717. return true;
  718. if (cp < 0xd9a)
  719. return false;
  720. if (cp < 0xdb2)
  721. return true;
  722. if (cp < 0xdb3)
  723. return false;
  724. if (cp < 0xdbc)
  725. return true;
  726. return false;
  727. }
  728. if (cp === 0xdbd)
  729. return true;
  730. if (cp < 0xdc0)
  731. return false;
  732. if (cp < 0xdc7)
  733. return true;
  734. if (cp < 0xe01)
  735. return false;
  736. if (cp < 0xe31)
  737. return true;
  738. if (cp < 0xe32)
  739. return false;
  740. if (cp < 0xe34)
  741. return true;
  742. if (cp < 0xe40)
  743. return false;
  744. if (cp < 0xe46)
  745. return true;
  746. return false;
  747. }
  748. if (cp < 0xe8d) {
  749. if (cp === 0xe46)
  750. return true;
  751. if (cp < 0xe81)
  752. return false;
  753. if (cp < 0xe83)
  754. return true;
  755. if (cp === 0xe84)
  756. return true;
  757. if (cp < 0xe87)
  758. return false;
  759. if (cp < 0xe89)
  760. return true;
  761. if (cp === 0xe8a)
  762. return true;
  763. return false;
  764. }
  765. if (cp === 0xe8d)
  766. return true;
  767. if (cp < 0xe94)
  768. return false;
  769. if (cp < 0xe98)
  770. return true;
  771. if (cp < 0xe99)
  772. return false;
  773. if (cp < 0xea0)
  774. return true;
  775. if (cp < 0xea1)
  776. return false;
  777. if (cp < 0xea4)
  778. return true;
  779. if (cp === 0xea5)
  780. return true;
  781. if (cp === 0xea7)
  782. return true;
  783. return false;
  784. }
  785. if (cp < 0x1c5a) {
  786. if (cp < 0x1380) {
  787. if (cp < 0x10a0) {
  788. if (cp < 0xf88) {
  789. if (cp < 0xec6) {
  790. if (cp < 0xeaa)
  791. return false;
  792. if (cp < 0xeac)
  793. return true;
  794. if (cp < 0xead)
  795. return false;
  796. if (cp < 0xeb1)
  797. return true;
  798. if (cp < 0xeb2)
  799. return false;
  800. if (cp < 0xeb4)
  801. return true;
  802. if (cp === 0xebd)
  803. return true;
  804. if (cp < 0xec0)
  805. return false;
  806. if (cp < 0xec5)
  807. return true;
  808. return false;
  809. }
  810. if (cp === 0xec6)
  811. return true;
  812. if (cp < 0xedc)
  813. return false;
  814. if (cp < 0xee0)
  815. return true;
  816. if (cp === 0xf00)
  817. return true;
  818. if (cp < 0xf40)
  819. return false;
  820. if (cp < 0xf48)
  821. return true;
  822. if (cp < 0xf49)
  823. return false;
  824. if (cp < 0xf6d)
  825. return true;
  826. return false;
  827. }
  828. if (cp < 0x1061) {
  829. if (cp < 0xf88)
  830. return false;
  831. if (cp < 0xf8d)
  832. return true;
  833. if (cp < 0x1000)
  834. return false;
  835. if (cp < 0x102b)
  836. return true;
  837. if (cp === 0x103f)
  838. return true;
  839. if (cp < 0x1050)
  840. return false;
  841. if (cp < 0x1056)
  842. return true;
  843. if (cp < 0x105a)
  844. return false;
  845. if (cp < 0x105e)
  846. return true;
  847. return false;
  848. }
  849. if (cp === 0x1061)
  850. return true;
  851. if (cp < 0x1065)
  852. return false;
  853. if (cp < 0x1067)
  854. return true;
  855. if (cp < 0x106e)
  856. return false;
  857. if (cp < 0x1071)
  858. return true;
  859. if (cp < 0x1075)
  860. return false;
  861. if (cp < 0x1082)
  862. return true;
  863. if (cp === 0x108e)
  864. return true;
  865. return false;
  866. }
  867. if (cp < 0x1260) {
  868. if (cp < 0x10fd) {
  869. if (cp < 0x10a0)
  870. return false;
  871. if (cp < 0x10c6)
  872. return true;
  873. if (cp === 0x10c7)
  874. return true;
  875. if (cp === 0x10cd)
  876. return true;
  877. if (cp < 0x10d0)
  878. return false;
  879. if (cp < 0x10fb)
  880. return true;
  881. if (cp === 0x10fc)
  882. return true;
  883. return false;
  884. }
  885. if (cp < 0x1249)
  886. return true;
  887. if (cp < 0x124a)
  888. return false;
  889. if (cp < 0x124e)
  890. return true;
  891. if (cp < 0x1250)
  892. return false;
  893. if (cp < 0x1257)
  894. return true;
  895. if (cp === 0x1258)
  896. return true;
  897. if (cp < 0x125a)
  898. return false;
  899. if (cp < 0x125e)
  900. return true;
  901. return false;
  902. }
  903. if (cp < 0x12c0) {
  904. if (cp < 0x1260)
  905. return false;
  906. if (cp < 0x1289)
  907. return true;
  908. if (cp < 0x128a)
  909. return false;
  910. if (cp < 0x128e)
  911. return true;
  912. if (cp < 0x1290)
  913. return false;
  914. if (cp < 0x12b1)
  915. return true;
  916. if (cp < 0x12b2)
  917. return false;
  918. if (cp < 0x12b6)
  919. return true;
  920. if (cp < 0x12b8)
  921. return false;
  922. if (cp < 0x12bf)
  923. return true;
  924. return false;
  925. }
  926. if (cp === 0x12c0)
  927. return true;
  928. if (cp < 0x12c2)
  929. return false;
  930. if (cp < 0x12c6)
  931. return true;
  932. if (cp < 0x12c8)
  933. return false;
  934. if (cp < 0x12d7)
  935. return true;
  936. if (cp < 0x12d8)
  937. return false;
  938. if (cp < 0x1311)
  939. return true;
  940. if (cp < 0x1312)
  941. return false;
  942. if (cp < 0x1316)
  943. return true;
  944. if (cp < 0x1318)
  945. return false;
  946. if (cp < 0x135b)
  947. return true;
  948. return false;
  949. }
  950. if (cp < 0x1844) {
  951. if (cp < 0x170e) {
  952. if (cp < 0x1681) {
  953. if (cp < 0x1380)
  954. return false;
  955. if (cp < 0x1390)
  956. return true;
  957. if (cp < 0x13a0)
  958. return false;
  959. if (cp < 0x13f6)
  960. return true;
  961. if (cp < 0x13f8)
  962. return false;
  963. if (cp < 0x13fe)
  964. return true;
  965. if (cp < 0x1401)
  966. return false;
  967. if (cp < 0x166d)
  968. return true;
  969. if (cp < 0x166f)
  970. return false;
  971. if (cp < 0x1680)
  972. return true;
  973. return false;
  974. }
  975. if (cp < 0x169b)
  976. return true;
  977. if (cp < 0x16a0)
  978. return false;
  979. if (cp < 0x16eb)
  980. return true;
  981. if (cp < 0x16ee)
  982. return false;
  983. if (cp < 0x16f1)
  984. return true;
  985. if (cp < 0x16f1)
  986. return false;
  987. if (cp < 0x16f9)
  988. return true;
  989. if (cp < 0x1700)
  990. return false;
  991. if (cp < 0x170d)
  992. return true;
  993. return false;
  994. }
  995. if (cp < 0x1780) {
  996. if (cp < 0x170e)
  997. return false;
  998. if (cp < 0x1712)
  999. return true;
  1000. if (cp < 0x1720)
  1001. return false;
  1002. if (cp < 0x1732)
  1003. return true;
  1004. if (cp < 0x1740)
  1005. return false;
  1006. if (cp < 0x1752)
  1007. return true;
  1008. if (cp < 0x1760)
  1009. return false;
  1010. if (cp < 0x176d)
  1011. return true;
  1012. if (cp < 0x176e)
  1013. return false;
  1014. if (cp < 0x1771)
  1015. return true;
  1016. return false;
  1017. }
  1018. if (cp < 0x17b4)
  1019. return true;
  1020. if (cp === 0x17d7)
  1021. return true;
  1022. if (cp === 0x17dc)
  1023. return true;
  1024. if (cp < 0x1820)
  1025. return false;
  1026. if (cp < 0x1843)
  1027. return true;
  1028. if (cp === 0x1843)
  1029. return true;
  1030. return false;
  1031. }
  1032. if (cp < 0x19b0) {
  1033. if (cp < 0x18b0) {
  1034. if (cp < 0x1844)
  1035. return false;
  1036. if (cp < 0x1878)
  1037. return true;
  1038. if (cp < 0x1880)
  1039. return false;
  1040. if (cp < 0x1885)
  1041. return true;
  1042. if (cp < 0x1885)
  1043. return false;
  1044. if (cp < 0x1887)
  1045. return true;
  1046. if (cp < 0x1887)
  1047. return false;
  1048. if (cp < 0x18a9)
  1049. return true;
  1050. if (cp === 0x18aa)
  1051. return true;
  1052. return false;
  1053. }
  1054. if (cp < 0x18f6)
  1055. return true;
  1056. if (cp < 0x1900)
  1057. return false;
  1058. if (cp < 0x191f)
  1059. return true;
  1060. if (cp < 0x1950)
  1061. return false;
  1062. if (cp < 0x196e)
  1063. return true;
  1064. if (cp < 0x1970)
  1065. return false;
  1066. if (cp < 0x1975)
  1067. return true;
  1068. if (cp < 0x1980)
  1069. return false;
  1070. if (cp < 0x19ac)
  1071. return true;
  1072. return false;
  1073. }
  1074. if (cp < 0x1b45) {
  1075. if (cp < 0x19b0)
  1076. return false;
  1077. if (cp < 0x19ca)
  1078. return true;
  1079. if (cp < 0x1a00)
  1080. return false;
  1081. if (cp < 0x1a17)
  1082. return true;
  1083. if (cp < 0x1a20)
  1084. return false;
  1085. if (cp < 0x1a55)
  1086. return true;
  1087. if (cp === 0x1aa7)
  1088. return true;
  1089. if (cp < 0x1b05)
  1090. return false;
  1091. if (cp < 0x1b34)
  1092. return true;
  1093. return false;
  1094. }
  1095. if (cp < 0x1b4c)
  1096. return true;
  1097. if (cp < 0x1b83)
  1098. return false;
  1099. if (cp < 0x1ba1)
  1100. return true;
  1101. if (cp < 0x1bae)
  1102. return false;
  1103. if (cp < 0x1bb0)
  1104. return true;
  1105. if (cp < 0x1bba)
  1106. return false;
  1107. if (cp < 0x1be6)
  1108. return true;
  1109. if (cp < 0x1c00)
  1110. return false;
  1111. if (cp < 0x1c24)
  1112. return true;
  1113. if (cp < 0x1c4d)
  1114. return false;
  1115. if (cp < 0x1c50)
  1116. return true;
  1117. return false;
  1118. }
  1119. if (cp < 0x2126) {
  1120. if (cp < 0x1f5f) {
  1121. if (cp < 0x1d79) {
  1122. if (cp < 0x1cf5) {
  1123. if (cp < 0x1c5a)
  1124. return false;
  1125. if (cp < 0x1c78)
  1126. return true;
  1127. if (cp < 0x1c78)
  1128. return false;
  1129. if (cp < 0x1c7e)
  1130. return true;
  1131. if (cp < 0x1c80)
  1132. return false;
  1133. if (cp < 0x1c89)
  1134. return true;
  1135. if (cp < 0x1ce9)
  1136. return false;
  1137. if (cp < 0x1ced)
  1138. return true;
  1139. if (cp < 0x1cee)
  1140. return false;
  1141. if (cp < 0x1cf2)
  1142. return true;
  1143. return false;
  1144. }
  1145. if (cp < 0x1cf7)
  1146. return true;
  1147. if (cp < 0x1d00)
  1148. return false;
  1149. if (cp < 0x1d2c)
  1150. return true;
  1151. if (cp < 0x1d2c)
  1152. return false;
  1153. if (cp < 0x1d6b)
  1154. return true;
  1155. if (cp < 0x1d6b)
  1156. return false;
  1157. if (cp < 0x1d78)
  1158. return true;
  1159. if (cp === 0x1d78)
  1160. return true;
  1161. return false;
  1162. }
  1163. if (cp < 0x1f48) {
  1164. if (cp < 0x1d79)
  1165. return false;
  1166. if (cp < 0x1d9b)
  1167. return true;
  1168. if (cp < 0x1d9b)
  1169. return false;
  1170. if (cp < 0x1dc0)
  1171. return true;
  1172. if (cp < 0x1e00)
  1173. return false;
  1174. if (cp < 0x1f16)
  1175. return true;
  1176. if (cp < 0x1f18)
  1177. return false;
  1178. if (cp < 0x1f1e)
  1179. return true;
  1180. if (cp < 0x1f20)
  1181. return false;
  1182. if (cp < 0x1f46)
  1183. return true;
  1184. return false;
  1185. }
  1186. if (cp < 0x1f4e)
  1187. return true;
  1188. if (cp < 0x1f50)
  1189. return false;
  1190. if (cp < 0x1f58)
  1191. return true;
  1192. if (cp === 0x1f59)
  1193. return true;
  1194. if (cp === 0x1f5b)
  1195. return true;
  1196. if (cp === 0x1f5d)
  1197. return true;
  1198. return false;
  1199. }
  1200. if (cp < 0x1ff6) {
  1201. if (cp < 0x1fc6) {
  1202. if (cp < 0x1f5f)
  1203. return false;
  1204. if (cp < 0x1f7e)
  1205. return true;
  1206. if (cp < 0x1f80)
  1207. return false;
  1208. if (cp < 0x1fb5)
  1209. return true;
  1210. if (cp < 0x1fb6)
  1211. return false;
  1212. if (cp < 0x1fbd)
  1213. return true;
  1214. if (cp === 0x1fbe)
  1215. return true;
  1216. if (cp < 0x1fc2)
  1217. return false;
  1218. if (cp < 0x1fc5)
  1219. return true;
  1220. return false;
  1221. }
  1222. if (cp < 0x1fcd)
  1223. return true;
  1224. if (cp < 0x1fd0)
  1225. return false;
  1226. if (cp < 0x1fd4)
  1227. return true;
  1228. if (cp < 0x1fd6)
  1229. return false;
  1230. if (cp < 0x1fdc)
  1231. return true;
  1232. if (cp < 0x1fe0)
  1233. return false;
  1234. if (cp < 0x1fed)
  1235. return true;
  1236. if (cp < 0x1ff2)
  1237. return false;
  1238. if (cp < 0x1ff5)
  1239. return true;
  1240. return false;
  1241. }
  1242. if (cp < 0x2107) {
  1243. if (cp < 0x1ff6)
  1244. return false;
  1245. if (cp < 0x1ffd)
  1246. return true;
  1247. if (cp === 0x2071)
  1248. return true;
  1249. if (cp === 0x207f)
  1250. return true;
  1251. if (cp < 0x2090)
  1252. return false;
  1253. if (cp < 0x209d)
  1254. return true;
  1255. if (cp === 0x2102)
  1256. return true;
  1257. return false;
  1258. }
  1259. if (cp === 0x2107)
  1260. return true;
  1261. if (cp < 0x210a)
  1262. return false;
  1263. if (cp < 0x2114)
  1264. return true;
  1265. if (cp === 0x2115)
  1266. return true;
  1267. if (cp === 0x2118)
  1268. return true;
  1269. if (cp < 0x2119)
  1270. return false;
  1271. if (cp < 0x211e)
  1272. return true;
  1273. if (cp === 0x2124)
  1274. return true;
  1275. return false;
  1276. }
  1277. if (cp < 0x2d00) {
  1278. if (cp < 0x2160) {
  1279. if (cp < 0x2135) {
  1280. if (cp === 0x2126)
  1281. return true;
  1282. if (cp === 0x2128)
  1283. return true;
  1284. if (cp < 0x212a)
  1285. return false;
  1286. if (cp < 0x212e)
  1287. return true;
  1288. if (cp === 0x212e)
  1289. return true;
  1290. if (cp < 0x212f)
  1291. return false;
  1292. if (cp < 0x2135)
  1293. return true;
  1294. return false;
  1295. }
  1296. if (cp < 0x2139)
  1297. return true;
  1298. if (cp === 0x2139)
  1299. return true;
  1300. if (cp < 0x213c)
  1301. return false;
  1302. if (cp < 0x2140)
  1303. return true;
  1304. if (cp < 0x2145)
  1305. return false;
  1306. if (cp < 0x214a)
  1307. return true;
  1308. if (cp === 0x214e)
  1309. return true;
  1310. return false;
  1311. }
  1312. if (cp < 0x2c60) {
  1313. if (cp < 0x2160)
  1314. return false;
  1315. if (cp < 0x2183)
  1316. return true;
  1317. if (cp < 0x2183)
  1318. return false;
  1319. if (cp < 0x2185)
  1320. return true;
  1321. if (cp < 0x2185)
  1322. return false;
  1323. if (cp < 0x2189)
  1324. return true;
  1325. if (cp < 0x2c00)
  1326. return false;
  1327. if (cp < 0x2c2f)
  1328. return true;
  1329. if (cp < 0x2c30)
  1330. return false;
  1331. if (cp < 0x2c5f)
  1332. return true;
  1333. return false;
  1334. }
  1335. if (cp < 0x2c7c)
  1336. return true;
  1337. if (cp < 0x2c7c)
  1338. return false;
  1339. if (cp < 0x2c7e)
  1340. return true;
  1341. if (cp < 0x2c7e)
  1342. return false;
  1343. if (cp < 0x2ce5)
  1344. return true;
  1345. if (cp < 0x2ceb)
  1346. return false;
  1347. if (cp < 0x2cef)
  1348. return true;
  1349. if (cp < 0x2cf2)
  1350. return false;
  1351. if (cp < 0x2cf4)
  1352. return true;
  1353. return false;
  1354. }
  1355. if (cp < 0x2dc0) {
  1356. if (cp < 0x2d80) {
  1357. if (cp < 0x2d00)
  1358. return false;
  1359. if (cp < 0x2d26)
  1360. return true;
  1361. if (cp === 0x2d27)
  1362. return true;
  1363. if (cp === 0x2d2d)
  1364. return true;
  1365. if (cp < 0x2d30)
  1366. return false;
  1367. if (cp < 0x2d68)
  1368. return true;
  1369. if (cp === 0x2d6f)
  1370. return true;
  1371. return false;
  1372. }
  1373. if (cp < 0x2d97)
  1374. return true;
  1375. if (cp < 0x2da0)
  1376. return false;
  1377. if (cp < 0x2da7)
  1378. return true;
  1379. if (cp < 0x2da8)
  1380. return false;
  1381. if (cp < 0x2daf)
  1382. return true;
  1383. if (cp < 0x2db0)
  1384. return false;
  1385. if (cp < 0x2db7)
  1386. return true;
  1387. if (cp < 0x2db8)
  1388. return false;
  1389. if (cp < 0x2dbf)
  1390. return true;
  1391. return false;
  1392. }
  1393. if (cp < 0x3006) {
  1394. if (cp < 0x2dc0)
  1395. return false;
  1396. if (cp < 0x2dc7)
  1397. return true;
  1398. if (cp < 0x2dc8)
  1399. return false;
  1400. if (cp < 0x2dcf)
  1401. return true;
  1402. if (cp < 0x2dd0)
  1403. return false;
  1404. if (cp < 0x2dd7)
  1405. return true;
  1406. if (cp < 0x2dd8)
  1407. return false;
  1408. if (cp < 0x2ddf)
  1409. return true;
  1410. if (cp === 0x3005)
  1411. return true;
  1412. return false;
  1413. }
  1414. if (cp === 0x3006)
  1415. return true;
  1416. if (cp === 0x3007)
  1417. return true;
  1418. if (cp < 0x3021)
  1419. return false;
  1420. if (cp < 0x302a)
  1421. return true;
  1422. if (cp < 0x3031)
  1423. return false;
  1424. if (cp < 0x3036)
  1425. return true;
  1426. if (cp < 0x3038)
  1427. return false;
  1428. if (cp < 0x303b)
  1429. return true;
  1430. if (cp === 0x303b)
  1431. return true;
  1432. return false;
  1433. }
  1434. if (cp < 0x10a10) {
  1435. if (cp < 0xab28) {
  1436. if (cp < 0xa7fa) {
  1437. if (cp < 0xa60c) {
  1438. if (cp < 0x31a0) {
  1439. if (cp < 0x30a1) {
  1440. if (cp === 0x303c)
  1441. return true;
  1442. if (cp < 0x3041)
  1443. return false;
  1444. if (cp < 0x3097)
  1445. return true;
  1446. if (cp < 0x309b)
  1447. return false;
  1448. if (cp < 0x309d)
  1449. return true;
  1450. if (cp < 0x309d)
  1451. return false;
  1452. if (cp < 0x309f)
  1453. return true;
  1454. if (cp === 0x309f)
  1455. return true;
  1456. return false;
  1457. }
  1458. if (cp < 0x30fb)
  1459. return true;
  1460. if (cp < 0x30fc)
  1461. return false;
  1462. if (cp < 0x30ff)
  1463. return true;
  1464. if (cp === 0x30ff)
  1465. return true;
  1466. if (cp < 0x3105)
  1467. return false;
  1468. if (cp < 0x312f)
  1469. return true;
  1470. if (cp < 0x3131)
  1471. return false;
  1472. if (cp < 0x318f)
  1473. return true;
  1474. return false;
  1475. }
  1476. if (cp < 0xa015) {
  1477. if (cp < 0x31a0)
  1478. return false;
  1479. if (cp < 0x31bb)
  1480. return true;
  1481. if (cp < 0x31f0)
  1482. return false;
  1483. if (cp < 0x3200)
  1484. return true;
  1485. if (cp < 0x3400)
  1486. return false;
  1487. if (cp < 0x4db6)
  1488. return true;
  1489. if (cp < 0x4e00)
  1490. return false;
  1491. if (cp < 0x9feb)
  1492. return true;
  1493. if (cp < 0xa000)
  1494. return false;
  1495. if (cp < 0xa015)
  1496. return true;
  1497. return false;
  1498. }
  1499. if (cp === 0xa015)
  1500. return true;
  1501. if (cp < 0xa016)
  1502. return false;
  1503. if (cp < 0xa48d)
  1504. return true;
  1505. if (cp < 0xa4d0)
  1506. return false;
  1507. if (cp < 0xa4f8)
  1508. return true;
  1509. if (cp < 0xa4f8)
  1510. return false;
  1511. if (cp < 0xa4fe)
  1512. return true;
  1513. if (cp < 0xa500)
  1514. return false;
  1515. if (cp < 0xa60c)
  1516. return true;
  1517. return false;
  1518. }
  1519. if (cp < 0xa717) {
  1520. if (cp < 0xa67f) {
  1521. if (cp === 0xa60c)
  1522. return true;
  1523. if (cp < 0xa610)
  1524. return false;
  1525. if (cp < 0xa620)
  1526. return true;
  1527. if (cp < 0xa62a)
  1528. return false;
  1529. if (cp < 0xa62c)
  1530. return true;
  1531. if (cp < 0xa640)
  1532. return false;
  1533. if (cp < 0xa66e)
  1534. return true;
  1535. if (cp === 0xa66e)
  1536. return true;
  1537. return false;
  1538. }
  1539. if (cp === 0xa67f)
  1540. return true;
  1541. if (cp < 0xa680)
  1542. return false;
  1543. if (cp < 0xa69c)
  1544. return true;
  1545. if (cp < 0xa69c)
  1546. return false;
  1547. if (cp < 0xa69e)
  1548. return true;
  1549. if (cp < 0xa6a0)
  1550. return false;
  1551. if (cp < 0xa6e6)
  1552. return true;
  1553. if (cp < 0xa6e6)
  1554. return false;
  1555. if (cp < 0xa6f0)
  1556. return true;
  1557. return false;
  1558. }
  1559. if (cp < 0xa78b) {
  1560. if (cp < 0xa717)
  1561. return false;
  1562. if (cp < 0xa720)
  1563. return true;
  1564. if (cp < 0xa722)
  1565. return false;
  1566. if (cp < 0xa770)
  1567. return true;
  1568. if (cp === 0xa770)
  1569. return true;
  1570. if (cp < 0xa771)
  1571. return false;
  1572. if (cp < 0xa788)
  1573. return true;
  1574. if (cp === 0xa788)
  1575. return true;
  1576. return false;
  1577. }
  1578. if (cp < 0xa78f)
  1579. return true;
  1580. if (cp === 0xa78f)
  1581. return true;
  1582. if (cp < 0xa790)
  1583. return false;
  1584. if (cp < 0xa7af)
  1585. return true;
  1586. if (cp < 0xa7b0)
  1587. return false;
  1588. if (cp < 0xa7b8)
  1589. return true;
  1590. if (cp === 0xa7f7)
  1591. return true;
  1592. if (cp < 0xa7f8)
  1593. return false;
  1594. if (cp < 0xa7fa)
  1595. return true;
  1596. return false;
  1597. }
  1598. if (cp < 0xaa40) {
  1599. if (cp < 0xa90a) {
  1600. if (cp < 0xa840) {
  1601. if (cp === 0xa7fa)
  1602. return true;
  1603. if (cp < 0xa7fb)
  1604. return false;
  1605. if (cp < 0xa802)
  1606. return true;
  1607. if (cp < 0xa803)
  1608. return false;
  1609. if (cp < 0xa806)
  1610. return true;
  1611. if (cp < 0xa807)
  1612. return false;
  1613. if (cp < 0xa80b)
  1614. return true;
  1615. if (cp < 0xa80c)
  1616. return false;
  1617. if (cp < 0xa823)
  1618. return true;
  1619. return false;
  1620. }
  1621. if (cp < 0xa874)
  1622. return true;
  1623. if (cp < 0xa882)
  1624. return false;
  1625. if (cp < 0xa8b4)
  1626. return true;
  1627. if (cp < 0xa8f2)
  1628. return false;
  1629. if (cp < 0xa8f8)
  1630. return true;
  1631. if (cp === 0xa8fb)
  1632. return true;
  1633. if (cp === 0xa8fd)
  1634. return true;
  1635. return false;
  1636. }
  1637. if (cp < 0xa9e0) {
  1638. if (cp < 0xa90a)
  1639. return false;
  1640. if (cp < 0xa926)
  1641. return true;
  1642. if (cp < 0xa930)
  1643. return false;
  1644. if (cp < 0xa947)
  1645. return true;
  1646. if (cp < 0xa960)
  1647. return false;
  1648. if (cp < 0xa97d)
  1649. return true;
  1650. if (cp < 0xa984)
  1651. return false;
  1652. if (cp < 0xa9b3)
  1653. return true;
  1654. if (cp === 0xa9cf)
  1655. return true;
  1656. return false;
  1657. }
  1658. if (cp < 0xa9e5)
  1659. return true;
  1660. if (cp === 0xa9e6)
  1661. return true;
  1662. if (cp < 0xa9e7)
  1663. return false;
  1664. if (cp < 0xa9f0)
  1665. return true;
  1666. if (cp < 0xa9fa)
  1667. return false;
  1668. if (cp < 0xa9ff)
  1669. return true;
  1670. if (cp < 0xaa00)
  1671. return false;
  1672. if (cp < 0xaa29)
  1673. return true;
  1674. return false;
  1675. }
  1676. if (cp < 0xaac0) {
  1677. if (cp < 0xaa7a) {
  1678. if (cp < 0xaa40)
  1679. return false;
  1680. if (cp < 0xaa43)
  1681. return true;
  1682. if (cp < 0xaa44)
  1683. return false;
  1684. if (cp < 0xaa4c)
  1685. return true;
  1686. if (cp < 0xaa60)
  1687. return false;
  1688. if (cp < 0xaa70)
  1689. return true;
  1690. if (cp === 0xaa70)
  1691. return true;
  1692. if (cp < 0xaa71)
  1693. return false;
  1694. if (cp < 0xaa77)
  1695. return true;
  1696. return false;
  1697. }
  1698. if (cp === 0xaa7a)
  1699. return true;
  1700. if (cp < 0xaa7e)
  1701. return false;
  1702. if (cp < 0xaab0)
  1703. return true;
  1704. if (cp === 0xaab1)
  1705. return true;
  1706. if (cp < 0xaab5)
  1707. return false;
  1708. if (cp < 0xaab7)
  1709. return true;
  1710. if (cp < 0xaab9)
  1711. return false;
  1712. if (cp < 0xaabe)
  1713. return true;
  1714. return false;
  1715. }
  1716. if (cp < 0xaaf2) {
  1717. if (cp === 0xaac0)
  1718. return true;
  1719. if (cp === 0xaac2)
  1720. return true;
  1721. if (cp < 0xaadb)
  1722. return false;
  1723. if (cp < 0xaadd)
  1724. return true;
  1725. if (cp === 0xaadd)
  1726. return true;
  1727. if (cp < 0xaae0)
  1728. return false;
  1729. if (cp < 0xaaeb)
  1730. return true;
  1731. return false;
  1732. }
  1733. if (cp === 0xaaf2)
  1734. return true;
  1735. if (cp < 0xaaf3)
  1736. return false;
  1737. if (cp < 0xaaf5)
  1738. return true;
  1739. if (cp < 0xab01)
  1740. return false;
  1741. if (cp < 0xab07)
  1742. return true;
  1743. if (cp < 0xab09)
  1744. return false;
  1745. if (cp < 0xab0f)
  1746. return true;
  1747. if (cp < 0xab11)
  1748. return false;
  1749. if (cp < 0xab17)
  1750. return true;
  1751. if (cp < 0xab20)
  1752. return false;
  1753. if (cp < 0xab27)
  1754. return true;
  1755. return false;
  1756. }
  1757. if (cp < 0x1003c) {
  1758. if (cp < 0xfb46) {
  1759. if (cp < 0xfa70) {
  1760. if (cp < 0xabc0) {
  1761. if (cp < 0xab28)
  1762. return false;
  1763. if (cp < 0xab2f)
  1764. return true;
  1765. if (cp < 0xab30)
  1766. return false;
  1767. if (cp < 0xab5b)
  1768. return true;
  1769. if (cp < 0xab5c)
  1770. return false;
  1771. if (cp < 0xab60)
  1772. return true;
  1773. if (cp < 0xab60)
  1774. return false;
  1775. if (cp < 0xab66)
  1776. return true;
  1777. if (cp < 0xab70)
  1778. return false;
  1779. if (cp < 0xabc0)
  1780. return true;
  1781. return false;
  1782. }
  1783. if (cp < 0xabe3)
  1784. return true;
  1785. if (cp < 0xac00)
  1786. return false;
  1787. if (cp < 0xd7a4)
  1788. return true;
  1789. if (cp < 0xd7b0)
  1790. return false;
  1791. if (cp < 0xd7c7)
  1792. return true;
  1793. if (cp < 0xd7cb)
  1794. return false;
  1795. if (cp < 0xd7fc)
  1796. return true;
  1797. if (cp < 0xf900)
  1798. return false;
  1799. if (cp < 0xfa6e)
  1800. return true;
  1801. return false;
  1802. }
  1803. if (cp < 0xfb2a) {
  1804. if (cp < 0xfa70)
  1805. return false;
  1806. if (cp < 0xfada)
  1807. return true;
  1808. if (cp < 0xfb00)
  1809. return false;
  1810. if (cp < 0xfb07)
  1811. return true;
  1812. if (cp < 0xfb13)
  1813. return false;
  1814. if (cp < 0xfb18)
  1815. return true;
  1816. if (cp === 0xfb1d)
  1817. return true;
  1818. if (cp < 0xfb1f)
  1819. return false;
  1820. if (cp < 0xfb29)
  1821. return true;
  1822. return false;
  1823. }
  1824. if (cp < 0xfb37)
  1825. return true;
  1826. if (cp < 0xfb38)
  1827. return false;
  1828. if (cp < 0xfb3d)
  1829. return true;
  1830. if (cp === 0xfb3e)
  1831. return true;
  1832. if (cp < 0xfb40)
  1833. return false;
  1834. if (cp < 0xfb42)
  1835. return true;
  1836. if (cp < 0xfb43)
  1837. return false;
  1838. if (cp < 0xfb45)
  1839. return true;
  1840. return false;
  1841. }
  1842. if (cp < 0xff70) {
  1843. if (cp < 0xfe70) {
  1844. if (cp < 0xfb46)
  1845. return false;
  1846. if (cp < 0xfbb2)
  1847. return true;
  1848. if (cp < 0xfbd3)
  1849. return false;
  1850. if (cp < 0xfd3e)
  1851. return true;
  1852. if (cp < 0xfd50)
  1853. return false;
  1854. if (cp < 0xfd90)
  1855. return true;
  1856. if (cp < 0xfd92)
  1857. return false;
  1858. if (cp < 0xfdc8)
  1859. return true;
  1860. if (cp < 0xfdf0)
  1861. return false;
  1862. if (cp < 0xfdfc)
  1863. return true;
  1864. return false;
  1865. }
  1866. if (cp < 0xfe75)
  1867. return true;
  1868. if (cp < 0xfe76)
  1869. return false;
  1870. if (cp < 0xfefd)
  1871. return true;
  1872. if (cp < 0xff21)
  1873. return false;
  1874. if (cp < 0xff3b)
  1875. return true;
  1876. if (cp < 0xff41)
  1877. return false;
  1878. if (cp < 0xff5b)
  1879. return true;
  1880. if (cp < 0xff66)
  1881. return false;
  1882. if (cp < 0xff70)
  1883. return true;
  1884. return false;
  1885. }
  1886. if (cp < 0xffca) {
  1887. if (cp === 0xff70)
  1888. return true;
  1889. if (cp < 0xff71)
  1890. return false;
  1891. if (cp < 0xff9e)
  1892. return true;
  1893. if (cp < 0xff9e)
  1894. return false;
  1895. if (cp < 0xffa0)
  1896. return true;
  1897. if (cp < 0xffa0)
  1898. return false;
  1899. if (cp < 0xffbf)
  1900. return true;
  1901. if (cp < 0xffc2)
  1902. return false;
  1903. if (cp < 0xffc8)
  1904. return true;
  1905. return false;
  1906. }
  1907. if (cp < 0xffd0)
  1908. return true;
  1909. if (cp < 0xffd2)
  1910. return false;
  1911. if (cp < 0xffd8)
  1912. return true;
  1913. if (cp < 0xffda)
  1914. return false;
  1915. if (cp < 0xffdd)
  1916. return true;
  1917. if (cp < 0x10000)
  1918. return false;
  1919. if (cp < 0x1000c)
  1920. return true;
  1921. if (cp < 0x1000d)
  1922. return false;
  1923. if (cp < 0x10027)
  1924. return true;
  1925. if (cp < 0x10028)
  1926. return false;
  1927. if (cp < 0x1003b)
  1928. return true;
  1929. return false;
  1930. }
  1931. if (cp < 0x104d8) {
  1932. if (cp < 0x10342) {
  1933. if (cp < 0x10280) {
  1934. if (cp < 0x1003c)
  1935. return false;
  1936. if (cp < 0x1003e)
  1937. return true;
  1938. if (cp < 0x1003f)
  1939. return false;
  1940. if (cp < 0x1004e)
  1941. return true;
  1942. if (cp < 0x10050)
  1943. return false;
  1944. if (cp < 0x1005e)
  1945. return true;
  1946. if (cp < 0x10080)
  1947. return false;
  1948. if (cp < 0x100fb)
  1949. return true;
  1950. if (cp < 0x10140)
  1951. return false;
  1952. if (cp < 0x10175)
  1953. return true;
  1954. return false;
  1955. }
  1956. if (cp < 0x1029d)
  1957. return true;
  1958. if (cp < 0x102a0)
  1959. return false;
  1960. if (cp < 0x102d1)
  1961. return true;
  1962. if (cp < 0x10300)
  1963. return false;
  1964. if (cp < 0x10320)
  1965. return true;
  1966. if (cp < 0x1032d)
  1967. return false;
  1968. if (cp < 0x10341)
  1969. return true;
  1970. if (cp === 0x10341)
  1971. return true;
  1972. return false;
  1973. }
  1974. if (cp < 0x103c8) {
  1975. if (cp < 0x10342)
  1976. return false;
  1977. if (cp < 0x1034a)
  1978. return true;
  1979. if (cp === 0x1034a)
  1980. return true;
  1981. if (cp < 0x10350)
  1982. return false;
  1983. if (cp < 0x10376)
  1984. return true;
  1985. if (cp < 0x10380)
  1986. return false;
  1987. if (cp < 0x1039e)
  1988. return true;
  1989. if (cp < 0x103a0)
  1990. return false;
  1991. if (cp < 0x103c4)
  1992. return true;
  1993. return false;
  1994. }
  1995. if (cp < 0x103d0)
  1996. return true;
  1997. if (cp < 0x103d1)
  1998. return false;
  1999. if (cp < 0x103d6)
  2000. return true;
  2001. if (cp < 0x10400)
  2002. return false;
  2003. if (cp < 0x10450)
  2004. return true;
  2005. if (cp < 0x10450)
  2006. return false;
  2007. if (cp < 0x1049e)
  2008. return true;
  2009. if (cp < 0x104b0)
  2010. return false;
  2011. if (cp < 0x104d4)
  2012. return true;
  2013. return false;
  2014. }
  2015. if (cp < 0x1083c) {
  2016. if (cp < 0x10760) {
  2017. if (cp < 0x104d8)
  2018. return false;
  2019. if (cp < 0x104fc)
  2020. return true;
  2021. if (cp < 0x10500)
  2022. return false;
  2023. if (cp < 0x10528)
  2024. return true;
  2025. if (cp < 0x10530)
  2026. return false;
  2027. if (cp < 0x10564)
  2028. return true;
  2029. if (cp < 0x10600)
  2030. return false;
  2031. if (cp < 0x10737)
  2032. return true;
  2033. if (cp < 0x10740)
  2034. return false;
  2035. if (cp < 0x10756)
  2036. return true;
  2037. return false;
  2038. }
  2039. if (cp < 0x10768)
  2040. return true;
  2041. if (cp < 0x10800)
  2042. return false;
  2043. if (cp < 0x10806)
  2044. return true;
  2045. if (cp === 0x10808)
  2046. return true;
  2047. if (cp < 0x1080a)
  2048. return false;
  2049. if (cp < 0x10836)
  2050. return true;
  2051. if (cp < 0x10837)
  2052. return false;
  2053. if (cp < 0x10839)
  2054. return true;
  2055. return false;
  2056. }
  2057. if (cp < 0x108f4) {
  2058. if (cp === 0x1083c)
  2059. return true;
  2060. if (cp < 0x1083f)
  2061. return false;
  2062. if (cp < 0x10856)
  2063. return true;
  2064. if (cp < 0x10860)
  2065. return false;
  2066. if (cp < 0x10877)
  2067. return true;
  2068. if (cp < 0x10880)
  2069. return false;
  2070. if (cp < 0x1089f)
  2071. return true;
  2072. if (cp < 0x108e0)
  2073. return false;
  2074. if (cp < 0x108f3)
  2075. return true;
  2076. return false;
  2077. }
  2078. if (cp < 0x108f6)
  2079. return true;
  2080. if (cp < 0x10900)
  2081. return false;
  2082. if (cp < 0x10916)
  2083. return true;
  2084. if (cp < 0x10920)
  2085. return false;
  2086. if (cp < 0x1093a)
  2087. return true;
  2088. if (cp < 0x10980)
  2089. return false;
  2090. if (cp < 0x109b8)
  2091. return true;
  2092. if (cp < 0x109be)
  2093. return false;
  2094. if (cp < 0x109c0)
  2095. return true;
  2096. if (cp === 0x10a00)
  2097. return true;
  2098. return false;
  2099. }
  2100. if (cp < 0x16f50) {
  2101. if (cp < 0x11400) {
  2102. if (cp < 0x11183) {
  2103. if (cp < 0x10b80) {
  2104. if (cp < 0x10ac0) {
  2105. if (cp < 0x10a10)
  2106. return false;
  2107. if (cp < 0x10a14)
  2108. return true;
  2109. if (cp < 0x10a15)
  2110. return false;
  2111. if (cp < 0x10a18)
  2112. return true;
  2113. if (cp < 0x10a19)
  2114. return false;
  2115. if (cp < 0x10a34)
  2116. return true;
  2117. if (cp < 0x10a60)
  2118. return false;
  2119. if (cp < 0x10a7d)
  2120. return true;
  2121. if (cp < 0x10a80)
  2122. return false;
  2123. if (cp < 0x10a9d)
  2124. return true;
  2125. return false;
  2126. }
  2127. if (cp < 0x10ac8)
  2128. return true;
  2129. if (cp < 0x10ac9)
  2130. return false;
  2131. if (cp < 0x10ae5)
  2132. return true;
  2133. if (cp < 0x10b00)
  2134. return false;
  2135. if (cp < 0x10b36)
  2136. return true;
  2137. if (cp < 0x10b40)
  2138. return false;
  2139. if (cp < 0x10b56)
  2140. return true;
  2141. if (cp < 0x10b60)
  2142. return false;
  2143. if (cp < 0x10b73)
  2144. return true;
  2145. return false;
  2146. }
  2147. if (cp < 0x11083) {
  2148. if (cp < 0x10b80)
  2149. return false;
  2150. if (cp < 0x10b92)
  2151. return true;
  2152. if (cp < 0x10c00)
  2153. return false;
  2154. if (cp < 0x10c49)
  2155. return true;
  2156. if (cp < 0x10c80)
  2157. return false;
  2158. if (cp < 0x10cb3)
  2159. return true;
  2160. if (cp < 0x10cc0)
  2161. return false;
  2162. if (cp < 0x10cf3)
  2163. return true;
  2164. if (cp < 0x11003)
  2165. return false;
  2166. if (cp < 0x11038)
  2167. return true;
  2168. return false;
  2169. }
  2170. if (cp < 0x110b0)
  2171. return true;
  2172. if (cp < 0x110d0)
  2173. return false;
  2174. if (cp < 0x110e9)
  2175. return true;
  2176. if (cp < 0x11103)
  2177. return false;
  2178. if (cp < 0x11127)
  2179. return true;
  2180. if (cp < 0x11150)
  2181. return false;
  2182. if (cp < 0x11173)
  2183. return true;
  2184. if (cp === 0x11176)
  2185. return true;
  2186. return false;
  2187. }
  2188. if (cp < 0x1129f) {
  2189. if (cp < 0x11213) {
  2190. if (cp < 0x11183)
  2191. return false;
  2192. if (cp < 0x111b3)
  2193. return true;
  2194. if (cp < 0x111c1)
  2195. return false;
  2196. if (cp < 0x111c5)
  2197. return true;
  2198. if (cp === 0x111da)
  2199. return true;
  2200. if (cp === 0x111dc)
  2201. return true;
  2202. if (cp < 0x11200)
  2203. return false;
  2204. if (cp < 0x11212)
  2205. return true;
  2206. return false;
  2207. }
  2208. if (cp < 0x1122c)
  2209. return true;
  2210. if (cp < 0x11280)
  2211. return false;
  2212. if (cp < 0x11287)
  2213. return true;
  2214. if (cp === 0x11288)
  2215. return true;
  2216. if (cp < 0x1128a)
  2217. return false;
  2218. if (cp < 0x1128e)
  2219. return true;
  2220. if (cp < 0x1128f)
  2221. return false;
  2222. if (cp < 0x1129e)
  2223. return true;
  2224. return false;
  2225. }
  2226. if (cp < 0x1132a) {
  2227. if (cp < 0x1129f)
  2228. return false;
  2229. if (cp < 0x112a9)
  2230. return true;
  2231. if (cp < 0x112b0)
  2232. return false;
  2233. if (cp < 0x112df)
  2234. return true;
  2235. if (cp < 0x11305)
  2236. return false;
  2237. if (cp < 0x1130d)
  2238. return true;
  2239. if (cp < 0x1130f)
  2240. return false;
  2241. if (cp < 0x11311)
  2242. return true;
  2243. if (cp < 0x11313)
  2244. return false;
  2245. if (cp < 0x11329)
  2246. return true;
  2247. return false;
  2248. }
  2249. if (cp < 0x11331)
  2250. return true;
  2251. if (cp < 0x11332)
  2252. return false;
  2253. if (cp < 0x11334)
  2254. return true;
  2255. if (cp < 0x11335)
  2256. return false;
  2257. if (cp < 0x1133a)
  2258. return true;
  2259. if (cp === 0x1133d)
  2260. return true;
  2261. if (cp === 0x11350)
  2262. return true;
  2263. if (cp < 0x1135d)
  2264. return false;
  2265. if (cp < 0x11362)
  2266. return true;
  2267. return false;
  2268. }
  2269. if (cp < 0x11c00) {
  2270. if (cp < 0x11700) {
  2271. if (cp < 0x11580) {
  2272. if (cp < 0x11400)
  2273. return false;
  2274. if (cp < 0x11435)
  2275. return true;
  2276. if (cp < 0x11447)
  2277. return false;
  2278. if (cp < 0x1144b)
  2279. return true;
  2280. if (cp < 0x11480)
  2281. return false;
  2282. if (cp < 0x114b0)
  2283. return true;
  2284. if (cp < 0x114c4)
  2285. return false;
  2286. if (cp < 0x114c6)
  2287. return true;
  2288. if (cp === 0x114c7)
  2289. return true;
  2290. return false;
  2291. }
  2292. if (cp < 0x115af)
  2293. return true;
  2294. if (cp < 0x115d8)
  2295. return false;
  2296. if (cp < 0x115dc)
  2297. return true;
  2298. if (cp < 0x11600)
  2299. return false;
  2300. if (cp < 0x11630)
  2301. return true;
  2302. if (cp === 0x11644)
  2303. return true;
  2304. if (cp < 0x11680)
  2305. return false;
  2306. if (cp < 0x116ab)
  2307. return true;
  2308. return false;
  2309. }
  2310. if (cp < 0x11a3a) {
  2311. if (cp < 0x11700)
  2312. return false;
  2313. if (cp < 0x1171a)
  2314. return true;
  2315. if (cp < 0x118a0)
  2316. return false;
  2317. if (cp < 0x118e0)
  2318. return true;
  2319. if (cp === 0x118ff)
  2320. return true;
  2321. if (cp === 0x11a00)
  2322. return true;
  2323. if (cp < 0x11a0b)
  2324. return false;
  2325. if (cp < 0x11a33)
  2326. return true;
  2327. return false;
  2328. }
  2329. if (cp === 0x11a3a)
  2330. return true;
  2331. if (cp === 0x11a50)
  2332. return true;
  2333. if (cp < 0x11a5c)
  2334. return false;
  2335. if (cp < 0x11a84)
  2336. return true;
  2337. if (cp < 0x11a86)
  2338. return false;
  2339. if (cp < 0x11a8a)
  2340. return true;
  2341. if (cp < 0x11ac0)
  2342. return false;
  2343. if (cp < 0x11af9)
  2344. return true;
  2345. return false;
  2346. }
  2347. if (cp < 0x12480) {
  2348. if (cp < 0x11d08) {
  2349. if (cp < 0x11c00)
  2350. return false;
  2351. if (cp < 0x11c09)
  2352. return true;
  2353. if (cp < 0x11c0a)
  2354. return false;
  2355. if (cp < 0x11c2f)
  2356. return true;
  2357. if (cp === 0x11c40)
  2358. return true;
  2359. if (cp < 0x11c72)
  2360. return false;
  2361. if (cp < 0x11c90)
  2362. return true;
  2363. if (cp < 0x11d00)
  2364. return false;
  2365. if (cp < 0x11d07)
  2366. return true;
  2367. return false;
  2368. }
  2369. if (cp < 0x11d0a)
  2370. return true;
  2371. if (cp < 0x11d0b)
  2372. return false;
  2373. if (cp < 0x11d31)
  2374. return true;
  2375. if (cp === 0x11d46)
  2376. return true;
  2377. if (cp < 0x12000)
  2378. return false;
  2379. if (cp < 0x1239a)
  2380. return true;
  2381. if (cp < 0x12400)
  2382. return false;
  2383. if (cp < 0x1246f)
  2384. return true;
  2385. return false;
  2386. }
  2387. if (cp < 0x16ad0) {
  2388. if (cp < 0x12480)
  2389. return false;
  2390. if (cp < 0x12544)
  2391. return true;
  2392. if (cp < 0x13000)
  2393. return false;
  2394. if (cp < 0x1342f)
  2395. return true;
  2396. if (cp < 0x14400)
  2397. return false;
  2398. if (cp < 0x14647)
  2399. return true;
  2400. if (cp < 0x16800)
  2401. return false;
  2402. if (cp < 0x16a39)
  2403. return true;
  2404. if (cp < 0x16a40)
  2405. return false;
  2406. if (cp < 0x16a5f)
  2407. return true;
  2408. return false;
  2409. }
  2410. if (cp < 0x16aee)
  2411. return true;
  2412. if (cp < 0x16b00)
  2413. return false;
  2414. if (cp < 0x16b30)
  2415. return true;
  2416. if (cp < 0x16b40)
  2417. return false;
  2418. if (cp < 0x16b44)
  2419. return true;
  2420. if (cp < 0x16b63)
  2421. return false;
  2422. if (cp < 0x16b78)
  2423. return true;
  2424. if (cp < 0x16b7d)
  2425. return false;
  2426. if (cp < 0x16b90)
  2427. return true;
  2428. if (cp < 0x16f00)
  2429. return false;
  2430. if (cp < 0x16f45)
  2431. return true;
  2432. return false;
  2433. }
  2434. if (cp < 0x1e800) {
  2435. if (cp < 0x1d4c5) {
  2436. if (cp < 0x1bc90) {
  2437. if (cp < 0x1b000) {
  2438. if (cp === 0x16f50)
  2439. return true;
  2440. if (cp < 0x16f93)
  2441. return false;
  2442. if (cp < 0x16fa0)
  2443. return true;
  2444. if (cp < 0x16fe0)
  2445. return false;
  2446. if (cp < 0x16fe2)
  2447. return true;
  2448. if (cp < 0x17000)
  2449. return false;
  2450. if (cp < 0x187ed)
  2451. return true;
  2452. if (cp < 0x18800)
  2453. return false;
  2454. if (cp < 0x18af3)
  2455. return true;
  2456. return false;
  2457. }
  2458. if (cp < 0x1b11f)
  2459. return true;
  2460. if (cp < 0x1b170)
  2461. return false;
  2462. if (cp < 0x1b2fc)
  2463. return true;
  2464. if (cp < 0x1bc00)
  2465. return false;
  2466. if (cp < 0x1bc6b)
  2467. return true;
  2468. if (cp < 0x1bc70)
  2469. return false;
  2470. if (cp < 0x1bc7d)
  2471. return true;
  2472. if (cp < 0x1bc80)
  2473. return false;
  2474. if (cp < 0x1bc89)
  2475. return true;
  2476. return false;
  2477. }
  2478. if (cp < 0x1d4a5) {
  2479. if (cp < 0x1bc90)
  2480. return false;
  2481. if (cp < 0x1bc9a)
  2482. return true;
  2483. if (cp < 0x1d400)
  2484. return false;
  2485. if (cp < 0x1d455)
  2486. return true;
  2487. if (cp < 0x1d456)
  2488. return false;
  2489. if (cp < 0x1d49d)
  2490. return true;
  2491. if (cp < 0x1d49e)
  2492. return false;
  2493. if (cp < 0x1d4a0)
  2494. return true;
  2495. if (cp === 0x1d4a2)
  2496. return true;
  2497. return false;
  2498. }
  2499. if (cp < 0x1d4a7)
  2500. return true;
  2501. if (cp < 0x1d4a9)
  2502. return false;
  2503. if (cp < 0x1d4ad)
  2504. return true;
  2505. if (cp < 0x1d4ae)
  2506. return false;
  2507. if (cp < 0x1d4ba)
  2508. return true;
  2509. if (cp === 0x1d4bb)
  2510. return true;
  2511. if (cp < 0x1d4bd)
  2512. return false;
  2513. if (cp < 0x1d4c4)
  2514. return true;
  2515. return false;
  2516. }
  2517. if (cp < 0x1d6a8) {
  2518. if (cp < 0x1d53b) {
  2519. if (cp < 0x1d4c5)
  2520. return false;
  2521. if (cp < 0x1d506)
  2522. return true;
  2523. if (cp < 0x1d507)
  2524. return false;
  2525. if (cp < 0x1d50b)
  2526. return true;
  2527. if (cp < 0x1d50d)
  2528. return false;
  2529. if (cp < 0x1d515)
  2530. return true;
  2531. if (cp < 0x1d516)
  2532. return false;
  2533. if (cp < 0x1d51d)
  2534. return true;
  2535. if (cp < 0x1d51e)
  2536. return false;
  2537. if (cp < 0x1d53a)
  2538. return true;
  2539. return false;
  2540. }
  2541. if (cp < 0x1d53f)
  2542. return true;
  2543. if (cp < 0x1d540)
  2544. return false;
  2545. if (cp < 0x1d545)
  2546. return true;
  2547. if (cp === 0x1d546)
  2548. return true;
  2549. if (cp < 0x1d54a)
  2550. return false;
  2551. if (cp < 0x1d551)
  2552. return true;
  2553. if (cp < 0x1d552)
  2554. return false;
  2555. if (cp < 0x1d6a6)
  2556. return true;
  2557. return false;
  2558. }
  2559. if (cp < 0x1d736) {
  2560. if (cp < 0x1d6a8)
  2561. return false;
  2562. if (cp < 0x1d6c1)
  2563. return true;
  2564. if (cp < 0x1d6c2)
  2565. return false;
  2566. if (cp < 0x1d6db)
  2567. return true;
  2568. if (cp < 0x1d6dc)
  2569. return false;
  2570. if (cp < 0x1d6fb)
  2571. return true;
  2572. if (cp < 0x1d6fc)
  2573. return false;
  2574. if (cp < 0x1d715)
  2575. return true;
  2576. if (cp < 0x1d716)
  2577. return false;
  2578. if (cp < 0x1d735)
  2579. return true;
  2580. return false;
  2581. }
  2582. if (cp < 0x1d74f)
  2583. return true;
  2584. if (cp < 0x1d750)
  2585. return false;
  2586. if (cp < 0x1d76f)
  2587. return true;
  2588. if (cp < 0x1d770)
  2589. return false;
  2590. if (cp < 0x1d789)
  2591. return true;
  2592. if (cp < 0x1d78a)
  2593. return false;
  2594. if (cp < 0x1d7a9)
  2595. return true;
  2596. if (cp < 0x1d7aa)
  2597. return false;
  2598. if (cp < 0x1d7c3)
  2599. return true;
  2600. if (cp < 0x1d7c4)
  2601. return false;
  2602. if (cp < 0x1d7cc)
  2603. return true;
  2604. return false;
  2605. }
  2606. if (cp < 0x1ee5b) {
  2607. if (cp < 0x1ee3b) {
  2608. if (cp < 0x1ee24) {
  2609. if (cp < 0x1e800)
  2610. return false;
  2611. if (cp < 0x1e8c5)
  2612. return true;
  2613. if (cp < 0x1e900)
  2614. return false;
  2615. if (cp < 0x1e944)
  2616. return true;
  2617. if (cp < 0x1ee00)
  2618. return false;
  2619. if (cp < 0x1ee04)
  2620. return true;
  2621. if (cp < 0x1ee05)
  2622. return false;
  2623. if (cp < 0x1ee20)
  2624. return true;
  2625. if (cp < 0x1ee21)
  2626. return false;
  2627. if (cp < 0x1ee23)
  2628. return true;
  2629. return false;
  2630. }
  2631. if (cp === 0x1ee24)
  2632. return true;
  2633. if (cp === 0x1ee27)
  2634. return true;
  2635. if (cp < 0x1ee29)
  2636. return false;
  2637. if (cp < 0x1ee33)
  2638. return true;
  2639. if (cp < 0x1ee34)
  2640. return false;
  2641. if (cp < 0x1ee38)
  2642. return true;
  2643. if (cp === 0x1ee39)
  2644. return true;
  2645. return false;
  2646. }
  2647. if (cp < 0x1ee4d) {
  2648. if (cp === 0x1ee3b)
  2649. return true;
  2650. if (cp === 0x1ee42)
  2651. return true;
  2652. if (cp === 0x1ee47)
  2653. return true;
  2654. if (cp === 0x1ee49)
  2655. return true;
  2656. if (cp === 0x1ee4b)
  2657. return true;
  2658. return false;
  2659. }
  2660. if (cp < 0x1ee50)
  2661. return true;
  2662. if (cp < 0x1ee51)
  2663. return false;
  2664. if (cp < 0x1ee53)
  2665. return true;
  2666. if (cp === 0x1ee54)
  2667. return true;
  2668. if (cp === 0x1ee57)
  2669. return true;
  2670. if (cp === 0x1ee59)
  2671. return true;
  2672. return false;
  2673. }
  2674. if (cp < 0x1ee80) {
  2675. if (cp < 0x1ee67) {
  2676. if (cp === 0x1ee5b)
  2677. return true;
  2678. if (cp === 0x1ee5d)
  2679. return true;
  2680. if (cp === 0x1ee5f)
  2681. return true;
  2682. if (cp < 0x1ee61)
  2683. return false;
  2684. if (cp < 0x1ee63)
  2685. return true;
  2686. if (cp === 0x1ee64)
  2687. return true;
  2688. return false;
  2689. }
  2690. if (cp < 0x1ee6b)
  2691. return true;
  2692. if (cp < 0x1ee6c)
  2693. return false;
  2694. if (cp < 0x1ee73)
  2695. return true;
  2696. if (cp < 0x1ee74)
  2697. return false;
  2698. if (cp < 0x1ee78)
  2699. return true;
  2700. if (cp < 0x1ee79)
  2701. return false;
  2702. if (cp < 0x1ee7d)
  2703. return true;
  2704. if (cp === 0x1ee7e)
  2705. return true;
  2706. return false;
  2707. }
  2708. if (cp < 0x20000) {
  2709. if (cp < 0x1ee80)
  2710. return false;
  2711. if (cp < 0x1ee8a)
  2712. return true;
  2713. if (cp < 0x1ee8b)
  2714. return false;
  2715. if (cp < 0x1ee9c)
  2716. return true;
  2717. if (cp < 0x1eea1)
  2718. return false;
  2719. if (cp < 0x1eea4)
  2720. return true;
  2721. if (cp < 0x1eea5)
  2722. return false;
  2723. if (cp < 0x1eeaa)
  2724. return true;
  2725. if (cp < 0x1eeab)
  2726. return false;
  2727. if (cp < 0x1eebc)
  2728. return true;
  2729. return false;
  2730. }
  2731. if (cp < 0x2a6d7)
  2732. return true;
  2733. if (cp < 0x2a700)
  2734. return false;
  2735. if (cp < 0x2b735)
  2736. return true;
  2737. if (cp < 0x2b740)
  2738. return false;
  2739. if (cp < 0x2b81e)
  2740. return true;
  2741. if (cp < 0x2b820)
  2742. return false;
  2743. if (cp < 0x2cea2)
  2744. return true;
  2745. if (cp < 0x2ceb0)
  2746. return false;
  2747. if (cp < 0x2ebe1)
  2748. return true;
  2749. if (cp < 0x2f800)
  2750. return false;
  2751. if (cp < 0x2fa1e)
  2752. return true;
  2753. return false;
  2754. }
  2755. function isLargeIdContinue(cp) {
  2756. if (cp < 0x1bf2) {
  2757. if (cp < 0xd62) {
  2758. if (cp < 0xa83) {
  2759. if (cp < 0x93b) {
  2760. if (cp < 0x6ea) {
  2761. if (cp < 0x5c7) {
  2762. if (cp === 0xb7)
  2763. return true;
  2764. if (cp < 0x300)
  2765. return false;
  2766. if (cp < 0x370)
  2767. return true;
  2768. if (cp === 0x387)
  2769. return true;
  2770. if (cp < 0x483)
  2771. return false;
  2772. if (cp < 0x488)
  2773. return true;
  2774. if (cp < 0x591)
  2775. return false;
  2776. if (cp < 0x5be)
  2777. return true;
  2778. if (cp === 0x5bf)
  2779. return true;
  2780. if (cp < 0x5c1)
  2781. return false;
  2782. if (cp < 0x5c3)
  2783. return true;
  2784. if (cp < 0x5c4)
  2785. return false;
  2786. if (cp < 0x5c6)
  2787. return true;
  2788. return false;
  2789. }
  2790. if (cp === 0x5c7)
  2791. return true;
  2792. if (cp < 0x610)
  2793. return false;
  2794. if (cp < 0x61b)
  2795. return true;
  2796. if (cp < 0x64b)
  2797. return false;
  2798. if (cp < 0x660)
  2799. return true;
  2800. if (cp < 0x660)
  2801. return false;
  2802. if (cp < 0x66a)
  2803. return true;
  2804. if (cp === 0x670)
  2805. return true;
  2806. if (cp < 0x6d6)
  2807. return false;
  2808. if (cp < 0x6dd)
  2809. return true;
  2810. if (cp < 0x6df)
  2811. return false;
  2812. if (cp < 0x6e5)
  2813. return true;
  2814. if (cp < 0x6e7)
  2815. return false;
  2816. if (cp < 0x6e9)
  2817. return true;
  2818. return false;
  2819. }
  2820. if (cp < 0x81b) {
  2821. if (cp < 0x6ea)
  2822. return false;
  2823. if (cp < 0x6ee)
  2824. return true;
  2825. if (cp < 0x6f0)
  2826. return false;
  2827. if (cp < 0x6fa)
  2828. return true;
  2829. if (cp === 0x711)
  2830. return true;
  2831. if (cp < 0x730)
  2832. return false;
  2833. if (cp < 0x74b)
  2834. return true;
  2835. if (cp < 0x7a6)
  2836. return false;
  2837. if (cp < 0x7b1)
  2838. return true;
  2839. if (cp < 0x7c0)
  2840. return false;
  2841. if (cp < 0x7ca)
  2842. return true;
  2843. if (cp < 0x7eb)
  2844. return false;
  2845. if (cp < 0x7f4)
  2846. return true;
  2847. if (cp < 0x816)
  2848. return false;
  2849. if (cp < 0x81a)
  2850. return true;
  2851. return false;
  2852. }
  2853. if (cp < 0x824)
  2854. return true;
  2855. if (cp < 0x825)
  2856. return false;
  2857. if (cp < 0x828)
  2858. return true;
  2859. if (cp < 0x829)
  2860. return false;
  2861. if (cp < 0x82e)
  2862. return true;
  2863. if (cp < 0x859)
  2864. return false;
  2865. if (cp < 0x85c)
  2866. return true;
  2867. if (cp < 0x8d4)
  2868. return false;
  2869. if (cp < 0x8e2)
  2870. return true;
  2871. if (cp < 0x8e3)
  2872. return false;
  2873. if (cp < 0x903)
  2874. return true;
  2875. if (cp === 0x903)
  2876. return true;
  2877. if (cp === 0x93a)
  2878. return true;
  2879. return false;
  2880. }
  2881. if (cp < 0x9cb) {
  2882. if (cp < 0x962) {
  2883. if (cp === 0x93b)
  2884. return true;
  2885. if (cp === 0x93c)
  2886. return true;
  2887. if (cp < 0x93e)
  2888. return false;
  2889. if (cp < 0x941)
  2890. return true;
  2891. if (cp < 0x941)
  2892. return false;
  2893. if (cp < 0x949)
  2894. return true;
  2895. if (cp < 0x949)
  2896. return false;
  2897. if (cp < 0x94d)
  2898. return true;
  2899. if (cp === 0x94d)
  2900. return true;
  2901. if (cp < 0x94e)
  2902. return false;
  2903. if (cp < 0x950)
  2904. return true;
  2905. if (cp < 0x951)
  2906. return false;
  2907. if (cp < 0x958)
  2908. return true;
  2909. return false;
  2910. }
  2911. if (cp < 0x964)
  2912. return true;
  2913. if (cp < 0x966)
  2914. return false;
  2915. if (cp < 0x970)
  2916. return true;
  2917. if (cp === 0x981)
  2918. return true;
  2919. if (cp < 0x982)
  2920. return false;
  2921. if (cp < 0x984)
  2922. return true;
  2923. if (cp === 0x9bc)
  2924. return true;
  2925. if (cp < 0x9be)
  2926. return false;
  2927. if (cp < 0x9c1)
  2928. return true;
  2929. if (cp < 0x9c1)
  2930. return false;
  2931. if (cp < 0x9c5)
  2932. return true;
  2933. if (cp < 0x9c7)
  2934. return false;
  2935. if (cp < 0x9c9)
  2936. return true;
  2937. return false;
  2938. }
  2939. if (cp < 0xa3e) {
  2940. if (cp < 0x9cb)
  2941. return false;
  2942. if (cp < 0x9cd)
  2943. return true;
  2944. if (cp === 0x9cd)
  2945. return true;
  2946. if (cp === 0x9d7)
  2947. return true;
  2948. if (cp < 0x9e2)
  2949. return false;
  2950. if (cp < 0x9e4)
  2951. return true;
  2952. if (cp < 0x9e6)
  2953. return false;
  2954. if (cp < 0x9f0)
  2955. return true;
  2956. if (cp < 0xa01)
  2957. return false;
  2958. if (cp < 0xa03)
  2959. return true;
  2960. if (cp === 0xa03)
  2961. return true;
  2962. if (cp === 0xa3c)
  2963. return true;
  2964. return false;
  2965. }
  2966. if (cp < 0xa41)
  2967. return true;
  2968. if (cp < 0xa41)
  2969. return false;
  2970. if (cp < 0xa43)
  2971. return true;
  2972. if (cp < 0xa47)
  2973. return false;
  2974. if (cp < 0xa49)
  2975. return true;
  2976. if (cp < 0xa4b)
  2977. return false;
  2978. if (cp < 0xa4e)
  2979. return true;
  2980. if (cp === 0xa51)
  2981. return true;
  2982. if (cp < 0xa66)
  2983. return false;
  2984. if (cp < 0xa70)
  2985. return true;
  2986. if (cp < 0xa70)
  2987. return false;
  2988. if (cp < 0xa72)
  2989. return true;
  2990. if (cp === 0xa75)
  2991. return true;
  2992. if (cp < 0xa81)
  2993. return false;
  2994. if (cp < 0xa83)
  2995. return true;
  2996. return false;
  2997. }
  2998. if (cp < 0xbd7) {
  2999. if (cp < 0xb40) {
  3000. if (cp < 0xae2) {
  3001. if (cp === 0xa83)
  3002. return true;
  3003. if (cp === 0xabc)
  3004. return true;
  3005. if (cp < 0xabe)
  3006. return false;
  3007. if (cp < 0xac1)
  3008. return true;
  3009. if (cp < 0xac1)
  3010. return false;
  3011. if (cp < 0xac6)
  3012. return true;
  3013. if (cp < 0xac7)
  3014. return false;
  3015. if (cp < 0xac9)
  3016. return true;
  3017. if (cp === 0xac9)
  3018. return true;
  3019. if (cp < 0xacb)
  3020. return false;
  3021. if (cp < 0xacd)
  3022. return true;
  3023. if (cp === 0xacd)
  3024. return true;
  3025. return false;
  3026. }
  3027. if (cp < 0xae4)
  3028. return true;
  3029. if (cp < 0xae6)
  3030. return false;
  3031. if (cp < 0xaf0)
  3032. return true;
  3033. if (cp < 0xafa)
  3034. return false;
  3035. if (cp < 0xb00)
  3036. return true;
  3037. if (cp === 0xb01)
  3038. return true;
  3039. if (cp < 0xb02)
  3040. return false;
  3041. if (cp < 0xb04)
  3042. return true;
  3043. if (cp === 0xb3c)
  3044. return true;
  3045. if (cp === 0xb3e)
  3046. return true;
  3047. if (cp === 0xb3f)
  3048. return true;
  3049. return false;
  3050. }
  3051. if (cp < 0xb66) {
  3052. if (cp === 0xb40)
  3053. return true;
  3054. if (cp < 0xb41)
  3055. return false;
  3056. if (cp < 0xb45)
  3057. return true;
  3058. if (cp < 0xb47)
  3059. return false;
  3060. if (cp < 0xb49)
  3061. return true;
  3062. if (cp < 0xb4b)
  3063. return false;
  3064. if (cp < 0xb4d)
  3065. return true;
  3066. if (cp === 0xb4d)
  3067. return true;
  3068. if (cp === 0xb56)
  3069. return true;
  3070. if (cp === 0xb57)
  3071. return true;
  3072. if (cp < 0xb62)
  3073. return false;
  3074. if (cp < 0xb64)
  3075. return true;
  3076. return false;
  3077. }
  3078. if (cp < 0xb70)
  3079. return true;
  3080. if (cp === 0xb82)
  3081. return true;
  3082. if (cp < 0xbbe)
  3083. return false;
  3084. if (cp < 0xbc0)
  3085. return true;
  3086. if (cp === 0xbc0)
  3087. return true;
  3088. if (cp < 0xbc1)
  3089. return false;
  3090. if (cp < 0xbc3)
  3091. return true;
  3092. if (cp < 0xbc6)
  3093. return false;
  3094. if (cp < 0xbc9)
  3095. return true;
  3096. if (cp < 0xbca)
  3097. return false;
  3098. if (cp < 0xbcd)
  3099. return true;
  3100. if (cp === 0xbcd)
  3101. return true;
  3102. return false;
  3103. }
  3104. if (cp < 0xcc0) {
  3105. if (cp < 0xc55) {
  3106. if (cp === 0xbd7)
  3107. return true;
  3108. if (cp < 0xbe6)
  3109. return false;
  3110. if (cp < 0xbf0)
  3111. return true;
  3112. if (cp === 0xc00)
  3113. return true;
  3114. if (cp < 0xc01)
  3115. return false;
  3116. if (cp < 0xc04)
  3117. return true;
  3118. if (cp < 0xc3e)
  3119. return false;
  3120. if (cp < 0xc41)
  3121. return true;
  3122. if (cp < 0xc41)
  3123. return false;
  3124. if (cp < 0xc45)
  3125. return true;
  3126. if (cp < 0xc46)
  3127. return false;
  3128. if (cp < 0xc49)
  3129. return true;
  3130. if (cp < 0xc4a)
  3131. return false;
  3132. if (cp < 0xc4e)
  3133. return true;
  3134. return false;
  3135. }
  3136. if (cp < 0xc57)
  3137. return true;
  3138. if (cp < 0xc62)
  3139. return false;
  3140. if (cp < 0xc64)
  3141. return true;
  3142. if (cp < 0xc66)
  3143. return false;
  3144. if (cp < 0xc70)
  3145. return true;
  3146. if (cp === 0xc81)
  3147. return true;
  3148. if (cp < 0xc82)
  3149. return false;
  3150. if (cp < 0xc84)
  3151. return true;
  3152. if (cp === 0xcbc)
  3153. return true;
  3154. if (cp === 0xcbe)
  3155. return true;
  3156. if (cp === 0xcbf)
  3157. return true;
  3158. return false;
  3159. }
  3160. if (cp < 0xd00) {
  3161. if (cp < 0xcc0)
  3162. return false;
  3163. if (cp < 0xcc5)
  3164. return true;
  3165. if (cp === 0xcc6)
  3166. return true;
  3167. if (cp < 0xcc7)
  3168. return false;
  3169. if (cp < 0xcc9)
  3170. return true;
  3171. if (cp < 0xcca)
  3172. return false;
  3173. if (cp < 0xccc)
  3174. return true;
  3175. if (cp < 0xccc)
  3176. return false;
  3177. if (cp < 0xcce)
  3178. return true;
  3179. if (cp < 0xcd5)
  3180. return false;
  3181. if (cp < 0xcd7)
  3182. return true;
  3183. if (cp < 0xce2)
  3184. return false;
  3185. if (cp < 0xce4)
  3186. return true;
  3187. if (cp < 0xce6)
  3188. return false;
  3189. if (cp < 0xcf0)
  3190. return true;
  3191. return false;
  3192. }
  3193. if (cp < 0xd02)
  3194. return true;
  3195. if (cp < 0xd02)
  3196. return false;
  3197. if (cp < 0xd04)
  3198. return true;
  3199. if (cp < 0xd3b)
  3200. return false;
  3201. if (cp < 0xd3d)
  3202. return true;
  3203. if (cp < 0xd3e)
  3204. return false;
  3205. if (cp < 0xd41)
  3206. return true;
  3207. if (cp < 0xd41)
  3208. return false;
  3209. if (cp < 0xd45)
  3210. return true;
  3211. if (cp < 0xd46)
  3212. return false;
  3213. if (cp < 0xd49)
  3214. return true;
  3215. if (cp < 0xd4a)
  3216. return false;
  3217. if (cp < 0xd4d)
  3218. return true;
  3219. if (cp === 0xd4d)
  3220. return true;
  3221. if (cp === 0xd57)
  3222. return true;
  3223. return false;
  3224. }
  3225. if (cp < 0x17be) {
  3226. if (cp < 0x102b) {
  3227. if (cp < 0xebb) {
  3228. if (cp < 0xde6) {
  3229. if (cp < 0xd62)
  3230. return false;
  3231. if (cp < 0xd64)
  3232. return true;
  3233. if (cp < 0xd66)
  3234. return false;
  3235. if (cp < 0xd70)
  3236. return true;
  3237. if (cp < 0xd82)
  3238. return false;
  3239. if (cp < 0xd84)
  3240. return true;
  3241. if (cp === 0xdca)
  3242. return true;
  3243. if (cp < 0xdcf)
  3244. return false;
  3245. if (cp < 0xdd2)
  3246. return true;
  3247. if (cp < 0xdd2)
  3248. return false;
  3249. if (cp < 0xdd5)
  3250. return true;
  3251. if (cp === 0xdd6)
  3252. return true;
  3253. if (cp < 0xdd8)
  3254. return false;
  3255. if (cp < 0xde0)
  3256. return true;
  3257. return false;
  3258. }
  3259. if (cp < 0xdf0)
  3260. return true;
  3261. if (cp < 0xdf2)
  3262. return false;
  3263. if (cp < 0xdf4)
  3264. return true;
  3265. if (cp === 0xe31)
  3266. return true;
  3267. if (cp < 0xe34)
  3268. return false;
  3269. if (cp < 0xe3b)
  3270. return true;
  3271. if (cp < 0xe47)
  3272. return false;
  3273. if (cp < 0xe4f)
  3274. return true;
  3275. if (cp < 0xe50)
  3276. return false;
  3277. if (cp < 0xe5a)
  3278. return true;
  3279. if (cp === 0xeb1)
  3280. return true;
  3281. if (cp < 0xeb4)
  3282. return false;
  3283. if (cp < 0xeba)
  3284. return true;
  3285. return false;
  3286. }
  3287. if (cp < 0xf3e) {
  3288. if (cp < 0xebb)
  3289. return false;
  3290. if (cp < 0xebd)
  3291. return true;
  3292. if (cp < 0xec8)
  3293. return false;
  3294. if (cp < 0xece)
  3295. return true;
  3296. if (cp < 0xed0)
  3297. return false;
  3298. if (cp < 0xeda)
  3299. return true;
  3300. if (cp < 0xf18)
  3301. return false;
  3302. if (cp < 0xf1a)
  3303. return true;
  3304. if (cp < 0xf20)
  3305. return false;
  3306. if (cp < 0xf2a)
  3307. return true;
  3308. if (cp === 0xf35)
  3309. return true;
  3310. if (cp === 0xf37)
  3311. return true;
  3312. if (cp === 0xf39)
  3313. return true;
  3314. return false;
  3315. }
  3316. if (cp < 0xf40)
  3317. return true;
  3318. if (cp < 0xf71)
  3319. return false;
  3320. if (cp < 0xf7f)
  3321. return true;
  3322. if (cp === 0xf7f)
  3323. return true;
  3324. if (cp < 0xf80)
  3325. return false;
  3326. if (cp < 0xf85)
  3327. return true;
  3328. if (cp < 0xf86)
  3329. return false;
  3330. if (cp < 0xf88)
  3331. return true;
  3332. if (cp < 0xf8d)
  3333. return false;
  3334. if (cp < 0xf98)
  3335. return true;
  3336. if (cp < 0xf99)
  3337. return false;
  3338. if (cp < 0xfbd)
  3339. return true;
  3340. if (cp === 0xfc6)
  3341. return true;
  3342. return false;
  3343. }
  3344. if (cp < 0x1083) {
  3345. if (cp < 0x1040) {
  3346. if (cp < 0x102b)
  3347. return false;
  3348. if (cp < 0x102d)
  3349. return true;
  3350. if (cp < 0x102d)
  3351. return false;
  3352. if (cp < 0x1031)
  3353. return true;
  3354. if (cp === 0x1031)
  3355. return true;
  3356. if (cp < 0x1032)
  3357. return false;
  3358. if (cp < 0x1038)
  3359. return true;
  3360. if (cp === 0x1038)
  3361. return true;
  3362. if (cp < 0x1039)
  3363. return false;
  3364. if (cp < 0x103b)
  3365. return true;
  3366. if (cp < 0x103b)
  3367. return false;
  3368. if (cp < 0x103d)
  3369. return true;
  3370. if (cp < 0x103d)
  3371. return false;
  3372. if (cp < 0x103f)
  3373. return true;
  3374. return false;
  3375. }
  3376. if (cp < 0x104a)
  3377. return true;
  3378. if (cp < 0x1056)
  3379. return false;
  3380. if (cp < 0x1058)
  3381. return true;
  3382. if (cp < 0x1058)
  3383. return false;
  3384. if (cp < 0x105a)
  3385. return true;
  3386. if (cp < 0x105e)
  3387. return false;
  3388. if (cp < 0x1061)
  3389. return true;
  3390. if (cp < 0x1062)
  3391. return false;
  3392. if (cp < 0x1065)
  3393. return true;
  3394. if (cp < 0x1067)
  3395. return false;
  3396. if (cp < 0x106e)
  3397. return true;
  3398. if (cp < 0x1071)
  3399. return false;
  3400. if (cp < 0x1075)
  3401. return true;
  3402. if (cp === 0x1082)
  3403. return true;
  3404. return false;
  3405. }
  3406. if (cp < 0x135d) {
  3407. if (cp < 0x1083)
  3408. return false;
  3409. if (cp < 0x1085)
  3410. return true;
  3411. if (cp < 0x1085)
  3412. return false;
  3413. if (cp < 0x1087)
  3414. return true;
  3415. if (cp < 0x1087)
  3416. return false;
  3417. if (cp < 0x108d)
  3418. return true;
  3419. if (cp === 0x108d)
  3420. return true;
  3421. if (cp === 0x108f)
  3422. return true;
  3423. if (cp < 0x1090)
  3424. return false;
  3425. if (cp < 0x109a)
  3426. return true;
  3427. if (cp < 0x109a)
  3428. return false;
  3429. if (cp < 0x109d)
  3430. return true;
  3431. if (cp === 0x109d)
  3432. return true;
  3433. return false;
  3434. }
  3435. if (cp < 0x1360)
  3436. return true;
  3437. if (cp < 0x1369)
  3438. return false;
  3439. if (cp < 0x1372)
  3440. return true;
  3441. if (cp < 0x1712)
  3442. return false;
  3443. if (cp < 0x1715)
  3444. return true;
  3445. if (cp < 0x1732)
  3446. return false;
  3447. if (cp < 0x1735)
  3448. return true;
  3449. if (cp < 0x1752)
  3450. return false;
  3451. if (cp < 0x1754)
  3452. return true;
  3453. if (cp < 0x1772)
  3454. return false;
  3455. if (cp < 0x1774)
  3456. return true;
  3457. if (cp < 0x17b4)
  3458. return false;
  3459. if (cp < 0x17b6)
  3460. return true;
  3461. if (cp === 0x17b6)
  3462. return true;
  3463. if (cp < 0x17b7)
  3464. return false;
  3465. if (cp < 0x17be)
  3466. return true;
  3467. return false;
  3468. }
  3469. if (cp < 0x1a73) {
  3470. if (cp < 0x1939) {
  3471. if (cp < 0x18a9) {
  3472. if (cp < 0x17be)
  3473. return false;
  3474. if (cp < 0x17c6)
  3475. return true;
  3476. if (cp === 0x17c6)
  3477. return true;
  3478. if (cp < 0x17c7)
  3479. return false;
  3480. if (cp < 0x17c9)
  3481. return true;
  3482. if (cp < 0x17c9)
  3483. return false;
  3484. if (cp < 0x17d4)
  3485. return true;
  3486. if (cp === 0x17dd)
  3487. return true;
  3488. if (cp < 0x17e0)
  3489. return false;
  3490. if (cp < 0x17ea)
  3491. return true;
  3492. if (cp < 0x180b)
  3493. return false;
  3494. if (cp < 0x180e)
  3495. return true;
  3496. if (cp < 0x1810)
  3497. return false;
  3498. if (cp < 0x181a)
  3499. return true;
  3500. return false;
  3501. }
  3502. if (cp === 0x18a9)
  3503. return true;
  3504. if (cp < 0x1920)
  3505. return false;
  3506. if (cp < 0x1923)
  3507. return true;
  3508. if (cp < 0x1923)
  3509. return false;
  3510. if (cp < 0x1927)
  3511. return true;
  3512. if (cp < 0x1927)
  3513. return false;
  3514. if (cp < 0x1929)
  3515. return true;
  3516. if (cp < 0x1929)
  3517. return false;
  3518. if (cp < 0x192c)
  3519. return true;
  3520. if (cp < 0x1930)
  3521. return false;
  3522. if (cp < 0x1932)
  3523. return true;
  3524. if (cp === 0x1932)
  3525. return true;
  3526. if (cp < 0x1933)
  3527. return false;
  3528. if (cp < 0x1939)
  3529. return true;
  3530. return false;
  3531. }
  3532. if (cp < 0x1a56) {
  3533. if (cp < 0x1939)
  3534. return false;
  3535. if (cp < 0x193c)
  3536. return true;
  3537. if (cp < 0x1946)
  3538. return false;
  3539. if (cp < 0x1950)
  3540. return true;
  3541. if (cp < 0x19d0)
  3542. return false;
  3543. if (cp < 0x19da)
  3544. return true;
  3545. if (cp === 0x19da)
  3546. return true;
  3547. if (cp < 0x1a17)
  3548. return false;
  3549. if (cp < 0x1a19)
  3550. return true;
  3551. if (cp < 0x1a19)
  3552. return false;
  3553. if (cp < 0x1a1b)
  3554. return true;
  3555. if (cp === 0x1a1b)
  3556. return true;
  3557. if (cp === 0x1a55)
  3558. return true;
  3559. return false;
  3560. }
  3561. if (cp === 0x1a56)
  3562. return true;
  3563. if (cp === 0x1a57)
  3564. return true;
  3565. if (cp < 0x1a58)
  3566. return false;
  3567. if (cp < 0x1a5f)
  3568. return true;
  3569. if (cp === 0x1a60)
  3570. return true;
  3571. if (cp === 0x1a61)
  3572. return true;
  3573. if (cp === 0x1a62)
  3574. return true;
  3575. if (cp < 0x1a63)
  3576. return false;
  3577. if (cp < 0x1a65)
  3578. return true;
  3579. if (cp < 0x1a65)
  3580. return false;
  3581. if (cp < 0x1a6d)
  3582. return true;
  3583. if (cp < 0x1a6d)
  3584. return false;
  3585. if (cp < 0x1a73)
  3586. return true;
  3587. return false;
  3588. }
  3589. if (cp < 0x1b6b) {
  3590. if (cp < 0x1b35) {
  3591. if (cp < 0x1a73)
  3592. return false;
  3593. if (cp < 0x1a7d)
  3594. return true;
  3595. if (cp === 0x1a7f)
  3596. return true;
  3597. if (cp < 0x1a80)
  3598. return false;
  3599. if (cp < 0x1a8a)
  3600. return true;
  3601. if (cp < 0x1a90)
  3602. return false;
  3603. if (cp < 0x1a9a)
  3604. return true;
  3605. if (cp < 0x1ab0)
  3606. return false;
  3607. if (cp < 0x1abe)
  3608. return true;
  3609. if (cp < 0x1b00)
  3610. return false;
  3611. if (cp < 0x1b04)
  3612. return true;
  3613. if (cp === 0x1b04)
  3614. return true;
  3615. if (cp === 0x1b34)
  3616. return true;
  3617. return false;
  3618. }
  3619. if (cp === 0x1b35)
  3620. return true;
  3621. if (cp < 0x1b36)
  3622. return false;
  3623. if (cp < 0x1b3b)
  3624. return true;
  3625. if (cp === 0x1b3b)
  3626. return true;
  3627. if (cp === 0x1b3c)
  3628. return true;
  3629. if (cp < 0x1b3d)
  3630. return false;
  3631. if (cp < 0x1b42)
  3632. return true;
  3633. if (cp === 0x1b42)
  3634. return true;
  3635. if (cp < 0x1b43)
  3636. return false;
  3637. if (cp < 0x1b45)
  3638. return true;
  3639. if (cp < 0x1b50)
  3640. return false;
  3641. if (cp < 0x1b5a)
  3642. return true;
  3643. return false;
  3644. }
  3645. if (cp < 0x1bab) {
  3646. if (cp < 0x1b6b)
  3647. return false;
  3648. if (cp < 0x1b74)
  3649. return true;
  3650. if (cp < 0x1b80)
  3651. return false;
  3652. if (cp < 0x1b82)
  3653. return true;
  3654. if (cp === 0x1b82)
  3655. return true;
  3656. if (cp === 0x1ba1)
  3657. return true;
  3658. if (cp < 0x1ba2)
  3659. return false;
  3660. if (cp < 0x1ba6)
  3661. return true;
  3662. if (cp < 0x1ba6)
  3663. return false;
  3664. if (cp < 0x1ba8)
  3665. return true;
  3666. if (cp < 0x1ba8)
  3667. return false;
  3668. if (cp < 0x1baa)
  3669. return true;
  3670. if (cp === 0x1baa)
  3671. return true;
  3672. return false;
  3673. }
  3674. if (cp < 0x1bae)
  3675. return true;
  3676. if (cp < 0x1bb0)
  3677. return false;
  3678. if (cp < 0x1bba)
  3679. return true;
  3680. if (cp === 0x1be6)
  3681. return true;
  3682. if (cp === 0x1be7)
  3683. return true;
  3684. if (cp < 0x1be8)
  3685. return false;
  3686. if (cp < 0x1bea)
  3687. return true;
  3688. if (cp < 0x1bea)
  3689. return false;
  3690. if (cp < 0x1bed)
  3691. return true;
  3692. if (cp === 0x1bed)
  3693. return true;
  3694. if (cp === 0x1bee)
  3695. return true;
  3696. if (cp < 0x1bef)
  3697. return false;
  3698. if (cp < 0x1bf2)
  3699. return true;
  3700. return false;
  3701. }
  3702. if (cp < 0x111d0) {
  3703. if (cp < 0xaa43) {
  3704. if (cp < 0xa69e) {
  3705. if (cp < 0x1dc0) {
  3706. if (cp < 0x1cd4) {
  3707. if (cp < 0x1bf2)
  3708. return false;
  3709. if (cp < 0x1bf4)
  3710. return true;
  3711. if (cp < 0x1c24)
  3712. return false;
  3713. if (cp < 0x1c2c)
  3714. return true;
  3715. if (cp < 0x1c2c)
  3716. return false;
  3717. if (cp < 0x1c34)
  3718. return true;
  3719. if (cp < 0x1c34)
  3720. return false;
  3721. if (cp < 0x1c36)
  3722. return true;
  3723. if (cp < 0x1c36)
  3724. return false;
  3725. if (cp < 0x1c38)
  3726. return true;
  3727. if (cp < 0x1c40)
  3728. return false;
  3729. if (cp < 0x1c4a)
  3730. return true;
  3731. if (cp < 0x1c50)
  3732. return false;
  3733. if (cp < 0x1c5a)
  3734. return true;
  3735. if (cp < 0x1cd0)
  3736. return false;
  3737. if (cp < 0x1cd3)
  3738. return true;
  3739. return false;
  3740. }
  3741. if (cp < 0x1ce1)
  3742. return true;
  3743. if (cp === 0x1ce1)
  3744. return true;
  3745. if (cp < 0x1ce2)
  3746. return false;
  3747. if (cp < 0x1ce9)
  3748. return true;
  3749. if (cp === 0x1ced)
  3750. return true;
  3751. if (cp < 0x1cf2)
  3752. return false;
  3753. if (cp < 0x1cf4)
  3754. return true;
  3755. if (cp === 0x1cf4)
  3756. return true;
  3757. if (cp === 0x1cf7)
  3758. return true;
  3759. if (cp < 0x1cf8)
  3760. return false;
  3761. if (cp < 0x1cfa)
  3762. return true;
  3763. return false;
  3764. }
  3765. if (cp < 0x2d7f) {
  3766. if (cp < 0x1dc0)
  3767. return false;
  3768. if (cp < 0x1dfa)
  3769. return true;
  3770. if (cp < 0x1dfb)
  3771. return false;
  3772. if (cp < 0x1e00)
  3773. return true;
  3774. if (cp < 0x203f)
  3775. return false;
  3776. if (cp < 0x2041)
  3777. return true;
  3778. if (cp === 0x2054)
  3779. return true;
  3780. if (cp < 0x20d0)
  3781. return false;
  3782. if (cp < 0x20dd)
  3783. return true;
  3784. if (cp === 0x20e1)
  3785. return true;
  3786. if (cp < 0x20e5)
  3787. return false;
  3788. if (cp < 0x20f1)
  3789. return true;
  3790. if (cp < 0x2cef)
  3791. return false;
  3792. if (cp < 0x2cf2)
  3793. return true;
  3794. return false;
  3795. }
  3796. if (cp === 0x2d7f)
  3797. return true;
  3798. if (cp < 0x2de0)
  3799. return false;
  3800. if (cp < 0x2e00)
  3801. return true;
  3802. if (cp < 0x302a)
  3803. return false;
  3804. if (cp < 0x302e)
  3805. return true;
  3806. if (cp < 0x302e)
  3807. return false;
  3808. if (cp < 0x3030)
  3809. return true;
  3810. if (cp < 0x3099)
  3811. return false;
  3812. if (cp < 0x309b)
  3813. return true;
  3814. if (cp < 0xa620)
  3815. return false;
  3816. if (cp < 0xa62a)
  3817. return true;
  3818. if (cp === 0xa66f)
  3819. return true;
  3820. if (cp < 0xa674)
  3821. return false;
  3822. if (cp < 0xa67e)
  3823. return true;
  3824. return false;
  3825. }
  3826. if (cp < 0xa952) {
  3827. if (cp < 0xa880) {
  3828. if (cp < 0xa69e)
  3829. return false;
  3830. if (cp < 0xa6a0)
  3831. return true;
  3832. if (cp < 0xa6f0)
  3833. return false;
  3834. if (cp < 0xa6f2)
  3835. return true;
  3836. if (cp === 0xa802)
  3837. return true;
  3838. if (cp === 0xa806)
  3839. return true;
  3840. if (cp === 0xa80b)
  3841. return true;
  3842. if (cp < 0xa823)
  3843. return false;
  3844. if (cp < 0xa825)
  3845. return true;
  3846. if (cp < 0xa825)
  3847. return false;
  3848. if (cp < 0xa827)
  3849. return true;
  3850. if (cp === 0xa827)
  3851. return true;
  3852. return false;
  3853. }
  3854. if (cp < 0xa882)
  3855. return true;
  3856. if (cp < 0xa8b4)
  3857. return false;
  3858. if (cp < 0xa8c4)
  3859. return true;
  3860. if (cp < 0xa8c4)
  3861. return false;
  3862. if (cp < 0xa8c6)
  3863. return true;
  3864. if (cp < 0xa8d0)
  3865. return false;
  3866. if (cp < 0xa8da)
  3867. return true;
  3868. if (cp < 0xa8e0)
  3869. return false;
  3870. if (cp < 0xa8f2)
  3871. return true;
  3872. if (cp < 0xa900)
  3873. return false;
  3874. if (cp < 0xa90a)
  3875. return true;
  3876. if (cp < 0xa926)
  3877. return false;
  3878. if (cp < 0xa92e)
  3879. return true;
  3880. if (cp < 0xa947)
  3881. return false;
  3882. if (cp < 0xa952)
  3883. return true;
  3884. return false;
  3885. }
  3886. if (cp < 0xa9bd) {
  3887. if (cp < 0xa952)
  3888. return false;
  3889. if (cp < 0xa954)
  3890. return true;
  3891. if (cp < 0xa980)
  3892. return false;
  3893. if (cp < 0xa983)
  3894. return true;
  3895. if (cp === 0xa983)
  3896. return true;
  3897. if (cp === 0xa9b3)
  3898. return true;
  3899. if (cp < 0xa9b4)
  3900. return false;
  3901. if (cp < 0xa9b6)
  3902. return true;
  3903. if (cp < 0xa9b6)
  3904. return false;
  3905. if (cp < 0xa9ba)
  3906. return true;
  3907. if (cp < 0xa9ba)
  3908. return false;
  3909. if (cp < 0xa9bc)
  3910. return true;
  3911. if (cp === 0xa9bc)
  3912. return true;
  3913. return false;
  3914. }
  3915. if (cp < 0xa9c1)
  3916. return true;
  3917. if (cp < 0xa9d0)
  3918. return false;
  3919. if (cp < 0xa9da)
  3920. return true;
  3921. if (cp === 0xa9e5)
  3922. return true;
  3923. if (cp < 0xa9f0)
  3924. return false;
  3925. if (cp < 0xa9fa)
  3926. return true;
  3927. if (cp < 0xaa29)
  3928. return false;
  3929. if (cp < 0xaa2f)
  3930. return true;
  3931. if (cp < 0xaa2f)
  3932. return false;
  3933. if (cp < 0xaa31)
  3934. return true;
  3935. if (cp < 0xaa31)
  3936. return false;
  3937. if (cp < 0xaa33)
  3938. return true;
  3939. if (cp < 0xaa33)
  3940. return false;
  3941. if (cp < 0xaa35)
  3942. return true;
  3943. if (cp < 0xaa35)
  3944. return false;
  3945. if (cp < 0xaa37)
  3946. return true;
  3947. return false;
  3948. }
  3949. if (cp < 0x102e0) {
  3950. if (cp < 0xaaf6) {
  3951. if (cp < 0xaab2) {
  3952. if (cp === 0xaa43)
  3953. return true;
  3954. if (cp === 0xaa4c)
  3955. return true;
  3956. if (cp === 0xaa4d)
  3957. return true;
  3958. if (cp < 0xaa50)
  3959. return false;
  3960. if (cp < 0xaa5a)
  3961. return true;
  3962. if (cp === 0xaa7b)
  3963. return true;
  3964. if (cp === 0xaa7c)
  3965. return true;
  3966. if (cp === 0xaa7d)
  3967. return true;
  3968. if (cp === 0xaab0)
  3969. return true;
  3970. return false;
  3971. }
  3972. if (cp < 0xaab5)
  3973. return true;
  3974. if (cp < 0xaab7)
  3975. return false;
  3976. if (cp < 0xaab9)
  3977. return true;
  3978. if (cp < 0xaabe)
  3979. return false;
  3980. if (cp < 0xaac0)
  3981. return true;
  3982. if (cp === 0xaac1)
  3983. return true;
  3984. if (cp === 0xaaeb)
  3985. return true;
  3986. if (cp < 0xaaec)
  3987. return false;
  3988. if (cp < 0xaaee)
  3989. return true;
  3990. if (cp < 0xaaee)
  3991. return false;
  3992. if (cp < 0xaaf0)
  3993. return true;
  3994. if (cp === 0xaaf5)
  3995. return true;
  3996. return false;
  3997. }
  3998. if (cp < 0xabf0) {
  3999. if (cp === 0xaaf6)
  4000. return true;
  4001. if (cp < 0xabe3)
  4002. return false;
  4003. if (cp < 0xabe5)
  4004. return true;
  4005. if (cp === 0xabe5)
  4006. return true;
  4007. if (cp < 0xabe6)
  4008. return false;
  4009. if (cp < 0xabe8)
  4010. return true;
  4011. if (cp === 0xabe8)
  4012. return true;
  4013. if (cp < 0xabe9)
  4014. return false;
  4015. if (cp < 0xabeb)
  4016. return true;
  4017. if (cp === 0xabec)
  4018. return true;
  4019. if (cp === 0xabed)
  4020. return true;
  4021. return false;
  4022. }
  4023. if (cp < 0xabfa)
  4024. return true;
  4025. if (cp === 0xfb1e)
  4026. return true;
  4027. if (cp < 0xfe00)
  4028. return false;
  4029. if (cp < 0xfe10)
  4030. return true;
  4031. if (cp < 0xfe20)
  4032. return false;
  4033. if (cp < 0xfe30)
  4034. return true;
  4035. if (cp < 0xfe33)
  4036. return false;
  4037. if (cp < 0xfe35)
  4038. return true;
  4039. if (cp < 0xfe4d)
  4040. return false;
  4041. if (cp < 0xfe50)
  4042. return true;
  4043. if (cp < 0xff10)
  4044. return false;
  4045. if (cp < 0xff1a)
  4046. return true;
  4047. if (cp === 0xff3f)
  4048. return true;
  4049. if (cp === 0x101fd)
  4050. return true;
  4051. return false;
  4052. }
  4053. if (cp < 0x110b0) {
  4054. if (cp < 0x10ae5) {
  4055. if (cp === 0x102e0)
  4056. return true;
  4057. if (cp < 0x10376)
  4058. return false;
  4059. if (cp < 0x1037b)
  4060. return true;
  4061. if (cp < 0x104a0)
  4062. return false;
  4063. if (cp < 0x104aa)
  4064. return true;
  4065. if (cp < 0x10a01)
  4066. return false;
  4067. if (cp < 0x10a04)
  4068. return true;
  4069. if (cp < 0x10a05)
  4070. return false;
  4071. if (cp < 0x10a07)
  4072. return true;
  4073. if (cp < 0x10a0c)
  4074. return false;
  4075. if (cp < 0x10a10)
  4076. return true;
  4077. if (cp < 0x10a38)
  4078. return false;
  4079. if (cp < 0x10a3b)
  4080. return true;
  4081. if (cp === 0x10a3f)
  4082. return true;
  4083. return false;
  4084. }
  4085. if (cp < 0x10ae7)
  4086. return true;
  4087. if (cp === 0x11000)
  4088. return true;
  4089. if (cp === 0x11001)
  4090. return true;
  4091. if (cp === 0x11002)
  4092. return true;
  4093. if (cp < 0x11038)
  4094. return false;
  4095. if (cp < 0x11047)
  4096. return true;
  4097. if (cp < 0x11066)
  4098. return false;
  4099. if (cp < 0x11070)
  4100. return true;
  4101. if (cp < 0x1107f)
  4102. return false;
  4103. if (cp < 0x11082)
  4104. return true;
  4105. if (cp === 0x11082)
  4106. return true;
  4107. return false;
  4108. }
  4109. if (cp < 0x1112d) {
  4110. if (cp < 0x110b0)
  4111. return false;
  4112. if (cp < 0x110b3)
  4113. return true;
  4114. if (cp < 0x110b3)
  4115. return false;
  4116. if (cp < 0x110b7)
  4117. return true;
  4118. if (cp < 0x110b7)
  4119. return false;
  4120. if (cp < 0x110b9)
  4121. return true;
  4122. if (cp < 0x110b9)
  4123. return false;
  4124. if (cp < 0x110bb)
  4125. return true;
  4126. if (cp < 0x110f0)
  4127. return false;
  4128. if (cp < 0x110fa)
  4129. return true;
  4130. if (cp < 0x11100)
  4131. return false;
  4132. if (cp < 0x11103)
  4133. return true;
  4134. if (cp < 0x11127)
  4135. return false;
  4136. if (cp < 0x1112c)
  4137. return true;
  4138. if (cp === 0x1112c)
  4139. return true;
  4140. return false;
  4141. }
  4142. if (cp < 0x11135)
  4143. return true;
  4144. if (cp < 0x11136)
  4145. return false;
  4146. if (cp < 0x11140)
  4147. return true;
  4148. if (cp === 0x11173)
  4149. return true;
  4150. if (cp < 0x11180)
  4151. return false;
  4152. if (cp < 0x11182)
  4153. return true;
  4154. if (cp === 0x11182)
  4155. return true;
  4156. if (cp < 0x111b3)
  4157. return false;
  4158. if (cp < 0x111b6)
  4159. return true;
  4160. if (cp < 0x111b6)
  4161. return false;
  4162. if (cp < 0x111bf)
  4163. return true;
  4164. if (cp < 0x111bf)
  4165. return false;
  4166. if (cp < 0x111c1)
  4167. return true;
  4168. if (cp < 0x111ca)
  4169. return false;
  4170. if (cp < 0x111cd)
  4171. return true;
  4172. return false;
  4173. }
  4174. if (cp < 0x11726) {
  4175. if (cp < 0x114b3) {
  4176. if (cp < 0x11340) {
  4177. if (cp < 0x112df) {
  4178. if (cp < 0x111d0)
  4179. return false;
  4180. if (cp < 0x111da)
  4181. return true;
  4182. if (cp < 0x1122c)
  4183. return false;
  4184. if (cp < 0x1122f)
  4185. return true;
  4186. if (cp < 0x1122f)
  4187. return false;
  4188. if (cp < 0x11232)
  4189. return true;
  4190. if (cp < 0x11232)
  4191. return false;
  4192. if (cp < 0x11234)
  4193. return true;
  4194. if (cp === 0x11234)
  4195. return true;
  4196. if (cp === 0x11235)
  4197. return true;
  4198. if (cp < 0x11236)
  4199. return false;
  4200. if (cp < 0x11238)
  4201. return true;
  4202. if (cp === 0x1123e)
  4203. return true;
  4204. return false;
  4205. }
  4206. if (cp === 0x112df)
  4207. return true;
  4208. if (cp < 0x112e0)
  4209. return false;
  4210. if (cp < 0x112e3)
  4211. return true;
  4212. if (cp < 0x112e3)
  4213. return false;
  4214. if (cp < 0x112eb)
  4215. return true;
  4216. if (cp < 0x112f0)
  4217. return false;
  4218. if (cp < 0x112fa)
  4219. return true;
  4220. if (cp < 0x11300)
  4221. return false;
  4222. if (cp < 0x11302)
  4223. return true;
  4224. if (cp < 0x11302)
  4225. return false;
  4226. if (cp < 0x11304)
  4227. return true;
  4228. if (cp === 0x1133c)
  4229. return true;
  4230. if (cp < 0x1133e)
  4231. return false;
  4232. if (cp < 0x11340)
  4233. return true;
  4234. return false;
  4235. }
  4236. if (cp < 0x11435) {
  4237. if (cp === 0x11340)
  4238. return true;
  4239. if (cp < 0x11341)
  4240. return false;
  4241. if (cp < 0x11345)
  4242. return true;
  4243. if (cp < 0x11347)
  4244. return false;
  4245. if (cp < 0x11349)
  4246. return true;
  4247. if (cp < 0x1134b)
  4248. return false;
  4249. if (cp < 0x1134e)
  4250. return true;
  4251. if (cp === 0x11357)
  4252. return true;
  4253. if (cp < 0x11362)
  4254. return false;
  4255. if (cp < 0x11364)
  4256. return true;
  4257. if (cp < 0x11366)
  4258. return false;
  4259. if (cp < 0x1136d)
  4260. return true;
  4261. if (cp < 0x11370)
  4262. return false;
  4263. if (cp < 0x11375)
  4264. return true;
  4265. return false;
  4266. }
  4267. if (cp < 0x11438)
  4268. return true;
  4269. if (cp < 0x11438)
  4270. return false;
  4271. if (cp < 0x11440)
  4272. return true;
  4273. if (cp < 0x11440)
  4274. return false;
  4275. if (cp < 0x11442)
  4276. return true;
  4277. if (cp < 0x11442)
  4278. return false;
  4279. if (cp < 0x11445)
  4280. return true;
  4281. if (cp === 0x11445)
  4282. return true;
  4283. if (cp === 0x11446)
  4284. return true;
  4285. if (cp < 0x11450)
  4286. return false;
  4287. if (cp < 0x1145a)
  4288. return true;
  4289. if (cp < 0x114b0)
  4290. return false;
  4291. if (cp < 0x114b3)
  4292. return true;
  4293. return false;
  4294. }
  4295. if (cp < 0x11633) {
  4296. if (cp < 0x115af) {
  4297. if (cp < 0x114b3)
  4298. return false;
  4299. if (cp < 0x114b9)
  4300. return true;
  4301. if (cp === 0x114b9)
  4302. return true;
  4303. if (cp === 0x114ba)
  4304. return true;
  4305. if (cp < 0x114bb)
  4306. return false;
  4307. if (cp < 0x114bf)
  4308. return true;
  4309. if (cp < 0x114bf)
  4310. return false;
  4311. if (cp < 0x114c1)
  4312. return true;
  4313. if (cp === 0x114c1)
  4314. return true;
  4315. if (cp < 0x114c2)
  4316. return false;
  4317. if (cp < 0x114c4)
  4318. return true;
  4319. if (cp < 0x114d0)
  4320. return false;
  4321. if (cp < 0x114da)
  4322. return true;
  4323. return false;
  4324. }
  4325. if (cp < 0x115b2)
  4326. return true;
  4327. if (cp < 0x115b2)
  4328. return false;
  4329. if (cp < 0x115b6)
  4330. return true;
  4331. if (cp < 0x115b8)
  4332. return false;
  4333. if (cp < 0x115bc)
  4334. return true;
  4335. if (cp < 0x115bc)
  4336. return false;
  4337. if (cp < 0x115be)
  4338. return true;
  4339. if (cp === 0x115be)
  4340. return true;
  4341. if (cp < 0x115bf)
  4342. return false;
  4343. if (cp < 0x115c1)
  4344. return true;
  4345. if (cp < 0x115dc)
  4346. return false;
  4347. if (cp < 0x115de)
  4348. return true;
  4349. if (cp < 0x11630)
  4350. return false;
  4351. if (cp < 0x11633)
  4352. return true;
  4353. return false;
  4354. }
  4355. if (cp < 0x116ad) {
  4356. if (cp < 0x11633)
  4357. return false;
  4358. if (cp < 0x1163b)
  4359. return true;
  4360. if (cp < 0x1163b)
  4361. return false;
  4362. if (cp < 0x1163d)
  4363. return true;
  4364. if (cp === 0x1163d)
  4365. return true;
  4366. if (cp === 0x1163e)
  4367. return true;
  4368. if (cp < 0x1163f)
  4369. return false;
  4370. if (cp < 0x11641)
  4371. return true;
  4372. if (cp < 0x11650)
  4373. return false;
  4374. if (cp < 0x1165a)
  4375. return true;
  4376. if (cp === 0x116ab)
  4377. return true;
  4378. if (cp === 0x116ac)
  4379. return true;
  4380. return false;
  4381. }
  4382. if (cp === 0x116ad)
  4383. return true;
  4384. if (cp < 0x116ae)
  4385. return false;
  4386. if (cp < 0x116b0)
  4387. return true;
  4388. if (cp < 0x116b0)
  4389. return false;
  4390. if (cp < 0x116b6)
  4391. return true;
  4392. if (cp === 0x116b6)
  4393. return true;
  4394. if (cp === 0x116b7)
  4395. return true;
  4396. if (cp < 0x116c0)
  4397. return false;
  4398. if (cp < 0x116ca)
  4399. return true;
  4400. if (cp < 0x1171d)
  4401. return false;
  4402. if (cp < 0x11720)
  4403. return true;
  4404. if (cp < 0x11720)
  4405. return false;
  4406. if (cp < 0x11722)
  4407. return true;
  4408. if (cp < 0x11722)
  4409. return false;
  4410. if (cp < 0x11726)
  4411. return true;
  4412. return false;
  4413. }
  4414. if (cp < 0x11d3f) {
  4415. if (cp < 0x11a98) {
  4416. if (cp < 0x11a39) {
  4417. if (cp === 0x11726)
  4418. return true;
  4419. if (cp < 0x11727)
  4420. return false;
  4421. if (cp < 0x1172c)
  4422. return true;
  4423. if (cp < 0x11730)
  4424. return false;
  4425. if (cp < 0x1173a)
  4426. return true;
  4427. if (cp < 0x118e0)
  4428. return false;
  4429. if (cp < 0x118ea)
  4430. return true;
  4431. if (cp < 0x11a01)
  4432. return false;
  4433. if (cp < 0x11a07)
  4434. return true;
  4435. if (cp < 0x11a07)
  4436. return false;
  4437. if (cp < 0x11a09)
  4438. return true;
  4439. if (cp < 0x11a09)
  4440. return false;
  4441. if (cp < 0x11a0b)
  4442. return true;
  4443. if (cp < 0x11a33)
  4444. return false;
  4445. if (cp < 0x11a39)
  4446. return true;
  4447. return false;
  4448. }
  4449. if (cp === 0x11a39)
  4450. return true;
  4451. if (cp < 0x11a3b)
  4452. return false;
  4453. if (cp < 0x11a3f)
  4454. return true;
  4455. if (cp === 0x11a47)
  4456. return true;
  4457. if (cp < 0x11a51)
  4458. return false;
  4459. if (cp < 0x11a57)
  4460. return true;
  4461. if (cp < 0x11a57)
  4462. return false;
  4463. if (cp < 0x11a59)
  4464. return true;
  4465. if (cp < 0x11a59)
  4466. return false;
  4467. if (cp < 0x11a5c)
  4468. return true;
  4469. if (cp < 0x11a8a)
  4470. return false;
  4471. if (cp < 0x11a97)
  4472. return true;
  4473. if (cp === 0x11a97)
  4474. return true;
  4475. return false;
  4476. }
  4477. if (cp < 0x11ca9) {
  4478. if (cp < 0x11a98)
  4479. return false;
  4480. if (cp < 0x11a9a)
  4481. return true;
  4482. if (cp === 0x11c2f)
  4483. return true;
  4484. if (cp < 0x11c30)
  4485. return false;
  4486. if (cp < 0x11c37)
  4487. return true;
  4488. if (cp < 0x11c38)
  4489. return false;
  4490. if (cp < 0x11c3e)
  4491. return true;
  4492. if (cp === 0x11c3e)
  4493. return true;
  4494. if (cp === 0x11c3f)
  4495. return true;
  4496. if (cp < 0x11c50)
  4497. return false;
  4498. if (cp < 0x11c5a)
  4499. return true;
  4500. if (cp < 0x11c92)
  4501. return false;
  4502. if (cp < 0x11ca8)
  4503. return true;
  4504. return false;
  4505. }
  4506. if (cp === 0x11ca9)
  4507. return true;
  4508. if (cp < 0x11caa)
  4509. return false;
  4510. if (cp < 0x11cb1)
  4511. return true;
  4512. if (cp === 0x11cb1)
  4513. return true;
  4514. if (cp < 0x11cb2)
  4515. return false;
  4516. if (cp < 0x11cb4)
  4517. return true;
  4518. if (cp === 0x11cb4)
  4519. return true;
  4520. if (cp < 0x11cb5)
  4521. return false;
  4522. if (cp < 0x11cb7)
  4523. return true;
  4524. if (cp < 0x11d31)
  4525. return false;
  4526. if (cp < 0x11d37)
  4527. return true;
  4528. if (cp === 0x11d3a)
  4529. return true;
  4530. if (cp < 0x11d3c)
  4531. return false;
  4532. if (cp < 0x11d3e)
  4533. return true;
  4534. return false;
  4535. }
  4536. if (cp < 0x1d242) {
  4537. if (cp < 0x16f8f) {
  4538. if (cp < 0x11d3f)
  4539. return false;
  4540. if (cp < 0x11d46)
  4541. return true;
  4542. if (cp === 0x11d47)
  4543. return true;
  4544. if (cp < 0x11d50)
  4545. return false;
  4546. if (cp < 0x11d5a)
  4547. return true;
  4548. if (cp < 0x16a60)
  4549. return false;
  4550. if (cp < 0x16a6a)
  4551. return true;
  4552. if (cp < 0x16af0)
  4553. return false;
  4554. if (cp < 0x16af5)
  4555. return true;
  4556. if (cp < 0x16b30)
  4557. return false;
  4558. if (cp < 0x16b37)
  4559. return true;
  4560. if (cp < 0x16b50)
  4561. return false;
  4562. if (cp < 0x16b5a)
  4563. return true;
  4564. if (cp < 0x16f51)
  4565. return false;
  4566. if (cp < 0x16f7f)
  4567. return true;
  4568. return false;
  4569. }
  4570. if (cp < 0x16f93)
  4571. return true;
  4572. if (cp < 0x1bc9d)
  4573. return false;
  4574. if (cp < 0x1bc9f)
  4575. return true;
  4576. if (cp < 0x1d165)
  4577. return false;
  4578. if (cp < 0x1d167)
  4579. return true;
  4580. if (cp < 0x1d167)
  4581. return false;
  4582. if (cp < 0x1d16a)
  4583. return true;
  4584. if (cp < 0x1d16d)
  4585. return false;
  4586. if (cp < 0x1d173)
  4587. return true;
  4588. if (cp < 0x1d17b)
  4589. return false;
  4590. if (cp < 0x1d183)
  4591. return true;
  4592. if (cp < 0x1d185)
  4593. return false;
  4594. if (cp < 0x1d18c)
  4595. return true;
  4596. if (cp < 0x1d1aa)
  4597. return false;
  4598. if (cp < 0x1d1ae)
  4599. return true;
  4600. return false;
  4601. }
  4602. if (cp < 0x1e000) {
  4603. if (cp < 0x1d242)
  4604. return false;
  4605. if (cp < 0x1d245)
  4606. return true;
  4607. if (cp < 0x1d7ce)
  4608. return false;
  4609. if (cp < 0x1d800)
  4610. return true;
  4611. if (cp < 0x1da00)
  4612. return false;
  4613. if (cp < 0x1da37)
  4614. return true;
  4615. if (cp < 0x1da3b)
  4616. return false;
  4617. if (cp < 0x1da6d)
  4618. return true;
  4619. if (cp === 0x1da75)
  4620. return true;
  4621. if (cp === 0x1da84)
  4622. return true;
  4623. if (cp < 0x1da9b)
  4624. return false;
  4625. if (cp < 0x1daa0)
  4626. return true;
  4627. if (cp < 0x1daa1)
  4628. return false;
  4629. if (cp < 0x1dab0)
  4630. return true;
  4631. return false;
  4632. }
  4633. if (cp < 0x1e007)
  4634. return true;
  4635. if (cp < 0x1e008)
  4636. return false;
  4637. if (cp < 0x1e019)
  4638. return true;
  4639. if (cp < 0x1e01b)
  4640. return false;
  4641. if (cp < 0x1e022)
  4642. return true;
  4643. if (cp < 0x1e023)
  4644. return false;
  4645. if (cp < 0x1e025)
  4646. return true;
  4647. if (cp < 0x1e026)
  4648. return false;
  4649. if (cp < 0x1e02b)
  4650. return true;
  4651. if (cp < 0x1e8d0)
  4652. return false;
  4653. if (cp < 0x1e8d7)
  4654. return true;
  4655. if (cp < 0x1e944)
  4656. return false;
  4657. if (cp < 0x1e94b)
  4658. return true;
  4659. if (cp < 0x1e950)
  4660. return false;
  4661. if (cp < 0x1e95a)
  4662. return true;
  4663. if (cp < 0xe0100)
  4664. return false;
  4665. if (cp < 0xe01f0)
  4666. return true;
  4667. return false;
  4668. }
  4669. const PropertyData = {
  4670. $LONE: new Set([
  4671. "ASCII",
  4672. "ASCII_Hex_Digit",
  4673. "AHex",
  4674. "Alphabetic",
  4675. "Alpha",
  4676. "Any",
  4677. "Assigned",
  4678. "Bidi_Control",
  4679. "Bidi_C",
  4680. "Bidi_Mirrored",
  4681. "Bidi_M",
  4682. "Case_Ignorable",
  4683. "CI",
  4684. "Cased",
  4685. "Changes_When_Casefolded",
  4686. "CWCF",
  4687. "Changes_When_Casemapped",
  4688. "CWCM",
  4689. "Changes_When_Lowercased",
  4690. "CWL",
  4691. "Changes_When_NFKC_Casefolded",
  4692. "CWKCF",
  4693. "Changes_When_Titlecased",
  4694. "CWT",
  4695. "Changes_When_Uppercased",
  4696. "CWU",
  4697. "Dash",
  4698. "Default_Ignorable_Code_Point",
  4699. "DI",
  4700. "Deprecated",
  4701. "Dep",
  4702. "Diacritic",
  4703. "Dia",
  4704. "Emoji",
  4705. "Emoji_Component",
  4706. "Emoji_Modifier",
  4707. "Emoji_Modifier_Base",
  4708. "Emoji_Presentation",
  4709. "Extender",
  4710. "Ext",
  4711. "Grapheme_Base",
  4712. "Gr_Base",
  4713. "Grapheme_Extend",
  4714. "Gr_Ext",
  4715. "Hex_Digit",
  4716. "Hex",
  4717. "IDS_Binary_Operator",
  4718. "IDSB",
  4719. "IDS_Trinary_Operator",
  4720. "IDST",
  4721. "ID_Continue",
  4722. "IDC",
  4723. "ID_Start",
  4724. "IDS",
  4725. "Ideographic",
  4726. "Ideo",
  4727. "Join_Control",
  4728. "Join_C",
  4729. "Logical_Order_Exception",
  4730. "LOE",
  4731. "Lowercase",
  4732. "Lower",
  4733. "Math",
  4734. "Noncharacter_Code_Point",
  4735. "NChar",
  4736. "Pattern_Syntax",
  4737. "Pat_Syn",
  4738. "Pattern_White_Space",
  4739. "Pat_WS",
  4740. "Quotation_Mark",
  4741. "QMark",
  4742. "Radical",
  4743. "Regional_Indicator",
  4744. "RI",
  4745. "Sentence_Terminal",
  4746. "STerm",
  4747. "Soft_Dotted",
  4748. "SD",
  4749. "Terminal_Punctuation",
  4750. "Term",
  4751. "Unified_Ideograph",
  4752. "UIdeo",
  4753. "Uppercase",
  4754. "Upper",
  4755. "Variation_Selector",
  4756. "VS",
  4757. "White_Space",
  4758. "space",
  4759. "XID_Continue",
  4760. "XIDC",
  4761. "XID_Start",
  4762. "XIDS",
  4763. ]),
  4764. General_Category: new Set([
  4765. "Cased_Letter",
  4766. "LC",
  4767. "Close_Punctuation",
  4768. "Pe",
  4769. "Connector_Punctuation",
  4770. "Pc",
  4771. "Control",
  4772. "Cc",
  4773. "cntrl",
  4774. "Currency_Symbol",
  4775. "Sc",
  4776. "Dash_Punctuation",
  4777. "Pd",
  4778. "Decimal_Number",
  4779. "Nd",
  4780. "digit",
  4781. "Enclosing_Mark",
  4782. "Me",
  4783. "Final_Punctuation",
  4784. "Pf",
  4785. "Format",
  4786. "Cf",
  4787. "Initial_Punctuation",
  4788. "Pi",
  4789. "Letter",
  4790. "L",
  4791. "Letter_Number",
  4792. "Nl",
  4793. "Line_Separator",
  4794. "Zl",
  4795. "Lowercase_Letter",
  4796. "Ll",
  4797. "Mark",
  4798. "M",
  4799. "Combining_Mark",
  4800. "Math_Symbol",
  4801. "Sm",
  4802. "Modifier_Letter",
  4803. "Lm",
  4804. "Modifier_Symbol",
  4805. "Sk",
  4806. "Nonspacing_Mark",
  4807. "Mn",
  4808. "Number",
  4809. "N",
  4810. "Open_Punctuation",
  4811. "Ps",
  4812. "Other",
  4813. "C",
  4814. "Other_Letter",
  4815. "Lo",
  4816. "Other_Number",
  4817. "No",
  4818. "Other_Punctuation",
  4819. "Po",
  4820. "Other_Symbol",
  4821. "So",
  4822. "Paragraph_Separator",
  4823. "Zp",
  4824. "Private_Use",
  4825. "Co",
  4826. "Punctuation",
  4827. "P",
  4828. "punct",
  4829. "Separator",
  4830. "Z",
  4831. "Space_Separator",
  4832. "Zs",
  4833. "Spacing_Mark",
  4834. "Mc",
  4835. "Surrogate",
  4836. "Cs",
  4837. "Symbol",
  4838. "S",
  4839. "Titlecase_Letter",
  4840. "Lt",
  4841. "Unassigned",
  4842. "Cn",
  4843. "Uppercase_Letter",
  4844. "Lu",
  4845. ]),
  4846. Script: new Set([
  4847. "Adlam",
  4848. "Adlm",
  4849. "Ahom",
  4850. "Anatolian_Hieroglyphs",
  4851. "Hluw",
  4852. "Arabic",
  4853. "Arab",
  4854. "Armenian",
  4855. "Armn",
  4856. "Avestan",
  4857. "Avst",
  4858. "Balinese",
  4859. "Bali",
  4860. "Bamum",
  4861. "Bamu",
  4862. "Bassa_Vah",
  4863. "Bass",
  4864. "Batak",
  4865. "Batk",
  4866. "Bengali",
  4867. "Beng",
  4868. "Bhaiksuki",
  4869. "Bhks",
  4870. "Bopomofo",
  4871. "Bopo",
  4872. "Brahmi",
  4873. "Brah",
  4874. "Braille",
  4875. "Brai",
  4876. "Buginese",
  4877. "Bugi",
  4878. "Buhid",
  4879. "Buhd",
  4880. "Canadian_Aboriginal",
  4881. "Cans",
  4882. "Carian",
  4883. "Cari",
  4884. "Caucasian_Albanian",
  4885. "Aghb",
  4886. "Chakma",
  4887. "Cakm",
  4888. "Cham",
  4889. "Cherokee",
  4890. "Cher",
  4891. "Common",
  4892. "Zyyy",
  4893. "Coptic",
  4894. "Copt",
  4895. "Qaac",
  4896. "Cuneiform",
  4897. "Xsux",
  4898. "Cypriot",
  4899. "Cprt",
  4900. "Cyrillic",
  4901. "Cyrl",
  4902. "Deseret",
  4903. "Dsrt",
  4904. "Devanagari",
  4905. "Deva",
  4906. "Duployan",
  4907. "Dupl",
  4908. "Egyptian_Hieroglyphs",
  4909. "Egyp",
  4910. "Elbasan",
  4911. "Elba",
  4912. "Ethiopic",
  4913. "Ethi",
  4914. "Georgian",
  4915. "Geor",
  4916. "Glagolitic",
  4917. "Glag",
  4918. "Gothic",
  4919. "Goth",
  4920. "Grantha",
  4921. "Gran",
  4922. "Greek",
  4923. "Grek",
  4924. "Gujarati",
  4925. "Gujr",
  4926. "Gurmukhi",
  4927. "Guru",
  4928. "Han",
  4929. "Hani",
  4930. "Hangul",
  4931. "Hang",
  4932. "Hanunoo",
  4933. "Hano",
  4934. "Hatran",
  4935. "Hatr",
  4936. "Hebrew",
  4937. "Hebr",
  4938. "Hiragana",
  4939. "Hira",
  4940. "Imperial_Aramaic",
  4941. "Armi",
  4942. "Inherited",
  4943. "Zinh",
  4944. "Qaai",
  4945. "Inscriptional_Pahlavi",
  4946. "Phli",
  4947. "Inscriptional_Parthian",
  4948. "Prti",
  4949. "Javanese",
  4950. "Java",
  4951. "Kaithi",
  4952. "Kthi",
  4953. "Kannada",
  4954. "Knda",
  4955. "Katakana",
  4956. "Kana",
  4957. "Kayah_Li",
  4958. "Kali",
  4959. "Kharoshthi",
  4960. "Khar",
  4961. "Khmer",
  4962. "Khmr",
  4963. "Khojki",
  4964. "Khoj",
  4965. "Khudawadi",
  4966. "Sind",
  4967. "Lao",
  4968. "Laoo",
  4969. "Latin",
  4970. "Latn",
  4971. "Lepcha",
  4972. "Lepc",
  4973. "Limbu",
  4974. "Limb",
  4975. "Linear_A",
  4976. "Lina",
  4977. "Linear_B",
  4978. "Linb",
  4979. "Lisu",
  4980. "Lycian",
  4981. "Lyci",
  4982. "Lydian",
  4983. "Lydi",
  4984. "Mahajani",
  4985. "Mahj",
  4986. "Malayalam",
  4987. "Mlym",
  4988. "Mandaic",
  4989. "Mand",
  4990. "Manichaean",
  4991. "Mani",
  4992. "Marchen",
  4993. "Marc",
  4994. "Masaram_Gondi",
  4995. "Gonm",
  4996. "Meetei_Mayek",
  4997. "Mtei",
  4998. "Mende_Kikakui",
  4999. "Mend",
  5000. "Meroitic_Cursive",
  5001. "Merc",
  5002. "Meroitic_Hieroglyphs",
  5003. "Mero",
  5004. "Miao",
  5005. "Plrd",
  5006. "Modi",
  5007. "Mongolian",
  5008. "Mong",
  5009. "Mro",
  5010. "Mroo",
  5011. "Multani",
  5012. "Mult",
  5013. "Myanmar",
  5014. "Mymr",
  5015. "Nabataean",
  5016. "Nbat",
  5017. "New_Tai_Lue",
  5018. "Talu",
  5019. "Newa",
  5020. "Nko",
  5021. "Nkoo",
  5022. "Nushu",
  5023. "Nshu",
  5024. "Ogham",
  5025. "Ogam",
  5026. "Ol_Chiki",
  5027. "Olck",
  5028. "Old_Hungarian",
  5029. "Hung",
  5030. "Old_Italic",
  5031. "Ital",
  5032. "Old_North_Arabian",
  5033. "Narb",
  5034. "Old_Permic",
  5035. "Perm",
  5036. "Old_Persian",
  5037. "Xpeo",
  5038. "Old_South_Arabian",
  5039. "Sarb",
  5040. "Old_Turkic",
  5041. "Orkh",
  5042. "Oriya",
  5043. "Orya",
  5044. "Osage",
  5045. "Osge",
  5046. "Osmanya",
  5047. "Osma",
  5048. "Pahawh_Hmong",
  5049. "Hmng",
  5050. "Palmyrene",
  5051. "Palm",
  5052. "Pau_Cin_Hau",
  5053. "Pauc",
  5054. "Phags_Pa",
  5055. "Phag",
  5056. "Phoenician",
  5057. "Phnx",
  5058. "Psalter_Pahlavi",
  5059. "Phlp",
  5060. "Rejang",
  5061. "Rjng",
  5062. "Runic",
  5063. "Runr",
  5064. "Samaritan",
  5065. "Samr",
  5066. "Saurashtra",
  5067. "Saur",
  5068. "Sharada",
  5069. "Shrd",
  5070. "Shavian",
  5071. "Shaw",
  5072. "Siddham",
  5073. "Sidd",
  5074. "SignWriting",
  5075. "Sgnw",
  5076. "Sinhala",
  5077. "Sinh",
  5078. "Sora_Sompeng",
  5079. "Sora",
  5080. "Soyombo",
  5081. "Soyo",
  5082. "Sundanese",
  5083. "Sund",
  5084. "Syloti_Nagri",
  5085. "Sylo",
  5086. "Syriac",
  5087. "Syrc",
  5088. "Tagalog",
  5089. "Tglg",
  5090. "Tagbanwa",
  5091. "Tagb",
  5092. "Tai_Le",
  5093. "Tale",
  5094. "Tai_Tham",
  5095. "Lana",
  5096. "Tai_Viet",
  5097. "Tavt",
  5098. "Takri",
  5099. "Takr",
  5100. "Tamil",
  5101. "Taml",
  5102. "Tangut",
  5103. "Tang",
  5104. "Telugu",
  5105. "Telu",
  5106. "Thaana",
  5107. "Thaa",
  5108. "Thai",
  5109. "Tibetan",
  5110. "Tibt",
  5111. "Tifinagh",
  5112. "Tfng",
  5113. "Tirhuta",
  5114. "Tirh",
  5115. "Ugaritic",
  5116. "Ugar",
  5117. "Vai",
  5118. "Vaii",
  5119. "Warang_Citi",
  5120. "Wara",
  5121. "Yi",
  5122. "Yiii",
  5123. "Zanabazar_Square",
  5124. "Zanb",
  5125. ]),
  5126. };
  5127. PropertyData.gc = PropertyData.General_Category;
  5128. PropertyData.sc = PropertyData.Script_Extensions = PropertyData.scx =
  5129. PropertyData.Script;
  5130. const Backspace = 0x08;
  5131. const CharacterTabulation = 0x09;
  5132. const LineFeed = 0x0a;
  5133. const LineTabulation = 0x0b;
  5134. const FormFeed = 0x0c;
  5135. const CarriageReturn = 0x0d;
  5136. const ExclamationMark = 0x21;
  5137. const DollarSign = 0x24;
  5138. const LeftParenthesis = 0x28;
  5139. const RightParenthesis = 0x29;
  5140. const Asterisk = 0x2a;
  5141. const PlusSign = 0x2b;
  5142. const Comma = 0x2c;
  5143. const HyphenMinus = 0x2d;
  5144. const FullStop = 0x2e;
  5145. const Solidus = 0x2f;
  5146. const DigitZero = 0x30;
  5147. const DigitOne = 0x31;
  5148. const DigitSeven = 0x37;
  5149. const DigitNine = 0x39;
  5150. const Colon = 0x3a;
  5151. const LessThanSign = 0x3c;
  5152. const EqualsSign = 0x3d;
  5153. const GreaterThanSign = 0x3e;
  5154. const QuestionMark = 0x3f;
  5155. const LatinCapitalLetterA = 0x41;
  5156. const LatinCapitalLetterB = 0x42;
  5157. const LatinCapitalLetterD = 0x44;
  5158. const LatinCapitalLetterF = 0x46;
  5159. const LatinCapitalLetterP = 0x50;
  5160. const LatinCapitalLetterS = 0x53;
  5161. const LatinCapitalLetterW = 0x57;
  5162. const LatinCapitalLetterZ = 0x5a;
  5163. const LowLine = 0x5f;
  5164. const LatinSmallLetterA = 0x61;
  5165. const LatinSmallLetterB = 0x62;
  5166. const LatinSmallLetterC = 0x63;
  5167. const LatinSmallLetterD = 0x64;
  5168. const LatinSmallLetterF = 0x66;
  5169. const LatinSmallLetterG = 0x67;
  5170. const LatinSmallLetterI = 0x69;
  5171. const LatinSmallLetterK = 0x6b;
  5172. const LatinSmallLetterM = 0x6d;
  5173. const LatinSmallLetterN = 0x6e;
  5174. const LatinSmallLetterP = 0x70;
  5175. const LatinSmallLetterR = 0x72;
  5176. const LatinSmallLetterS = 0x73;
  5177. const LatinSmallLetterT = 0x74;
  5178. const LatinSmallLetterU = 0x75;
  5179. const LatinSmallLetterV = 0x76;
  5180. const LatinSmallLetterW = 0x77;
  5181. const LatinSmallLetterX = 0x78;
  5182. const LatinSmallLetterY = 0x79;
  5183. const LatinSmallLetterZ = 0x7a;
  5184. const LeftSquareBracket = 0x5b;
  5185. const ReverseSolidus = 0x5c;
  5186. const RightSquareBracket = 0x5d;
  5187. const CircumflexAccent = 0x5e;
  5188. const LeftCurlyBracket = 0x7b;
  5189. const VerticalLine = 0x7c;
  5190. const RightCurlyBracket = 0x7d;
  5191. const ZeroWidthNonJoiner = 0x200c;
  5192. const ZeroWidthJoiner = 0x200d;
  5193. const LineSeparator = 0x2028;
  5194. const ParagraphSeparator = 0x2029;
  5195. const MinCodePoint = 0x00;
  5196. const MaxCodePoint = 0x10ffff;
  5197. function isLatinLetter(code) {
  5198. return ((code >= LatinCapitalLetterA && code <= LatinCapitalLetterZ) ||
  5199. (code >= LatinSmallLetterA && code <= LatinSmallLetterZ));
  5200. }
  5201. function isDecimalDigit(code) {
  5202. return code >= DigitZero && code <= DigitNine;
  5203. }
  5204. function isOctalDigit(code) {
  5205. return code >= DigitZero && code <= DigitSeven;
  5206. }
  5207. function isHexDigit(code) {
  5208. return ((code >= DigitZero && code <= DigitNine) ||
  5209. (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) ||
  5210. (code >= LatinSmallLetterA && code <= LatinSmallLetterF));
  5211. }
  5212. function isLineTerminator(code) {
  5213. return (code === LineFeed ||
  5214. code === CarriageReturn ||
  5215. code === LineSeparator ||
  5216. code === ParagraphSeparator);
  5217. }
  5218. function isValidUnicode(code) {
  5219. return code >= MinCodePoint && code <= MaxCodePoint;
  5220. }
  5221. function digitToInt(code) {
  5222. if (code >= LatinSmallLetterA && code <= LatinSmallLetterF) {
  5223. return code - LatinSmallLetterA + 10;
  5224. }
  5225. if (code >= LatinCapitalLetterA && code <= LatinCapitalLetterF) {
  5226. return code - LatinCapitalLetterA + 10;
  5227. }
  5228. return code - DigitZero;
  5229. }
  5230. function isSyntaxCharacter(cp) {
  5231. return (cp === CircumflexAccent ||
  5232. cp === DollarSign ||
  5233. cp === ReverseSolidus ||
  5234. cp === FullStop ||
  5235. cp === Asterisk ||
  5236. cp === PlusSign ||
  5237. cp === QuestionMark ||
  5238. cp === LeftParenthesis ||
  5239. cp === RightParenthesis ||
  5240. cp === LeftSquareBracket ||
  5241. cp === RightSquareBracket ||
  5242. cp === LeftCurlyBracket ||
  5243. cp === RightCurlyBracket ||
  5244. cp === VerticalLine);
  5245. }
  5246. function isRegExpIdentifierStart(cp) {
  5247. return isIdStart(cp) || cp === DollarSign || cp === LowLine;
  5248. }
  5249. function isRegExpIdentifierPart(cp) {
  5250. return (isIdContinue(cp) ||
  5251. cp === DollarSign ||
  5252. cp === LowLine ||
  5253. cp === ZeroWidthNonJoiner ||
  5254. cp === ZeroWidthJoiner);
  5255. }
  5256. function isUnicodePropertyNameCharacter(cp) {
  5257. return isLatinLetter(cp) || cp === LowLine;
  5258. }
  5259. function isUnicodePropertyValueCharacter(cp) {
  5260. return isUnicodePropertyNameCharacter(cp) || isDecimalDigit(cp);
  5261. }
  5262. function isValidUnicodeProperty(name, value) {
  5263. return PropertyData.hasOwnProperty(name) && PropertyData[name].has(value);
  5264. }
  5265. function isValidUnicodePropertyName(name) {
  5266. return PropertyData.$LONE.has(name);
  5267. }
  5268. class RegExpValidator {
  5269. constructor(options) {
  5270. this._reader = new Reader();
  5271. this._uFlag = false;
  5272. this._nFlag = false;
  5273. this._lastIntValue = 0;
  5274. this._lastMinValue = 0;
  5275. this._lastMaxValue = 0;
  5276. this._lastStrValue = "";
  5277. this._lastKeyValue = "";
  5278. this._lastValValue = "";
  5279. this._lastAssertionIsQuantifiable = false;
  5280. this._numCapturingParens = 0;
  5281. this._groupNames = new Set();
  5282. this._backreferenceNames = new Set();
  5283. this._options = options || {};
  5284. }
  5285. validateLiteral(source, start = 0, end = source.length) {
  5286. this._uFlag = this._nFlag = false;
  5287. this.reset(source, start, end);
  5288. this.onLiteralEnter(start);
  5289. if (this.eat(Solidus) && this.eatRegExpBody() && this.eat(Solidus)) {
  5290. const flagStart = this.index;
  5291. const uFlag = source.indexOf("u", flagStart) !== -1;
  5292. this.validateFlags(source, flagStart, end);
  5293. this.validatePattern(source, start + 1, flagStart - 1, uFlag);
  5294. }
  5295. else if (start >= end) {
  5296. this.raise("Empty");
  5297. }
  5298. else {
  5299. const c = String.fromCodePoint(this.currentCodePoint);
  5300. this.raise(`Unexpected character '${c}'`);
  5301. }
  5302. this.onLiteralLeave(start, end);
  5303. }
  5304. validateFlags(source, start = 0, end = source.length) {
  5305. const existingFlags = new Set();
  5306. let global = false;
  5307. let ignoreCase = false;
  5308. let multiline = false;
  5309. let sticky = false;
  5310. let unicode = false;
  5311. let dotAll = false;
  5312. for (let i = start; i < end; ++i) {
  5313. const flag = source.charCodeAt(i);
  5314. if (existingFlags.has(flag)) {
  5315. this.raise(`Duplicated flag '${source[i]}'`);
  5316. }
  5317. existingFlags.add(flag);
  5318. if (flag === LatinSmallLetterG) {
  5319. global = true;
  5320. }
  5321. else if (flag === LatinSmallLetterI) {
  5322. ignoreCase = true;
  5323. }
  5324. else if (flag === LatinSmallLetterM) {
  5325. multiline = true;
  5326. }
  5327. else if (flag === LatinSmallLetterU && this.ecmaVersion >= 2015) {
  5328. unicode = true;
  5329. }
  5330. else if (flag === LatinSmallLetterY && this.ecmaVersion >= 2015) {
  5331. sticky = true;
  5332. }
  5333. else if (flag === LatinSmallLetterS && this.ecmaVersion >= 2018) {
  5334. dotAll = true;
  5335. }
  5336. else {
  5337. this.raise(`Invalid flag '${source[i]}'`);
  5338. }
  5339. }
  5340. this.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll);
  5341. }
  5342. validatePattern(source, start = 0, end = source.length, uFlag = false) {
  5343. this._uFlag = uFlag && this.ecmaVersion >= 2015;
  5344. this._nFlag = uFlag && this.ecmaVersion >= 2018;
  5345. this.reset(source, start, end);
  5346. this.pattern();
  5347. if (!this._nFlag &&
  5348. this.ecmaVersion >= 2018 &&
  5349. this._groupNames.size > 0) {
  5350. this._nFlag = true;
  5351. this.rewind(start);
  5352. this.pattern();
  5353. }
  5354. }
  5355. get strict() {
  5356. return Boolean(this._options.strict || this._uFlag);
  5357. }
  5358. get ecmaVersion() {
  5359. return this._options.ecmaVersion || 2018;
  5360. }
  5361. onLiteralEnter(start) {
  5362. if (this._options.onLiteralEnter) {
  5363. this._options.onLiteralEnter(start);
  5364. }
  5365. }
  5366. onLiteralLeave(start, end) {
  5367. if (this._options.onLiteralLeave) {
  5368. this._options.onLiteralLeave(start, end);
  5369. }
  5370. }
  5371. onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) {
  5372. if (this._options.onFlags) {
  5373. this._options.onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll);
  5374. }
  5375. }
  5376. onPatternEnter(start) {
  5377. if (this._options.onPatternEnter) {
  5378. this._options.onPatternEnter(start);
  5379. }
  5380. }
  5381. onPatternLeave(start, end) {
  5382. if (this._options.onPatternLeave) {
  5383. this._options.onPatternLeave(start, end);
  5384. }
  5385. }
  5386. onDisjunctionEnter(start) {
  5387. if (this._options.onDisjunctionEnter) {
  5388. this._options.onDisjunctionEnter(start);
  5389. }
  5390. }
  5391. onDisjunctionLeave(start, end) {
  5392. if (this._options.onDisjunctionLeave) {
  5393. this._options.onDisjunctionLeave(start, end);
  5394. }
  5395. }
  5396. onAlternativeEnter(start, index) {
  5397. if (this._options.onAlternativeEnter) {
  5398. this._options.onAlternativeEnter(start, index);
  5399. }
  5400. }
  5401. onAlternativeLeave(start, end, index) {
  5402. if (this._options.onAlternativeLeave) {
  5403. this._options.onAlternativeLeave(start, end, index);
  5404. }
  5405. }
  5406. onGroupEnter(start) {
  5407. if (this._options.onGroupEnter) {
  5408. this._options.onGroupEnter(start);
  5409. }
  5410. }
  5411. onGroupLeave(start, end) {
  5412. if (this._options.onGroupLeave) {
  5413. this._options.onGroupLeave(start, end);
  5414. }
  5415. }
  5416. onCapturingGroupEnter(start, name) {
  5417. if (this._options.onCapturingGroupEnter) {
  5418. this._options.onCapturingGroupEnter(start, name);
  5419. }
  5420. }
  5421. onCapturingGroupLeave(start, end, name) {
  5422. if (this._options.onCapturingGroupLeave) {
  5423. this._options.onCapturingGroupLeave(start, end, name);
  5424. }
  5425. }
  5426. onQuantifier(start, end, min, max, greedy) {
  5427. if (this._options.onQuantifier) {
  5428. this._options.onQuantifier(start, end, min, max, greedy);
  5429. }
  5430. }
  5431. onLookaroundAssertionEnter(start, kind, negate) {
  5432. if (this._options.onLookaroundAssertionEnter) {
  5433. this._options.onLookaroundAssertionEnter(start, kind, negate);
  5434. }
  5435. }
  5436. onLookaroundAssertionLeave(start, end, kind, negate) {
  5437. if (this._options.onLookaroundAssertionLeave) {
  5438. this._options.onLookaroundAssertionLeave(start, end, kind, negate);
  5439. }
  5440. }
  5441. onEdgeAssertion(start, end, kind) {
  5442. if (this._options.onEdgeAssertion) {
  5443. this._options.onEdgeAssertion(start, end, kind);
  5444. }
  5445. }
  5446. onWordBoundaryAssertion(start, end, kind, negate) {
  5447. if (this._options.onWordBoundaryAssertion) {
  5448. this._options.onWordBoundaryAssertion(start, end, kind, negate);
  5449. }
  5450. }
  5451. onAnyCharacterSet(start, end, kind) {
  5452. if (this._options.onAnyCharacterSet) {
  5453. this._options.onAnyCharacterSet(start, end, kind);
  5454. }
  5455. }
  5456. onEscapeCharacterSet(start, end, kind, negate) {
  5457. if (this._options.onEscapeCharacterSet) {
  5458. this._options.onEscapeCharacterSet(start, end, kind, negate);
  5459. }
  5460. }
  5461. onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {
  5462. if (this._options.onUnicodePropertyCharacterSet) {
  5463. this._options.onUnicodePropertyCharacterSet(start, end, kind, key, value, negate);
  5464. }
  5465. }
  5466. onCharacter(start, end, value) {
  5467. if (this._options.onCharacter) {
  5468. this._options.onCharacter(start, end, value);
  5469. }
  5470. }
  5471. onBackreference(start, end, ref) {
  5472. if (this._options.onBackreference) {
  5473. this._options.onBackreference(start, end, ref);
  5474. }
  5475. }
  5476. onCharacterClassEnter(start, negate) {
  5477. if (this._options.onCharacterClassEnter) {
  5478. this._options.onCharacterClassEnter(start, negate);
  5479. }
  5480. }
  5481. onCharacterClassLeave(start, end, negate) {
  5482. if (this._options.onCharacterClassLeave) {
  5483. this._options.onCharacterClassLeave(start, end, negate);
  5484. }
  5485. }
  5486. onCharacterClassRange(start, end, min, max) {
  5487. if (this._options.onCharacterClassRange) {
  5488. this._options.onCharacterClassRange(start, end, min, max);
  5489. }
  5490. }
  5491. get source() {
  5492. return this._reader.source;
  5493. }
  5494. get index() {
  5495. return this._reader.index;
  5496. }
  5497. get currentCodePoint() {
  5498. return this._reader.currentCodePoint;
  5499. }
  5500. get nextCodePoint() {
  5501. return this._reader.nextCodePoint;
  5502. }
  5503. get nextCodePoint2() {
  5504. return this._reader.nextCodePoint2;
  5505. }
  5506. get nextCodePoint3() {
  5507. return this._reader.nextCodePoint3;
  5508. }
  5509. reset(source, start, end) {
  5510. this._reader.reset(source, start, end, this._uFlag);
  5511. }
  5512. rewind(index) {
  5513. this._reader.rewind(index);
  5514. }
  5515. advance() {
  5516. this._reader.advance();
  5517. }
  5518. eat(cp) {
  5519. return this._reader.eat(cp);
  5520. }
  5521. eat2(cp1, cp2) {
  5522. return this._reader.eat2(cp1, cp2);
  5523. }
  5524. eat3(cp1, cp2, cp3) {
  5525. return this._reader.eat3(cp1, cp2, cp3);
  5526. }
  5527. raise(message) {
  5528. throw new RegExpSyntaxError(this.source, this._uFlag, this.index, message);
  5529. }
  5530. eatRegExpBody() {
  5531. const start = this.index;
  5532. let inClass = false;
  5533. let escaped = false;
  5534. for (;;) {
  5535. const cp = this.currentCodePoint;
  5536. if (cp === -1 || isLineTerminator(cp)) {
  5537. const kind = inClass ? "character class" : "regular expression";
  5538. this.raise(`Unterminated ${kind}`);
  5539. }
  5540. if (escaped) {
  5541. escaped = false;
  5542. }
  5543. else if (cp === ReverseSolidus) {
  5544. escaped = true;
  5545. }
  5546. else if (cp === LeftSquareBracket) {
  5547. inClass = true;
  5548. }
  5549. else if (cp === RightSquareBracket) {
  5550. inClass = false;
  5551. }
  5552. else if ((cp === Solidus && !inClass) ||
  5553. (cp === Asterisk && this.index === start)) {
  5554. break;
  5555. }
  5556. this.advance();
  5557. }
  5558. return this.index !== start;
  5559. }
  5560. pattern() {
  5561. const start = this.index;
  5562. this._numCapturingParens = this.countCapturingParens();
  5563. this._groupNames.clear();
  5564. this._backreferenceNames.clear();
  5565. this.onPatternEnter(start);
  5566. this.disjunction();
  5567. const cp = this.currentCodePoint;
  5568. if (this.currentCodePoint !== -1) {
  5569. if (cp === RightParenthesis) {
  5570. this.raise("Unmatched ')'");
  5571. }
  5572. if (cp === RightSquareBracket || cp === RightCurlyBracket) {
  5573. this.raise("Lone quantifier brackets");
  5574. }
  5575. const c = String.fromCodePoint(cp);
  5576. this.raise(`Unexpected character '${c}'`);
  5577. }
  5578. this._backreferenceNames.forEach(name => {
  5579. if (!this._groupNames.has(name)) {
  5580. this.raise("Invalid named capture referenced");
  5581. }
  5582. });
  5583. this.onPatternLeave(start, this.index);
  5584. }
  5585. countCapturingParens() {
  5586. const start = this.index;
  5587. let inClass = false;
  5588. let escaped = false;
  5589. let count = 0;
  5590. let cp = 0;
  5591. while ((cp = this.currentCodePoint) !== -1) {
  5592. if (escaped) {
  5593. escaped = false;
  5594. }
  5595. else if (cp === ReverseSolidus) {
  5596. escaped = true;
  5597. }
  5598. else if (cp === LeftSquareBracket) {
  5599. inClass = true;
  5600. }
  5601. else if (cp === RightSquareBracket) {
  5602. inClass = false;
  5603. }
  5604. else if (cp === LeftParenthesis &&
  5605. !inClass &&
  5606. (this.nextCodePoint !== QuestionMark ||
  5607. (this.nextCodePoint2 === LessThanSign &&
  5608. this.nextCodePoint3 !== EqualsSign &&
  5609. this.nextCodePoint3 !== ExclamationMark))) {
  5610. count += 1;
  5611. }
  5612. this.advance();
  5613. }
  5614. this.rewind(start);
  5615. return count;
  5616. }
  5617. disjunction() {
  5618. const start = this.index;
  5619. let i = 0;
  5620. this.onDisjunctionEnter(start);
  5621. this.alternative(i++);
  5622. while (this.eat(VerticalLine)) {
  5623. this.alternative(i++);
  5624. }
  5625. if (this.eatQuantifier(true)) {
  5626. this.raise("Nothing to repeat");
  5627. }
  5628. if (this.eat(LeftCurlyBracket)) {
  5629. this.raise("Lone quantifier brackets");
  5630. }
  5631. this.onDisjunctionLeave(start, this.index);
  5632. }
  5633. alternative(i) {
  5634. const start = this.index;
  5635. this.onAlternativeEnter(start, i);
  5636. while (this.currentCodePoint !== -1 && this.eatTerm())
  5637. ;
  5638. this.onAlternativeLeave(start, this.index, i);
  5639. }
  5640. eatTerm() {
  5641. if (this.eatAssertion()) {
  5642. if (this._lastAssertionIsQuantifiable) {
  5643. this.eatQuantifier();
  5644. }
  5645. return true;
  5646. }
  5647. if (this.strict ? this.eatAtom() : this.eatExtendedAtom()) {
  5648. this.eatQuantifier();
  5649. return true;
  5650. }
  5651. return false;
  5652. }
  5653. eatAssertion() {
  5654. const start = this.index;
  5655. this._lastAssertionIsQuantifiable = false;
  5656. if (this.eat(CircumflexAccent)) {
  5657. this.onEdgeAssertion(start, this.index, "start");
  5658. return true;
  5659. }
  5660. if (this.eat(DollarSign)) {
  5661. this.onEdgeAssertion(start, this.index, "end");
  5662. return true;
  5663. }
  5664. if (this.eat2(ReverseSolidus, LatinCapitalLetterB)) {
  5665. this.onWordBoundaryAssertion(start, this.index, "word", true);
  5666. return true;
  5667. }
  5668. if (this.eat2(ReverseSolidus, LatinSmallLetterB)) {
  5669. this.onWordBoundaryAssertion(start, this.index, "word", false);
  5670. return true;
  5671. }
  5672. if (this.eat2(LeftParenthesis, QuestionMark)) {
  5673. const lookbehind = this.ecmaVersion >= 2018 && this.eat(LessThanSign);
  5674. let negate = false;
  5675. if (this.eat(EqualsSign) || (negate = this.eat(ExclamationMark))) {
  5676. const kind = lookbehind ? "lookbehind" : "lookahead";
  5677. this.onLookaroundAssertionEnter(start, kind, negate);
  5678. this.disjunction();
  5679. if (!this.eat(RightParenthesis)) {
  5680. this.raise("Unterminated group");
  5681. }
  5682. this._lastAssertionIsQuantifiable = !lookbehind && !this.strict;
  5683. this.onLookaroundAssertionLeave(start, this.index, kind, negate);
  5684. return true;
  5685. }
  5686. this.rewind(start);
  5687. }
  5688. return false;
  5689. }
  5690. eatQuantifier(noError = false) {
  5691. const start = this.index;
  5692. let min = 0;
  5693. let max = 0;
  5694. let greedy = false;
  5695. if (this.eat(Asterisk)) {
  5696. min = 0;
  5697. max = Number.POSITIVE_INFINITY;
  5698. }
  5699. else if (this.eat(PlusSign)) {
  5700. min = 1;
  5701. max = Number.POSITIVE_INFINITY;
  5702. }
  5703. else if (this.eat(QuestionMark)) {
  5704. min = 0;
  5705. max = 1;
  5706. }
  5707. else if (this.eatBracedQuantifier(noError)) {
  5708. min = this._lastMinValue;
  5709. max = this._lastMaxValue;
  5710. }
  5711. else {
  5712. return false;
  5713. }
  5714. greedy = !this.eat(QuestionMark);
  5715. if (!noError) {
  5716. this.onQuantifier(start, this.index, min, max, greedy);
  5717. }
  5718. return true;
  5719. }
  5720. eatBracedQuantifier(noError) {
  5721. const start = this.index;
  5722. if (this.eat(LeftCurlyBracket)) {
  5723. this._lastMinValue = 0;
  5724. this._lastMaxValue = Number.POSITIVE_INFINITY;
  5725. if (this.eatDecimalDigits()) {
  5726. this._lastMinValue = this._lastMaxValue = this._lastIntValue;
  5727. if (this.eat(Comma)) {
  5728. this._lastMaxValue = this.eatDecimalDigits()
  5729. ? this._lastIntValue
  5730. : Number.POSITIVE_INFINITY;
  5731. }
  5732. if (this.eat(RightCurlyBracket)) {
  5733. if (!noError && this._lastMaxValue < this._lastMinValue) {
  5734. this.raise("numbers out of order in {} quantifier");
  5735. }
  5736. return true;
  5737. }
  5738. }
  5739. if (!noError && this.strict) {
  5740. this.raise("Incomplete quantifier");
  5741. }
  5742. this.rewind(start);
  5743. }
  5744. return false;
  5745. }
  5746. eatAtom() {
  5747. return (this.eatPatternCharacter() ||
  5748. this.eatDot() ||
  5749. this.eatReverseSolidusAtomEscape() ||
  5750. this.eatCharacterClass() ||
  5751. this.eatUncapturingGroup() ||
  5752. this.eatCapturingGroup());
  5753. }
  5754. eatDot() {
  5755. if (this.eat(FullStop)) {
  5756. this.onAnyCharacterSet(this.index - 1, this.index, "any");
  5757. return true;
  5758. }
  5759. return false;
  5760. }
  5761. eatReverseSolidusAtomEscape() {
  5762. const start = this.index;
  5763. if (this.eat(ReverseSolidus)) {
  5764. if (this.eatAtomEscape()) {
  5765. return true;
  5766. }
  5767. this.rewind(start);
  5768. }
  5769. return false;
  5770. }
  5771. eatUncapturingGroup() {
  5772. const start = this.index;
  5773. if (this.eat3(LeftParenthesis, QuestionMark, Colon)) {
  5774. this.onGroupEnter(start);
  5775. this.disjunction();
  5776. if (!this.eat(RightParenthesis)) {
  5777. this.raise("Unterminated group");
  5778. }
  5779. this.onGroupLeave(start, this.index);
  5780. return true;
  5781. }
  5782. return false;
  5783. }
  5784. eatCapturingGroup() {
  5785. const start = this.index;
  5786. if (this.eat(LeftParenthesis)) {
  5787. this._lastStrValue = "";
  5788. if (this.ecmaVersion >= 2018) {
  5789. this.groupSpecifier();
  5790. }
  5791. else if (this.currentCodePoint === QuestionMark) {
  5792. this.raise("Invalid group");
  5793. }
  5794. const name = this._lastStrValue || null;
  5795. this.onCapturingGroupEnter(start, name);
  5796. this.disjunction();
  5797. if (!this.eat(RightParenthesis)) {
  5798. this.raise("Unterminated group");
  5799. }
  5800. this.onCapturingGroupLeave(start, this.index, name);
  5801. return true;
  5802. }
  5803. return false;
  5804. }
  5805. eatExtendedAtom() {
  5806. return (this.eatDot() ||
  5807. this.eatReverseSolidusAtomEscape() ||
  5808. this.eatCharacterClass() ||
  5809. this.eatUncapturingGroup() ||
  5810. this.eatCapturingGroup() ||
  5811. this.eatInvalidBracedQuantifier() ||
  5812. this.eatExtendedPatternCharacter());
  5813. }
  5814. eatInvalidBracedQuantifier() {
  5815. if (this.eatBracedQuantifier(true)) {
  5816. this.raise("Nothing to repeat");
  5817. }
  5818. return false;
  5819. }
  5820. eatSyntaxCharacter() {
  5821. if (isSyntaxCharacter(this.currentCodePoint)) {
  5822. this._lastIntValue = this.currentCodePoint;
  5823. this.advance();
  5824. return true;
  5825. }
  5826. return false;
  5827. }
  5828. eatPatternCharacter() {
  5829. const start = this.index;
  5830. const cp = this.currentCodePoint;
  5831. if (cp !== -1 && !isSyntaxCharacter(cp)) {
  5832. this.advance();
  5833. this.onCharacter(start, this.index, cp);
  5834. return true;
  5835. }
  5836. return false;
  5837. }
  5838. eatExtendedPatternCharacter() {
  5839. const start = this.index;
  5840. const cp = this.currentCodePoint;
  5841. if (cp !== -1 &&
  5842. cp !== CircumflexAccent &&
  5843. cp !== DollarSign &&
  5844. cp !== FullStop &&
  5845. cp !== Asterisk &&
  5846. cp !== PlusSign &&
  5847. cp !== QuestionMark &&
  5848. cp !== LeftParenthesis &&
  5849. cp !== RightParenthesis &&
  5850. cp !== LeftSquareBracket &&
  5851. cp !== VerticalLine) {
  5852. this.advance();
  5853. this.onCharacter(start, this.index, cp);
  5854. return true;
  5855. }
  5856. return false;
  5857. }
  5858. groupSpecifier() {
  5859. this._lastStrValue = "";
  5860. if (this.eat(QuestionMark)) {
  5861. if (this.eatGroupName()) {
  5862. if (!this._groupNames.has(this._lastStrValue)) {
  5863. this._groupNames.add(this._lastStrValue);
  5864. return;
  5865. }
  5866. this.raise("Duplicate capture group name");
  5867. }
  5868. this.raise("Invalid group");
  5869. }
  5870. }
  5871. eatGroupName() {
  5872. this._lastStrValue = "";
  5873. if (this.eat(LessThanSign)) {
  5874. if (this.eatRegExpIdentifierName() && this.eat(GreaterThanSign)) {
  5875. return true;
  5876. }
  5877. this.raise("Invalid capture group name");
  5878. }
  5879. return false;
  5880. }
  5881. eatRegExpIdentifierName() {
  5882. this._lastStrValue = "";
  5883. if (this.eatRegExpIdentifierStart()) {
  5884. this._lastStrValue += String.fromCodePoint(this._lastIntValue);
  5885. while (this.eatRegExpIdentifierPart()) {
  5886. this._lastStrValue += String.fromCodePoint(this._lastIntValue);
  5887. }
  5888. return true;
  5889. }
  5890. return false;
  5891. }
  5892. eatRegExpIdentifierStart() {
  5893. const start = this.index;
  5894. let cp = this.currentCodePoint;
  5895. this.advance();
  5896. if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {
  5897. cp = this._lastIntValue;
  5898. }
  5899. if (isRegExpIdentifierStart(cp)) {
  5900. this._lastIntValue = cp;
  5901. return true;
  5902. }
  5903. if (this.index !== start) {
  5904. this.rewind(start);
  5905. }
  5906. return false;
  5907. }
  5908. eatRegExpIdentifierPart() {
  5909. const start = this.index;
  5910. let cp = this.currentCodePoint;
  5911. this.advance();
  5912. if (cp === ReverseSolidus && this.eatRegExpUnicodeEscapeSequence()) {
  5913. cp = this._lastIntValue;
  5914. }
  5915. if (isRegExpIdentifierPart(cp)) {
  5916. this._lastIntValue = cp;
  5917. return true;
  5918. }
  5919. if (this.index !== start) {
  5920. this.rewind(start);
  5921. }
  5922. return false;
  5923. }
  5924. eatAtomEscape() {
  5925. if (this.eatBackreference() ||
  5926. this.eatCharacterClassEscape() ||
  5927. this.eatCharacterEscape() ||
  5928. (this._nFlag && this.eatKGroupName())) {
  5929. return true;
  5930. }
  5931. if (this.strict || this._uFlag) {
  5932. this.raise("Invalid escape");
  5933. }
  5934. return false;
  5935. }
  5936. eatBackreference() {
  5937. const start = this.index;
  5938. if (this.eatDecimalEscape()) {
  5939. const n = this._lastIntValue;
  5940. if (n <= this._numCapturingParens) {
  5941. this.onBackreference(start - 1, this.index, n);
  5942. return true;
  5943. }
  5944. if (this.strict) {
  5945. this.raise("Invalid escape");
  5946. }
  5947. this.rewind(start);
  5948. }
  5949. return false;
  5950. }
  5951. eatKGroupName() {
  5952. const start = this.index;
  5953. if (this.eat(LatinSmallLetterK)) {
  5954. if (this.eatGroupName()) {
  5955. const groupName = this._lastStrValue;
  5956. this._backreferenceNames.add(groupName);
  5957. this.onBackreference(start - 1, this.index, groupName);
  5958. return true;
  5959. }
  5960. this.raise("Invalid named reference");
  5961. }
  5962. return false;
  5963. }
  5964. eatCharacterEscape() {
  5965. const start = this.index;
  5966. if (this.eatControlEscape() ||
  5967. this.eatCControlLetter() ||
  5968. this.eatZero() ||
  5969. this.eatHexEscapeSequence() ||
  5970. this.eatRegExpUnicodeEscapeSequence() ||
  5971. (!this.strict && this.eatLegacyOctalEscapeSequence()) ||
  5972. this.eatIdentityEscape()) {
  5973. this.onCharacter(start - 1, this.index, this._lastIntValue);
  5974. return true;
  5975. }
  5976. return false;
  5977. }
  5978. eatCControlLetter() {
  5979. const start = this.index;
  5980. if (this.eat(LatinSmallLetterC)) {
  5981. if (this.eatControlLetter()) {
  5982. return true;
  5983. }
  5984. this.rewind(start);
  5985. }
  5986. return false;
  5987. }
  5988. eatZero() {
  5989. if (this.currentCodePoint === DigitZero &&
  5990. !isDecimalDigit(this.nextCodePoint)) {
  5991. this._lastIntValue = 0;
  5992. this.advance();
  5993. return true;
  5994. }
  5995. return false;
  5996. }
  5997. eatControlEscape() {
  5998. if (this.eat(LatinSmallLetterT)) {
  5999. this._lastIntValue = CharacterTabulation;
  6000. return true;
  6001. }
  6002. if (this.eat(LatinSmallLetterN)) {
  6003. this._lastIntValue = LineFeed;
  6004. return true;
  6005. }
  6006. if (this.eat(LatinSmallLetterV)) {
  6007. this._lastIntValue = LineTabulation;
  6008. return true;
  6009. }
  6010. if (this.eat(LatinSmallLetterF)) {
  6011. this._lastIntValue = FormFeed;
  6012. return true;
  6013. }
  6014. if (this.eat(LatinSmallLetterR)) {
  6015. this._lastIntValue = CarriageReturn;
  6016. return true;
  6017. }
  6018. return false;
  6019. }
  6020. eatControlLetter() {
  6021. const cp = this.currentCodePoint;
  6022. if (isLatinLetter(cp)) {
  6023. this.advance();
  6024. this._lastIntValue = cp % 0x20;
  6025. return true;
  6026. }
  6027. return false;
  6028. }
  6029. eatRegExpUnicodeEscapeSequence() {
  6030. const start = this.index;
  6031. if (this.eat(LatinSmallLetterU)) {
  6032. if (this.eatFixedHexDigits(4)) {
  6033. const lead = this._lastIntValue;
  6034. if (this._uFlag && lead >= 0xd800 && lead <= 0xdbff) {
  6035. const leadSurrogateEnd = this.index;
  6036. if (this.eat(ReverseSolidus) &&
  6037. this.eat(LatinSmallLetterU) &&
  6038. this.eatFixedHexDigits(4)) {
  6039. const trail = this._lastIntValue;
  6040. if (trail >= 0xdc00 && trail <= 0xdfff) {
  6041. this._lastIntValue =
  6042. (lead - 0xd800) * 0x400 +
  6043. (trail - 0xdc00) +
  6044. 0x10000;
  6045. return true;
  6046. }
  6047. }
  6048. this.rewind(leadSurrogateEnd);
  6049. this._lastIntValue = lead;
  6050. }
  6051. return true;
  6052. }
  6053. if (this._uFlag &&
  6054. this.eat(LeftCurlyBracket) &&
  6055. this.eatHexDigits() &&
  6056. this.eat(RightCurlyBracket) &&
  6057. isValidUnicode(this._lastIntValue)) {
  6058. return true;
  6059. }
  6060. if (this.strict || this._uFlag) {
  6061. this.raise("Invalid unicode escape");
  6062. }
  6063. this.rewind(start);
  6064. }
  6065. return false;
  6066. }
  6067. eatIdentityEscape() {
  6068. if (this._uFlag) {
  6069. if (this.eatSyntaxCharacter()) {
  6070. return true;
  6071. }
  6072. if (this.eat(Solidus)) {
  6073. this._lastIntValue = Solidus;
  6074. return true;
  6075. }
  6076. return false;
  6077. }
  6078. if (this.isValidIdentityEscape(this.currentCodePoint)) {
  6079. this._lastIntValue = this.currentCodePoint;
  6080. this.advance();
  6081. return true;
  6082. }
  6083. return false;
  6084. }
  6085. isValidIdentityEscape(cp) {
  6086. if (cp === -1) {
  6087. return false;
  6088. }
  6089. if (this.strict) {
  6090. return !isIdContinue(cp);
  6091. }
  6092. return (cp !== LatinSmallLetterC &&
  6093. (!this._nFlag || cp !== LatinSmallLetterK));
  6094. }
  6095. eatDecimalEscape() {
  6096. this._lastIntValue = 0;
  6097. let cp = this.currentCodePoint;
  6098. if (cp >= DigitOne && cp <= DigitNine) {
  6099. do {
  6100. this._lastIntValue = 10 * this._lastIntValue + (cp - DigitZero);
  6101. this.advance();
  6102. } while ((cp = this.currentCodePoint) >= DigitZero &&
  6103. cp <= DigitNine);
  6104. return true;
  6105. }
  6106. return false;
  6107. }
  6108. eatCharacterClassEscape() {
  6109. const start = this.index;
  6110. if (this.eat(LatinSmallLetterD)) {
  6111. this._lastIntValue = -1;
  6112. this.onEscapeCharacterSet(start - 1, this.index, "digit", false);
  6113. return true;
  6114. }
  6115. if (this.eat(LatinCapitalLetterD)) {
  6116. this._lastIntValue = -1;
  6117. this.onEscapeCharacterSet(start - 1, this.index, "digit", true);
  6118. return true;
  6119. }
  6120. if (this.eat(LatinSmallLetterS)) {
  6121. this._lastIntValue = -1;
  6122. this.onEscapeCharacterSet(start - 1, this.index, "space", false);
  6123. return true;
  6124. }
  6125. if (this.eat(LatinCapitalLetterS)) {
  6126. this._lastIntValue = -1;
  6127. this.onEscapeCharacterSet(start - 1, this.index, "space", true);
  6128. return true;
  6129. }
  6130. if (this.eat(LatinSmallLetterW)) {
  6131. this._lastIntValue = -1;
  6132. this.onEscapeCharacterSet(start - 1, this.index, "word", false);
  6133. return true;
  6134. }
  6135. if (this.eat(LatinCapitalLetterW)) {
  6136. this._lastIntValue = -1;
  6137. this.onEscapeCharacterSet(start - 1, this.index, "word", true);
  6138. return true;
  6139. }
  6140. let negate = false;
  6141. if (this._uFlag &&
  6142. this.ecmaVersion >= 2018 &&
  6143. (this.eat(LatinSmallLetterP) ||
  6144. (negate = this.eat(LatinCapitalLetterP)))) {
  6145. this._lastIntValue = -1;
  6146. if (this.eat(LeftCurlyBracket) &&
  6147. this.eatUnicodePropertyValueExpression() &&
  6148. this.eat(RightCurlyBracket)) {
  6149. this.onUnicodePropertyCharacterSet(start - 1, this.index, "property", this._lastKeyValue, this._lastValValue || null, negate);
  6150. return true;
  6151. }
  6152. this.raise("Invalid property name");
  6153. }
  6154. return false;
  6155. }
  6156. eatUnicodePropertyValueExpression() {
  6157. const start = this.index;
  6158. if (this.eatUnicodePropertyName() && this.eat(EqualsSign)) {
  6159. this._lastKeyValue = this._lastStrValue;
  6160. if (this.eatUnicodePropertyValue()) {
  6161. this._lastValValue = this._lastStrValue;
  6162. if (isValidUnicodeProperty(this._lastKeyValue, this._lastValValue)) {
  6163. return true;
  6164. }
  6165. this.raise("Invalid property name");
  6166. }
  6167. }
  6168. this.rewind(start);
  6169. if (this.eatLoneUnicodePropertyNameOrValue()) {
  6170. const nameOrValue = this._lastStrValue;
  6171. if (isValidUnicodeProperty("General_Category", nameOrValue)) {
  6172. this._lastKeyValue = "General_Category";
  6173. this._lastValValue = nameOrValue;
  6174. return true;
  6175. }
  6176. if (isValidUnicodePropertyName(nameOrValue)) {
  6177. this._lastKeyValue = nameOrValue;
  6178. this._lastValValue = "";
  6179. return true;
  6180. }
  6181. this.raise("Invalid property name");
  6182. }
  6183. return false;
  6184. }
  6185. eatUnicodePropertyName() {
  6186. this._lastStrValue = "";
  6187. while (isUnicodePropertyNameCharacter(this.currentCodePoint)) {
  6188. this._lastStrValue += String.fromCodePoint(this.currentCodePoint);
  6189. this.advance();
  6190. }
  6191. return this._lastStrValue !== "";
  6192. }
  6193. eatUnicodePropertyValue() {
  6194. this._lastStrValue = "";
  6195. while (isUnicodePropertyValueCharacter(this.currentCodePoint)) {
  6196. this._lastStrValue += String.fromCodePoint(this.currentCodePoint);
  6197. this.advance();
  6198. }
  6199. return this._lastStrValue !== "";
  6200. }
  6201. eatLoneUnicodePropertyNameOrValue() {
  6202. return this.eatUnicodePropertyValue();
  6203. }
  6204. eatCharacterClass() {
  6205. const start = this.index;
  6206. if (this.eat(LeftSquareBracket)) {
  6207. const negate = this.eat(CircumflexAccent);
  6208. this.onCharacterClassEnter(start, negate);
  6209. this.classRanges();
  6210. if (!this.eat(RightSquareBracket)) {
  6211. this.raise("Unterminated character class");
  6212. }
  6213. this.onCharacterClassLeave(start, this.index, negate);
  6214. return true;
  6215. }
  6216. return false;
  6217. }
  6218. classRanges() {
  6219. let start = this.index;
  6220. while (this.eatClassAtom()) {
  6221. const left = this._lastIntValue;
  6222. const hyphenStart = this.index;
  6223. if (this.eat(HyphenMinus)) {
  6224. this.onCharacter(hyphenStart, this.index, HyphenMinus);
  6225. if (this.eatClassAtom()) {
  6226. const right = this._lastIntValue;
  6227. if (left === -1 || right === -1) {
  6228. if (this.strict) {
  6229. this.raise("Invalid character class");
  6230. }
  6231. }
  6232. else if (left > right) {
  6233. this.raise("Range out of order in character class");
  6234. }
  6235. else {
  6236. this.onCharacterClassRange(start, this.index, left, right);
  6237. }
  6238. }
  6239. }
  6240. start = this.index;
  6241. }
  6242. }
  6243. eatClassAtom() {
  6244. const start = this.index;
  6245. if (this.eat(ReverseSolidus)) {
  6246. if (this.eatClassEscape()) {
  6247. return true;
  6248. }
  6249. if (this._uFlag) {
  6250. this.raise("Invalid escape");
  6251. }
  6252. this.rewind(start);
  6253. }
  6254. const cp = this.currentCodePoint;
  6255. if (cp !== -1 && cp !== RightSquareBracket) {
  6256. this.advance();
  6257. this._lastIntValue = cp;
  6258. this.onCharacter(start, this.index, cp);
  6259. return true;
  6260. }
  6261. return false;
  6262. }
  6263. eatClassEscape() {
  6264. const start = this.index;
  6265. if (this.eat(LatinSmallLetterB)) {
  6266. this._lastIntValue = Backspace;
  6267. this.onCharacter(start - 1, this.index, Backspace);
  6268. return true;
  6269. }
  6270. if (this._uFlag && this.eat(HyphenMinus)) {
  6271. this._lastIntValue = HyphenMinus;
  6272. this.onCharacter(start - 1, this.index, HyphenMinus);
  6273. return true;
  6274. }
  6275. if (!this._uFlag && this.eat(LatinSmallLetterC)) {
  6276. if (this.eatClassControlLetter()) {
  6277. this.onCharacter(start - 1, this.index, this._lastIntValue);
  6278. return true;
  6279. }
  6280. this.rewind(start);
  6281. }
  6282. return this.eatCharacterClassEscape() || this.eatCharacterEscape();
  6283. }
  6284. eatClassControlLetter() {
  6285. const cp = this.currentCodePoint;
  6286. if (isDecimalDigit(cp) || cp === LowLine) {
  6287. this.advance();
  6288. this._lastIntValue = cp % 0x20;
  6289. return true;
  6290. }
  6291. return false;
  6292. }
  6293. eatHexEscapeSequence() {
  6294. const start = this.index;
  6295. if (this.eat(LatinSmallLetterX)) {
  6296. if (this.eatFixedHexDigits(2)) {
  6297. return true;
  6298. }
  6299. if (this._uFlag) {
  6300. this.raise("Invalid escape");
  6301. }
  6302. this.rewind(start);
  6303. }
  6304. return false;
  6305. }
  6306. eatDecimalDigits() {
  6307. const start = this.index;
  6308. this._lastIntValue = 0;
  6309. while (isDecimalDigit(this.currentCodePoint)) {
  6310. this._lastIntValue =
  6311. 10 * this._lastIntValue + digitToInt(this.currentCodePoint);
  6312. this.advance();
  6313. }
  6314. return this.index !== start;
  6315. }
  6316. eatHexDigits() {
  6317. const start = this.index;
  6318. this._lastIntValue = 0;
  6319. while (isHexDigit(this.currentCodePoint)) {
  6320. this._lastIntValue =
  6321. 16 * this._lastIntValue + digitToInt(this.currentCodePoint);
  6322. this.advance();
  6323. }
  6324. return this.index !== start;
  6325. }
  6326. eatLegacyOctalEscapeSequence() {
  6327. if (this.eatOctalDigit()) {
  6328. const n1 = this._lastIntValue;
  6329. if (this.eatOctalDigit()) {
  6330. const n2 = this._lastIntValue;
  6331. if (n1 <= 3 && this.eatOctalDigit()) {
  6332. this._lastIntValue = n1 * 64 + n2 * 8 + this._lastIntValue;
  6333. }
  6334. else {
  6335. this._lastIntValue = n1 * 8 + n2;
  6336. }
  6337. }
  6338. else {
  6339. this._lastIntValue = n1;
  6340. }
  6341. return true;
  6342. }
  6343. return false;
  6344. }
  6345. eatOctalDigit() {
  6346. const cp = this.currentCodePoint;
  6347. if (isOctalDigit(cp)) {
  6348. this.advance();
  6349. this._lastIntValue = cp - DigitZero;
  6350. return true;
  6351. }
  6352. this._lastIntValue = 0;
  6353. return false;
  6354. }
  6355. eatFixedHexDigits(length) {
  6356. const start = this.index;
  6357. this._lastIntValue = 0;
  6358. for (let i = 0; i < length; ++i) {
  6359. const cp = this.currentCodePoint;
  6360. if (!isHexDigit(cp)) {
  6361. this.rewind(start);
  6362. return false;
  6363. }
  6364. this._lastIntValue = 16 * this._lastIntValue + digitToInt(cp);
  6365. this.advance();
  6366. }
  6367. return true;
  6368. }
  6369. }
  6370. const DummyPattern = {};
  6371. const DummyFlags = {};
  6372. const DummyCapturingGroup = {};
  6373. function elementsToAlternative(elements, parent) {
  6374. for (const element of elements) {
  6375. assert(element.type !== "Disjunction");
  6376. element.parent = parent;
  6377. }
  6378. return elements;
  6379. }
  6380. function addAlternativeElement(parent, node) {
  6381. if (parent.type === "Disjunction") {
  6382. last(parent.alternatives).push(node);
  6383. }
  6384. else {
  6385. parent.elements.push(node);
  6386. }
  6387. }
  6388. function addCommonElement(parent, node) {
  6389. if (parent.type === "Disjunction") {
  6390. last(parent.alternatives).push(node);
  6391. }
  6392. else if (parent.type === "CharacterClass") {
  6393. parent.elements.push(node);
  6394. }
  6395. else {
  6396. parent.elements.push(node);
  6397. }
  6398. }
  6399. class RegExpParserState {
  6400. constructor(options) {
  6401. this._node = DummyPattern;
  6402. this._flags = DummyFlags;
  6403. this._disjunctionStartStack = [];
  6404. this._backreferences = [];
  6405. this._capturingGroups = [];
  6406. this.source = "";
  6407. this.strict = Boolean(options && options.strict);
  6408. this.ecmaVersion = (options && options.ecmaVersion) || 2018;
  6409. }
  6410. get pattern() {
  6411. if (this._node.type !== "Pattern") {
  6412. throw new Error("UnknownError");
  6413. }
  6414. return this._node;
  6415. }
  6416. get flags() {
  6417. if (this._flags.type !== "Flags") {
  6418. throw new Error("UnknownError");
  6419. }
  6420. return this._flags;
  6421. }
  6422. onFlags(start, end, global, ignoreCase, multiline, unicode, sticky, dotAll) {
  6423. this._flags = {
  6424. type: "Flags",
  6425. parent: null,
  6426. start,
  6427. end,
  6428. raw: this.source.slice(start, end),
  6429. global,
  6430. ignoreCase,
  6431. multiline,
  6432. unicode,
  6433. sticky,
  6434. dotAll,
  6435. };
  6436. }
  6437. onPatternEnter(start) {
  6438. this._node = {
  6439. type: "Pattern",
  6440. parent: null,
  6441. start,
  6442. end: start,
  6443. raw: "",
  6444. elements: [],
  6445. };
  6446. this._backreferences.length = 0;
  6447. this._capturingGroups.length = 0;
  6448. }
  6449. onPatternLeave(start, end) {
  6450. this._node.end = end;
  6451. this._node.raw = this.source.slice(start, end);
  6452. for (const reference of this._backreferences) {
  6453. const ref = reference.ref;
  6454. const group = typeof ref === "number"
  6455. ? this._capturingGroups[ref - 1]
  6456. : this._capturingGroups.find(g => g.name === ref);
  6457. reference.resolved = group;
  6458. group.references.push(reference);
  6459. }
  6460. }
  6461. onDisjunctionEnter(start) {
  6462. this._disjunctionStartStack.push(start);
  6463. }
  6464. onDisjunctionLeave(start, end) {
  6465. this._disjunctionStartStack.pop();
  6466. }
  6467. onAlternativeEnter(start, index) {
  6468. if (index === 0) {
  6469. return;
  6470. }
  6471. const parentNode = this._node;
  6472. if (parentNode.type === "Disjunction" ||
  6473. parentNode.type === "CharacterClass") {
  6474. throw new Error("UnknownError");
  6475. }
  6476. const prevNode = last(parentNode.elements);
  6477. if (prevNode != null && prevNode.type === "Disjunction") {
  6478. this._node = prevNode;
  6479. prevNode.alternatives.push([]);
  6480. }
  6481. else {
  6482. this._node = {
  6483. type: "Disjunction",
  6484. parent: parentNode,
  6485. start: last(this._disjunctionStartStack),
  6486. end: start,
  6487. raw: "",
  6488. alternatives: [],
  6489. };
  6490. const elements = elementsToAlternative(parentNode.elements, this._node);
  6491. this._node.alternatives.push(elements, []);
  6492. parentNode.elements = [this._node];
  6493. }
  6494. }
  6495. onAlternativeLeave(start, end, index) {
  6496. if (index === 0) {
  6497. return;
  6498. }
  6499. this._node.end = end;
  6500. this._node.raw = this.source.slice(this._node.start, end);
  6501. this._node = this._node.parent;
  6502. }
  6503. onGroupEnter(start) {
  6504. const parentNode = this._node;
  6505. if (parentNode.type === "CharacterClass") {
  6506. throw new Error("UnknownError");
  6507. }
  6508. this._node = {
  6509. type: "Group",
  6510. parent: parentNode,
  6511. start,
  6512. end: start,
  6513. raw: "",
  6514. elements: [],
  6515. };
  6516. addAlternativeElement(parentNode, this._node);
  6517. }
  6518. onGroupLeave(start, end) {
  6519. this._node.end = end;
  6520. this._node.raw = this.source.slice(start, end);
  6521. this._node = this._node.parent;
  6522. }
  6523. onCapturingGroupEnter(start, name) {
  6524. const parentNode = this._node;
  6525. if (parentNode.type === "CharacterClass") {
  6526. throw new Error("UnknownError");
  6527. }
  6528. this._node = {
  6529. type: "CapturingGroup",
  6530. parent: parentNode,
  6531. start,
  6532. end: start,
  6533. raw: "",
  6534. name,
  6535. elements: [],
  6536. references: [],
  6537. };
  6538. addAlternativeElement(parentNode, this._node);
  6539. this._capturingGroups.push(this._node);
  6540. }
  6541. onCapturingGroupLeave(start, end, name) {
  6542. this._node.end = end;
  6543. this._node.raw = this.source.slice(start, end);
  6544. this._node = this._node.parent;
  6545. }
  6546. onQuantifier(start, end, min, max, greedy) {
  6547. const parentNode = this._node;
  6548. if (parentNode.type === "CharacterClass") {
  6549. throw new Error("UnknownError");
  6550. }
  6551. const elements = parentNode.type === "Disjunction"
  6552. ? last(parentNode.alternatives)
  6553. : parentNode.elements;
  6554. const prevNode = elements.pop();
  6555. const node = {
  6556. type: "Quantifier",
  6557. parent: parentNode,
  6558. start,
  6559. end,
  6560. raw: this.source.slice(start, end),
  6561. min,
  6562. max,
  6563. greedy,
  6564. element: prevNode,
  6565. };
  6566. elements.push(node);
  6567. prevNode.parent = node;
  6568. }
  6569. onLookaroundAssertionEnter(start, kind, negate) {
  6570. const parentNode = this._node;
  6571. if (parentNode.type === "CharacterClass") {
  6572. throw new Error("UnknownError");
  6573. }
  6574. this._node = {
  6575. type: "Assertion",
  6576. parent: parentNode,
  6577. start,
  6578. end: start,
  6579. raw: "",
  6580. kind,
  6581. negate,
  6582. elements: [],
  6583. };
  6584. addAlternativeElement(parentNode, this._node);
  6585. }
  6586. onLookaroundAssertionLeave(start, end, kind, negate) {
  6587. this._node.end = end;
  6588. this._node.raw = this.source.slice(start, end);
  6589. this._node = this._node.parent;
  6590. }
  6591. onEdgeAssertion(start, end, kind) {
  6592. const parentNode = this._node;
  6593. if (parentNode.type === "CharacterClass") {
  6594. throw new Error("UnknownError");
  6595. }
  6596. addAlternativeElement(parentNode, {
  6597. type: "Assertion",
  6598. parent: parentNode,
  6599. start,
  6600. end,
  6601. raw: this.source.slice(start, end),
  6602. kind,
  6603. });
  6604. }
  6605. onWordBoundaryAssertion(start, end, kind, negate) {
  6606. const parentNode = this._node;
  6607. if (parentNode.type === "CharacterClass") {
  6608. throw new Error("UnknownError");
  6609. }
  6610. addAlternativeElement(parentNode, {
  6611. type: "Assertion",
  6612. parent: parentNode,
  6613. start,
  6614. end,
  6615. raw: this.source.slice(start, end),
  6616. kind,
  6617. negate,
  6618. });
  6619. }
  6620. onAnyCharacterSet(start, end, kind) {
  6621. const parentNode = this._node;
  6622. if (parentNode.type === "CharacterClass") {
  6623. throw new Error("UnknownError");
  6624. }
  6625. addAlternativeElement(parentNode, {
  6626. type: "CharacterSet",
  6627. parent: parentNode,
  6628. start,
  6629. end,
  6630. raw: this.source.slice(start, end),
  6631. kind,
  6632. });
  6633. }
  6634. onEscapeCharacterSet(start, end, kind, negate) {
  6635. addCommonElement(this._node, {
  6636. type: "CharacterSet",
  6637. parent: this._node,
  6638. start,
  6639. end,
  6640. raw: this.source.slice(start, end),
  6641. kind,
  6642. negate,
  6643. });
  6644. }
  6645. onUnicodePropertyCharacterSet(start, end, kind, key, value, negate) {
  6646. addCommonElement(this._node, {
  6647. type: "CharacterSet",
  6648. parent: this._node,
  6649. start,
  6650. end,
  6651. raw: this.source.slice(start, end),
  6652. kind,
  6653. key,
  6654. value,
  6655. negate,
  6656. });
  6657. }
  6658. onCharacter(start, end, value) {
  6659. addCommonElement(this._node, {
  6660. type: "Character",
  6661. parent: this._node,
  6662. start,
  6663. end,
  6664. raw: this.source.slice(start, end),
  6665. value,
  6666. });
  6667. }
  6668. onBackreference(start, end, ref) {
  6669. const parentNode = this._node;
  6670. if (parentNode.type === "CharacterClass") {
  6671. throw new Error("UnknownError");
  6672. }
  6673. const node = {
  6674. type: "Backreference",
  6675. parent: parentNode,
  6676. start,
  6677. end,
  6678. raw: this.source.slice(start, end),
  6679. ref,
  6680. resolved: DummyCapturingGroup,
  6681. };
  6682. addAlternativeElement(parentNode, node);
  6683. this._backreferences.push(node);
  6684. }
  6685. onCharacterClassEnter(start, negate) {
  6686. const parentNode = this._node;
  6687. if (parentNode.type === "CharacterClass") {
  6688. throw new Error("UnknownError");
  6689. }
  6690. this._node = {
  6691. type: "CharacterClass",
  6692. parent: parentNode,
  6693. start,
  6694. end: start,
  6695. raw: "",
  6696. negate,
  6697. elements: [],
  6698. };
  6699. addAlternativeElement(parentNode, this._node);
  6700. }
  6701. onCharacterClassLeave(start, end, negate) {
  6702. this._node.end = end;
  6703. this._node.raw = this.source.slice(start, end);
  6704. this._node = this._node.parent;
  6705. }
  6706. onCharacterClassRange(start, end, min, max) {
  6707. const parentNode = this._node;
  6708. if (parentNode.type !== "CharacterClass") {
  6709. throw new Error("UnknownError");
  6710. }
  6711. const elements = parentNode.elements;
  6712. const rightNode = elements.pop();
  6713. elements.pop();
  6714. const leftNode = elements.pop();
  6715. const node = {
  6716. type: "CharacterClassRange",
  6717. parent: parentNode,
  6718. start,
  6719. end,
  6720. raw: this.source.slice(start, end),
  6721. min: leftNode,
  6722. max: rightNode,
  6723. };
  6724. assert(leftNode != null && leftNode.type === "Character");
  6725. assert(rightNode != null && rightNode.type === "Character");
  6726. leftNode.parent = node;
  6727. rightNode.parent = node;
  6728. elements.push(node);
  6729. }
  6730. }
  6731. class RegExpParser {
  6732. constructor(options) {
  6733. this._state = new RegExpParserState(options);
  6734. this._validator = new RegExpValidator(this._state);
  6735. }
  6736. parseLiteral(source, start = 0, end = source.length) {
  6737. this._state.source = source;
  6738. this._validator.validateLiteral(source, start, end);
  6739. const pattern = this._state.pattern;
  6740. const flags = this._state.flags;
  6741. const literal = {
  6742. type: "RegExpLiteral",
  6743. parent: null,
  6744. start,
  6745. end,
  6746. raw: source,
  6747. pattern,
  6748. flags,
  6749. };
  6750. pattern.parent = literal;
  6751. flags.parent = literal;
  6752. return literal;
  6753. }
  6754. parseFlags(source, start = 0, end = source.length) {
  6755. this._state.source = source;
  6756. this._validator.validateFlags(source, start, end);
  6757. return this._state.flags;
  6758. }
  6759. parsePattern(source, start = 0, end = source.length, uFlag = false) {
  6760. this._state.source = source;
  6761. this._validator.validatePattern(source, start, end, uFlag);
  6762. return this._state.pattern;
  6763. }
  6764. }
  6765. function parseRegExpLiteral(source, options) {
  6766. return new RegExpParser(options).parseLiteral(source);
  6767. }
  6768. function validateRegExpLiteral(source, options) {
  6769. return new RegExpValidator(options).validateLiteral(source);
  6770. }
  6771. export { ast as AST, RegExpParser, RegExpValidator, parseRegExpLiteral, validateRegExpLiteral };
  6772. //# sourceMappingURL=index.mjs.map