123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547854885498550855185528553855485558556855785588559856085618562856385648565856685678568856985708571857285738574857585768577857885798580858185828583858485858586858785888589859085918592859385948595859685978598859986008601860286038604860586068607860886098610861186128613861486158616861786188619862086218622862386248625862686278628862986308631863286338634863586368637863886398640864186428643864486458646864786488649865086518652865386548655865686578658865986608661866286638664866586668667866886698670867186728673867486758676867786788679868086818682868386848685868686878688868986908691869286938694869586968697869886998700870187028703870487058706870787088709871087118712871387148715871687178718871987208721872287238724872587268727872887298730873187328733873487358736873787388739874087418742874387448745874687478748874987508751875287538754875587568757875887598760876187628763876487658766876787688769877087718772877387748775877687778778877987808781878287838784878587868787878887898790879187928793879487958796879787988799880088018802880388048805880688078808880988108811881288138814881588168817881888198820882188228823882488258826882788288829883088318832883388348835883688378838883988408841884288438844884588468847884888498850885188528853885488558856885788588859886088618862886388648865886688678868886988708871887288738874887588768877887888798880888188828883888488858886888788888889889088918892889388948895889688978898889989008901890289038904890589068907890889098910891189128913891489158916891789188919892089218922892389248925892689278928892989308931893289338934893589368937893889398940894189428943894489458946894789488949895089518952895389548955895689578958895989608961896289638964896589668967896889698970897189728973897489758976897789788979898089818982898389848985898689878988898989908991899289938994899589968997899889999000900190029003900490059006900790089009901090119012901390149015901690179018901990209021902290239024902590269027902890299030903190329033903490359036903790389039904090419042904390449045904690479048904990509051905290539054905590569057905890599060906190629063906490659066906790689069907090719072907390749075907690779078907990809081908290839084908590869087908890899090909190929093909490959096909790989099910091019102910391049105910691079108910991109111911291139114911591169117911891199120912191229123912491259126912791289129913091319132913391349135913691379138913991409141914291439144914591469147914891499150915191529153915491559156915791589159916091619162916391649165916691679168916991709171917291739174917591769177917891799180918191829183918491859186918791889189919091919192919391949195919691979198919992009201920292039204920592069207920892099210921192129213921492159216921792189219922092219222922392249225922692279228922992309231923292339234923592369237923892399240924192429243924492459246924792489249925092519252925392549255925692579258925992609261926292639264926592669267926892699270927192729273927492759276927792789279928092819282928392849285928692879288928992909291929292939294929592969297929892999300930193029303930493059306930793089309931093119312931393149315931693179318931993209321932293239324932593269327932893299330933193329333933493359336933793389339934093419342934393449345934693479348934993509351935293539354935593569357935893599360936193629363936493659366936793689369937093719372937393749375937693779378937993809381938293839384938593869387938893899390939193929393939493959396939793989399940094019402940394049405940694079408940994109411941294139414941594169417941894199420942194229423942494259426942794289429943094319432943394349435943694379438943994409441944294439444944594469447944894499450945194529453945494559456945794589459946094619462946394649465946694679468946994709471947294739474947594769477947894799480948194829483948494859486948794889489949094919492949394949495949694979498949995009501950295039504950595069507950895099510951195129513951495159516951795189519952095219522952395249525952695279528952995309531953295339534953595369537953895399540954195429543954495459546954795489549955095519552955395549555955695579558955995609561956295639564956595669567956895699570957195729573957495759576957795789579958095819582958395849585958695879588958995909591959295939594959595969597959895999600960196029603960496059606960796089609961096119612961396149615961696179618961996209621962296239624962596269627962896299630963196329633963496359636963796389639964096419642964396449645964696479648964996509651965296539654965596569657965896599660966196629663966496659666966796689669967096719672967396749675967696779678967996809681968296839684968596869687968896899690969196929693969496959696969796989699970097019702970397049705970697079708970997109711971297139714971597169717971897199720972197229723972497259726972797289729973097319732973397349735973697379738973997409741974297439744974597469747974897499750975197529753975497559756975797589759976097619762976397649765976697679768976997709771977297739774977597769777977897799780978197829783978497859786978797889789979097919792979397949795979697979798979998009801980298039804980598069807980898099810981198129813981498159816981798189819982098219822982398249825982698279828982998309831983298339834983598369837983898399840984198429843984498459846984798489849985098519852985398549855985698579858985998609861986298639864986598669867986898699870987198729873987498759876987798789879988098819882988398849885988698879888988998909891989298939894989598969897989898999900990199029903990499059906990799089909991099119912991399149915991699179918991999209921992299239924992599269927992899299930993199329933993499359936993799389939994099419942994399449945994699479948994999509951995299539954995599569957995899599960996199629963996499659966996799689969997099719972997399749975997699779978997999809981998299839984998599869987998899899990999199929993999499959996999799989999100001000110002100031000410005100061000710008100091001010011100121001310014100151001610017100181001910020100211002210023100241002510026100271002810029100301003110032100331003410035100361003710038100391004010041100421004310044100451004610047100481004910050100511005210053100541005510056100571005810059100601006110062100631006410065100661006710068100691007010071100721007310074100751007610077100781007910080100811008210083100841008510086100871008810089100901009110092100931009410095100961009710098100991010010101101021010310104101051010610107101081010910110101111011210113101141011510116101171011810119101201012110122101231012410125101261012710128101291013010131101321013310134101351013610137101381013910140101411014210143101441014510146101471014810149101501015110152101531015410155101561015710158101591016010161101621016310164101651016610167101681016910170101711017210173101741017510176101771017810179101801018110182101831018410185101861018710188101891019010191101921019310194101951019610197101981019910200102011020210203102041020510206102071020810209102101021110212102131021410215102161021710218102191022010221102221022310224102251022610227102281022910230102311023210233102341023510236102371023810239102401024110242102431024410245102461024710248102491025010251102521025310254102551025610257102581025910260102611026210263102641026510266102671026810269102701027110272102731027410275102761027710278102791028010281102821028310284102851028610287102881028910290102911029210293102941029510296102971029810299103001030110302103031030410305103061030710308103091031010311103121031310314103151031610317103181031910320103211032210323103241032510326103271032810329103301033110332103331033410335103361033710338103391034010341103421034310344103451034610347103481034910350103511035210353103541035510356103571035810359103601036110362103631036410365103661036710368103691037010371103721037310374103751037610377103781037910380103811038210383103841038510386103871038810389103901039110392103931039410395103961039710398103991040010401104021040310404104051040610407104081040910410104111041210413104141041510416104171041810419104201042110422104231042410425104261042710428104291043010431104321043310434104351043610437104381043910440104411044210443104441044510446104471044810449104501045110452104531045410455104561045710458104591046010461104621046310464104651046610467104681046910470104711047210473104741047510476104771047810479104801048110482104831048410485104861048710488104891049010491104921049310494104951049610497104981049910500105011050210503105041050510506105071050810509105101051110512105131051410515105161051710518105191052010521105221052310524105251052610527105281052910530105311053210533105341053510536105371053810539105401054110542105431054410545105461054710548105491055010551105521055310554105551055610557105581055910560105611056210563105641056510566105671056810569105701057110572105731057410575105761057710578105791058010581105821058310584105851058610587105881058910590105911059210593105941059510596105971059810599106001060110602106031060410605106061060710608106091061010611106121061310614106151061610617106181061910620106211062210623106241062510626106271062810629106301063110632106331063410635106361063710638106391064010641106421064310644106451064610647106481064910650106511065210653106541065510656106571065810659106601066110662106631066410665106661066710668106691067010671106721067310674106751067610677106781067910680106811068210683106841068510686106871068810689106901069110692106931069410695106961069710698106991070010701107021070310704107051070610707107081070910710107111071210713107141071510716107171071810719107201072110722107231072410725107261072710728107291073010731107321073310734107351073610737107381073910740107411074210743107441074510746107471074810749107501075110752107531075410755107561075710758107591076010761107621076310764107651076610767107681076910770107711077210773107741077510776107771077810779107801078110782107831078410785107861078710788107891079010791107921079310794107951079610797107981079910800108011080210803108041080510806108071080810809108101081110812108131081410815108161081710818108191082010821108221082310824108251082610827108281082910830108311083210833108341083510836108371083810839108401084110842108431084410845108461084710848108491085010851108521085310854108551085610857108581085910860108611086210863108641086510866108671086810869108701087110872108731087410875108761087710878108791088010881108821088310884108851088610887108881088910890108911089210893108941089510896108971089810899109001090110902109031090410905109061090710908109091091010911109121091310914109151091610917109181091910920109211092210923109241092510926109271092810929109301093110932109331093410935109361093710938109391094010941109421094310944109451094610947109481094910950109511095210953109541095510956109571095810959109601096110962109631096410965109661096710968109691097010971109721097310974109751097610977109781097910980109811098210983109841098510986109871098810989109901099110992109931099410995109961099710998109991100011001110021100311004110051100611007110081100911010110111101211013110141101511016110171101811019110201102111022110231102411025110261102711028110291103011031110321103311034110351103611037110381103911040110411104211043110441104511046110471104811049110501105111052110531105411055110561105711058110591106011061110621106311064110651106611067110681106911070110711107211073110741107511076110771107811079110801108111082110831108411085110861108711088110891109011091110921109311094110951109611097110981109911100111011110211103111041110511106111071110811109111101111111112111131111411115111161111711118111191112011121111221112311124111251112611127111281112911130111311113211133111341113511136111371113811139111401114111142111431114411145111461114711148111491115011151111521115311154111551115611157111581115911160111611116211163111641116511166111671116811169111701117111172111731117411175111761117711178111791118011181111821118311184111851118611187111881118911190111911119211193111941119511196111971119811199112001120111202112031120411205112061120711208112091121011211112121121311214112151121611217112181121911220112211122211223112241122511226112271122811229112301123111232112331123411235112361123711238112391124011241112421124311244112451124611247112481124911250112511125211253112541125511256112571125811259112601126111262112631126411265112661126711268112691127011271112721127311274112751127611277112781127911280112811128211283112841128511286112871128811289112901129111292112931129411295112961129711298112991130011301113021130311304113051130611307113081130911310113111131211313113141131511316113171131811319113201132111322113231132411325113261132711328113291133011331113321133311334113351133611337113381133911340113411134211343113441134511346113471134811349113501135111352113531135411355113561135711358113591136011361113621136311364113651136611367113681136911370113711137211373113741137511376113771137811379113801138111382113831138411385113861138711388113891139011391113921139311394113951139611397113981139911400114011140211403114041140511406114071140811409114101141111412114131141411415114161141711418114191142011421114221142311424114251142611427114281142911430114311143211433114341143511436114371143811439114401144111442114431144411445114461144711448114491145011451114521145311454114551145611457114581145911460114611146211463114641146511466114671146811469114701147111472114731147411475114761147711478114791148011481114821148311484114851148611487114881148911490114911149211493114941149511496114971149811499115001150111502115031150411505115061150711508115091151011511115121151311514115151151611517115181151911520115211152211523115241152511526115271152811529115301153111532115331153411535115361153711538115391154011541115421154311544115451154611547115481154911550115511155211553115541155511556115571155811559115601156111562115631156411565115661156711568115691157011571115721157311574115751157611577115781157911580115811158211583115841158511586115871158811589115901159111592115931159411595115961159711598115991160011601116021160311604116051160611607116081160911610116111161211613116141161511616116171161811619116201162111622116231162411625116261162711628116291163011631116321163311634116351163611637116381163911640116411164211643116441164511646116471164811649116501165111652116531165411655116561165711658116591166011661116621166311664116651166611667116681166911670116711167211673116741167511676116771167811679116801168111682116831168411685116861168711688116891169011691116921169311694116951169611697116981169911700117011170211703117041170511706117071170811709117101171111712117131171411715117161171711718117191172011721117221172311724117251172611727117281172911730117311173211733117341173511736117371173811739117401174111742117431174411745117461174711748117491175011751117521175311754117551175611757117581175911760117611176211763117641176511766117671176811769117701177111772117731177411775117761177711778117791178011781117821178311784117851178611787117881178911790117911179211793117941179511796117971179811799118001180111802118031180411805118061180711808118091181011811118121181311814118151181611817118181181911820118211182211823118241182511826118271182811829118301183111832118331183411835118361183711838118391184011841118421184311844118451184611847118481184911850118511185211853118541185511856118571185811859118601186111862118631186411865118661186711868118691187011871118721187311874118751187611877118781187911880118811188211883118841188511886118871188811889118901189111892118931189411895118961189711898118991190011901119021190311904119051190611907119081190911910119111191211913119141191511916119171191811919119201192111922119231192411925119261192711928119291193011931119321193311934119351193611937119381193911940119411194211943119441194511946119471194811949119501195111952119531195411955119561195711958119591196011961119621196311964119651196611967119681196911970119711197211973119741197511976119771197811979119801198111982119831198411985119861198711988119891199011991119921199311994119951199611997119981199912000120011200212003120041200512006120071200812009120101201112012120131201412015120161201712018120191202012021120221202312024120251202612027120281202912030120311203212033120341203512036120371203812039120401204112042120431204412045120461204712048120491205012051120521205312054120551205612057120581205912060120611206212063120641206512066120671206812069120701207112072120731207412075120761207712078120791208012081120821208312084120851208612087120881208912090120911209212093120941209512096120971209812099121001210112102121031210412105121061210712108121091211012111121121211312114121151211612117121181211912120121211212212123121241212512126121271212812129121301213112132121331213412135121361213712138121391214012141121421214312144121451214612147121481214912150121511215212153121541215512156121571215812159121601216112162121631216412165121661216712168121691217012171121721217312174121751217612177121781217912180121811218212183121841218512186121871218812189121901219112192121931219412195121961219712198121991220012201122021220312204122051220612207122081220912210122111221212213122141221512216122171221812219122201222112222122231222412225122261222712228122291223012231122321223312234122351223612237122381223912240122411224212243122441224512246122471224812249122501225112252122531225412255122561225712258122591226012261122621226312264122651226612267122681226912270122711227212273122741227512276122771227812279122801228112282122831228412285122861228712288122891229012291122921229312294122951229612297122981229912300123011230212303123041230512306123071230812309123101231112312123131231412315123161231712318123191232012321123221232312324123251232612327123281232912330123311233212333123341233512336123371233812339123401234112342123431234412345123461234712348123491235012351123521235312354123551235612357123581235912360123611236212363123641236512366123671236812369123701237112372123731237412375123761237712378123791238012381123821238312384123851238612387123881238912390123911239212393123941239512396123971239812399124001240112402124031240412405124061240712408124091241012411124121241312414124151241612417124181241912420124211242212423124241242512426124271242812429124301243112432124331243412435124361243712438124391244012441124421244312444124451244612447124481244912450124511245212453124541245512456124571245812459124601246112462124631246412465124661246712468124691247012471124721247312474124751247612477124781247912480124811248212483124841248512486124871248812489124901249112492124931249412495124961249712498124991250012501125021250312504125051250612507125081250912510125111251212513125141251512516125171251812519125201252112522125231252412525125261252712528125291253012531125321253312534125351253612537125381253912540125411254212543125441254512546125471254812549125501255112552125531255412555125561255712558125591256012561125621256312564125651256612567125681256912570125711257212573125741257512576125771257812579125801258112582125831258412585125861258712588125891259012591125921259312594125951259612597125981259912600126011260212603126041260512606126071260812609126101261112612126131261412615126161261712618126191262012621126221262312624126251262612627126281262912630126311263212633126341263512636126371263812639126401264112642126431264412645126461264712648126491265012651126521265312654126551265612657126581265912660126611266212663126641266512666126671266812669126701267112672126731267412675126761267712678126791268012681126821268312684126851268612687126881268912690126911269212693126941269512696126971269812699127001270112702127031270412705127061270712708127091271012711127121271312714127151271612717127181271912720127211272212723127241272512726127271272812729127301273112732127331273412735127361273712738127391274012741127421274312744127451274612747127481274912750127511275212753127541275512756127571275812759127601276112762127631276412765127661276712768127691277012771127721277312774127751277612777127781277912780127811278212783127841278512786127871278812789127901279112792127931279412795127961279712798127991280012801128021280312804128051280612807128081280912810128111281212813128141281512816128171281812819128201282112822128231282412825128261282712828128291283012831128321283312834128351283612837128381283912840128411284212843128441284512846128471284812849128501285112852128531285412855128561285712858128591286012861128621286312864128651286612867128681286912870128711287212873128741287512876128771287812879128801288112882128831288412885128861288712888128891289012891128921289312894128951289612897128981289912900129011290212903129041290512906129071290812909129101291112912129131291412915129161291712918129191292012921129221292312924129251292612927129281292912930129311293212933129341293512936129371293812939129401294112942129431294412945129461294712948129491295012951129521295312954129551295612957129581295912960129611296212963129641296512966129671296812969129701297112972129731297412975129761297712978129791298012981129821298312984129851298612987129881298912990129911299212993129941299512996129971299812999130001300113002130031300413005130061300713008130091301013011130121301313014130151301613017130181301913020130211302213023130241302513026130271302813029130301303113032130331303413035130361303713038130391304013041130421304313044130451304613047130481304913050130511305213053130541305513056130571305813059130601306113062130631306413065130661306713068130691307013071130721307313074130751307613077130781307913080130811308213083130841308513086130871308813089130901309113092130931309413095130961309713098130991310013101131021310313104131051310613107131081310913110131111311213113131141311513116131171311813119131201312113122131231312413125131261312713128131291313013131131321313313134131351313613137131381313913140131411314213143131441314513146131471314813149131501315113152131531315413155131561315713158131591316013161131621316313164131651316613167131681316913170131711317213173131741317513176131771317813179131801318113182131831318413185131861318713188131891319013191131921319313194131951319613197131981319913200132011320213203132041320513206132071320813209132101321113212132131321413215132161321713218132191322013221132221322313224132251322613227132281322913230132311323213233132341323513236132371323813239132401324113242132431324413245132461324713248132491325013251132521325313254132551325613257132581325913260132611326213263132641326513266132671326813269132701327113272132731327413275132761327713278132791328013281132821328313284132851328613287132881328913290132911329213293132941329513296132971329813299133001330113302133031330413305133061330713308133091331013311133121331313314133151331613317133181331913320133211332213323133241332513326133271332813329133301333113332133331333413335133361333713338133391334013341133421334313344133451334613347133481334913350133511335213353133541335513356133571335813359133601336113362133631336413365133661336713368133691337013371133721337313374133751337613377133781337913380133811338213383133841338513386133871338813389133901339113392133931339413395133961339713398133991340013401134021340313404134051340613407134081340913410134111341213413134141341513416134171341813419134201342113422134231342413425134261342713428134291343013431134321343313434134351343613437134381343913440134411344213443134441344513446134471344813449134501345113452134531345413455134561345713458134591346013461134621346313464134651346613467134681346913470134711347213473134741347513476134771347813479134801348113482134831348413485134861348713488134891349013491134921349313494134951349613497134981349913500135011350213503135041350513506135071350813509135101351113512135131351413515135161351713518135191352013521135221352313524135251352613527135281352913530135311353213533135341353513536135371353813539135401354113542135431354413545135461354713548135491355013551135521355313554135551355613557135581355913560135611356213563135641356513566135671356813569135701357113572135731357413575135761357713578135791358013581135821358313584135851358613587135881358913590135911359213593135941359513596135971359813599136001360113602136031360413605136061360713608136091361013611136121361313614136151361613617136181361913620136211362213623136241362513626136271362813629136301363113632136331363413635136361363713638136391364013641136421364313644136451364613647136481364913650136511365213653136541365513656136571365813659136601366113662136631366413665136661366713668136691367013671136721367313674136751367613677136781367913680136811368213683136841368513686136871368813689136901369113692136931369413695136961369713698136991370013701137021370313704137051370613707137081370913710137111371213713137141371513716137171371813719137201372113722137231372413725137261372713728137291373013731137321373313734137351373613737137381373913740137411374213743137441374513746137471374813749137501375113752137531375413755137561375713758137591376013761137621376313764137651376613767137681376913770137711377213773137741377513776137771377813779137801378113782137831378413785137861378713788137891379013791137921379313794137951379613797137981379913800138011380213803138041380513806138071380813809138101381113812138131381413815138161381713818138191382013821138221382313824138251382613827138281382913830138311383213833138341383513836138371383813839138401384113842138431384413845138461384713848138491385013851138521385313854138551385613857138581385913860138611386213863138641386513866138671386813869138701387113872138731387413875138761387713878138791388013881138821388313884138851388613887138881388913890138911389213893138941389513896138971389813899139001390113902139031390413905139061390713908139091391013911139121391313914139151391613917139181391913920139211392213923139241392513926139271392813929139301393113932139331393413935139361393713938139391394013941139421394313944139451394613947139481394913950139511395213953139541395513956139571395813959139601396113962139631396413965139661396713968139691397013971139721397313974139751397613977139781397913980139811398213983139841398513986139871398813989139901399113992139931399413995139961399713998139991400014001140021400314004140051400614007140081400914010140111401214013140141401514016140171401814019140201402114022140231402414025140261402714028140291403014031140321403314034140351403614037140381403914040140411404214043140441404514046140471404814049140501405114052140531405414055140561405714058140591406014061140621406314064140651406614067140681406914070140711407214073140741407514076140771407814079140801408114082140831408414085140861408714088140891409014091140921409314094140951409614097140981409914100141011410214103141041410514106141071410814109141101411114112141131411414115141161411714118141191412014121141221412314124141251412614127141281412914130141311413214133141341413514136141371413814139141401414114142141431414414145141461414714148141491415014151141521415314154141551415614157141581415914160141611416214163141641416514166141671416814169141701417114172141731417414175141761417714178141791418014181141821418314184141851418614187141881418914190141911419214193141941419514196141971419814199142001420114202142031420414205142061420714208142091421014211142121421314214142151421614217142181421914220142211422214223142241422514226142271422814229142301423114232142331423414235142361423714238142391424014241142421424314244142451424614247142481424914250142511425214253142541425514256142571425814259142601426114262142631426414265142661426714268142691427014271142721427314274142751427614277142781427914280142811428214283142841428514286142871428814289142901429114292142931429414295142961429714298142991430014301143021430314304143051430614307143081430914310143111431214313143141431514316143171431814319143201432114322143231432414325143261432714328143291433014331143321433314334143351433614337143381433914340143411434214343143441434514346143471434814349143501435114352143531435414355143561435714358143591436014361143621436314364143651436614367143681436914370143711437214373143741437514376143771437814379143801438114382143831438414385143861438714388143891439014391143921439314394143951439614397143981439914400144011440214403144041440514406144071440814409144101441114412144131441414415144161441714418144191442014421144221442314424144251442614427144281442914430144311443214433144341443514436144371443814439144401444114442144431444414445144461444714448144491445014451144521445314454144551445614457144581445914460144611446214463144641446514466144671446814469144701447114472144731447414475144761447714478144791448014481144821448314484144851448614487144881448914490144911449214493144941449514496144971449814499145001450114502145031450414505145061450714508145091451014511145121451314514145151451614517145181451914520145211452214523145241452514526145271452814529145301453114532145331453414535145361453714538145391454014541145421454314544145451454614547145481454914550145511455214553145541455514556145571455814559145601456114562145631456414565145661456714568145691457014571145721457314574145751457614577145781457914580145811458214583145841458514586145871458814589145901459114592145931459414595145961459714598145991460014601146021460314604146051460614607146081460914610146111461214613146141461514616146171461814619146201462114622146231462414625146261462714628146291463014631146321463314634146351463614637146381463914640146411464214643146441464514646146471464814649146501465114652146531465414655146561465714658146591466014661146621466314664146651466614667146681466914670146711467214673146741467514676146771467814679146801468114682146831468414685146861468714688146891469014691146921469314694146951469614697146981469914700147011470214703147041470514706147071470814709147101471114712147131471414715147161471714718147191472014721147221472314724147251472614727147281472914730147311473214733147341473514736147371473814739147401474114742147431474414745147461474714748147491475014751147521475314754147551475614757147581475914760147611476214763147641476514766147671476814769147701477114772147731477414775147761477714778147791478014781147821478314784147851478614787147881478914790147911479214793147941479514796147971479814799148001480114802148031480414805148061480714808148091481014811148121481314814148151481614817148181481914820148211482214823148241482514826148271482814829148301483114832148331483414835148361483714838148391484014841148421484314844148451484614847148481484914850148511485214853148541485514856148571485814859148601486114862148631486414865148661486714868148691487014871148721487314874148751487614877148781487914880148811488214883148841488514886148871488814889148901489114892148931489414895148961489714898148991490014901149021490314904149051490614907149081490914910149111491214913149141491514916149171491814919149201492114922149231492414925149261492714928149291493014931149321493314934149351493614937149381493914940149411494214943149441494514946149471494814949149501495114952149531495414955149561495714958149591496014961149621496314964149651496614967149681496914970149711497214973149741497514976149771497814979149801498114982149831498414985149861498714988149891499014991149921499314994149951499614997149981499915000150011500215003150041500515006150071500815009150101501115012150131501415015150161501715018150191502015021150221502315024150251502615027150281502915030150311503215033150341503515036150371503815039150401504115042150431504415045150461504715048150491505015051150521505315054150551505615057150581505915060150611506215063150641506515066150671506815069150701507115072150731507415075150761507715078150791508015081150821508315084150851508615087150881508915090150911509215093150941509515096150971509815099151001510115102151031510415105151061510715108151091511015111151121511315114151151511615117151181511915120151211512215123151241512515126151271512815129151301513115132151331513415135151361513715138151391514015141151421514315144151451514615147151481514915150151511515215153151541515515156151571515815159151601516115162151631516415165151661516715168151691517015171151721517315174151751517615177151781517915180151811518215183151841518515186151871518815189151901519115192151931519415195151961519715198151991520015201152021520315204152051520615207152081520915210152111521215213152141521515216152171521815219152201522115222152231522415225152261522715228152291523015231152321523315234152351523615237152381523915240152411524215243152441524515246152471524815249152501525115252152531525415255152561525715258152591526015261152621526315264152651526615267152681526915270152711527215273152741527515276152771527815279152801528115282152831528415285152861528715288152891529015291152921529315294152951529615297152981529915300153011530215303153041530515306153071530815309153101531115312153131531415315153161531715318153191532015321153221532315324153251532615327153281532915330153311533215333153341533515336153371533815339153401534115342153431534415345153461534715348153491535015351153521535315354153551535615357153581535915360153611536215363153641536515366153671536815369153701537115372153731537415375153761537715378153791538015381153821538315384153851538615387153881538915390153911539215393153941539515396153971539815399154001540115402154031540415405154061540715408154091541015411154121541315414154151541615417154181541915420154211542215423154241542515426154271542815429154301543115432154331543415435154361543715438154391544015441154421544315444154451544615447154481544915450154511545215453154541545515456154571545815459154601546115462154631546415465154661546715468 |
- /*
- Stencil Hydrate Runner v4.20.0 | MIT Licensed | https://stenciljs.com
- */
- var __defProp = Object.defineProperty;
- var __export = (target, all) => {
- for (var name in all)
- __defProp(target, name, { get: all[name], enumerable: true });
- };
- // src/runtime/runtime-constants.ts
- var CONTENT_REF_ID = "r";
- var ORG_LOCATION_ID = "o";
- var SLOT_NODE_ID = "s";
- var TEXT_NODE_ID = "t";
- var XLINK_NS = "http://www.w3.org/1999/xlink";
- // src/mock-doc/attribute.ts
- var attrHandler = {
- get(obj, prop) {
- if (prop in obj) {
- return obj[prop];
- }
- if (typeof prop !== "symbol" && !isNaN(prop)) {
- return obj.__items[prop];
- }
- return void 0;
- }
- };
- var createAttributeProxy = (caseInsensitive) => new Proxy(new MockAttributeMap(caseInsensitive), attrHandler);
- var MockAttributeMap = class {
- constructor(caseInsensitive = false) {
- this.caseInsensitive = caseInsensitive;
- this.__items = [];
- }
- get length() {
- return this.__items.length;
- }
- item(index) {
- return this.__items[index] || null;
- }
- setNamedItem(attr) {
- attr.namespaceURI = null;
- this.setNamedItemNS(attr);
- }
- setNamedItemNS(attr) {
- if (attr != null && attr.value != null) {
- attr.value = String(attr.value);
- }
- const existingAttr = this.__items.find((a) => a.name === attr.name && a.namespaceURI === attr.namespaceURI);
- if (existingAttr != null) {
- existingAttr.value = attr.value;
- } else {
- this.__items.push(attr);
- }
- }
- getNamedItem(attrName) {
- if (this.caseInsensitive) {
- attrName = attrName.toLowerCase();
- }
- return this.getNamedItemNS(null, attrName);
- }
- getNamedItemNS(namespaceURI, attrName) {
- namespaceURI = getNamespaceURI(namespaceURI);
- return this.__items.find((attr) => attr.name === attrName && getNamespaceURI(attr.namespaceURI) === namespaceURI) || null;
- }
- removeNamedItem(attr) {
- this.removeNamedItemNS(attr);
- }
- removeNamedItemNS(attr) {
- for (let i = 0, ii = this.__items.length; i < ii; i++) {
- if (this.__items[i].name === attr.name && this.__items[i].namespaceURI === attr.namespaceURI) {
- this.__items.splice(i, 1);
- break;
- }
- }
- }
- [Symbol.iterator]() {
- let i = 0;
- return {
- next: () => ({
- done: i === this.length,
- value: this.item(i++)
- })
- };
- }
- get [Symbol.toStringTag]() {
- return "MockAttributeMap";
- }
- };
- function getNamespaceURI(namespaceURI) {
- return namespaceURI === XLINK_NS ? null : namespaceURI;
- }
- function cloneAttributes(srcAttrs, sortByName = false) {
- const dstAttrs = new MockAttributeMap(srcAttrs.caseInsensitive);
- if (srcAttrs != null) {
- const attrLen = srcAttrs.length;
- if (sortByName && attrLen > 1) {
- const sortedAttrs = [];
- for (let i = 0; i < attrLen; i++) {
- const srcAttr = srcAttrs.item(i);
- const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
- sortedAttrs.push(dstAttr);
- }
- sortedAttrs.sort(sortAttributes).forEach((attr) => {
- dstAttrs.setNamedItemNS(attr);
- });
- } else {
- for (let i = 0; i < attrLen; i++) {
- const srcAttr = srcAttrs.item(i);
- const dstAttr = new MockAttr(srcAttr.name, srcAttr.value, srcAttr.namespaceURI);
- dstAttrs.setNamedItemNS(dstAttr);
- }
- }
- }
- return dstAttrs;
- }
- function sortAttributes(a, b) {
- if (a.name < b.name) return -1;
- if (a.name > b.name) return 1;
- return 0;
- }
- var MockAttr = class {
- constructor(attrName, attrValue, namespaceURI = null) {
- this._name = attrName;
- this._value = String(attrValue);
- this._namespaceURI = namespaceURI;
- }
- get name() {
- return this._name;
- }
- set name(value) {
- this._name = value;
- }
- get value() {
- return this._value;
- }
- set value(value) {
- this._value = String(value);
- }
- get nodeName() {
- return this._name;
- }
- set nodeName(value) {
- this._name = value;
- }
- get nodeValue() {
- return this._value;
- }
- set nodeValue(value) {
- this._value = String(value);
- }
- get namespaceURI() {
- return this._namespaceURI;
- }
- set namespaceURI(namespaceURI) {
- this._namespaceURI = namespaceURI;
- }
- };
- // src/mock-doc/class-list.ts
- var MockClassList = class {
- constructor(elm) {
- this.elm = elm;
- }
- add(...classNames) {
- const clsNames = getItems(this.elm);
- let updated = false;
- classNames.forEach((className) => {
- className = String(className);
- validateClass(className);
- if (clsNames.includes(className) === false) {
- clsNames.push(className);
- updated = true;
- }
- });
- if (updated) {
- this.elm.setAttributeNS(null, "class", clsNames.join(" "));
- }
- }
- remove(...classNames) {
- const clsNames = getItems(this.elm);
- let updated = false;
- classNames.forEach((className) => {
- className = String(className);
- validateClass(className);
- const index = clsNames.indexOf(className);
- if (index > -1) {
- clsNames.splice(index, 1);
- updated = true;
- }
- });
- if (updated) {
- this.elm.setAttributeNS(null, "class", clsNames.filter((c) => c.length > 0).join(" "));
- }
- }
- contains(className) {
- className = String(className);
- return getItems(this.elm).includes(className);
- }
- toggle(className) {
- className = String(className);
- if (this.contains(className) === true) {
- this.remove(className);
- } else {
- this.add(className);
- }
- }
- get length() {
- return getItems(this.elm).length;
- }
- item(index) {
- return getItems(this.elm)[index];
- }
- toString() {
- return getItems(this.elm).join(" ");
- }
- };
- function validateClass(className) {
- if (className === "") {
- throw new Error("The token provided must not be empty.");
- }
- if (/\s/.test(className)) {
- throw new Error(
- `The token provided ('${className}') contains HTML space characters, which are not valid in tokens.`
- );
- }
- }
- function getItems(elm) {
- const className = elm.getAttribute("class");
- if (typeof className === "string" && className.length > 0) {
- return className.trim().split(" ").filter((c) => c.length > 0);
- }
- return [];
- }
- // src/mock-doc/css-style-declaration.ts
- var MockCSSStyleDeclaration = class {
- constructor() {
- this._styles = /* @__PURE__ */ new Map();
- }
- setProperty(prop, value) {
- prop = jsCaseToCssCase(prop);
- if (value == null || value === "") {
- this._styles.delete(prop);
- } else {
- this._styles.set(prop, String(value));
- }
- }
- getPropertyValue(prop) {
- prop = jsCaseToCssCase(prop);
- return String(this._styles.get(prop) || "");
- }
- removeProperty(prop) {
- prop = jsCaseToCssCase(prop);
- this._styles.delete(prop);
- }
- get length() {
- return this._styles.size;
- }
- get cssText() {
- const cssText = [];
- this._styles.forEach((value, prop) => {
- cssText.push(`${prop}: ${value};`);
- });
- return cssText.join(" ").trim();
- }
- set cssText(cssText) {
- if (cssText == null || cssText === "") {
- this._styles.clear();
- return;
- }
- cssText.split(";").forEach((rule) => {
- rule = rule.trim();
- if (rule.length > 0) {
- const splt = rule.split(":");
- if (splt.length > 1) {
- const prop = splt[0].trim();
- const value = splt.slice(1).join(":").trim();
- if (prop !== "" && value !== "") {
- this._styles.set(jsCaseToCssCase(prop), value);
- }
- }
- }
- });
- }
- };
- function createCSSStyleDeclaration() {
- return new Proxy(new MockCSSStyleDeclaration(), cssProxyHandler);
- }
- var cssProxyHandler = {
- get(cssStyle, prop) {
- if (prop in cssStyle) {
- return cssStyle[prop];
- }
- prop = cssCaseToJsCase(prop);
- return cssStyle.getPropertyValue(prop);
- },
- set(cssStyle, prop, value) {
- if (prop in cssStyle) {
- cssStyle[prop] = value;
- } else {
- cssStyle.setProperty(prop, value);
- }
- return true;
- }
- };
- function cssCaseToJsCase(str) {
- if (str.length > 1 && str.includes("-") === true) {
- str = str.toLowerCase().split("-").map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1)).join("");
- str = str.slice(0, 1).toLowerCase() + str.slice(1);
- }
- return str;
- }
- function jsCaseToCssCase(str) {
- if (str.length > 1 && str.includes("-") === false && /[A-Z]/.test(str) === true) {
- str = str.replace(/([A-Z])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
- }
- return str;
- }
- // src/mock-doc/custom-element-registry.ts
- var MockCustomElementRegistry = class {
- constructor(win) {
- this.win = win;
- }
- define(tagName, cstr, options) {
- if (tagName.toLowerCase() !== tagName) {
- throw new Error(
- `Failed to execute 'define' on 'CustomElementRegistry': "${tagName}" is not a valid custom element name`
- );
- }
- if (this.__registry == null) {
- this.__registry = /* @__PURE__ */ new Map();
- }
- this.__registry.set(tagName, { cstr, options });
- if (this.__whenDefined != null) {
- const whenDefinedResolveFns = this.__whenDefined.get(tagName);
- if (whenDefinedResolveFns != null) {
- whenDefinedResolveFns.forEach((whenDefinedResolveFn) => {
- whenDefinedResolveFn();
- });
- whenDefinedResolveFns.length = 0;
- this.__whenDefined.delete(tagName);
- }
- }
- const doc = this.win.document;
- if (doc != null) {
- const hosts = doc.querySelectorAll(tagName);
- hosts.forEach((host) => {
- if (upgradedElements.has(host) === false) {
- tempDisableCallbacks.add(doc);
- const upgradedCmp = createCustomElement(this, doc, tagName);
- for (let i = 0; i < host.childNodes.length; i++) {
- const childNode = host.childNodes[i];
- childNode.remove();
- upgradedCmp.appendChild(childNode);
- }
- tempDisableCallbacks.delete(doc);
- if (proxyElements.has(host)) {
- proxyElements.set(host, upgradedCmp);
- }
- }
- fireConnectedCallback(host);
- });
- }
- }
- get(tagName) {
- if (this.__registry != null) {
- const def = this.__registry.get(tagName.toLowerCase());
- if (def != null) {
- return def.cstr;
- }
- }
- return void 0;
- }
- getName(cstr) {
- for (const [tagName, def] of this.__registry.entries()) {
- if (def.cstr === cstr) {
- return tagName;
- }
- }
- return void 0;
- }
- upgrade(_rootNode) {
- }
- clear() {
- if (this.__registry != null) {
- this.__registry.clear();
- }
- if (this.__whenDefined != null) {
- this.__whenDefined.clear();
- }
- }
- whenDefined(tagName) {
- tagName = tagName.toLowerCase();
- if (this.__registry != null && this.__registry.has(tagName) === true) {
- return Promise.resolve(this.__registry.get(tagName).cstr);
- }
- return new Promise((resolve) => {
- if (this.__whenDefined == null) {
- this.__whenDefined = /* @__PURE__ */ new Map();
- }
- let whenDefinedResolveFns = this.__whenDefined.get(tagName);
- if (whenDefinedResolveFns == null) {
- whenDefinedResolveFns = [];
- this.__whenDefined.set(tagName, whenDefinedResolveFns);
- }
- whenDefinedResolveFns.push(resolve);
- });
- }
- };
- function createCustomElement(customElements, ownerDocument, tagName) {
- const Cstr = customElements.get(tagName);
- if (Cstr != null) {
- const cmp = new Cstr(ownerDocument);
- cmp.nodeName = tagName.toUpperCase();
- upgradedElements.add(cmp);
- return cmp;
- }
- const host = new Proxy(
- {},
- {
- get(obj, prop) {
- const elm2 = proxyElements.get(host);
- if (elm2 != null) {
- return elm2[prop];
- }
- return obj[prop];
- },
- set(obj, prop, val) {
- const elm2 = proxyElements.get(host);
- if (elm2 != null) {
- elm2[prop] = val;
- } else {
- obj[prop] = val;
- }
- return true;
- },
- has(obj, prop) {
- const elm2 = proxyElements.get(host);
- if (prop in elm2) {
- return true;
- }
- if (prop in obj) {
- return true;
- }
- return false;
- }
- }
- );
- const elm = new MockHTMLElement(ownerDocument, tagName);
- proxyElements.set(host, elm);
- return host;
- }
- var proxyElements = /* @__PURE__ */ new WeakMap();
- var upgradedElements = /* @__PURE__ */ new WeakSet();
- function connectNode(ownerDocument, node) {
- node.ownerDocument = ownerDocument;
- if (node.nodeType === 1 /* ELEMENT_NODE */) {
- if (ownerDocument != null && node.nodeName.includes("-")) {
- const win = ownerDocument.defaultView;
- if (win != null && typeof node.connectedCallback === "function" && node.isConnected) {
- fireConnectedCallback(node);
- }
- const shadowRoot = node.shadowRoot;
- if (shadowRoot != null) {
- shadowRoot.childNodes.forEach((childNode) => {
- connectNode(ownerDocument, childNode);
- });
- }
- }
- node.childNodes.forEach((childNode) => {
- connectNode(ownerDocument, childNode);
- });
- } else {
- node.childNodes.forEach((childNode) => {
- childNode.ownerDocument = ownerDocument;
- });
- }
- }
- function fireConnectedCallback(node) {
- if (typeof node.connectedCallback === "function") {
- if (tempDisableCallbacks.has(node.ownerDocument) === false) {
- try {
- node.connectedCallback();
- } catch (e) {
- console.error(e);
- }
- }
- }
- }
- function disconnectNode(node) {
- if (node.nodeType === 1 /* ELEMENT_NODE */) {
- if (node.nodeName.includes("-") === true && typeof node.disconnectedCallback === "function") {
- if (tempDisableCallbacks.has(node.ownerDocument) === false) {
- try {
- node.disconnectedCallback();
- } catch (e) {
- console.error(e);
- }
- }
- }
- node.childNodes.forEach(disconnectNode);
- }
- }
- function attributeChanged(node, attrName, oldValue, newValue) {
- attrName = attrName.toLowerCase();
- const observedAttributes = node.constructor.observedAttributes;
- if (Array.isArray(observedAttributes) === true && observedAttributes.some((obs) => obs.toLowerCase() === attrName) === true) {
- try {
- node.attributeChangedCallback(attrName, oldValue, newValue);
- } catch (e) {
- console.error(e);
- }
- }
- }
- function checkAttributeChanged(node) {
- return node.nodeName.includes("-") === true && typeof node.attributeChangedCallback === "function";
- }
- var tempDisableCallbacks = /* @__PURE__ */ new Set();
- // src/mock-doc/dataset.ts
- function dataset(elm) {
- const ds = {};
- const attributes = elm.attributes;
- const attrLen = attributes.length;
- for (let i = 0; i < attrLen; i++) {
- const attr = attributes.item(i);
- const nodeName = attr.nodeName;
- if (nodeName.startsWith("data-")) {
- ds[dashToPascalCase(nodeName)] = attr.nodeValue;
- }
- }
- return new Proxy(ds, {
- get(_obj, camelCaseProp) {
- return ds[camelCaseProp];
- },
- set(_obj, camelCaseProp, value) {
- const dataAttr = toDataAttribute(camelCaseProp);
- elm.setAttribute(dataAttr, value);
- return true;
- }
- });
- }
- function toDataAttribute(str) {
- return "data-" + String(str).replace(/([A-Z0-9])/g, (g) => " " + g[0]).trim().replace(/ /g, "-").toLowerCase();
- }
- function dashToPascalCase(str) {
- str = String(str).slice(5);
- return str.split("-").map((segment, index) => {
- if (index === 0) {
- return segment.charAt(0).toLowerCase() + segment.slice(1);
- }
- return segment.charAt(0).toUpperCase() + segment.slice(1);
- }).join("");
- }
- // src/mock-doc/event.ts
- var MockEvent = class {
- constructor(type, eventInitDict) {
- this.bubbles = false;
- this.cancelBubble = false;
- this.cancelable = false;
- this.composed = false;
- this.currentTarget = null;
- this.defaultPrevented = false;
- this.srcElement = null;
- this.target = null;
- if (typeof type !== "string") {
- throw new Error(`Event type required`);
- }
- this.type = type;
- this.timeStamp = Date.now();
- if (eventInitDict != null) {
- Object.assign(this, eventInitDict);
- }
- }
- preventDefault() {
- this.defaultPrevented = true;
- }
- stopPropagation() {
- this.cancelBubble = true;
- }
- stopImmediatePropagation() {
- this.cancelBubble = true;
- }
- /**
- * @ref https://developer.mozilla.org/en-US/docs/Web/API/Event/composedPath
- * @returns a composed path of the event
- */
- composedPath() {
- const composedPath = [];
- let currentElement = this.target;
- while (currentElement) {
- composedPath.push(currentElement);
- if (!currentElement.parentElement && currentElement.nodeName === "#document" /* DOCUMENT_NODE */) {
- composedPath.push(currentElement.defaultView);
- break;
- }
- if (currentElement.parentElement == null && currentElement.tagName === "HTML") {
- currentElement = currentElement.ownerDocument;
- } else {
- currentElement = currentElement.parentElement;
- }
- }
- return composedPath;
- }
- };
- var MockCustomEvent = class extends MockEvent {
- constructor(type, customEventInitDic) {
- super(type);
- this.detail = null;
- if (customEventInitDic != null) {
- Object.assign(this, customEventInitDic);
- }
- }
- };
- var MockKeyboardEvent = class extends MockEvent {
- constructor(type, keyboardEventInitDic) {
- super(type);
- this.code = "";
- this.key = "";
- this.altKey = false;
- this.ctrlKey = false;
- this.metaKey = false;
- this.shiftKey = false;
- this.location = 0;
- this.repeat = false;
- if (keyboardEventInitDic != null) {
- Object.assign(this, keyboardEventInitDic);
- }
- }
- };
- var MockMouseEvent = class extends MockEvent {
- constructor(type, mouseEventInitDic) {
- super(type);
- this.screenX = 0;
- this.screenY = 0;
- this.clientX = 0;
- this.clientY = 0;
- this.ctrlKey = false;
- this.shiftKey = false;
- this.altKey = false;
- this.metaKey = false;
- this.button = 0;
- this.buttons = 0;
- this.relatedTarget = null;
- if (mouseEventInitDic != null) {
- Object.assign(this, mouseEventInitDic);
- }
- }
- };
- var MockUIEvent = class extends MockEvent {
- constructor(type, uiEventInitDic) {
- super(type);
- this.detail = null;
- this.view = null;
- if (uiEventInitDic != null) {
- Object.assign(this, uiEventInitDic);
- }
- }
- };
- var MockFocusEvent = class extends MockUIEvent {
- constructor(type, focusEventInitDic) {
- super(type);
- this.relatedTarget = null;
- if (focusEventInitDic != null) {
- Object.assign(this, focusEventInitDic);
- }
- }
- };
- var MockEventListener = class {
- constructor(type, handler) {
- this.type = type;
- this.handler = handler;
- }
- };
- function addEventListener(elm, type, handler) {
- const target = elm;
- if (target.__listeners == null) {
- target.__listeners = [];
- }
- target.__listeners.push(new MockEventListener(type, handler));
- }
- function removeEventListener(elm, type, handler) {
- const target = elm;
- if (target != null && Array.isArray(target.__listeners) === true) {
- const elmListener = target.__listeners.find((e) => e.type === type && e.handler === handler);
- if (elmListener != null) {
- const index = target.__listeners.indexOf(elmListener);
- target.__listeners.splice(index, 1);
- }
- }
- }
- function resetEventListeners(target) {
- if (target != null && target.__listeners != null) {
- target.__listeners = null;
- }
- }
- function triggerEventListener(elm, ev) {
- if (elm == null || ev.cancelBubble === true) {
- return;
- }
- const target = elm;
- ev.currentTarget = elm;
- if (Array.isArray(target.__listeners) === true) {
- const listeners = target.__listeners.filter((e) => e.type === ev.type);
- listeners.forEach((listener) => {
- try {
- listener.handler.call(target, ev);
- } catch (err2) {
- console.error(err2);
- }
- });
- }
- if (ev.bubbles === false) {
- return;
- }
- if (elm.nodeName === "#document" /* DOCUMENT_NODE */) {
- triggerEventListener(elm.defaultView, ev);
- } else if (elm.parentElement == null && elm.tagName === "HTML") {
- triggerEventListener(elm.ownerDocument, ev);
- } else {
- triggerEventListener(elm.parentElement, ev);
- }
- }
- function dispatchEvent(currentTarget, ev) {
- ev.target = currentTarget;
- triggerEventListener(currentTarget, ev);
- return true;
- }
- // node_modules/parse5/dist/common/unicode.js
- var UNDEFINED_CODE_POINTS = /* @__PURE__ */ new Set([
- 65534,
- 65535,
- 131070,
- 131071,
- 196606,
- 196607,
- 262142,
- 262143,
- 327678,
- 327679,
- 393214,
- 393215,
- 458750,
- 458751,
- 524286,
- 524287,
- 589822,
- 589823,
- 655358,
- 655359,
- 720894,
- 720895,
- 786430,
- 786431,
- 851966,
- 851967,
- 917502,
- 917503,
- 983038,
- 983039,
- 1048574,
- 1048575,
- 1114110,
- 1114111
- ]);
- var REPLACEMENT_CHARACTER = "\uFFFD";
- var CODE_POINTS;
- (function(CODE_POINTS2) {
- CODE_POINTS2[CODE_POINTS2["EOF"] = -1] = "EOF";
- CODE_POINTS2[CODE_POINTS2["NULL"] = 0] = "NULL";
- CODE_POINTS2[CODE_POINTS2["TABULATION"] = 9] = "TABULATION";
- CODE_POINTS2[CODE_POINTS2["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
- CODE_POINTS2[CODE_POINTS2["LINE_FEED"] = 10] = "LINE_FEED";
- CODE_POINTS2[CODE_POINTS2["FORM_FEED"] = 12] = "FORM_FEED";
- CODE_POINTS2[CODE_POINTS2["SPACE"] = 32] = "SPACE";
- CODE_POINTS2[CODE_POINTS2["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
- CODE_POINTS2[CODE_POINTS2["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
- CODE_POINTS2[CODE_POINTS2["NUMBER_SIGN"] = 35] = "NUMBER_SIGN";
- CODE_POINTS2[CODE_POINTS2["AMPERSAND"] = 38] = "AMPERSAND";
- CODE_POINTS2[CODE_POINTS2["APOSTROPHE"] = 39] = "APOSTROPHE";
- CODE_POINTS2[CODE_POINTS2["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
- CODE_POINTS2[CODE_POINTS2["SOLIDUS"] = 47] = "SOLIDUS";
- CODE_POINTS2[CODE_POINTS2["DIGIT_0"] = 48] = "DIGIT_0";
- CODE_POINTS2[CODE_POINTS2["DIGIT_9"] = 57] = "DIGIT_9";
- CODE_POINTS2[CODE_POINTS2["SEMICOLON"] = 59] = "SEMICOLON";
- CODE_POINTS2[CODE_POINTS2["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
- CODE_POINTS2[CODE_POINTS2["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
- CODE_POINTS2[CODE_POINTS2["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
- CODE_POINTS2[CODE_POINTS2["QUESTION_MARK"] = 63] = "QUESTION_MARK";
- CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A";
- CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_F"] = 70] = "LATIN_CAPITAL_F";
- CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_X"] = 88] = "LATIN_CAPITAL_X";
- CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z";
- CODE_POINTS2[CODE_POINTS2["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
- CODE_POINTS2[CODE_POINTS2["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
- CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A";
- CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_F"] = 102] = "LATIN_SMALL_F";
- CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_X"] = 120] = "LATIN_SMALL_X";
- CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z";
- CODE_POINTS2[CODE_POINTS2["REPLACEMENT_CHARACTER"] = 65533] = "REPLACEMENT_CHARACTER";
- })(CODE_POINTS = CODE_POINTS || (CODE_POINTS = {}));
- var SEQUENCES = {
- DASH_DASH: "--",
- CDATA_START: "[CDATA[",
- DOCTYPE: "doctype",
- SCRIPT: "script",
- PUBLIC: "public",
- SYSTEM: "system"
- };
- function isSurrogate(cp) {
- return cp >= 55296 && cp <= 57343;
- }
- function isSurrogatePair(cp) {
- return cp >= 56320 && cp <= 57343;
- }
- function getSurrogatePairCodePoint(cp1, cp2) {
- return (cp1 - 55296) * 1024 + 9216 + cp2;
- }
- function isControlCodePoint(cp) {
- return cp !== 32 && cp !== 10 && cp !== 13 && cp !== 9 && cp !== 12 && cp >= 1 && cp <= 31 || cp >= 127 && cp <= 159;
- }
- function isUndefinedCodePoint(cp) {
- return cp >= 64976 && cp <= 65007 || UNDEFINED_CODE_POINTS.has(cp);
- }
- // node_modules/parse5/dist/common/error-codes.js
- var ERR;
- (function(ERR2) {
- ERR2["controlCharacterInInputStream"] = "control-character-in-input-stream";
- ERR2["noncharacterInInputStream"] = "noncharacter-in-input-stream";
- ERR2["surrogateInInputStream"] = "surrogate-in-input-stream";
- ERR2["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus";
- ERR2["endTagWithAttributes"] = "end-tag-with-attributes";
- ERR2["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus";
- ERR2["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag";
- ERR2["unexpectedNullCharacter"] = "unexpected-null-character";
- ERR2["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name";
- ERR2["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name";
- ERR2["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name";
- ERR2["missingEndTagName"] = "missing-end-tag-name";
- ERR2["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name";
- ERR2["unknownNamedCharacterReference"] = "unknown-named-character-reference";
- ERR2["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference";
- ERR2["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier";
- ERR2["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value";
- ERR2["eofBeforeTagName"] = "eof-before-tag-name";
- ERR2["eofInTag"] = "eof-in-tag";
- ERR2["missingAttributeValue"] = "missing-attribute-value";
- ERR2["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes";
- ERR2["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword";
- ERR2["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers";
- ERR2["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword";
- ERR2["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier";
- ERR2["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier";
- ERR2["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier";
- ERR2["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier";
- ERR2["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier";
- ERR2["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier";
- ERR2["cdataInHtmlContent"] = "cdata-in-html-content";
- ERR2["incorrectlyOpenedComment"] = "incorrectly-opened-comment";
- ERR2["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text";
- ERR2["eofInDoctype"] = "eof-in-doctype";
- ERR2["nestedComment"] = "nested-comment";
- ERR2["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment";
- ERR2["eofInComment"] = "eof-in-comment";
- ERR2["incorrectlyClosedComment"] = "incorrectly-closed-comment";
- ERR2["eofInCdata"] = "eof-in-cdata";
- ERR2["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference";
- ERR2["nullCharacterReference"] = "null-character-reference";
- ERR2["surrogateCharacterReference"] = "surrogate-character-reference";
- ERR2["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range";
- ERR2["controlCharacterReference"] = "control-character-reference";
- ERR2["noncharacterCharacterReference"] = "noncharacter-character-reference";
- ERR2["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name";
- ERR2["missingDoctypeName"] = "missing-doctype-name";
- ERR2["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name";
- ERR2["duplicateAttribute"] = "duplicate-attribute";
- ERR2["nonConformingDoctype"] = "non-conforming-doctype";
- ERR2["missingDoctype"] = "missing-doctype";
- ERR2["misplacedDoctype"] = "misplaced-doctype";
- ERR2["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element";
- ERR2["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements";
- ERR2["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head";
- ERR2["openElementsLeftAfterEof"] = "open-elements-left-after-eof";
- ERR2["abandonedHeadElementChild"] = "abandoned-head-element-child";
- ERR2["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element";
- ERR2["nestedNoscriptInHead"] = "nested-noscript-in-head";
- ERR2["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text";
- })(ERR = ERR || (ERR = {}));
- // node_modules/parse5/dist/tokenizer/preprocessor.js
- var DEFAULT_BUFFER_WATERLINE = 1 << 16;
- var Preprocessor = class {
- constructor(handler) {
- this.handler = handler;
- this.html = "";
- this.pos = -1;
- this.lastGapPos = -2;
- this.gapStack = [];
- this.skipNextNewLine = false;
- this.lastChunkWritten = false;
- this.endOfChunkHit = false;
- this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
- this.isEol = false;
- this.lineStartPos = 0;
- this.droppedBufferSize = 0;
- this.line = 1;
- this.lastErrOffset = -1;
- }
- /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
- get col() {
- return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);
- }
- get offset() {
- return this.droppedBufferSize + this.pos;
- }
- getError(code) {
- const { line, col, offset } = this;
- return {
- code,
- startLine: line,
- endLine: line,
- startCol: col,
- endCol: col,
- startOffset: offset,
- endOffset: offset
- };
- }
- _err(code) {
- if (this.handler.onParseError && this.lastErrOffset !== this.offset) {
- this.lastErrOffset = this.offset;
- this.handler.onParseError(this.getError(code));
- }
- }
- _addGap() {
- this.gapStack.push(this.lastGapPos);
- this.lastGapPos = this.pos;
- }
- _processSurrogate(cp) {
- if (this.pos !== this.html.length - 1) {
- const nextCp = this.html.charCodeAt(this.pos + 1);
- if (isSurrogatePair(nextCp)) {
- this.pos++;
- this._addGap();
- return getSurrogatePairCodePoint(cp, nextCp);
- }
- } else if (!this.lastChunkWritten) {
- this.endOfChunkHit = true;
- return CODE_POINTS.EOF;
- }
- this._err(ERR.surrogateInInputStream);
- return cp;
- }
- willDropParsedChunk() {
- return this.pos > this.bufferWaterline;
- }
- dropParsedChunk() {
- if (this.willDropParsedChunk()) {
- this.html = this.html.substring(this.pos);
- this.lineStartPos -= this.pos;
- this.droppedBufferSize += this.pos;
- this.pos = 0;
- this.lastGapPos = -2;
- this.gapStack.length = 0;
- }
- }
- write(chunk, isLastChunk) {
- if (this.html.length > 0) {
- this.html += chunk;
- } else {
- this.html = chunk;
- }
- this.endOfChunkHit = false;
- this.lastChunkWritten = isLastChunk;
- }
- insertHtmlAtCurrentPos(chunk) {
- this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);
- this.endOfChunkHit = false;
- }
- startsWith(pattern, caseSensitive) {
- if (this.pos + pattern.length > this.html.length) {
- this.endOfChunkHit = !this.lastChunkWritten;
- return false;
- }
- if (caseSensitive) {
- return this.html.startsWith(pattern, this.pos);
- }
- for (let i = 0; i < pattern.length; i++) {
- const cp = this.html.charCodeAt(this.pos + i) | 32;
- if (cp !== pattern.charCodeAt(i)) {
- return false;
- }
- }
- return true;
- }
- peek(offset) {
- const pos = this.pos + offset;
- if (pos >= this.html.length) {
- this.endOfChunkHit = !this.lastChunkWritten;
- return CODE_POINTS.EOF;
- }
- const code = this.html.charCodeAt(pos);
- return code === CODE_POINTS.CARRIAGE_RETURN ? CODE_POINTS.LINE_FEED : code;
- }
- advance() {
- this.pos++;
- if (this.isEol) {
- this.isEol = false;
- this.line++;
- this.lineStartPos = this.pos;
- }
- if (this.pos >= this.html.length) {
- this.endOfChunkHit = !this.lastChunkWritten;
- return CODE_POINTS.EOF;
- }
- let cp = this.html.charCodeAt(this.pos);
- if (cp === CODE_POINTS.CARRIAGE_RETURN) {
- this.isEol = true;
- this.skipNextNewLine = true;
- return CODE_POINTS.LINE_FEED;
- }
- if (cp === CODE_POINTS.LINE_FEED) {
- this.isEol = true;
- if (this.skipNextNewLine) {
- this.line--;
- this.skipNextNewLine = false;
- this._addGap();
- return this.advance();
- }
- }
- this.skipNextNewLine = false;
- if (isSurrogate(cp)) {
- cp = this._processSurrogate(cp);
- }
- const isCommonValidRange = this.handler.onParseError === null || cp > 31 && cp < 127 || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.CARRIAGE_RETURN || cp > 159 && cp < 64976;
- if (!isCommonValidRange) {
- this._checkForProblematicCharacters(cp);
- }
- return cp;
- }
- _checkForProblematicCharacters(cp) {
- if (isControlCodePoint(cp)) {
- this._err(ERR.controlCharacterInInputStream);
- } else if (isUndefinedCodePoint(cp)) {
- this._err(ERR.noncharacterInInputStream);
- }
- }
- retreat(count) {
- this.pos -= count;
- while (this.pos < this.lastGapPos) {
- this.lastGapPos = this.gapStack.pop();
- this.pos--;
- }
- this.isEol = false;
- }
- };
- // node_modules/parse5/dist/common/token.js
- var token_exports = {};
- __export(token_exports, {
- TokenType: () => TokenType,
- getTokenAttr: () => getTokenAttr
- });
- var TokenType;
- (function(TokenType2) {
- TokenType2[TokenType2["CHARACTER"] = 0] = "CHARACTER";
- TokenType2[TokenType2["NULL_CHARACTER"] = 1] = "NULL_CHARACTER";
- TokenType2[TokenType2["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER";
- TokenType2[TokenType2["START_TAG"] = 3] = "START_TAG";
- TokenType2[TokenType2["END_TAG"] = 4] = "END_TAG";
- TokenType2[TokenType2["COMMENT"] = 5] = "COMMENT";
- TokenType2[TokenType2["DOCTYPE"] = 6] = "DOCTYPE";
- TokenType2[TokenType2["EOF"] = 7] = "EOF";
- TokenType2[TokenType2["HIBERNATION"] = 8] = "HIBERNATION";
- })(TokenType = TokenType || (TokenType = {}));
- function getTokenAttr(token, attrName) {
- for (let i = token.attrs.length - 1; i >= 0; i--) {
- if (token.attrs[i].name === attrName) {
- return token.attrs[i].value;
- }
- }
- return null;
- }
- // node_modules/entities/lib/esm/generated/decode-data-html.js
- var decode_data_html_default = new Uint16Array(
- // prettier-ignore
- '\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
- );
- // node_modules/entities/lib/esm/generated/decode-data-xml.js
- var decode_data_xml_default = new Uint16Array(
- // prettier-ignore
- "\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
- );
- // node_modules/entities/lib/esm/decode_codepoint.js
- var _a;
- var decodeMap = /* @__PURE__ */ new Map([
- [0, 65533],
- // C1 Unicode control character reference replacements
- [128, 8364],
- [130, 8218],
- [131, 402],
- [132, 8222],
- [133, 8230],
- [134, 8224],
- [135, 8225],
- [136, 710],
- [137, 8240],
- [138, 352],
- [139, 8249],
- [140, 338],
- [142, 381],
- [145, 8216],
- [146, 8217],
- [147, 8220],
- [148, 8221],
- [149, 8226],
- [150, 8211],
- [151, 8212],
- [152, 732],
- [153, 8482],
- [154, 353],
- [155, 8250],
- [156, 339],
- [158, 382],
- [159, 376]
- ]);
- var fromCodePoint = (
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
- (_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
- let output = "";
- if (codePoint > 65535) {
- codePoint -= 65536;
- output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
- codePoint = 56320 | codePoint & 1023;
- }
- output += String.fromCharCode(codePoint);
- return output;
- }
- );
- function replaceCodePoint(codePoint) {
- var _a2;
- if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
- return 65533;
- }
- return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
- }
- // node_modules/entities/lib/esm/decode.js
- var CharCodes;
- (function(CharCodes2) {
- CharCodes2[CharCodes2["NUM"] = 35] = "NUM";
- CharCodes2[CharCodes2["SEMI"] = 59] = "SEMI";
- CharCodes2[CharCodes2["EQUALS"] = 61] = "EQUALS";
- CharCodes2[CharCodes2["ZERO"] = 48] = "ZERO";
- CharCodes2[CharCodes2["NINE"] = 57] = "NINE";
- CharCodes2[CharCodes2["LOWER_A"] = 97] = "LOWER_A";
- CharCodes2[CharCodes2["LOWER_F"] = 102] = "LOWER_F";
- CharCodes2[CharCodes2["LOWER_X"] = 120] = "LOWER_X";
- CharCodes2[CharCodes2["LOWER_Z"] = 122] = "LOWER_Z";
- CharCodes2[CharCodes2["UPPER_A"] = 65] = "UPPER_A";
- CharCodes2[CharCodes2["UPPER_F"] = 70] = "UPPER_F";
- CharCodes2[CharCodes2["UPPER_Z"] = 90] = "UPPER_Z";
- })(CharCodes || (CharCodes = {}));
- var TO_LOWER_BIT = 32;
- var BinTrieFlags;
- (function(BinTrieFlags2) {
- BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
- BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
- BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
- })(BinTrieFlags || (BinTrieFlags = {}));
- function isNumber(code) {
- return code >= CharCodes.ZERO && code <= CharCodes.NINE;
- }
- function isHexadecimalCharacter(code) {
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
- }
- function isAsciiAlphaNumeric(code) {
- return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber(code);
- }
- function isEntityInAttributeInvalidEnd(code) {
- return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
- }
- var EntityDecoderState;
- (function(EntityDecoderState2) {
- EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
- EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
- EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
- EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
- EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
- })(EntityDecoderState || (EntityDecoderState = {}));
- var DecodingMode;
- (function(DecodingMode2) {
- DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
- DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
- DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
- })(DecodingMode || (DecodingMode = {}));
- var EntityDecoder = class {
- constructor(decodeTree, emitCodePoint, errors) {
- this.decodeTree = decodeTree;
- this.emitCodePoint = emitCodePoint;
- this.errors = errors;
- this.state = EntityDecoderState.EntityStart;
- this.consumed = 1;
- this.result = 0;
- this.treeIndex = 0;
- this.excess = 1;
- this.decodeMode = DecodingMode.Strict;
- }
- /** Resets the instance to make it reusable. */
- startEntity(decodeMode) {
- this.decodeMode = decodeMode;
- this.state = EntityDecoderState.EntityStart;
- this.result = 0;
- this.treeIndex = 0;
- this.excess = 1;
- this.consumed = 1;
- }
- /**
- * Write an entity to the decoder. This can be called multiple times with partial entities.
- * If the entity is incomplete, the decoder will return -1.
- *
- * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
- * entity is incomplete, and resume when the next string is written.
- *
- * @param string The string containing the entity (or a continuation of the entity).
- * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
- */
- write(str, offset) {
- switch (this.state) {
- case EntityDecoderState.EntityStart: {
- if (str.charCodeAt(offset) === CharCodes.NUM) {
- this.state = EntityDecoderState.NumericStart;
- this.consumed += 1;
- return this.stateNumericStart(str, offset + 1);
- }
- this.state = EntityDecoderState.NamedEntity;
- return this.stateNamedEntity(str, offset);
- }
- case EntityDecoderState.NumericStart: {
- return this.stateNumericStart(str, offset);
- }
- case EntityDecoderState.NumericDecimal: {
- return this.stateNumericDecimal(str, offset);
- }
- case EntityDecoderState.NumericHex: {
- return this.stateNumericHex(str, offset);
- }
- case EntityDecoderState.NamedEntity: {
- return this.stateNamedEntity(str, offset);
- }
- }
- }
- /**
- * Switches between the numeric decimal and hexadecimal states.
- *
- * Equivalent to the `Numeric character reference state` in the HTML spec.
- *
- * @param str The string containing the entity (or a continuation of the entity).
- * @param offset The current offset.
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
- */
- stateNumericStart(str, offset) {
- if (offset >= str.length) {
- return -1;
- }
- if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
- this.state = EntityDecoderState.NumericHex;
- this.consumed += 1;
- return this.stateNumericHex(str, offset + 1);
- }
- this.state = EntityDecoderState.NumericDecimal;
- return this.stateNumericDecimal(str, offset);
- }
- addToNumericResult(str, start, end, base) {
- if (start !== end) {
- const digitCount = end - start;
- this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
- this.consumed += digitCount;
- }
- }
- /**
- * Parses a hexadecimal numeric entity.
- *
- * Equivalent to the `Hexademical character reference state` in the HTML spec.
- *
- * @param str The string containing the entity (or a continuation of the entity).
- * @param offset The current offset.
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
- */
- stateNumericHex(str, offset) {
- const startIdx = offset;
- while (offset < str.length) {
- const char = str.charCodeAt(offset);
- if (isNumber(char) || isHexadecimalCharacter(char)) {
- offset += 1;
- } else {
- this.addToNumericResult(str, startIdx, offset, 16);
- return this.emitNumericEntity(char, 3);
- }
- }
- this.addToNumericResult(str, startIdx, offset, 16);
- return -1;
- }
- /**
- * Parses a decimal numeric entity.
- *
- * Equivalent to the `Decimal character reference state` in the HTML spec.
- *
- * @param str The string containing the entity (or a continuation of the entity).
- * @param offset The current offset.
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
- */
- stateNumericDecimal(str, offset) {
- const startIdx = offset;
- while (offset < str.length) {
- const char = str.charCodeAt(offset);
- if (isNumber(char)) {
- offset += 1;
- } else {
- this.addToNumericResult(str, startIdx, offset, 10);
- return this.emitNumericEntity(char, 2);
- }
- }
- this.addToNumericResult(str, startIdx, offset, 10);
- return -1;
- }
- /**
- * Validate and emit a numeric entity.
- *
- * Implements the logic from the `Hexademical character reference start
- * state` and `Numeric character reference end state` in the HTML spec.
- *
- * @param lastCp The last code point of the entity. Used to see if the
- * entity was terminated with a semicolon.
- * @param expectedLength The minimum number of characters that should be
- * consumed. Used to validate that at least one digit
- * was consumed.
- * @returns The number of characters that were consumed.
- */
- emitNumericEntity(lastCp, expectedLength) {
- var _a2;
- if (this.consumed <= expectedLength) {
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
- return 0;
- }
- if (lastCp === CharCodes.SEMI) {
- this.consumed += 1;
- } else if (this.decodeMode === DecodingMode.Strict) {
- return 0;
- }
- this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
- if (this.errors) {
- if (lastCp !== CharCodes.SEMI) {
- this.errors.missingSemicolonAfterCharacterReference();
- }
- this.errors.validateNumericCharacterReference(this.result);
- }
- return this.consumed;
- }
- /**
- * Parses a named entity.
- *
- * Equivalent to the `Named character reference state` in the HTML spec.
- *
- * @param str The string containing the entity (or a continuation of the entity).
- * @param offset The current offset.
- * @returns The number of characters that were consumed, or -1 if the entity is incomplete.
- */
- stateNamedEntity(str, offset) {
- const { decodeTree } = this;
- let current = decodeTree[this.treeIndex];
- let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
- for (; offset < str.length; offset++, this.excess++) {
- const char = str.charCodeAt(offset);
- this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
- if (this.treeIndex < 0) {
- return this.result === 0 || // If we are parsing an attribute
- this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
- (valueLength === 0 || // And there should be no invalid characters.
- isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
- }
- current = decodeTree[this.treeIndex];
- valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
- if (valueLength !== 0) {
- if (char === CharCodes.SEMI) {
- return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
- }
- if (this.decodeMode !== DecodingMode.Strict) {
- this.result = this.treeIndex;
- this.consumed += this.excess;
- this.excess = 0;
- }
- }
- }
- return -1;
- }
- /**
- * Emit a named entity that was not terminated with a semicolon.
- *
- * @returns The number of characters consumed.
- */
- emitNotTerminatedNamedEntity() {
- var _a2;
- const { result, decodeTree } = this;
- const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
- this.emitNamedEntityData(result, valueLength, this.consumed);
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
- return this.consumed;
- }
- /**
- * Emit a named entity.
- *
- * @param result The index of the entity in the decode tree.
- * @param valueLength The number of bytes in the entity.
- * @param consumed The number of characters consumed.
- *
- * @returns The number of characters consumed.
- */
- emitNamedEntityData(result, valueLength, consumed) {
- const { decodeTree } = this;
- this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
- if (valueLength === 3) {
- this.emitCodePoint(decodeTree[result + 2], consumed);
- }
- return consumed;
- }
- /**
- * Signal to the parser that the end of the input was reached.
- *
- * Remaining data will be emitted and relevant errors will be produced.
- *
- * @returns The number of characters consumed.
- */
- end() {
- var _a2;
- switch (this.state) {
- case EntityDecoderState.NamedEntity: {
- return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
- }
- case EntityDecoderState.NumericDecimal: {
- return this.emitNumericEntity(0, 2);
- }
- case EntityDecoderState.NumericHex: {
- return this.emitNumericEntity(0, 3);
- }
- case EntityDecoderState.NumericStart: {
- (_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
- return 0;
- }
- case EntityDecoderState.EntityStart: {
- return 0;
- }
- }
- }
- };
- function getDecoder(decodeTree) {
- let ret = "";
- const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str));
- return function decodeWithTrie(str, decodeMode) {
- let lastIndex = 0;
- let offset = 0;
- while ((offset = str.indexOf("&", offset)) >= 0) {
- ret += str.slice(lastIndex, offset);
- decoder.startEntity(decodeMode);
- const len = decoder.write(
- str,
- // Skip the "&"
- offset + 1
- );
- if (len < 0) {
- lastIndex = offset + decoder.end();
- break;
- }
- lastIndex = offset + len;
- offset = len === 0 ? lastIndex + 1 : lastIndex;
- }
- const result = ret + str.slice(lastIndex);
- ret = "";
- return result;
- };
- }
- function determineBranch(decodeTree, current, nodeIdx, char) {
- const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
- const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
- if (branchCount === 0) {
- return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
- }
- if (jumpOffset) {
- const value = char - jumpOffset;
- return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
- }
- let lo = nodeIdx;
- let hi = lo + branchCount - 1;
- while (lo <= hi) {
- const mid = lo + hi >>> 1;
- const midVal = decodeTree[mid];
- if (midVal < char) {
- lo = mid + 1;
- } else if (midVal > char) {
- hi = mid - 1;
- } else {
- return decodeTree[mid + branchCount];
- }
- }
- return -1;
- }
- var htmlDecoder = getDecoder(decode_data_html_default);
- var xmlDecoder = getDecoder(decode_data_xml_default);
- // node_modules/parse5/dist/common/html.js
- var html_exports = {};
- __export(html_exports, {
- ATTRS: () => ATTRS,
- DOCUMENT_MODE: () => DOCUMENT_MODE,
- NS: () => NS,
- SPECIAL_ELEMENTS: () => SPECIAL_ELEMENTS,
- TAG_ID: () => TAG_ID,
- TAG_NAMES: () => TAG_NAMES,
- getTagID: () => getTagID,
- hasUnescapedText: () => hasUnescapedText,
- isNumberedHeader: () => isNumberedHeader
- });
- var NS;
- (function(NS2) {
- NS2["HTML"] = "http://www.w3.org/1999/xhtml";
- NS2["MATHML"] = "http://www.w3.org/1998/Math/MathML";
- NS2["SVG"] = "http://www.w3.org/2000/svg";
- NS2["XLINK"] = "http://www.w3.org/1999/xlink";
- NS2["XML"] = "http://www.w3.org/XML/1998/namespace";
- NS2["XMLNS"] = "http://www.w3.org/2000/xmlns/";
- })(NS = NS || (NS = {}));
- var ATTRS;
- (function(ATTRS2) {
- ATTRS2["TYPE"] = "type";
- ATTRS2["ACTION"] = "action";
- ATTRS2["ENCODING"] = "encoding";
- ATTRS2["PROMPT"] = "prompt";
- ATTRS2["NAME"] = "name";
- ATTRS2["COLOR"] = "color";
- ATTRS2["FACE"] = "face";
- ATTRS2["SIZE"] = "size";
- })(ATTRS = ATTRS || (ATTRS = {}));
- var DOCUMENT_MODE;
- (function(DOCUMENT_MODE2) {
- DOCUMENT_MODE2["NO_QUIRKS"] = "no-quirks";
- DOCUMENT_MODE2["QUIRKS"] = "quirks";
- DOCUMENT_MODE2["LIMITED_QUIRKS"] = "limited-quirks";
- })(DOCUMENT_MODE = DOCUMENT_MODE || (DOCUMENT_MODE = {}));
- var TAG_NAMES;
- (function(TAG_NAMES2) {
- TAG_NAMES2["A"] = "a";
- TAG_NAMES2["ADDRESS"] = "address";
- TAG_NAMES2["ANNOTATION_XML"] = "annotation-xml";
- TAG_NAMES2["APPLET"] = "applet";
- TAG_NAMES2["AREA"] = "area";
- TAG_NAMES2["ARTICLE"] = "article";
- TAG_NAMES2["ASIDE"] = "aside";
- TAG_NAMES2["B"] = "b";
- TAG_NAMES2["BASE"] = "base";
- TAG_NAMES2["BASEFONT"] = "basefont";
- TAG_NAMES2["BGSOUND"] = "bgsound";
- TAG_NAMES2["BIG"] = "big";
- TAG_NAMES2["BLOCKQUOTE"] = "blockquote";
- TAG_NAMES2["BODY"] = "body";
- TAG_NAMES2["BR"] = "br";
- TAG_NAMES2["BUTTON"] = "button";
- TAG_NAMES2["CAPTION"] = "caption";
- TAG_NAMES2["CENTER"] = "center";
- TAG_NAMES2["CODE"] = "code";
- TAG_NAMES2["COL"] = "col";
- TAG_NAMES2["COLGROUP"] = "colgroup";
- TAG_NAMES2["DD"] = "dd";
- TAG_NAMES2["DESC"] = "desc";
- TAG_NAMES2["DETAILS"] = "details";
- TAG_NAMES2["DIALOG"] = "dialog";
- TAG_NAMES2["DIR"] = "dir";
- TAG_NAMES2["DIV"] = "div";
- TAG_NAMES2["DL"] = "dl";
- TAG_NAMES2["DT"] = "dt";
- TAG_NAMES2["EM"] = "em";
- TAG_NAMES2["EMBED"] = "embed";
- TAG_NAMES2["FIELDSET"] = "fieldset";
- TAG_NAMES2["FIGCAPTION"] = "figcaption";
- TAG_NAMES2["FIGURE"] = "figure";
- TAG_NAMES2["FONT"] = "font";
- TAG_NAMES2["FOOTER"] = "footer";
- TAG_NAMES2["FOREIGN_OBJECT"] = "foreignObject";
- TAG_NAMES2["FORM"] = "form";
- TAG_NAMES2["FRAME"] = "frame";
- TAG_NAMES2["FRAMESET"] = "frameset";
- TAG_NAMES2["H1"] = "h1";
- TAG_NAMES2["H2"] = "h2";
- TAG_NAMES2["H3"] = "h3";
- TAG_NAMES2["H4"] = "h4";
- TAG_NAMES2["H5"] = "h5";
- TAG_NAMES2["H6"] = "h6";
- TAG_NAMES2["HEAD"] = "head";
- TAG_NAMES2["HEADER"] = "header";
- TAG_NAMES2["HGROUP"] = "hgroup";
- TAG_NAMES2["HR"] = "hr";
- TAG_NAMES2["HTML"] = "html";
- TAG_NAMES2["I"] = "i";
- TAG_NAMES2["IMG"] = "img";
- TAG_NAMES2["IMAGE"] = "image";
- TAG_NAMES2["INPUT"] = "input";
- TAG_NAMES2["IFRAME"] = "iframe";
- TAG_NAMES2["KEYGEN"] = "keygen";
- TAG_NAMES2["LABEL"] = "label";
- TAG_NAMES2["LI"] = "li";
- TAG_NAMES2["LINK"] = "link";
- TAG_NAMES2["LISTING"] = "listing";
- TAG_NAMES2["MAIN"] = "main";
- TAG_NAMES2["MALIGNMARK"] = "malignmark";
- TAG_NAMES2["MARQUEE"] = "marquee";
- TAG_NAMES2["MATH"] = "math";
- TAG_NAMES2["MENU"] = "menu";
- TAG_NAMES2["META"] = "meta";
- TAG_NAMES2["MGLYPH"] = "mglyph";
- TAG_NAMES2["MI"] = "mi";
- TAG_NAMES2["MO"] = "mo";
- TAG_NAMES2["MN"] = "mn";
- TAG_NAMES2["MS"] = "ms";
- TAG_NAMES2["MTEXT"] = "mtext";
- TAG_NAMES2["NAV"] = "nav";
- TAG_NAMES2["NOBR"] = "nobr";
- TAG_NAMES2["NOFRAMES"] = "noframes";
- TAG_NAMES2["NOEMBED"] = "noembed";
- TAG_NAMES2["NOSCRIPT"] = "noscript";
- TAG_NAMES2["OBJECT"] = "object";
- TAG_NAMES2["OL"] = "ol";
- TAG_NAMES2["OPTGROUP"] = "optgroup";
- TAG_NAMES2["OPTION"] = "option";
- TAG_NAMES2["P"] = "p";
- TAG_NAMES2["PARAM"] = "param";
- TAG_NAMES2["PLAINTEXT"] = "plaintext";
- TAG_NAMES2["PRE"] = "pre";
- TAG_NAMES2["RB"] = "rb";
- TAG_NAMES2["RP"] = "rp";
- TAG_NAMES2["RT"] = "rt";
- TAG_NAMES2["RTC"] = "rtc";
- TAG_NAMES2["RUBY"] = "ruby";
- TAG_NAMES2["S"] = "s";
- TAG_NAMES2["SCRIPT"] = "script";
- TAG_NAMES2["SECTION"] = "section";
- TAG_NAMES2["SELECT"] = "select";
- TAG_NAMES2["SOURCE"] = "source";
- TAG_NAMES2["SMALL"] = "small";
- TAG_NAMES2["SPAN"] = "span";
- TAG_NAMES2["STRIKE"] = "strike";
- TAG_NAMES2["STRONG"] = "strong";
- TAG_NAMES2["STYLE"] = "style";
- TAG_NAMES2["SUB"] = "sub";
- TAG_NAMES2["SUMMARY"] = "summary";
- TAG_NAMES2["SUP"] = "sup";
- TAG_NAMES2["TABLE"] = "table";
- TAG_NAMES2["TBODY"] = "tbody";
- TAG_NAMES2["TEMPLATE"] = "template";
- TAG_NAMES2["TEXTAREA"] = "textarea";
- TAG_NAMES2["TFOOT"] = "tfoot";
- TAG_NAMES2["TD"] = "td";
- TAG_NAMES2["TH"] = "th";
- TAG_NAMES2["THEAD"] = "thead";
- TAG_NAMES2["TITLE"] = "title";
- TAG_NAMES2["TR"] = "tr";
- TAG_NAMES2["TRACK"] = "track";
- TAG_NAMES2["TT"] = "tt";
- TAG_NAMES2["U"] = "u";
- TAG_NAMES2["UL"] = "ul";
- TAG_NAMES2["SVG"] = "svg";
- TAG_NAMES2["VAR"] = "var";
- TAG_NAMES2["WBR"] = "wbr";
- TAG_NAMES2["XMP"] = "xmp";
- })(TAG_NAMES = TAG_NAMES || (TAG_NAMES = {}));
- var TAG_ID;
- (function(TAG_ID2) {
- TAG_ID2[TAG_ID2["UNKNOWN"] = 0] = "UNKNOWN";
- TAG_ID2[TAG_ID2["A"] = 1] = "A";
- TAG_ID2[TAG_ID2["ADDRESS"] = 2] = "ADDRESS";
- TAG_ID2[TAG_ID2["ANNOTATION_XML"] = 3] = "ANNOTATION_XML";
- TAG_ID2[TAG_ID2["APPLET"] = 4] = "APPLET";
- TAG_ID2[TAG_ID2["AREA"] = 5] = "AREA";
- TAG_ID2[TAG_ID2["ARTICLE"] = 6] = "ARTICLE";
- TAG_ID2[TAG_ID2["ASIDE"] = 7] = "ASIDE";
- TAG_ID2[TAG_ID2["B"] = 8] = "B";
- TAG_ID2[TAG_ID2["BASE"] = 9] = "BASE";
- TAG_ID2[TAG_ID2["BASEFONT"] = 10] = "BASEFONT";
- TAG_ID2[TAG_ID2["BGSOUND"] = 11] = "BGSOUND";
- TAG_ID2[TAG_ID2["BIG"] = 12] = "BIG";
- TAG_ID2[TAG_ID2["BLOCKQUOTE"] = 13] = "BLOCKQUOTE";
- TAG_ID2[TAG_ID2["BODY"] = 14] = "BODY";
- TAG_ID2[TAG_ID2["BR"] = 15] = "BR";
- TAG_ID2[TAG_ID2["BUTTON"] = 16] = "BUTTON";
- TAG_ID2[TAG_ID2["CAPTION"] = 17] = "CAPTION";
- TAG_ID2[TAG_ID2["CENTER"] = 18] = "CENTER";
- TAG_ID2[TAG_ID2["CODE"] = 19] = "CODE";
- TAG_ID2[TAG_ID2["COL"] = 20] = "COL";
- TAG_ID2[TAG_ID2["COLGROUP"] = 21] = "COLGROUP";
- TAG_ID2[TAG_ID2["DD"] = 22] = "DD";
- TAG_ID2[TAG_ID2["DESC"] = 23] = "DESC";
- TAG_ID2[TAG_ID2["DETAILS"] = 24] = "DETAILS";
- TAG_ID2[TAG_ID2["DIALOG"] = 25] = "DIALOG";
- TAG_ID2[TAG_ID2["DIR"] = 26] = "DIR";
- TAG_ID2[TAG_ID2["DIV"] = 27] = "DIV";
- TAG_ID2[TAG_ID2["DL"] = 28] = "DL";
- TAG_ID2[TAG_ID2["DT"] = 29] = "DT";
- TAG_ID2[TAG_ID2["EM"] = 30] = "EM";
- TAG_ID2[TAG_ID2["EMBED"] = 31] = "EMBED";
- TAG_ID2[TAG_ID2["FIELDSET"] = 32] = "FIELDSET";
- TAG_ID2[TAG_ID2["FIGCAPTION"] = 33] = "FIGCAPTION";
- TAG_ID2[TAG_ID2["FIGURE"] = 34] = "FIGURE";
- TAG_ID2[TAG_ID2["FONT"] = 35] = "FONT";
- TAG_ID2[TAG_ID2["FOOTER"] = 36] = "FOOTER";
- TAG_ID2[TAG_ID2["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT";
- TAG_ID2[TAG_ID2["FORM"] = 38] = "FORM";
- TAG_ID2[TAG_ID2["FRAME"] = 39] = "FRAME";
- TAG_ID2[TAG_ID2["FRAMESET"] = 40] = "FRAMESET";
- TAG_ID2[TAG_ID2["H1"] = 41] = "H1";
- TAG_ID2[TAG_ID2["H2"] = 42] = "H2";
- TAG_ID2[TAG_ID2["H3"] = 43] = "H3";
- TAG_ID2[TAG_ID2["H4"] = 44] = "H4";
- TAG_ID2[TAG_ID2["H5"] = 45] = "H5";
- TAG_ID2[TAG_ID2["H6"] = 46] = "H6";
- TAG_ID2[TAG_ID2["HEAD"] = 47] = "HEAD";
- TAG_ID2[TAG_ID2["HEADER"] = 48] = "HEADER";
- TAG_ID2[TAG_ID2["HGROUP"] = 49] = "HGROUP";
- TAG_ID2[TAG_ID2["HR"] = 50] = "HR";
- TAG_ID2[TAG_ID2["HTML"] = 51] = "HTML";
- TAG_ID2[TAG_ID2["I"] = 52] = "I";
- TAG_ID2[TAG_ID2["IMG"] = 53] = "IMG";
- TAG_ID2[TAG_ID2["IMAGE"] = 54] = "IMAGE";
- TAG_ID2[TAG_ID2["INPUT"] = 55] = "INPUT";
- TAG_ID2[TAG_ID2["IFRAME"] = 56] = "IFRAME";
- TAG_ID2[TAG_ID2["KEYGEN"] = 57] = "KEYGEN";
- TAG_ID2[TAG_ID2["LABEL"] = 58] = "LABEL";
- TAG_ID2[TAG_ID2["LI"] = 59] = "LI";
- TAG_ID2[TAG_ID2["LINK"] = 60] = "LINK";
- TAG_ID2[TAG_ID2["LISTING"] = 61] = "LISTING";
- TAG_ID2[TAG_ID2["MAIN"] = 62] = "MAIN";
- TAG_ID2[TAG_ID2["MALIGNMARK"] = 63] = "MALIGNMARK";
- TAG_ID2[TAG_ID2["MARQUEE"] = 64] = "MARQUEE";
- TAG_ID2[TAG_ID2["MATH"] = 65] = "MATH";
- TAG_ID2[TAG_ID2["MENU"] = 66] = "MENU";
- TAG_ID2[TAG_ID2["META"] = 67] = "META";
- TAG_ID2[TAG_ID2["MGLYPH"] = 68] = "MGLYPH";
- TAG_ID2[TAG_ID2["MI"] = 69] = "MI";
- TAG_ID2[TAG_ID2["MO"] = 70] = "MO";
- TAG_ID2[TAG_ID2["MN"] = 71] = "MN";
- TAG_ID2[TAG_ID2["MS"] = 72] = "MS";
- TAG_ID2[TAG_ID2["MTEXT"] = 73] = "MTEXT";
- TAG_ID2[TAG_ID2["NAV"] = 74] = "NAV";
- TAG_ID2[TAG_ID2["NOBR"] = 75] = "NOBR";
- TAG_ID2[TAG_ID2["NOFRAMES"] = 76] = "NOFRAMES";
- TAG_ID2[TAG_ID2["NOEMBED"] = 77] = "NOEMBED";
- TAG_ID2[TAG_ID2["NOSCRIPT"] = 78] = "NOSCRIPT";
- TAG_ID2[TAG_ID2["OBJECT"] = 79] = "OBJECT";
- TAG_ID2[TAG_ID2["OL"] = 80] = "OL";
- TAG_ID2[TAG_ID2["OPTGROUP"] = 81] = "OPTGROUP";
- TAG_ID2[TAG_ID2["OPTION"] = 82] = "OPTION";
- TAG_ID2[TAG_ID2["P"] = 83] = "P";
- TAG_ID2[TAG_ID2["PARAM"] = 84] = "PARAM";
- TAG_ID2[TAG_ID2["PLAINTEXT"] = 85] = "PLAINTEXT";
- TAG_ID2[TAG_ID2["PRE"] = 86] = "PRE";
- TAG_ID2[TAG_ID2["RB"] = 87] = "RB";
- TAG_ID2[TAG_ID2["RP"] = 88] = "RP";
- TAG_ID2[TAG_ID2["RT"] = 89] = "RT";
- TAG_ID2[TAG_ID2["RTC"] = 90] = "RTC";
- TAG_ID2[TAG_ID2["RUBY"] = 91] = "RUBY";
- TAG_ID2[TAG_ID2["S"] = 92] = "S";
- TAG_ID2[TAG_ID2["SCRIPT"] = 93] = "SCRIPT";
- TAG_ID2[TAG_ID2["SECTION"] = 94] = "SECTION";
- TAG_ID2[TAG_ID2["SELECT"] = 95] = "SELECT";
- TAG_ID2[TAG_ID2["SOURCE"] = 96] = "SOURCE";
- TAG_ID2[TAG_ID2["SMALL"] = 97] = "SMALL";
- TAG_ID2[TAG_ID2["SPAN"] = 98] = "SPAN";
- TAG_ID2[TAG_ID2["STRIKE"] = 99] = "STRIKE";
- TAG_ID2[TAG_ID2["STRONG"] = 100] = "STRONG";
- TAG_ID2[TAG_ID2["STYLE"] = 101] = "STYLE";
- TAG_ID2[TAG_ID2["SUB"] = 102] = "SUB";
- TAG_ID2[TAG_ID2["SUMMARY"] = 103] = "SUMMARY";
- TAG_ID2[TAG_ID2["SUP"] = 104] = "SUP";
- TAG_ID2[TAG_ID2["TABLE"] = 105] = "TABLE";
- TAG_ID2[TAG_ID2["TBODY"] = 106] = "TBODY";
- TAG_ID2[TAG_ID2["TEMPLATE"] = 107] = "TEMPLATE";
- TAG_ID2[TAG_ID2["TEXTAREA"] = 108] = "TEXTAREA";
- TAG_ID2[TAG_ID2["TFOOT"] = 109] = "TFOOT";
- TAG_ID2[TAG_ID2["TD"] = 110] = "TD";
- TAG_ID2[TAG_ID2["TH"] = 111] = "TH";
- TAG_ID2[TAG_ID2["THEAD"] = 112] = "THEAD";
- TAG_ID2[TAG_ID2["TITLE"] = 113] = "TITLE";
- TAG_ID2[TAG_ID2["TR"] = 114] = "TR";
- TAG_ID2[TAG_ID2["TRACK"] = 115] = "TRACK";
- TAG_ID2[TAG_ID2["TT"] = 116] = "TT";
- TAG_ID2[TAG_ID2["U"] = 117] = "U";
- TAG_ID2[TAG_ID2["UL"] = 118] = "UL";
- TAG_ID2[TAG_ID2["SVG"] = 119] = "SVG";
- TAG_ID2[TAG_ID2["VAR"] = 120] = "VAR";
- TAG_ID2[TAG_ID2["WBR"] = 121] = "WBR";
- TAG_ID2[TAG_ID2["XMP"] = 122] = "XMP";
- })(TAG_ID = TAG_ID || (TAG_ID = {}));
- var TAG_NAME_TO_ID = /* @__PURE__ */ new Map([
- [TAG_NAMES.A, TAG_ID.A],
- [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],
- [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],
- [TAG_NAMES.APPLET, TAG_ID.APPLET],
- [TAG_NAMES.AREA, TAG_ID.AREA],
- [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],
- [TAG_NAMES.ASIDE, TAG_ID.ASIDE],
- [TAG_NAMES.B, TAG_ID.B],
- [TAG_NAMES.BASE, TAG_ID.BASE],
- [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],
- [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],
- [TAG_NAMES.BIG, TAG_ID.BIG],
- [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],
- [TAG_NAMES.BODY, TAG_ID.BODY],
- [TAG_NAMES.BR, TAG_ID.BR],
- [TAG_NAMES.BUTTON, TAG_ID.BUTTON],
- [TAG_NAMES.CAPTION, TAG_ID.CAPTION],
- [TAG_NAMES.CENTER, TAG_ID.CENTER],
- [TAG_NAMES.CODE, TAG_ID.CODE],
- [TAG_NAMES.COL, TAG_ID.COL],
- [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],
- [TAG_NAMES.DD, TAG_ID.DD],
- [TAG_NAMES.DESC, TAG_ID.DESC],
- [TAG_NAMES.DETAILS, TAG_ID.DETAILS],
- [TAG_NAMES.DIALOG, TAG_ID.DIALOG],
- [TAG_NAMES.DIR, TAG_ID.DIR],
- [TAG_NAMES.DIV, TAG_ID.DIV],
- [TAG_NAMES.DL, TAG_ID.DL],
- [TAG_NAMES.DT, TAG_ID.DT],
- [TAG_NAMES.EM, TAG_ID.EM],
- [TAG_NAMES.EMBED, TAG_ID.EMBED],
- [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],
- [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],
- [TAG_NAMES.FIGURE, TAG_ID.FIGURE],
- [TAG_NAMES.FONT, TAG_ID.FONT],
- [TAG_NAMES.FOOTER, TAG_ID.FOOTER],
- [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],
- [TAG_NAMES.FORM, TAG_ID.FORM],
- [TAG_NAMES.FRAME, TAG_ID.FRAME],
- [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],
- [TAG_NAMES.H1, TAG_ID.H1],
- [TAG_NAMES.H2, TAG_ID.H2],
- [TAG_NAMES.H3, TAG_ID.H3],
- [TAG_NAMES.H4, TAG_ID.H4],
- [TAG_NAMES.H5, TAG_ID.H5],
- [TAG_NAMES.H6, TAG_ID.H6],
- [TAG_NAMES.HEAD, TAG_ID.HEAD],
- [TAG_NAMES.HEADER, TAG_ID.HEADER],
- [TAG_NAMES.HGROUP, TAG_ID.HGROUP],
- [TAG_NAMES.HR, TAG_ID.HR],
- [TAG_NAMES.HTML, TAG_ID.HTML],
- [TAG_NAMES.I, TAG_ID.I],
- [TAG_NAMES.IMG, TAG_ID.IMG],
- [TAG_NAMES.IMAGE, TAG_ID.IMAGE],
- [TAG_NAMES.INPUT, TAG_ID.INPUT],
- [TAG_NAMES.IFRAME, TAG_ID.IFRAME],
- [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],
- [TAG_NAMES.LABEL, TAG_ID.LABEL],
- [TAG_NAMES.LI, TAG_ID.LI],
- [TAG_NAMES.LINK, TAG_ID.LINK],
- [TAG_NAMES.LISTING, TAG_ID.LISTING],
- [TAG_NAMES.MAIN, TAG_ID.MAIN],
- [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],
- [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],
- [TAG_NAMES.MATH, TAG_ID.MATH],
- [TAG_NAMES.MENU, TAG_ID.MENU],
- [TAG_NAMES.META, TAG_ID.META],
- [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],
- [TAG_NAMES.MI, TAG_ID.MI],
- [TAG_NAMES.MO, TAG_ID.MO],
- [TAG_NAMES.MN, TAG_ID.MN],
- [TAG_NAMES.MS, TAG_ID.MS],
- [TAG_NAMES.MTEXT, TAG_ID.MTEXT],
- [TAG_NAMES.NAV, TAG_ID.NAV],
- [TAG_NAMES.NOBR, TAG_ID.NOBR],
- [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],
- [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],
- [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],
- [TAG_NAMES.OBJECT, TAG_ID.OBJECT],
- [TAG_NAMES.OL, TAG_ID.OL],
- [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],
- [TAG_NAMES.OPTION, TAG_ID.OPTION],
- [TAG_NAMES.P, TAG_ID.P],
- [TAG_NAMES.PARAM, TAG_ID.PARAM],
- [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],
- [TAG_NAMES.PRE, TAG_ID.PRE],
- [TAG_NAMES.RB, TAG_ID.RB],
- [TAG_NAMES.RP, TAG_ID.RP],
- [TAG_NAMES.RT, TAG_ID.RT],
- [TAG_NAMES.RTC, TAG_ID.RTC],
- [TAG_NAMES.RUBY, TAG_ID.RUBY],
- [TAG_NAMES.S, TAG_ID.S],
- [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],
- [TAG_NAMES.SECTION, TAG_ID.SECTION],
- [TAG_NAMES.SELECT, TAG_ID.SELECT],
- [TAG_NAMES.SOURCE, TAG_ID.SOURCE],
- [TAG_NAMES.SMALL, TAG_ID.SMALL],
- [TAG_NAMES.SPAN, TAG_ID.SPAN],
- [TAG_NAMES.STRIKE, TAG_ID.STRIKE],
- [TAG_NAMES.STRONG, TAG_ID.STRONG],
- [TAG_NAMES.STYLE, TAG_ID.STYLE],
- [TAG_NAMES.SUB, TAG_ID.SUB],
- [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],
- [TAG_NAMES.SUP, TAG_ID.SUP],
- [TAG_NAMES.TABLE, TAG_ID.TABLE],
- [TAG_NAMES.TBODY, TAG_ID.TBODY],
- [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],
- [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],
- [TAG_NAMES.TFOOT, TAG_ID.TFOOT],
- [TAG_NAMES.TD, TAG_ID.TD],
- [TAG_NAMES.TH, TAG_ID.TH],
- [TAG_NAMES.THEAD, TAG_ID.THEAD],
- [TAG_NAMES.TITLE, TAG_ID.TITLE],
- [TAG_NAMES.TR, TAG_ID.TR],
- [TAG_NAMES.TRACK, TAG_ID.TRACK],
- [TAG_NAMES.TT, TAG_ID.TT],
- [TAG_NAMES.U, TAG_ID.U],
- [TAG_NAMES.UL, TAG_ID.UL],
- [TAG_NAMES.SVG, TAG_ID.SVG],
- [TAG_NAMES.VAR, TAG_ID.VAR],
- [TAG_NAMES.WBR, TAG_ID.WBR],
- [TAG_NAMES.XMP, TAG_ID.XMP]
- ]);
- function getTagID(tagName) {
- var _a2;
- return (_a2 = TAG_NAME_TO_ID.get(tagName)) !== null && _a2 !== void 0 ? _a2 : TAG_ID.UNKNOWN;
- }
- var $ = TAG_ID;
- var SPECIAL_ELEMENTS = {
- [NS.HTML]: /* @__PURE__ */ new Set([
- $.ADDRESS,
- $.APPLET,
- $.AREA,
- $.ARTICLE,
- $.ASIDE,
- $.BASE,
- $.BASEFONT,
- $.BGSOUND,
- $.BLOCKQUOTE,
- $.BODY,
- $.BR,
- $.BUTTON,
- $.CAPTION,
- $.CENTER,
- $.COL,
- $.COLGROUP,
- $.DD,
- $.DETAILS,
- $.DIR,
- $.DIV,
- $.DL,
- $.DT,
- $.EMBED,
- $.FIELDSET,
- $.FIGCAPTION,
- $.FIGURE,
- $.FOOTER,
- $.FORM,
- $.FRAME,
- $.FRAMESET,
- $.H1,
- $.H2,
- $.H3,
- $.H4,
- $.H5,
- $.H6,
- $.HEAD,
- $.HEADER,
- $.HGROUP,
- $.HR,
- $.HTML,
- $.IFRAME,
- $.IMG,
- $.INPUT,
- $.LI,
- $.LINK,
- $.LISTING,
- $.MAIN,
- $.MARQUEE,
- $.MENU,
- $.META,
- $.NAV,
- $.NOEMBED,
- $.NOFRAMES,
- $.NOSCRIPT,
- $.OBJECT,
- $.OL,
- $.P,
- $.PARAM,
- $.PLAINTEXT,
- $.PRE,
- $.SCRIPT,
- $.SECTION,
- $.SELECT,
- $.SOURCE,
- $.STYLE,
- $.SUMMARY,
- $.TABLE,
- $.TBODY,
- $.TD,
- $.TEMPLATE,
- $.TEXTAREA,
- $.TFOOT,
- $.TH,
- $.THEAD,
- $.TITLE,
- $.TR,
- $.TRACK,
- $.UL,
- $.WBR,
- $.XMP
- ]),
- [NS.MATHML]: /* @__PURE__ */ new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),
- [NS.SVG]: /* @__PURE__ */ new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),
- [NS.XLINK]: /* @__PURE__ */ new Set(),
- [NS.XML]: /* @__PURE__ */ new Set(),
- [NS.XMLNS]: /* @__PURE__ */ new Set()
- };
- function isNumberedHeader(tn) {
- return tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6;
- }
- var UNESCAPED_TEXT = /* @__PURE__ */ new Set([
- TAG_NAMES.STYLE,
- TAG_NAMES.SCRIPT,
- TAG_NAMES.XMP,
- TAG_NAMES.IFRAME,
- TAG_NAMES.NOEMBED,
- TAG_NAMES.NOFRAMES,
- TAG_NAMES.PLAINTEXT
- ]);
- function hasUnescapedText(tn, scriptingEnabled) {
- return UNESCAPED_TEXT.has(tn) || scriptingEnabled && tn === TAG_NAMES.NOSCRIPT;
- }
- // node_modules/parse5/dist/tokenizer/index.js
- var C1_CONTROLS_REFERENCE_REPLACEMENTS = /* @__PURE__ */ new Map([
- [128, 8364],
- [130, 8218],
- [131, 402],
- [132, 8222],
- [133, 8230],
- [134, 8224],
- [135, 8225],
- [136, 710],
- [137, 8240],
- [138, 352],
- [139, 8249],
- [140, 338],
- [142, 381],
- [145, 8216],
- [146, 8217],
- [147, 8220],
- [148, 8221],
- [149, 8226],
- [150, 8211],
- [151, 8212],
- [152, 732],
- [153, 8482],
- [154, 353],
- [155, 8250],
- [156, 339],
- [158, 382],
- [159, 376]
- ]);
- var State;
- (function(State2) {
- State2[State2["DATA"] = 0] = "DATA";
- State2[State2["RCDATA"] = 1] = "RCDATA";
- State2[State2["RAWTEXT"] = 2] = "RAWTEXT";
- State2[State2["SCRIPT_DATA"] = 3] = "SCRIPT_DATA";
- State2[State2["PLAINTEXT"] = 4] = "PLAINTEXT";
- State2[State2["TAG_OPEN"] = 5] = "TAG_OPEN";
- State2[State2["END_TAG_OPEN"] = 6] = "END_TAG_OPEN";
- State2[State2["TAG_NAME"] = 7] = "TAG_NAME";
- State2[State2["RCDATA_LESS_THAN_SIGN"] = 8] = "RCDATA_LESS_THAN_SIGN";
- State2[State2["RCDATA_END_TAG_OPEN"] = 9] = "RCDATA_END_TAG_OPEN";
- State2[State2["RCDATA_END_TAG_NAME"] = 10] = "RCDATA_END_TAG_NAME";
- State2[State2["RAWTEXT_LESS_THAN_SIGN"] = 11] = "RAWTEXT_LESS_THAN_SIGN";
- State2[State2["RAWTEXT_END_TAG_OPEN"] = 12] = "RAWTEXT_END_TAG_OPEN";
- State2[State2["RAWTEXT_END_TAG_NAME"] = 13] = "RAWTEXT_END_TAG_NAME";
- State2[State2["SCRIPT_DATA_LESS_THAN_SIGN"] = 14] = "SCRIPT_DATA_LESS_THAN_SIGN";
- State2[State2["SCRIPT_DATA_END_TAG_OPEN"] = 15] = "SCRIPT_DATA_END_TAG_OPEN";
- State2[State2["SCRIPT_DATA_END_TAG_NAME"] = 16] = "SCRIPT_DATA_END_TAG_NAME";
- State2[State2["SCRIPT_DATA_ESCAPE_START"] = 17] = "SCRIPT_DATA_ESCAPE_START";
- State2[State2["SCRIPT_DATA_ESCAPE_START_DASH"] = 18] = "SCRIPT_DATA_ESCAPE_START_DASH";
- State2[State2["SCRIPT_DATA_ESCAPED"] = 19] = "SCRIPT_DATA_ESCAPED";
- State2[State2["SCRIPT_DATA_ESCAPED_DASH"] = 20] = "SCRIPT_DATA_ESCAPED_DASH";
- State2[State2["SCRIPT_DATA_ESCAPED_DASH_DASH"] = 21] = "SCRIPT_DATA_ESCAPED_DASH_DASH";
- State2[State2["SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN"] = 22] = "SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN";
- State2[State2["SCRIPT_DATA_ESCAPED_END_TAG_OPEN"] = 23] = "SCRIPT_DATA_ESCAPED_END_TAG_OPEN";
- State2[State2["SCRIPT_DATA_ESCAPED_END_TAG_NAME"] = 24] = "SCRIPT_DATA_ESCAPED_END_TAG_NAME";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPE_START"] = 25] = "SCRIPT_DATA_DOUBLE_ESCAPE_START";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED"] = 26] = "SCRIPT_DATA_DOUBLE_ESCAPED";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_DASH"] = 27] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH"] = 28] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN"] = 29] = "SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN";
- State2[State2["SCRIPT_DATA_DOUBLE_ESCAPE_END"] = 30] = "SCRIPT_DATA_DOUBLE_ESCAPE_END";
- State2[State2["BEFORE_ATTRIBUTE_NAME"] = 31] = "BEFORE_ATTRIBUTE_NAME";
- State2[State2["ATTRIBUTE_NAME"] = 32] = "ATTRIBUTE_NAME";
- State2[State2["AFTER_ATTRIBUTE_NAME"] = 33] = "AFTER_ATTRIBUTE_NAME";
- State2[State2["BEFORE_ATTRIBUTE_VALUE"] = 34] = "BEFORE_ATTRIBUTE_VALUE";
- State2[State2["ATTRIBUTE_VALUE_DOUBLE_QUOTED"] = 35] = "ATTRIBUTE_VALUE_DOUBLE_QUOTED";
- State2[State2["ATTRIBUTE_VALUE_SINGLE_QUOTED"] = 36] = "ATTRIBUTE_VALUE_SINGLE_QUOTED";
- State2[State2["ATTRIBUTE_VALUE_UNQUOTED"] = 37] = "ATTRIBUTE_VALUE_UNQUOTED";
- State2[State2["AFTER_ATTRIBUTE_VALUE_QUOTED"] = 38] = "AFTER_ATTRIBUTE_VALUE_QUOTED";
- State2[State2["SELF_CLOSING_START_TAG"] = 39] = "SELF_CLOSING_START_TAG";
- State2[State2["BOGUS_COMMENT"] = 40] = "BOGUS_COMMENT";
- State2[State2["MARKUP_DECLARATION_OPEN"] = 41] = "MARKUP_DECLARATION_OPEN";
- State2[State2["COMMENT_START"] = 42] = "COMMENT_START";
- State2[State2["COMMENT_START_DASH"] = 43] = "COMMENT_START_DASH";
- State2[State2["COMMENT"] = 44] = "COMMENT";
- State2[State2["COMMENT_LESS_THAN_SIGN"] = 45] = "COMMENT_LESS_THAN_SIGN";
- State2[State2["COMMENT_LESS_THAN_SIGN_BANG"] = 46] = "COMMENT_LESS_THAN_SIGN_BANG";
- State2[State2["COMMENT_LESS_THAN_SIGN_BANG_DASH"] = 47] = "COMMENT_LESS_THAN_SIGN_BANG_DASH";
- State2[State2["COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH"] = 48] = "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH";
- State2[State2["COMMENT_END_DASH"] = 49] = "COMMENT_END_DASH";
- State2[State2["COMMENT_END"] = 50] = "COMMENT_END";
- State2[State2["COMMENT_END_BANG"] = 51] = "COMMENT_END_BANG";
- State2[State2["DOCTYPE"] = 52] = "DOCTYPE";
- State2[State2["BEFORE_DOCTYPE_NAME"] = 53] = "BEFORE_DOCTYPE_NAME";
- State2[State2["DOCTYPE_NAME"] = 54] = "DOCTYPE_NAME";
- State2[State2["AFTER_DOCTYPE_NAME"] = 55] = "AFTER_DOCTYPE_NAME";
- State2[State2["AFTER_DOCTYPE_PUBLIC_KEYWORD"] = 56] = "AFTER_DOCTYPE_PUBLIC_KEYWORD";
- State2[State2["BEFORE_DOCTYPE_PUBLIC_IDENTIFIER"] = 57] = "BEFORE_DOCTYPE_PUBLIC_IDENTIFIER";
- State2[State2["DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED"] = 58] = "DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED";
- State2[State2["DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED"] = 59] = "DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED";
- State2[State2["AFTER_DOCTYPE_PUBLIC_IDENTIFIER"] = 60] = "AFTER_DOCTYPE_PUBLIC_IDENTIFIER";
- State2[State2["BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS"] = 61] = "BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS";
- State2[State2["AFTER_DOCTYPE_SYSTEM_KEYWORD"] = 62] = "AFTER_DOCTYPE_SYSTEM_KEYWORD";
- State2[State2["BEFORE_DOCTYPE_SYSTEM_IDENTIFIER"] = 63] = "BEFORE_DOCTYPE_SYSTEM_IDENTIFIER";
- State2[State2["DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED"] = 64] = "DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED";
- State2[State2["DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED"] = 65] = "DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED";
- State2[State2["AFTER_DOCTYPE_SYSTEM_IDENTIFIER"] = 66] = "AFTER_DOCTYPE_SYSTEM_IDENTIFIER";
- State2[State2["BOGUS_DOCTYPE"] = 67] = "BOGUS_DOCTYPE";
- State2[State2["CDATA_SECTION"] = 68] = "CDATA_SECTION";
- State2[State2["CDATA_SECTION_BRACKET"] = 69] = "CDATA_SECTION_BRACKET";
- State2[State2["CDATA_SECTION_END"] = 70] = "CDATA_SECTION_END";
- State2[State2["CHARACTER_REFERENCE"] = 71] = "CHARACTER_REFERENCE";
- State2[State2["NAMED_CHARACTER_REFERENCE"] = 72] = "NAMED_CHARACTER_REFERENCE";
- State2[State2["AMBIGUOUS_AMPERSAND"] = 73] = "AMBIGUOUS_AMPERSAND";
- State2[State2["NUMERIC_CHARACTER_REFERENCE"] = 74] = "NUMERIC_CHARACTER_REFERENCE";
- State2[State2["HEXADEMICAL_CHARACTER_REFERENCE_START"] = 75] = "HEXADEMICAL_CHARACTER_REFERENCE_START";
- State2[State2["HEXADEMICAL_CHARACTER_REFERENCE"] = 76] = "HEXADEMICAL_CHARACTER_REFERENCE";
- State2[State2["DECIMAL_CHARACTER_REFERENCE"] = 77] = "DECIMAL_CHARACTER_REFERENCE";
- State2[State2["NUMERIC_CHARACTER_REFERENCE_END"] = 78] = "NUMERIC_CHARACTER_REFERENCE_END";
- })(State || (State = {}));
- var TokenizerMode = {
- DATA: State.DATA,
- RCDATA: State.RCDATA,
- RAWTEXT: State.RAWTEXT,
- SCRIPT_DATA: State.SCRIPT_DATA,
- PLAINTEXT: State.PLAINTEXT,
- CDATA_SECTION: State.CDATA_SECTION
- };
- function isAsciiDigit(cp) {
- return cp >= CODE_POINTS.DIGIT_0 && cp <= CODE_POINTS.DIGIT_9;
- }
- function isAsciiUpper(cp) {
- return cp >= CODE_POINTS.LATIN_CAPITAL_A && cp <= CODE_POINTS.LATIN_CAPITAL_Z;
- }
- function isAsciiLower(cp) {
- return cp >= CODE_POINTS.LATIN_SMALL_A && cp <= CODE_POINTS.LATIN_SMALL_Z;
- }
- function isAsciiLetter(cp) {
- return isAsciiLower(cp) || isAsciiUpper(cp);
- }
- function isAsciiAlphaNumeric2(cp) {
- return isAsciiLetter(cp) || isAsciiDigit(cp);
- }
- function isAsciiUpperHexDigit(cp) {
- return cp >= CODE_POINTS.LATIN_CAPITAL_A && cp <= CODE_POINTS.LATIN_CAPITAL_F;
- }
- function isAsciiLowerHexDigit(cp) {
- return cp >= CODE_POINTS.LATIN_SMALL_A && cp <= CODE_POINTS.LATIN_SMALL_F;
- }
- function isAsciiHexDigit(cp) {
- return isAsciiDigit(cp) || isAsciiUpperHexDigit(cp) || isAsciiLowerHexDigit(cp);
- }
- function toAsciiLower(cp) {
- return cp + 32;
- }
- function isWhitespace(cp) {
- return cp === CODE_POINTS.SPACE || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.TABULATION || cp === CODE_POINTS.FORM_FEED;
- }
- function isEntityInAttributeInvalidEnd2(nextCp) {
- return nextCp === CODE_POINTS.EQUALS_SIGN || isAsciiAlphaNumeric2(nextCp);
- }
- function isScriptDataDoubleEscapeSequenceEnd(cp) {
- return isWhitespace(cp) || cp === CODE_POINTS.SOLIDUS || cp === CODE_POINTS.GREATER_THAN_SIGN;
- }
- var Tokenizer = class {
- constructor(options, handler) {
- this.options = options;
- this.handler = handler;
- this.paused = false;
- this.inLoop = false;
- this.inForeignNode = false;
- this.lastStartTagName = "";
- this.active = false;
- this.state = State.DATA;
- this.returnState = State.DATA;
- this.charRefCode = -1;
- this.consumedAfterSnapshot = -1;
- this.currentCharacterToken = null;
- this.currentToken = null;
- this.currentAttr = { name: "", value: "" };
- this.preprocessor = new Preprocessor(handler);
- this.currentLocation = this.getCurrentLocation(-1);
- }
- //Errors
- _err(code) {
- var _a2, _b;
- (_b = (_a2 = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a2, this.preprocessor.getError(code));
- }
- // NOTE: `offset` may never run across line boundaries.
- getCurrentLocation(offset) {
- if (!this.options.sourceCodeLocationInfo) {
- return null;
- }
- return {
- startLine: this.preprocessor.line,
- startCol: this.preprocessor.col - offset,
- startOffset: this.preprocessor.offset - offset,
- endLine: -1,
- endCol: -1,
- endOffset: -1
- };
- }
- _runParsingLoop() {
- if (this.inLoop)
- return;
- this.inLoop = true;
- while (this.active && !this.paused) {
- this.consumedAfterSnapshot = 0;
- const cp = this._consume();
- if (!this._ensureHibernation()) {
- this._callState(cp);
- }
- }
- this.inLoop = false;
- }
- //API
- pause() {
- this.paused = true;
- }
- resume(writeCallback) {
- if (!this.paused) {
- throw new Error("Parser was already resumed");
- }
- this.paused = false;
- if (this.inLoop)
- return;
- this._runParsingLoop();
- if (!this.paused) {
- writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
- }
- }
- write(chunk, isLastChunk, writeCallback) {
- this.active = true;
- this.preprocessor.write(chunk, isLastChunk);
- this._runParsingLoop();
- if (!this.paused) {
- writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
- }
- }
- insertHtmlAtCurrentPos(chunk) {
- this.active = true;
- this.preprocessor.insertHtmlAtCurrentPos(chunk);
- this._runParsingLoop();
- }
- //Hibernation
- _ensureHibernation() {
- if (this.preprocessor.endOfChunkHit) {
- this._unconsume(this.consumedAfterSnapshot);
- this.active = false;
- return true;
- }
- return false;
- }
- //Consumption
- _consume() {
- this.consumedAfterSnapshot++;
- return this.preprocessor.advance();
- }
- _unconsume(count) {
- this.consumedAfterSnapshot -= count;
- this.preprocessor.retreat(count);
- }
- _reconsumeInState(state, cp) {
- this.state = state;
- this._callState(cp);
- }
- _advanceBy(count) {
- this.consumedAfterSnapshot += count;
- for (let i = 0; i < count; i++) {
- this.preprocessor.advance();
- }
- }
- _consumeSequenceIfMatch(pattern, caseSensitive) {
- if (this.preprocessor.startsWith(pattern, caseSensitive)) {
- this._advanceBy(pattern.length - 1);
- return true;
- }
- return false;
- }
- //Token creation
- _createStartTagToken() {
- this.currentToken = {
- type: TokenType.START_TAG,
- tagName: "",
- tagID: TAG_ID.UNKNOWN,
- selfClosing: false,
- ackSelfClosing: false,
- attrs: [],
- location: this.getCurrentLocation(1)
- };
- }
- _createEndTagToken() {
- this.currentToken = {
- type: TokenType.END_TAG,
- tagName: "",
- tagID: TAG_ID.UNKNOWN,
- selfClosing: false,
- ackSelfClosing: false,
- attrs: [],
- location: this.getCurrentLocation(2)
- };
- }
- _createCommentToken(offset) {
- this.currentToken = {
- type: TokenType.COMMENT,
- data: "",
- location: this.getCurrentLocation(offset)
- };
- }
- _createDoctypeToken(initialName) {
- this.currentToken = {
- type: TokenType.DOCTYPE,
- name: initialName,
- forceQuirks: false,
- publicId: null,
- systemId: null,
- location: this.currentLocation
- };
- }
- _createCharacterToken(type, chars) {
- this.currentCharacterToken = {
- type,
- chars,
- location: this.currentLocation
- };
- }
- //Tag attributes
- _createAttr(attrNameFirstCh) {
- this.currentAttr = {
- name: attrNameFirstCh,
- value: ""
- };
- this.currentLocation = this.getCurrentLocation(0);
- }
- _leaveAttrName() {
- var _a2;
- var _b;
- const token = this.currentToken;
- if (getTokenAttr(token, this.currentAttr.name) === null) {
- token.attrs.push(this.currentAttr);
- if (token.location && this.currentLocation) {
- const attrLocations = (_a2 = (_b = token.location).attrs) !== null && _a2 !== void 0 ? _a2 : _b.attrs = /* @__PURE__ */ Object.create(null);
- attrLocations[this.currentAttr.name] = this.currentLocation;
- this._leaveAttrValue();
- }
- } else {
- this._err(ERR.duplicateAttribute);
- }
- }
- _leaveAttrValue() {
- if (this.currentLocation) {
- this.currentLocation.endLine = this.preprocessor.line;
- this.currentLocation.endCol = this.preprocessor.col;
- this.currentLocation.endOffset = this.preprocessor.offset;
- }
- }
- //Token emission
- prepareToken(ct) {
- this._emitCurrentCharacterToken(ct.location);
- this.currentToken = null;
- if (ct.location) {
- ct.location.endLine = this.preprocessor.line;
- ct.location.endCol = this.preprocessor.col + 1;
- ct.location.endOffset = this.preprocessor.offset + 1;
- }
- this.currentLocation = this.getCurrentLocation(-1);
- }
- emitCurrentTagToken() {
- const ct = this.currentToken;
- this.prepareToken(ct);
- ct.tagID = getTagID(ct.tagName);
- if (ct.type === TokenType.START_TAG) {
- this.lastStartTagName = ct.tagName;
- this.handler.onStartTag(ct);
- } else {
- if (ct.attrs.length > 0) {
- this._err(ERR.endTagWithAttributes);
- }
- if (ct.selfClosing) {
- this._err(ERR.endTagWithTrailingSolidus);
- }
- this.handler.onEndTag(ct);
- }
- this.preprocessor.dropParsedChunk();
- }
- emitCurrentComment(ct) {
- this.prepareToken(ct);
- this.handler.onComment(ct);
- this.preprocessor.dropParsedChunk();
- }
- emitCurrentDoctype(ct) {
- this.prepareToken(ct);
- this.handler.onDoctype(ct);
- this.preprocessor.dropParsedChunk();
- }
- _emitCurrentCharacterToken(nextLocation) {
- if (this.currentCharacterToken) {
- if (nextLocation && this.currentCharacterToken.location) {
- this.currentCharacterToken.location.endLine = nextLocation.startLine;
- this.currentCharacterToken.location.endCol = nextLocation.startCol;
- this.currentCharacterToken.location.endOffset = nextLocation.startOffset;
- }
- switch (this.currentCharacterToken.type) {
- case TokenType.CHARACTER: {
- this.handler.onCharacter(this.currentCharacterToken);
- break;
- }
- case TokenType.NULL_CHARACTER: {
- this.handler.onNullCharacter(this.currentCharacterToken);
- break;
- }
- case TokenType.WHITESPACE_CHARACTER: {
- this.handler.onWhitespaceCharacter(this.currentCharacterToken);
- break;
- }
- }
- this.currentCharacterToken = null;
- }
- }
- _emitEOFToken() {
- const location2 = this.getCurrentLocation(0);
- if (location2) {
- location2.endLine = location2.startLine;
- location2.endCol = location2.startCol;
- location2.endOffset = location2.startOffset;
- }
- this._emitCurrentCharacterToken(location2);
- this.handler.onEof({ type: TokenType.EOF, location: location2 });
- this.active = false;
- }
- //Characters emission
- //OPTIMIZATION: specification uses only one type of character tokens (one token per character).
- //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.
- //If we have a sequence of characters that belong to the same group, the parser can process it
- //as a single solid character token.
- //So, there are 3 types of character tokens in parse5:
- //1)TokenType.NULL_CHARACTER - \u0000-character sequences (e.g. '\u0000\u0000\u0000')
- //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\n \r\t \f')
- //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')
- _appendCharToCurrentCharacterToken(type, ch) {
- if (this.currentCharacterToken) {
- if (this.currentCharacterToken.type !== type) {
- this.currentLocation = this.getCurrentLocation(0);
- this._emitCurrentCharacterToken(this.currentLocation);
- this.preprocessor.dropParsedChunk();
- } else {
- this.currentCharacterToken.chars += ch;
- return;
- }
- }
- this._createCharacterToken(type, ch);
- }
- _emitCodePoint(cp) {
- const type = isWhitespace(cp) ? TokenType.WHITESPACE_CHARACTER : cp === CODE_POINTS.NULL ? TokenType.NULL_CHARACTER : TokenType.CHARACTER;
- this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));
- }
- //NOTE: used when we emit characters explicitly.
- //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.
- _emitChars(ch) {
- this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);
- }
- // Character reference helpers
- _matchNamedCharacterReference(cp) {
- let result = null;
- let excess = 0;
- let withoutSemicolon = false;
- for (let i = 0, current = decode_data_html_default[0]; i >= 0; cp = this._consume()) {
- i = determineBranch(decode_data_html_default, current, i + 1, cp);
- if (i < 0)
- break;
- excess += 1;
- current = decode_data_html_default[i];
- const masked = current & BinTrieFlags.VALUE_LENGTH;
- if (masked) {
- const valueLength = (masked >> 14) - 1;
- if (cp !== CODE_POINTS.SEMICOLON && this._isCharacterReferenceInAttribute() && isEntityInAttributeInvalidEnd2(this.preprocessor.peek(1))) {
- result = [CODE_POINTS.AMPERSAND];
- i += valueLength;
- } else {
- result = valueLength === 0 ? [decode_data_html_default[i] & ~BinTrieFlags.VALUE_LENGTH] : valueLength === 1 ? [decode_data_html_default[++i]] : [decode_data_html_default[++i], decode_data_html_default[++i]];
- excess = 0;
- withoutSemicolon = cp !== CODE_POINTS.SEMICOLON;
- }
- if (valueLength === 0) {
- this._consume();
- break;
- }
- }
- }
- this._unconsume(excess);
- if (withoutSemicolon && !this.preprocessor.endOfChunkHit) {
- this._err(ERR.missingSemicolonAfterCharacterReference);
- }
- this._unconsume(1);
- return result;
- }
- _isCharacterReferenceInAttribute() {
- return this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED;
- }
- _flushCodePointConsumedAsCharacterReference(cp) {
- if (this._isCharacterReferenceInAttribute()) {
- this.currentAttr.value += String.fromCodePoint(cp);
- } else {
- this._emitCodePoint(cp);
- }
- }
- // Calling states this way turns out to be much faster than any other approach.
- _callState(cp) {
- switch (this.state) {
- case State.DATA: {
- this._stateData(cp);
- break;
- }
- case State.RCDATA: {
- this._stateRcdata(cp);
- break;
- }
- case State.RAWTEXT: {
- this._stateRawtext(cp);
- break;
- }
- case State.SCRIPT_DATA: {
- this._stateScriptData(cp);
- break;
- }
- case State.PLAINTEXT: {
- this._statePlaintext(cp);
- break;
- }
- case State.TAG_OPEN: {
- this._stateTagOpen(cp);
- break;
- }
- case State.END_TAG_OPEN: {
- this._stateEndTagOpen(cp);
- break;
- }
- case State.TAG_NAME: {
- this._stateTagName(cp);
- break;
- }
- case State.RCDATA_LESS_THAN_SIGN: {
- this._stateRcdataLessThanSign(cp);
- break;
- }
- case State.RCDATA_END_TAG_OPEN: {
- this._stateRcdataEndTagOpen(cp);
- break;
- }
- case State.RCDATA_END_TAG_NAME: {
- this._stateRcdataEndTagName(cp);
- break;
- }
- case State.RAWTEXT_LESS_THAN_SIGN: {
- this._stateRawtextLessThanSign(cp);
- break;
- }
- case State.RAWTEXT_END_TAG_OPEN: {
- this._stateRawtextEndTagOpen(cp);
- break;
- }
- case State.RAWTEXT_END_TAG_NAME: {
- this._stateRawtextEndTagName(cp);
- break;
- }
- case State.SCRIPT_DATA_LESS_THAN_SIGN: {
- this._stateScriptDataLessThanSign(cp);
- break;
- }
- case State.SCRIPT_DATA_END_TAG_OPEN: {
- this._stateScriptDataEndTagOpen(cp);
- break;
- }
- case State.SCRIPT_DATA_END_TAG_NAME: {
- this._stateScriptDataEndTagName(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPE_START: {
- this._stateScriptDataEscapeStart(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPE_START_DASH: {
- this._stateScriptDataEscapeStartDash(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED: {
- this._stateScriptDataEscaped(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED_DASH: {
- this._stateScriptDataEscapedDash(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {
- this._stateScriptDataEscapedDashDash(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {
- this._stateScriptDataEscapedLessThanSign(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {
- this._stateScriptDataEscapedEndTagOpen(cp);
- break;
- }
- case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {
- this._stateScriptDataEscapedEndTagName(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {
- this._stateScriptDataDoubleEscapeStart(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPED: {
- this._stateScriptDataDoubleEscaped(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {
- this._stateScriptDataDoubleEscapedDash(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {
- this._stateScriptDataDoubleEscapedDashDash(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {
- this._stateScriptDataDoubleEscapedLessThanSign(cp);
- break;
- }
- case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {
- this._stateScriptDataDoubleEscapeEnd(cp);
- break;
- }
- case State.BEFORE_ATTRIBUTE_NAME: {
- this._stateBeforeAttributeName(cp);
- break;
- }
- case State.ATTRIBUTE_NAME: {
- this._stateAttributeName(cp);
- break;
- }
- case State.AFTER_ATTRIBUTE_NAME: {
- this._stateAfterAttributeName(cp);
- break;
- }
- case State.BEFORE_ATTRIBUTE_VALUE: {
- this._stateBeforeAttributeValue(cp);
- break;
- }
- case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {
- this._stateAttributeValueDoubleQuoted(cp);
- break;
- }
- case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {
- this._stateAttributeValueSingleQuoted(cp);
- break;
- }
- case State.ATTRIBUTE_VALUE_UNQUOTED: {
- this._stateAttributeValueUnquoted(cp);
- break;
- }
- case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {
- this._stateAfterAttributeValueQuoted(cp);
- break;
- }
- case State.SELF_CLOSING_START_TAG: {
- this._stateSelfClosingStartTag(cp);
- break;
- }
- case State.BOGUS_COMMENT: {
- this._stateBogusComment(cp);
- break;
- }
- case State.MARKUP_DECLARATION_OPEN: {
- this._stateMarkupDeclarationOpen(cp);
- break;
- }
- case State.COMMENT_START: {
- this._stateCommentStart(cp);
- break;
- }
- case State.COMMENT_START_DASH: {
- this._stateCommentStartDash(cp);
- break;
- }
- case State.COMMENT: {
- this._stateComment(cp);
- break;
- }
- case State.COMMENT_LESS_THAN_SIGN: {
- this._stateCommentLessThanSign(cp);
- break;
- }
- case State.COMMENT_LESS_THAN_SIGN_BANG: {
- this._stateCommentLessThanSignBang(cp);
- break;
- }
- case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {
- this._stateCommentLessThanSignBangDash(cp);
- break;
- }
- case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {
- this._stateCommentLessThanSignBangDashDash(cp);
- break;
- }
- case State.COMMENT_END_DASH: {
- this._stateCommentEndDash(cp);
- break;
- }
- case State.COMMENT_END: {
- this._stateCommentEnd(cp);
- break;
- }
- case State.COMMENT_END_BANG: {
- this._stateCommentEndBang(cp);
- break;
- }
- case State.DOCTYPE: {
- this._stateDoctype(cp);
- break;
- }
- case State.BEFORE_DOCTYPE_NAME: {
- this._stateBeforeDoctypeName(cp);
- break;
- }
- case State.DOCTYPE_NAME: {
- this._stateDoctypeName(cp);
- break;
- }
- case State.AFTER_DOCTYPE_NAME: {
- this._stateAfterDoctypeName(cp);
- break;
- }
- case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {
- this._stateAfterDoctypePublicKeyword(cp);
- break;
- }
- case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {
- this._stateBeforeDoctypePublicIdentifier(cp);
- break;
- }
- case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {
- this._stateDoctypePublicIdentifierDoubleQuoted(cp);
- break;
- }
- case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {
- this._stateDoctypePublicIdentifierSingleQuoted(cp);
- break;
- }
- case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {
- this._stateAfterDoctypePublicIdentifier(cp);
- break;
- }
- case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {
- this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);
- break;
- }
- case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {
- this._stateAfterDoctypeSystemKeyword(cp);
- break;
- }
- case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {
- this._stateBeforeDoctypeSystemIdentifier(cp);
- break;
- }
- case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {
- this._stateDoctypeSystemIdentifierDoubleQuoted(cp);
- break;
- }
- case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {
- this._stateDoctypeSystemIdentifierSingleQuoted(cp);
- break;
- }
- case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {
- this._stateAfterDoctypeSystemIdentifier(cp);
- break;
- }
- case State.BOGUS_DOCTYPE: {
- this._stateBogusDoctype(cp);
- break;
- }
- case State.CDATA_SECTION: {
- this._stateCdataSection(cp);
- break;
- }
- case State.CDATA_SECTION_BRACKET: {
- this._stateCdataSectionBracket(cp);
- break;
- }
- case State.CDATA_SECTION_END: {
- this._stateCdataSectionEnd(cp);
- break;
- }
- case State.CHARACTER_REFERENCE: {
- this._stateCharacterReference(cp);
- break;
- }
- case State.NAMED_CHARACTER_REFERENCE: {
- this._stateNamedCharacterReference(cp);
- break;
- }
- case State.AMBIGUOUS_AMPERSAND: {
- this._stateAmbiguousAmpersand(cp);
- break;
- }
- case State.NUMERIC_CHARACTER_REFERENCE: {
- this._stateNumericCharacterReference(cp);
- break;
- }
- case State.HEXADEMICAL_CHARACTER_REFERENCE_START: {
- this._stateHexademicalCharacterReferenceStart(cp);
- break;
- }
- case State.HEXADEMICAL_CHARACTER_REFERENCE: {
- this._stateHexademicalCharacterReference(cp);
- break;
- }
- case State.DECIMAL_CHARACTER_REFERENCE: {
- this._stateDecimalCharacterReference(cp);
- break;
- }
- case State.NUMERIC_CHARACTER_REFERENCE_END: {
- this._stateNumericCharacterReferenceEnd(cp);
- break;
- }
- default: {
- throw new Error("Unknown state");
- }
- }
- }
- // State machine
- // Data state
- //------------------------------------------------------------------
- _stateData(cp) {
- switch (cp) {
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.TAG_OPEN;
- break;
- }
- case CODE_POINTS.AMPERSAND: {
- this.returnState = State.DATA;
- this.state = State.CHARACTER_REFERENCE;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitCodePoint(cp);
- break;
- }
- case CODE_POINTS.EOF: {
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // RCDATA state
- //------------------------------------------------------------------
- _stateRcdata(cp) {
- switch (cp) {
- case CODE_POINTS.AMPERSAND: {
- this.returnState = State.RCDATA;
- this.state = State.CHARACTER_REFERENCE;
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.RCDATA_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // RAWTEXT state
- //------------------------------------------------------------------
- _stateRawtext(cp) {
- switch (cp) {
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.RAWTEXT_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data state
- //------------------------------------------------------------------
- _stateScriptData(cp) {
- switch (cp) {
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // PLAINTEXT state
- //------------------------------------------------------------------
- _statePlaintext(cp) {
- switch (cp) {
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // Tag open state
- //------------------------------------------------------------------
- _stateTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this._createStartTagToken();
- this.state = State.TAG_NAME;
- this._stateTagName(cp);
- } else
- switch (cp) {
- case CODE_POINTS.EXCLAMATION_MARK: {
- this.state = State.MARKUP_DECLARATION_OPEN;
- break;
- }
- case CODE_POINTS.SOLIDUS: {
- this.state = State.END_TAG_OPEN;
- break;
- }
- case CODE_POINTS.QUESTION_MARK: {
- this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);
- this._createCommentToken(1);
- this.state = State.BOGUS_COMMENT;
- this._stateBogusComment(cp);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofBeforeTagName);
- this._emitChars("<");
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.invalidFirstCharacterOfTagName);
- this._emitChars("<");
- this.state = State.DATA;
- this._stateData(cp);
- }
- }
- }
- // End tag open state
- //------------------------------------------------------------------
- _stateEndTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this._createEndTagToken();
- this.state = State.TAG_NAME;
- this._stateTagName(cp);
- } else
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingEndTagName);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofBeforeTagName);
- this._emitChars("</");
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.invalidFirstCharacterOfTagName);
- this._createCommentToken(2);
- this.state = State.BOGUS_COMMENT;
- this._stateBogusComment(cp);
- }
- }
- }
- // Tag name state
- //------------------------------------------------------------------
- _stateTagName(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- break;
- }
- case CODE_POINTS.SOLIDUS: {
- this.state = State.SELF_CLOSING_START_TAG;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.tagName += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
- }
- }
- }
- // RCDATA less-than sign state
- //------------------------------------------------------------------
- _stateRcdataLessThanSign(cp) {
- if (cp === CODE_POINTS.SOLIDUS) {
- this.state = State.RCDATA_END_TAG_OPEN;
- } else {
- this._emitChars("<");
- this.state = State.RCDATA;
- this._stateRcdata(cp);
- }
- }
- // RCDATA end tag open state
- //------------------------------------------------------------------
- _stateRcdataEndTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this.state = State.RCDATA_END_TAG_NAME;
- this._stateRcdataEndTagName(cp);
- } else {
- this._emitChars("</");
- this.state = State.RCDATA;
- this._stateRcdata(cp);
- }
- }
- handleSpecialEndTag(_cp) {
- if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {
- return !this._ensureHibernation();
- }
- this._createEndTagToken();
- const token = this.currentToken;
- token.tagName = this.lastStartTagName;
- const cp = this.preprocessor.peek(this.lastStartTagName.length);
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this._advanceBy(this.lastStartTagName.length);
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- return false;
- }
- case CODE_POINTS.SOLIDUS: {
- this._advanceBy(this.lastStartTagName.length);
- this.state = State.SELF_CLOSING_START_TAG;
- return false;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._advanceBy(this.lastStartTagName.length);
- this.emitCurrentTagToken();
- this.state = State.DATA;
- return false;
- }
- default: {
- return !this._ensureHibernation();
- }
- }
- }
- // RCDATA end tag name state
- //------------------------------------------------------------------
- _stateRcdataEndTagName(cp) {
- if (this.handleSpecialEndTag(cp)) {
- this._emitChars("</");
- this.state = State.RCDATA;
- this._stateRcdata(cp);
- }
- }
- // RAWTEXT less-than sign state
- //------------------------------------------------------------------
- _stateRawtextLessThanSign(cp) {
- if (cp === CODE_POINTS.SOLIDUS) {
- this.state = State.RAWTEXT_END_TAG_OPEN;
- } else {
- this._emitChars("<");
- this.state = State.RAWTEXT;
- this._stateRawtext(cp);
- }
- }
- // RAWTEXT end tag open state
- //------------------------------------------------------------------
- _stateRawtextEndTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this.state = State.RAWTEXT_END_TAG_NAME;
- this._stateRawtextEndTagName(cp);
- } else {
- this._emitChars("</");
- this.state = State.RAWTEXT;
- this._stateRawtext(cp);
- }
- }
- // RAWTEXT end tag name state
- //------------------------------------------------------------------
- _stateRawtextEndTagName(cp) {
- if (this.handleSpecialEndTag(cp)) {
- this._emitChars("</");
- this.state = State.RAWTEXT;
- this._stateRawtext(cp);
- }
- }
- // Script data less-than sign state
- //------------------------------------------------------------------
- _stateScriptDataLessThanSign(cp) {
- switch (cp) {
- case CODE_POINTS.SOLIDUS: {
- this.state = State.SCRIPT_DATA_END_TAG_OPEN;
- break;
- }
- case CODE_POINTS.EXCLAMATION_MARK: {
- this.state = State.SCRIPT_DATA_ESCAPE_START;
- this._emitChars("<!");
- break;
- }
- default: {
- this._emitChars("<");
- this.state = State.SCRIPT_DATA;
- this._stateScriptData(cp);
- }
- }
- }
- // Script data end tag open state
- //------------------------------------------------------------------
- _stateScriptDataEndTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this.state = State.SCRIPT_DATA_END_TAG_NAME;
- this._stateScriptDataEndTagName(cp);
- } else {
- this._emitChars("</");
- this.state = State.SCRIPT_DATA;
- this._stateScriptData(cp);
- }
- }
- // Script data end tag name state
- //------------------------------------------------------------------
- _stateScriptDataEndTagName(cp) {
- if (this.handleSpecialEndTag(cp)) {
- this._emitChars("</");
- this.state = State.SCRIPT_DATA;
- this._stateScriptData(cp);
- }
- }
- // Script data escape start state
- //------------------------------------------------------------------
- _stateScriptDataEscapeStart(cp) {
- if (cp === CODE_POINTS.HYPHEN_MINUS) {
- this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;
- this._emitChars("-");
- } else {
- this.state = State.SCRIPT_DATA;
- this._stateScriptData(cp);
- }
- }
- // Script data escape start dash state
- //------------------------------------------------------------------
- _stateScriptDataEscapeStartDash(cp) {
- if (cp === CODE_POINTS.HYPHEN_MINUS) {
- this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
- this._emitChars("-");
- } else {
- this.state = State.SCRIPT_DATA;
- this._stateScriptData(cp);
- }
- }
- // Script data escaped state
- //------------------------------------------------------------------
- _stateScriptDataEscaped(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.SCRIPT_DATA_ESCAPED_DASH;
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data escaped dash state
- //------------------------------------------------------------------
- _stateScriptDataEscapedDash(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data escaped dash dash state
- //------------------------------------------------------------------
- _stateScriptDataEscapedDashDash(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.SCRIPT_DATA;
- this._emitChars(">");
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data escaped less-than sign state
- //------------------------------------------------------------------
- _stateScriptDataEscapedLessThanSign(cp) {
- if (cp === CODE_POINTS.SOLIDUS) {
- this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;
- } else if (isAsciiLetter(cp)) {
- this._emitChars("<");
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;
- this._stateScriptDataDoubleEscapeStart(cp);
- } else {
- this._emitChars("<");
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._stateScriptDataEscaped(cp);
- }
- }
- // Script data escaped end tag open state
- //------------------------------------------------------------------
- _stateScriptDataEscapedEndTagOpen(cp) {
- if (isAsciiLetter(cp)) {
- this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;
- this._stateScriptDataEscapedEndTagName(cp);
- } else {
- this._emitChars("</");
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._stateScriptDataEscaped(cp);
- }
- }
- // Script data escaped end tag name state
- //------------------------------------------------------------------
- _stateScriptDataEscapedEndTagName(cp) {
- if (this.handleSpecialEndTag(cp)) {
- this._emitChars("</");
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._stateScriptDataEscaped(cp);
- }
- }
- // Script data double escape start state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscapeStart(cp) {
- if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
- this._emitCodePoint(cp);
- for (let i = 0; i < SEQUENCES.SCRIPT.length; i++) {
- this._emitCodePoint(this._consume());
- }
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- } else if (!this._ensureHibernation()) {
- this.state = State.SCRIPT_DATA_ESCAPED;
- this._stateScriptDataEscaped(cp);
- }
- }
- // Script data double escaped state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscaped(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
- this._emitChars("<");
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data double escaped dash state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscapedDash(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
- this._emitChars("<");
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data double escaped dash dash state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscapedDashDash(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this._emitChars("-");
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
- this._emitChars("<");
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.SCRIPT_DATA;
- this._emitChars(">");
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._emitChars(REPLACEMENT_CHARACTER);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInScriptHtmlCommentLikeText);
- this._emitEOFToken();
- break;
- }
- default: {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._emitCodePoint(cp);
- }
- }
- }
- // Script data double escaped less-than sign state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscapedLessThanSign(cp) {
- if (cp === CODE_POINTS.SOLIDUS) {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;
- this._emitChars("/");
- } else {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._stateScriptDataDoubleEscaped(cp);
- }
- }
- // Script data double escape end state
- //------------------------------------------------------------------
- _stateScriptDataDoubleEscapeEnd(cp) {
- if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
- this._emitCodePoint(cp);
- for (let i = 0; i < SEQUENCES.SCRIPT.length; i++) {
- this._emitCodePoint(this._consume());
- }
- this.state = State.SCRIPT_DATA_ESCAPED;
- } else if (!this._ensureHibernation()) {
- this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
- this._stateScriptDataDoubleEscaped(cp);
- }
- }
- // Before attribute name state
- //------------------------------------------------------------------
- _stateBeforeAttributeName(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.SOLIDUS:
- case CODE_POINTS.GREATER_THAN_SIGN:
- case CODE_POINTS.EOF: {
- this.state = State.AFTER_ATTRIBUTE_NAME;
- this._stateAfterAttributeName(cp);
- break;
- }
- case CODE_POINTS.EQUALS_SIGN: {
- this._err(ERR.unexpectedEqualsSignBeforeAttributeName);
- this._createAttr("=");
- this.state = State.ATTRIBUTE_NAME;
- break;
- }
- default: {
- this._createAttr("");
- this.state = State.ATTRIBUTE_NAME;
- this._stateAttributeName(cp);
- }
- }
- }
- // Attribute name state
- //------------------------------------------------------------------
- _stateAttributeName(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED:
- case CODE_POINTS.SOLIDUS:
- case CODE_POINTS.GREATER_THAN_SIGN:
- case CODE_POINTS.EOF: {
- this._leaveAttrName();
- this.state = State.AFTER_ATTRIBUTE_NAME;
- this._stateAfterAttributeName(cp);
- break;
- }
- case CODE_POINTS.EQUALS_SIGN: {
- this._leaveAttrName();
- this.state = State.BEFORE_ATTRIBUTE_VALUE;
- break;
- }
- case CODE_POINTS.QUOTATION_MARK:
- case CODE_POINTS.APOSTROPHE:
- case CODE_POINTS.LESS_THAN_SIGN: {
- this._err(ERR.unexpectedCharacterInAttributeName);
- this.currentAttr.name += String.fromCodePoint(cp);
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.currentAttr.name += REPLACEMENT_CHARACTER;
- break;
- }
- default: {
- this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
- }
- }
- }
- // After attribute name state
- //------------------------------------------------------------------
- _stateAfterAttributeName(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.SOLIDUS: {
- this.state = State.SELF_CLOSING_START_TAG;
- break;
- }
- case CODE_POINTS.EQUALS_SIGN: {
- this.state = State.BEFORE_ATTRIBUTE_VALUE;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this._createAttr("");
- this.state = State.ATTRIBUTE_NAME;
- this._stateAttributeName(cp);
- }
- }
- }
- // Before attribute value state
- //------------------------------------------------------------------
- _stateBeforeAttributeValue(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingAttributeValue);
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- default: {
- this.state = State.ATTRIBUTE_VALUE_UNQUOTED;
- this._stateAttributeValueUnquoted(cp);
- }
- }
- }
- // Attribute value (double-quoted) state
- //------------------------------------------------------------------
- _stateAttributeValueDoubleQuoted(cp) {
- switch (cp) {
- case CODE_POINTS.QUOTATION_MARK: {
- this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
- break;
- }
- case CODE_POINTS.AMPERSAND: {
- this.returnState = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
- this.state = State.CHARACTER_REFERENCE;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.currentAttr.value += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this.currentAttr.value += String.fromCodePoint(cp);
- }
- }
- }
- // Attribute value (single-quoted) state
- //------------------------------------------------------------------
- _stateAttributeValueSingleQuoted(cp) {
- switch (cp) {
- case CODE_POINTS.APOSTROPHE: {
- this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
- break;
- }
- case CODE_POINTS.AMPERSAND: {
- this.returnState = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;
- this.state = State.CHARACTER_REFERENCE;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.currentAttr.value += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this.currentAttr.value += String.fromCodePoint(cp);
- }
- }
- }
- // Attribute value (unquoted) state
- //------------------------------------------------------------------
- _stateAttributeValueUnquoted(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this._leaveAttrValue();
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- break;
- }
- case CODE_POINTS.AMPERSAND: {
- this.returnState = State.ATTRIBUTE_VALUE_UNQUOTED;
- this.state = State.CHARACTER_REFERENCE;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._leaveAttrValue();
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this.currentAttr.value += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.QUOTATION_MARK:
- case CODE_POINTS.APOSTROPHE:
- case CODE_POINTS.LESS_THAN_SIGN:
- case CODE_POINTS.EQUALS_SIGN:
- case CODE_POINTS.GRAVE_ACCENT: {
- this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);
- this.currentAttr.value += String.fromCodePoint(cp);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this.currentAttr.value += String.fromCodePoint(cp);
- }
- }
- }
- // After attribute value (quoted) state
- //------------------------------------------------------------------
- _stateAfterAttributeValueQuoted(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this._leaveAttrValue();
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- break;
- }
- case CODE_POINTS.SOLIDUS: {
- this._leaveAttrValue();
- this.state = State.SELF_CLOSING_START_TAG;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._leaveAttrValue();
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingWhitespaceBetweenAttributes);
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- this._stateBeforeAttributeName(cp);
- }
- }
- }
- // Self-closing start tag state
- //------------------------------------------------------------------
- _stateSelfClosingStartTag(cp) {
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- const token = this.currentToken;
- token.selfClosing = true;
- this.state = State.DATA;
- this.emitCurrentTagToken();
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInTag);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.unexpectedSolidusInTag);
- this.state = State.BEFORE_ATTRIBUTE_NAME;
- this._stateBeforeAttributeName(cp);
- }
- }
- }
- // Bogus comment state
- //------------------------------------------------------------------
- _stateBogusComment(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentComment(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.data += REPLACEMENT_CHARACTER;
- break;
- }
- default: {
- token.data += String.fromCodePoint(cp);
- }
- }
- }
- // Markup declaration open state
- //------------------------------------------------------------------
- _stateMarkupDeclarationOpen(cp) {
- if (this._consumeSequenceIfMatch(SEQUENCES.DASH_DASH, true)) {
- this._createCommentToken(SEQUENCES.DASH_DASH.length + 1);
- this.state = State.COMMENT_START;
- } else if (this._consumeSequenceIfMatch(SEQUENCES.DOCTYPE, false)) {
- this.currentLocation = this.getCurrentLocation(SEQUENCES.DOCTYPE.length + 1);
- this.state = State.DOCTYPE;
- } else if (this._consumeSequenceIfMatch(SEQUENCES.CDATA_START, true)) {
- if (this.inForeignNode) {
- this.state = State.CDATA_SECTION;
- } else {
- this._err(ERR.cdataInHtmlContent);
- this._createCommentToken(SEQUENCES.CDATA_START.length + 1);
- this.currentToken.data = "[CDATA[";
- this.state = State.BOGUS_COMMENT;
- }
- } else if (!this._ensureHibernation()) {
- this._err(ERR.incorrectlyOpenedComment);
- this._createCommentToken(2);
- this.state = State.BOGUS_COMMENT;
- this._stateBogusComment(cp);
- }
- }
- // Comment start state
- //------------------------------------------------------------------
- _stateCommentStart(cp) {
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.COMMENT_START_DASH;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptClosingOfEmptyComment);
- this.state = State.DATA;
- const token = this.currentToken;
- this.emitCurrentComment(token);
- break;
- }
- default: {
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // Comment start dash state
- //------------------------------------------------------------------
- _stateCommentStartDash(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.COMMENT_END;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptClosingOfEmptyComment);
- this.state = State.DATA;
- this.emitCurrentComment(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInComment);
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.data += "-";
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // Comment state
- //------------------------------------------------------------------
- _stateComment(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.COMMENT_END_DASH;
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- token.data += "<";
- this.state = State.COMMENT_LESS_THAN_SIGN;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.data += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInComment);
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.data += String.fromCodePoint(cp);
- }
- }
- }
- // Comment less-than sign state
- //------------------------------------------------------------------
- _stateCommentLessThanSign(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.EXCLAMATION_MARK: {
- token.data += "!";
- this.state = State.COMMENT_LESS_THAN_SIGN_BANG;
- break;
- }
- case CODE_POINTS.LESS_THAN_SIGN: {
- token.data += "<";
- break;
- }
- default: {
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // Comment less-than sign bang state
- //------------------------------------------------------------------
- _stateCommentLessThanSignBang(cp) {
- if (cp === CODE_POINTS.HYPHEN_MINUS) {
- this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;
- } else {
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- // Comment less-than sign bang dash state
- //------------------------------------------------------------------
- _stateCommentLessThanSignBangDash(cp) {
- if (cp === CODE_POINTS.HYPHEN_MINUS) {
- this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;
- } else {
- this.state = State.COMMENT_END_DASH;
- this._stateCommentEndDash(cp);
- }
- }
- // Comment less-than sign bang dash dash state
- //------------------------------------------------------------------
- _stateCommentLessThanSignBangDashDash(cp) {
- if (cp !== CODE_POINTS.GREATER_THAN_SIGN && cp !== CODE_POINTS.EOF) {
- this._err(ERR.nestedComment);
- }
- this.state = State.COMMENT_END;
- this._stateCommentEnd(cp);
- }
- // Comment end dash state
- //------------------------------------------------------------------
- _stateCommentEndDash(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- this.state = State.COMMENT_END;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInComment);
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.data += "-";
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // Comment end state
- //------------------------------------------------------------------
- _stateCommentEnd(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentComment(token);
- break;
- }
- case CODE_POINTS.EXCLAMATION_MARK: {
- this.state = State.COMMENT_END_BANG;
- break;
- }
- case CODE_POINTS.HYPHEN_MINUS: {
- token.data += "-";
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInComment);
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.data += "--";
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // Comment end bang state
- //------------------------------------------------------------------
- _stateCommentEndBang(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.HYPHEN_MINUS: {
- token.data += "--!";
- this.state = State.COMMENT_END_DASH;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.incorrectlyClosedComment);
- this.state = State.DATA;
- this.emitCurrentComment(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInComment);
- this.emitCurrentComment(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.data += "--!";
- this.state = State.COMMENT;
- this._stateComment(cp);
- }
- }
- }
- // DOCTYPE state
- //------------------------------------------------------------------
- _stateDoctype(cp) {
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.BEFORE_DOCTYPE_NAME;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.BEFORE_DOCTYPE_NAME;
- this._stateBeforeDoctypeName(cp);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- this._createDoctypeToken(null);
- const token = this.currentToken;
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingWhitespaceBeforeDoctypeName);
- this.state = State.BEFORE_DOCTYPE_NAME;
- this._stateBeforeDoctypeName(cp);
- }
- }
- }
- // Before DOCTYPE name state
- //------------------------------------------------------------------
- _stateBeforeDoctypeName(cp) {
- if (isAsciiUpper(cp)) {
- this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));
- this.state = State.DOCTYPE_NAME;
- } else
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- this._createDoctypeToken(REPLACEMENT_CHARACTER);
- this.state = State.DOCTYPE_NAME;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingDoctypeName);
- this._createDoctypeToken(null);
- const token = this.currentToken;
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- this._createDoctypeToken(null);
- const token = this.currentToken;
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._createDoctypeToken(String.fromCodePoint(cp));
- this.state = State.DOCTYPE_NAME;
- }
- }
- }
- // DOCTYPE name state
- //------------------------------------------------------------------
- _stateDoctypeName(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.AFTER_DOCTYPE_NAME;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.name += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
- }
- }
- }
- // After DOCTYPE name state
- //------------------------------------------------------------------
- _stateAfterDoctypeName(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- if (this._consumeSequenceIfMatch(SEQUENCES.PUBLIC, false)) {
- this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;
- } else if (this._consumeSequenceIfMatch(SEQUENCES.SYSTEM, false)) {
- this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;
- } else if (!this._ensureHibernation()) {
- this._err(ERR.invalidCharacterSequenceAfterDoctypeName);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- }
- // After DOCTYPE public keyword state
- //------------------------------------------------------------------
- _stateAfterDoctypePublicKeyword(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
- token.publicId = "";
- this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
- token.publicId = "";
- this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // Before DOCTYPE public identifier state
- //------------------------------------------------------------------
- _stateBeforeDoctypePublicIdentifier(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- token.publicId = "";
- this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- token.publicId = "";
- this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // DOCTYPE public identifier (double-quoted) state
- //------------------------------------------------------------------
- _stateDoctypePublicIdentifierDoubleQuoted(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.QUOTATION_MARK: {
- this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.publicId += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.publicId += String.fromCodePoint(cp);
- }
- }
- }
- // DOCTYPE public identifier (single-quoted) state
- //------------------------------------------------------------------
- _stateDoctypePublicIdentifierSingleQuoted(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.APOSTROPHE: {
- this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.publicId += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptDoctypePublicIdentifier);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.publicId += String.fromCodePoint(cp);
- }
- }
- }
- // After DOCTYPE public identifier state
- //------------------------------------------------------------------
- _stateAfterDoctypePublicIdentifier(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // Between DOCTYPE public and system identifiers state
- //------------------------------------------------------------------
- _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // After DOCTYPE system keyword state
- //------------------------------------------------------------------
- _stateAfterDoctypeSystemKeyword(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // Before DOCTYPE system identifier state
- //------------------------------------------------------------------
- _stateBeforeDoctypeSystemIdentifier(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.QUOTATION_MARK: {
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
- break;
- }
- case CODE_POINTS.APOSTROPHE: {
- token.systemId = "";
- this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.missingDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.DATA;
- this.emitCurrentDoctype(token);
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // DOCTYPE system identifier (double-quoted) state
- //------------------------------------------------------------------
- _stateDoctypeSystemIdentifierDoubleQuoted(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.QUOTATION_MARK: {
- this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.systemId += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.systemId += String.fromCodePoint(cp);
- }
- }
- }
- // DOCTYPE system identifier (single-quoted) state
- //------------------------------------------------------------------
- _stateDoctypeSystemIdentifierSingleQuoted(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.APOSTROPHE: {
- this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- token.systemId += REPLACEMENT_CHARACTER;
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this._err(ERR.abruptDoctypeSystemIdentifier);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- token.systemId += String.fromCodePoint(cp);
- }
- }
- }
- // After DOCTYPE system identifier state
- //------------------------------------------------------------------
- _stateAfterDoctypeSystemIdentifier(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.SPACE:
- case CODE_POINTS.LINE_FEED:
- case CODE_POINTS.TABULATION:
- case CODE_POINTS.FORM_FEED: {
- break;
- }
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInDoctype);
- token.forceQuirks = true;
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default: {
- this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);
- this.state = State.BOGUS_DOCTYPE;
- this._stateBogusDoctype(cp);
- }
- }
- }
- // Bogus DOCTYPE state
- //------------------------------------------------------------------
- _stateBogusDoctype(cp) {
- const token = this.currentToken;
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.emitCurrentDoctype(token);
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.NULL: {
- this._err(ERR.unexpectedNullCharacter);
- break;
- }
- case CODE_POINTS.EOF: {
- this.emitCurrentDoctype(token);
- this._emitEOFToken();
- break;
- }
- default:
- }
- }
- // CDATA section state
- //------------------------------------------------------------------
- _stateCdataSection(cp) {
- switch (cp) {
- case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
- this.state = State.CDATA_SECTION_BRACKET;
- break;
- }
- case CODE_POINTS.EOF: {
- this._err(ERR.eofInCdata);
- this._emitEOFToken();
- break;
- }
- default: {
- this._emitCodePoint(cp);
- }
- }
- }
- // CDATA section bracket state
- //------------------------------------------------------------------
- _stateCdataSectionBracket(cp) {
- if (cp === CODE_POINTS.RIGHT_SQUARE_BRACKET) {
- this.state = State.CDATA_SECTION_END;
- } else {
- this._emitChars("]");
- this.state = State.CDATA_SECTION;
- this._stateCdataSection(cp);
- }
- }
- // CDATA section end state
- //------------------------------------------------------------------
- _stateCdataSectionEnd(cp) {
- switch (cp) {
- case CODE_POINTS.GREATER_THAN_SIGN: {
- this.state = State.DATA;
- break;
- }
- case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
- this._emitChars("]");
- break;
- }
- default: {
- this._emitChars("]]");
- this.state = State.CDATA_SECTION;
- this._stateCdataSection(cp);
- }
- }
- }
- // Character reference state
- //------------------------------------------------------------------
- _stateCharacterReference(cp) {
- if (cp === CODE_POINTS.NUMBER_SIGN) {
- this.state = State.NUMERIC_CHARACTER_REFERENCE;
- } else if (isAsciiAlphaNumeric2(cp)) {
- this.state = State.NAMED_CHARACTER_REFERENCE;
- this._stateNamedCharacterReference(cp);
- } else {
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
- this._reconsumeInState(this.returnState, cp);
- }
- }
- // Named character reference state
- //------------------------------------------------------------------
- _stateNamedCharacterReference(cp) {
- const matchResult = this._matchNamedCharacterReference(cp);
- if (this._ensureHibernation()) {
- } else if (matchResult) {
- for (let i = 0; i < matchResult.length; i++) {
- this._flushCodePointConsumedAsCharacterReference(matchResult[i]);
- }
- this.state = this.returnState;
- } else {
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
- this.state = State.AMBIGUOUS_AMPERSAND;
- }
- }
- // Ambiguos ampersand state
- //------------------------------------------------------------------
- _stateAmbiguousAmpersand(cp) {
- if (isAsciiAlphaNumeric2(cp)) {
- this._flushCodePointConsumedAsCharacterReference(cp);
- } else {
- if (cp === CODE_POINTS.SEMICOLON) {
- this._err(ERR.unknownNamedCharacterReference);
- }
- this._reconsumeInState(this.returnState, cp);
- }
- }
- // Numeric character reference state
- //------------------------------------------------------------------
- _stateNumericCharacterReference(cp) {
- this.charRefCode = 0;
- if (cp === CODE_POINTS.LATIN_SMALL_X || cp === CODE_POINTS.LATIN_CAPITAL_X) {
- this.state = State.HEXADEMICAL_CHARACTER_REFERENCE_START;
- } else if (isAsciiDigit(cp)) {
- this.state = State.DECIMAL_CHARACTER_REFERENCE;
- this._stateDecimalCharacterReference(cp);
- } else {
- this._err(ERR.absenceOfDigitsInNumericCharacterReference);
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.NUMBER_SIGN);
- this._reconsumeInState(this.returnState, cp);
- }
- }
- // Hexademical character reference start state
- //------------------------------------------------------------------
- _stateHexademicalCharacterReferenceStart(cp) {
- if (isAsciiHexDigit(cp)) {
- this.state = State.HEXADEMICAL_CHARACTER_REFERENCE;
- this._stateHexademicalCharacterReference(cp);
- } else {
- this._err(ERR.absenceOfDigitsInNumericCharacterReference);
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
- this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.NUMBER_SIGN);
- this._unconsume(2);
- this.state = this.returnState;
- }
- }
- // Hexademical character reference state
- //------------------------------------------------------------------
- _stateHexademicalCharacterReference(cp) {
- if (isAsciiUpperHexDigit(cp)) {
- this.charRefCode = this.charRefCode * 16 + cp - 55;
- } else if (isAsciiLowerHexDigit(cp)) {
- this.charRefCode = this.charRefCode * 16 + cp - 87;
- } else if (isAsciiDigit(cp)) {
- this.charRefCode = this.charRefCode * 16 + cp - 48;
- } else if (cp === CODE_POINTS.SEMICOLON) {
- this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
- } else {
- this._err(ERR.missingSemicolonAfterCharacterReference);
- this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
- this._stateNumericCharacterReferenceEnd(cp);
- }
- }
- // Decimal character reference state
- //------------------------------------------------------------------
- _stateDecimalCharacterReference(cp) {
- if (isAsciiDigit(cp)) {
- this.charRefCode = this.charRefCode * 10 + cp - 48;
- } else if (cp === CODE_POINTS.SEMICOLON) {
- this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
- } else {
- this._err(ERR.missingSemicolonAfterCharacterReference);
- this.state = State.NUMERIC_CHARACTER_REFERENCE_END;
- this._stateNumericCharacterReferenceEnd(cp);
- }
- }
- // Numeric character reference end state
- //------------------------------------------------------------------
- _stateNumericCharacterReferenceEnd(cp) {
- if (this.charRefCode === CODE_POINTS.NULL) {
- this._err(ERR.nullCharacterReference);
- this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
- } else if (this.charRefCode > 1114111) {
- this._err(ERR.characterReferenceOutsideUnicodeRange);
- this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
- } else if (isSurrogate(this.charRefCode)) {
- this._err(ERR.surrogateCharacterReference);
- this.charRefCode = CODE_POINTS.REPLACEMENT_CHARACTER;
- } else if (isUndefinedCodePoint(this.charRefCode)) {
- this._err(ERR.noncharacterCharacterReference);
- } else if (isControlCodePoint(this.charRefCode) || this.charRefCode === CODE_POINTS.CARRIAGE_RETURN) {
- this._err(ERR.controlCharacterReference);
- const replacement = C1_CONTROLS_REFERENCE_REPLACEMENTS.get(this.charRefCode);
- if (replacement !== void 0) {
- this.charRefCode = replacement;
- }
- }
- this._flushCodePointConsumedAsCharacterReference(this.charRefCode);
- this._reconsumeInState(this.returnState, cp);
- }
- };
- // node_modules/parse5/dist/parser/open-element-stack.js
- var IMPLICIT_END_TAG_REQUIRED = /* @__PURE__ */ new Set([TAG_ID.DD, TAG_ID.DT, TAG_ID.LI, TAG_ID.OPTGROUP, TAG_ID.OPTION, TAG_ID.P, TAG_ID.RB, TAG_ID.RP, TAG_ID.RT, TAG_ID.RTC]);
- var IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = /* @__PURE__ */ new Set([
- ...IMPLICIT_END_TAG_REQUIRED,
- TAG_ID.CAPTION,
- TAG_ID.COLGROUP,
- TAG_ID.TBODY,
- TAG_ID.TD,
- TAG_ID.TFOOT,
- TAG_ID.TH,
- TAG_ID.THEAD,
- TAG_ID.TR
- ]);
- var SCOPING_ELEMENT_NS = /* @__PURE__ */ new Map([
- [TAG_ID.APPLET, NS.HTML],
- [TAG_ID.CAPTION, NS.HTML],
- [TAG_ID.HTML, NS.HTML],
- [TAG_ID.MARQUEE, NS.HTML],
- [TAG_ID.OBJECT, NS.HTML],
- [TAG_ID.TABLE, NS.HTML],
- [TAG_ID.TD, NS.HTML],
- [TAG_ID.TEMPLATE, NS.HTML],
- [TAG_ID.TH, NS.HTML],
- [TAG_ID.ANNOTATION_XML, NS.MATHML],
- [TAG_ID.MI, NS.MATHML],
- [TAG_ID.MN, NS.MATHML],
- [TAG_ID.MO, NS.MATHML],
- [TAG_ID.MS, NS.MATHML],
- [TAG_ID.MTEXT, NS.MATHML],
- [TAG_ID.DESC, NS.SVG],
- [TAG_ID.FOREIGN_OBJECT, NS.SVG],
- [TAG_ID.TITLE, NS.SVG]
- ]);
- var NAMED_HEADERS = [TAG_ID.H1, TAG_ID.H2, TAG_ID.H3, TAG_ID.H4, TAG_ID.H5, TAG_ID.H6];
- var TABLE_ROW_CONTEXT = [TAG_ID.TR, TAG_ID.TEMPLATE, TAG_ID.HTML];
- var TABLE_BODY_CONTEXT = [TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TEMPLATE, TAG_ID.HTML];
- var TABLE_CONTEXT = [TAG_ID.TABLE, TAG_ID.TEMPLATE, TAG_ID.HTML];
- var TABLE_CELLS = [TAG_ID.TD, TAG_ID.TH];
- var OpenElementStack = class {
- get currentTmplContentOrNode() {
- return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
- }
- constructor(document, treeAdapter, handler) {
- this.treeAdapter = treeAdapter;
- this.handler = handler;
- this.items = [];
- this.tagIDs = [];
- this.stackTop = -1;
- this.tmplCount = 0;
- this.currentTagId = TAG_ID.UNKNOWN;
- this.current = document;
- }
- //Index of element
- _indexOf(element) {
- return this.items.lastIndexOf(element, this.stackTop);
- }
- //Update current element
- _isInTemplate() {
- return this.currentTagId === TAG_ID.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;
- }
- _updateCurrentElement() {
- this.current = this.items[this.stackTop];
- this.currentTagId = this.tagIDs[this.stackTop];
- }
- //Mutations
- push(element, tagID) {
- this.stackTop++;
- this.items[this.stackTop] = element;
- this.current = element;
- this.tagIDs[this.stackTop] = tagID;
- this.currentTagId = tagID;
- if (this._isInTemplate()) {
- this.tmplCount++;
- }
- this.handler.onItemPush(element, tagID, true);
- }
- pop() {
- const popped = this.current;
- if (this.tmplCount > 0 && this._isInTemplate()) {
- this.tmplCount--;
- }
- this.stackTop--;
- this._updateCurrentElement();
- this.handler.onItemPop(popped, true);
- }
- replace(oldElement, newElement) {
- const idx = this._indexOf(oldElement);
- this.items[idx] = newElement;
- if (idx === this.stackTop) {
- this.current = newElement;
- }
- }
- insertAfter(referenceElement, newElement, newElementID) {
- const insertionIdx = this._indexOf(referenceElement) + 1;
- this.items.splice(insertionIdx, 0, newElement);
- this.tagIDs.splice(insertionIdx, 0, newElementID);
- this.stackTop++;
- if (insertionIdx === this.stackTop) {
- this._updateCurrentElement();
- }
- this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);
- }
- popUntilTagNamePopped(tagName) {
- let targetIdx = this.stackTop + 1;
- do {
- targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);
- } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);
- this.shortenToLength(targetIdx < 0 ? 0 : targetIdx);
- }
- shortenToLength(idx) {
- while (this.stackTop >= idx) {
- const popped = this.current;
- if (this.tmplCount > 0 && this._isInTemplate()) {
- this.tmplCount -= 1;
- }
- this.stackTop--;
- this._updateCurrentElement();
- this.handler.onItemPop(popped, this.stackTop < idx);
- }
- }
- popUntilElementPopped(element) {
- const idx = this._indexOf(element);
- this.shortenToLength(idx < 0 ? 0 : idx);
- }
- popUntilPopped(tagNames, targetNS) {
- const idx = this._indexOfTagNames(tagNames, targetNS);
- this.shortenToLength(idx < 0 ? 0 : idx);
- }
- popUntilNumberedHeaderPopped() {
- this.popUntilPopped(NAMED_HEADERS, NS.HTML);
- }
- popUntilTableCellPopped() {
- this.popUntilPopped(TABLE_CELLS, NS.HTML);
- }
- popAllUpToHtmlElement() {
- this.tmplCount = 0;
- this.shortenToLength(1);
- }
- _indexOfTagNames(tagNames, namespace) {
- for (let i = this.stackTop; i >= 0; i--) {
- if (tagNames.includes(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {
- return i;
- }
- }
- return -1;
- }
- clearBackTo(tagNames, targetNS) {
- const idx = this._indexOfTagNames(tagNames, targetNS);
- this.shortenToLength(idx + 1);
- }
- clearBackToTableContext() {
- this.clearBackTo(TABLE_CONTEXT, NS.HTML);
- }
- clearBackToTableBodyContext() {
- this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);
- }
- clearBackToTableRowContext() {
- this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);
- }
- remove(element) {
- const idx = this._indexOf(element);
- if (idx >= 0) {
- if (idx === this.stackTop) {
- this.pop();
- } else {
- this.items.splice(idx, 1);
- this.tagIDs.splice(idx, 1);
- this.stackTop--;
- this._updateCurrentElement();
- this.handler.onItemPop(element, false);
- }
- }
- }
- //Search
- tryPeekProperlyNestedBodyElement() {
- return this.stackTop >= 1 && this.tagIDs[1] === TAG_ID.BODY ? this.items[1] : null;
- }
- contains(element) {
- return this._indexOf(element) > -1;
- }
- getCommonAncestor(element) {
- const elementIdx = this._indexOf(element) - 1;
- return elementIdx >= 0 ? this.items[elementIdx] : null;
- }
- isRootHtmlElementCurrent() {
- return this.stackTop === 0 && this.tagIDs[0] === TAG_ID.HTML;
- }
- //Element in scope
- hasInScope(tagName) {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (tn === tagName && ns === NS.HTML) {
- return true;
- }
- if (SCOPING_ELEMENT_NS.get(tn) === ns) {
- return false;
- }
- }
- return true;
- }
- hasNumberedHeaderInScope() {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (isNumberedHeader(tn) && ns === NS.HTML) {
- return true;
- }
- if (SCOPING_ELEMENT_NS.get(tn) === ns) {
- return false;
- }
- }
- return true;
- }
- hasInListItemScope(tagName) {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (tn === tagName && ns === NS.HTML) {
- return true;
- }
- if ((tn === TAG_ID.UL || tn === TAG_ID.OL) && ns === NS.HTML || SCOPING_ELEMENT_NS.get(tn) === ns) {
- return false;
- }
- }
- return true;
- }
- hasInButtonScope(tagName) {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (tn === tagName && ns === NS.HTML) {
- return true;
- }
- if (tn === TAG_ID.BUTTON && ns === NS.HTML || SCOPING_ELEMENT_NS.get(tn) === ns) {
- return false;
- }
- }
- return true;
- }
- hasInTableScope(tagName) {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (ns !== NS.HTML) {
- continue;
- }
- if (tn === tagName) {
- return true;
- }
- if (tn === TAG_ID.TABLE || tn === TAG_ID.TEMPLATE || tn === TAG_ID.HTML) {
- return false;
- }
- }
- return true;
- }
- hasTableBodyContextInTableScope() {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (ns !== NS.HTML) {
- continue;
- }
- if (tn === TAG_ID.TBODY || tn === TAG_ID.THEAD || tn === TAG_ID.TFOOT) {
- return true;
- }
- if (tn === TAG_ID.TABLE || tn === TAG_ID.HTML) {
- return false;
- }
- }
- return true;
- }
- hasInSelectScope(tagName) {
- for (let i = this.stackTop; i >= 0; i--) {
- const tn = this.tagIDs[i];
- const ns = this.treeAdapter.getNamespaceURI(this.items[i]);
- if (ns !== NS.HTML) {
- continue;
- }
- if (tn === tagName) {
- return true;
- }
- if (tn !== TAG_ID.OPTION && tn !== TAG_ID.OPTGROUP) {
- return false;
- }
- }
- return true;
- }
- //Implied end tags
- generateImpliedEndTags() {
- while (IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {
- this.pop();
- }
- }
- generateImpliedEndTagsThoroughly() {
- while (IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
- this.pop();
- }
- }
- generateImpliedEndTagsWithExclusion(exclusionId) {
- while (this.currentTagId !== exclusionId && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
- this.pop();
- }
- }
- };
- // node_modules/parse5/dist/parser/formatting-element-list.js
- var NOAH_ARK_CAPACITY = 3;
- var EntryType;
- (function(EntryType2) {
- EntryType2[EntryType2["Marker"] = 0] = "Marker";
- EntryType2[EntryType2["Element"] = 1] = "Element";
- })(EntryType = EntryType || (EntryType = {}));
- var MARKER = { type: EntryType.Marker };
- var FormattingElementList = class {
- constructor(treeAdapter) {
- this.treeAdapter = treeAdapter;
- this.entries = [];
- this.bookmark = null;
- }
- //Noah Ark's condition
- //OPTIMIZATION: at first we try to find possible candidates for exclusion using
- //lightweight heuristics without thorough attributes check.
- _getNoahArkConditionCandidates(newElement, neAttrs) {
- const candidates = [];
- const neAttrsLength = neAttrs.length;
- const neTagName = this.treeAdapter.getTagName(newElement);
- const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
- for (let i = 0; i < this.entries.length; i++) {
- const entry = this.entries[i];
- if (entry.type === EntryType.Marker) {
- break;
- }
- const { element } = entry;
- if (this.treeAdapter.getTagName(element) === neTagName && this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {
- const elementAttrs = this.treeAdapter.getAttrList(element);
- if (elementAttrs.length === neAttrsLength) {
- candidates.push({ idx: i, attrs: elementAttrs });
- }
- }
- }
- return candidates;
- }
- _ensureNoahArkCondition(newElement) {
- if (this.entries.length < NOAH_ARK_CAPACITY)
- return;
- const neAttrs = this.treeAdapter.getAttrList(newElement);
- const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);
- if (candidates.length < NOAH_ARK_CAPACITY)
- return;
- const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));
- let validCandidates = 0;
- for (let i = 0; i < candidates.length; i++) {
- const candidate = candidates[i];
- if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {
- validCandidates += 1;
- if (validCandidates >= NOAH_ARK_CAPACITY) {
- this.entries.splice(candidate.idx, 1);
- }
- }
- }
- }
- //Mutations
- insertMarker() {
- this.entries.unshift(MARKER);
- }
- pushElement(element, token) {
- this._ensureNoahArkCondition(element);
- this.entries.unshift({
- type: EntryType.Element,
- element,
- token
- });
- }
- insertElementAfterBookmark(element, token) {
- const bookmarkIdx = this.entries.indexOf(this.bookmark);
- this.entries.splice(bookmarkIdx, 0, {
- type: EntryType.Element,
- element,
- token
- });
- }
- removeEntry(entry) {
- const entryIndex = this.entries.indexOf(entry);
- if (entryIndex >= 0) {
- this.entries.splice(entryIndex, 1);
- }
- }
- /**
- * Clears the list of formatting elements up to the last marker.
- *
- * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
- */
- clearToLastMarker() {
- const markerIdx = this.entries.indexOf(MARKER);
- if (markerIdx >= 0) {
- this.entries.splice(0, markerIdx + 1);
- } else {
- this.entries.length = 0;
- }
- }
- //Search
- getElementEntryInScopeWithTagName(tagName) {
- const entry = this.entries.find((entry2) => entry2.type === EntryType.Marker || this.treeAdapter.getTagName(entry2.element) === tagName);
- return entry && entry.type === EntryType.Element ? entry : null;
- }
- getElementEntry(element) {
- return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);
- }
- };
- // node_modules/parse5/dist/tree-adapters/default.js
- function createTextNode(value) {
- return {
- nodeName: "#text",
- value,
- parentNode: null
- };
- }
- var defaultTreeAdapter = {
- //Node construction
- createDocument() {
- return {
- nodeName: "#document",
- mode: DOCUMENT_MODE.NO_QUIRKS,
- childNodes: []
- };
- },
- createDocumentFragment() {
- return {
- nodeName: "#document-fragment",
- childNodes: []
- };
- },
- createElement(tagName, namespaceURI, attrs) {
- return {
- nodeName: tagName,
- tagName,
- attrs,
- namespaceURI,
- childNodes: [],
- parentNode: null
- };
- },
- createCommentNode(data) {
- return {
- nodeName: "#comment",
- data,
- parentNode: null
- };
- },
- //Tree mutation
- appendChild(parentNode, newNode) {
- parentNode.childNodes.push(newNode);
- newNode.parentNode = parentNode;
- },
- insertBefore(parentNode, newNode, referenceNode) {
- const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
- parentNode.childNodes.splice(insertionIdx, 0, newNode);
- newNode.parentNode = parentNode;
- },
- setTemplateContent(templateElement, contentElement) {
- templateElement.content = contentElement;
- },
- getTemplateContent(templateElement) {
- return templateElement.content;
- },
- setDocumentType(document, name, publicId, systemId) {
- const doctypeNode = document.childNodes.find((node) => node.nodeName === "#documentType");
- if (doctypeNode) {
- doctypeNode.name = name;
- doctypeNode.publicId = publicId;
- doctypeNode.systemId = systemId;
- } else {
- const node = {
- nodeName: "#documentType",
- name,
- publicId,
- systemId,
- parentNode: null
- };
- defaultTreeAdapter.appendChild(document, node);
- }
- },
- setDocumentMode(document, mode) {
- document.mode = mode;
- },
- getDocumentMode(document) {
- return document.mode;
- },
- detachNode(node) {
- if (node.parentNode) {
- const idx = node.parentNode.childNodes.indexOf(node);
- node.parentNode.childNodes.splice(idx, 1);
- node.parentNode = null;
- }
- },
- insertText(parentNode, text) {
- if (parentNode.childNodes.length > 0) {
- const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
- if (defaultTreeAdapter.isTextNode(prevNode)) {
- prevNode.value += text;
- return;
- }
- }
- defaultTreeAdapter.appendChild(parentNode, createTextNode(text));
- },
- insertTextBefore(parentNode, text, referenceNode) {
- const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
- if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {
- prevNode.value += text;
- } else {
- defaultTreeAdapter.insertBefore(parentNode, createTextNode(text), referenceNode);
- }
- },
- adoptAttributes(recipient, attrs) {
- const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));
- for (let j = 0; j < attrs.length; j++) {
- if (!recipientAttrsMap.has(attrs[j].name)) {
- recipient.attrs.push(attrs[j]);
- }
- }
- },
- //Tree traversing
- getFirstChild(node) {
- return node.childNodes[0];
- },
- getChildNodes(node) {
- return node.childNodes;
- },
- getParentNode(node) {
- return node.parentNode;
- },
- getAttrList(element) {
- return element.attrs;
- },
- //Node data
- getTagName(element) {
- return element.tagName;
- },
- getNamespaceURI(element) {
- return element.namespaceURI;
- },
- getTextNodeContent(textNode) {
- return textNode.value;
- },
- getCommentNodeContent(commentNode) {
- return commentNode.data;
- },
- getDocumentTypeNodeName(doctypeNode) {
- return doctypeNode.name;
- },
- getDocumentTypeNodePublicId(doctypeNode) {
- return doctypeNode.publicId;
- },
- getDocumentTypeNodeSystemId(doctypeNode) {
- return doctypeNode.systemId;
- },
- //Node types
- isTextNode(node) {
- return node.nodeName === "#text";
- },
- isCommentNode(node) {
- return node.nodeName === "#comment";
- },
- isDocumentTypeNode(node) {
- return node.nodeName === "#documentType";
- },
- isElementNode(node) {
- return Object.prototype.hasOwnProperty.call(node, "tagName");
- },
- // Source code location
- setNodeSourceCodeLocation(node, location2) {
- node.sourceCodeLocation = location2;
- },
- getNodeSourceCodeLocation(node) {
- return node.sourceCodeLocation;
- },
- updateNodeSourceCodeLocation(node, endLocation) {
- node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };
- }
- };
- // node_modules/parse5/dist/common/doctype.js
- var VALID_DOCTYPE_NAME = "html";
- var VALID_SYSTEM_ID = "about:legacy-compat";
- var QUIRKS_MODE_SYSTEM_ID = "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd";
- var QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
- "+//silmaril//dtd html pro v0r11 19970101//",
- "-//as//dtd html 3.0 aswedit + extensions//",
- "-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
- "-//ietf//dtd html 2.0 level 1//",
- "-//ietf//dtd html 2.0 level 2//",
- "-//ietf//dtd html 2.0 strict level 1//",
- "-//ietf//dtd html 2.0 strict level 2//",
- "-//ietf//dtd html 2.0 strict//",
- "-//ietf//dtd html 2.0//",
- "-//ietf//dtd html 2.1e//",
- "-//ietf//dtd html 3.0//",
- "-//ietf//dtd html 3.2 final//",
- "-//ietf//dtd html 3.2//",
- "-//ietf//dtd html 3//",
- "-//ietf//dtd html level 0//",
- "-//ietf//dtd html level 1//",
- "-//ietf//dtd html level 2//",
- "-//ietf//dtd html level 3//",
- "-//ietf//dtd html strict level 0//",
- "-//ietf//dtd html strict level 1//",
- "-//ietf//dtd html strict level 2//",
- "-//ietf//dtd html strict level 3//",
- "-//ietf//dtd html strict//",
- "-//ietf//dtd html//",
- "-//metrius//dtd metrius presentational//",
- "-//microsoft//dtd internet explorer 2.0 html strict//",
- "-//microsoft//dtd internet explorer 2.0 html//",
- "-//microsoft//dtd internet explorer 2.0 tables//",
- "-//microsoft//dtd internet explorer 3.0 html strict//",
- "-//microsoft//dtd internet explorer 3.0 html//",
- "-//microsoft//dtd internet explorer 3.0 tables//",
- "-//netscape comm. corp.//dtd html//",
- "-//netscape comm. corp.//dtd strict html//",
- "-//o'reilly and associates//dtd html 2.0//",
- "-//o'reilly and associates//dtd html extended 1.0//",
- "-//o'reilly and associates//dtd html extended relaxed 1.0//",
- "-//sq//dtd html 2.0 hotmetal + extensions//",
- "-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
- "-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
- "-//spyglass//dtd html 2.0 extended//",
- "-//sun microsystems corp.//dtd hotjava html//",
- "-//sun microsystems corp.//dtd hotjava strict html//",
- "-//w3c//dtd html 3 1995-03-24//",
- "-//w3c//dtd html 3.2 draft//",
- "-//w3c//dtd html 3.2 final//",
- "-//w3c//dtd html 3.2//",
- "-//w3c//dtd html 3.2s draft//",
- "-//w3c//dtd html 4.0 frameset//",
- "-//w3c//dtd html 4.0 transitional//",
- "-//w3c//dtd html experimental 19960712//",
- "-//w3c//dtd html experimental 970421//",
- "-//w3c//dtd w3 html//",
- "-//w3o//dtd w3 html 3.0//",
- "-//webtechs//dtd mozilla html 2.0//",
- "-//webtechs//dtd mozilla html//"
- ];
- var QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
- ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
- "-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//"
- ];
- var QUIRKS_MODE_PUBLIC_IDS = /* @__PURE__ */ new Set([
- "-//w3o//dtd w3 html strict 3.0//en//",
- "-/w3c/dtd html 4.0 transitional/en",
- "html"
- ]);
- var LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ["-//w3c//dtd xhtml 1.0 frameset//", "-//w3c//dtd xhtml 1.0 transitional//"];
- var LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
- ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
- "-//w3c//dtd html 4.01 frameset//",
- "-//w3c//dtd html 4.01 transitional//"
- ];
- function hasPrefix(publicId, prefixes) {
- return prefixes.some((prefix) => publicId.startsWith(prefix));
- }
- function isConforming(token) {
- return token.name === VALID_DOCTYPE_NAME && token.publicId === null && (token.systemId === null || token.systemId === VALID_SYSTEM_ID);
- }
- function getDocumentMode(token) {
- if (token.name !== VALID_DOCTYPE_NAME) {
- return DOCUMENT_MODE.QUIRKS;
- }
- const { systemId } = token;
- if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
- return DOCUMENT_MODE.QUIRKS;
- }
- let { publicId } = token;
- if (publicId !== null) {
- publicId = publicId.toLowerCase();
- if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
- return DOCUMENT_MODE.QUIRKS;
- }
- let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
- if (hasPrefix(publicId, prefixes)) {
- return DOCUMENT_MODE.QUIRKS;
- }
- prefixes = systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
- if (hasPrefix(publicId, prefixes)) {
- return DOCUMENT_MODE.LIMITED_QUIRKS;
- }
- }
- return DOCUMENT_MODE.NO_QUIRKS;
- }
- // node_modules/parse5/dist/common/foreign-content.js
- var foreign_content_exports = {};
- __export(foreign_content_exports, {
- SVG_TAG_NAMES_ADJUSTMENT_MAP: () => SVG_TAG_NAMES_ADJUSTMENT_MAP,
- adjustTokenMathMLAttrs: () => adjustTokenMathMLAttrs,
- adjustTokenSVGAttrs: () => adjustTokenSVGAttrs,
- adjustTokenSVGTagName: () => adjustTokenSVGTagName,
- adjustTokenXMLAttrs: () => adjustTokenXMLAttrs,
- causesExit: () => causesExit,
- isIntegrationPoint: () => isIntegrationPoint
- });
- var MIME_TYPES = {
- TEXT_HTML: "text/html",
- APPLICATION_XML: "application/xhtml+xml"
- };
- var DEFINITION_URL_ATTR = "definitionurl";
- var ADJUSTED_DEFINITION_URL_ATTR = "definitionURL";
- var SVG_ATTRS_ADJUSTMENT_MAP = new Map([
- "attributeName",
- "attributeType",
- "baseFrequency",
- "baseProfile",
- "calcMode",
- "clipPathUnits",
- "diffuseConstant",
- "edgeMode",
- "filterUnits",
- "glyphRef",
- "gradientTransform",
- "gradientUnits",
- "kernelMatrix",
- "kernelUnitLength",
- "keyPoints",
- "keySplines",
- "keyTimes",
- "lengthAdjust",
- "limitingConeAngle",
- "markerHeight",
- "markerUnits",
- "markerWidth",
- "maskContentUnits",
- "maskUnits",
- "numOctaves",
- "pathLength",
- "patternContentUnits",
- "patternTransform",
- "patternUnits",
- "pointsAtX",
- "pointsAtY",
- "pointsAtZ",
- "preserveAlpha",
- "preserveAspectRatio",
- "primitiveUnits",
- "refX",
- "refY",
- "repeatCount",
- "repeatDur",
- "requiredExtensions",
- "requiredFeatures",
- "specularConstant",
- "specularExponent",
- "spreadMethod",
- "startOffset",
- "stdDeviation",
- "stitchTiles",
- "surfaceScale",
- "systemLanguage",
- "tableValues",
- "targetX",
- "targetY",
- "textLength",
- "viewBox",
- "viewTarget",
- "xChannelSelector",
- "yChannelSelector",
- "zoomAndPan"
- ].map((attr) => [attr.toLowerCase(), attr]));
- var XML_ATTRS_ADJUSTMENT_MAP = /* @__PURE__ */ new Map([
- ["xlink:actuate", { prefix: "xlink", name: "actuate", namespace: NS.XLINK }],
- ["xlink:arcrole", { prefix: "xlink", name: "arcrole", namespace: NS.XLINK }],
- ["xlink:href", { prefix: "xlink", name: "href", namespace: NS.XLINK }],
- ["xlink:role", { prefix: "xlink", name: "role", namespace: NS.XLINK }],
- ["xlink:show", { prefix: "xlink", name: "show", namespace: NS.XLINK }],
- ["xlink:title", { prefix: "xlink", name: "title", namespace: NS.XLINK }],
- ["xlink:type", { prefix: "xlink", name: "type", namespace: NS.XLINK }],
- ["xml:base", { prefix: "xml", name: "base", namespace: NS.XML }],
- ["xml:lang", { prefix: "xml", name: "lang", namespace: NS.XML }],
- ["xml:space", { prefix: "xml", name: "space", namespace: NS.XML }],
- ["xmlns", { prefix: "", name: "xmlns", namespace: NS.XMLNS }],
- ["xmlns:xlink", { prefix: "xmlns", name: "xlink", namespace: NS.XMLNS }]
- ]);
- var SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
- "altGlyph",
- "altGlyphDef",
- "altGlyphItem",
- "animateColor",
- "animateMotion",
- "animateTransform",
- "clipPath",
- "feBlend",
- "feColorMatrix",
- "feComponentTransfer",
- "feComposite",
- "feConvolveMatrix",
- "feDiffuseLighting",
- "feDisplacementMap",
- "feDistantLight",
- "feFlood",
- "feFuncA",
- "feFuncB",
- "feFuncG",
- "feFuncR",
- "feGaussianBlur",
- "feImage",
- "feMerge",
- "feMergeNode",
- "feMorphology",
- "feOffset",
- "fePointLight",
- "feSpecularLighting",
- "feSpotLight",
- "feTile",
- "feTurbulence",
- "foreignObject",
- "glyphRef",
- "linearGradient",
- "radialGradient",
- "textPath"
- ].map((tn) => [tn.toLowerCase(), tn]));
- var EXITS_FOREIGN_CONTENT = /* @__PURE__ */ new Set([
- TAG_ID.B,
- TAG_ID.BIG,
- TAG_ID.BLOCKQUOTE,
- TAG_ID.BODY,
- TAG_ID.BR,
- TAG_ID.CENTER,
- TAG_ID.CODE,
- TAG_ID.DD,
- TAG_ID.DIV,
- TAG_ID.DL,
- TAG_ID.DT,
- TAG_ID.EM,
- TAG_ID.EMBED,
- TAG_ID.H1,
- TAG_ID.H2,
- TAG_ID.H3,
- TAG_ID.H4,
- TAG_ID.H5,
- TAG_ID.H6,
- TAG_ID.HEAD,
- TAG_ID.HR,
- TAG_ID.I,
- TAG_ID.IMG,
- TAG_ID.LI,
- TAG_ID.LISTING,
- TAG_ID.MENU,
- TAG_ID.META,
- TAG_ID.NOBR,
- TAG_ID.OL,
- TAG_ID.P,
- TAG_ID.PRE,
- TAG_ID.RUBY,
- TAG_ID.S,
- TAG_ID.SMALL,
- TAG_ID.SPAN,
- TAG_ID.STRONG,
- TAG_ID.STRIKE,
- TAG_ID.SUB,
- TAG_ID.SUP,
- TAG_ID.TABLE,
- TAG_ID.TT,
- TAG_ID.U,
- TAG_ID.UL,
- TAG_ID.VAR
- ]);
- function causesExit(startTagToken) {
- const tn = startTagToken.tagID;
- const isFontWithAttrs = tn === TAG_ID.FONT && startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);
- return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
- }
- function adjustTokenMathMLAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- if (token.attrs[i].name === DEFINITION_URL_ATTR) {
- token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
- break;
- }
- }
- }
- function adjustTokenSVGAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
- if (adjustedAttrName != null) {
- token.attrs[i].name = adjustedAttrName;
- }
- }
- }
- function adjustTokenXMLAttrs(token) {
- for (let i = 0; i < token.attrs.length; i++) {
- const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
- if (adjustedAttrEntry) {
- token.attrs[i].prefix = adjustedAttrEntry.prefix;
- token.attrs[i].name = adjustedAttrEntry.name;
- token.attrs[i].namespace = adjustedAttrEntry.namespace;
- }
- }
- }
- function adjustTokenSVGTagName(token) {
- const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
- if (adjustedTagName != null) {
- token.tagName = adjustedTagName;
- token.tagID = getTagID(token.tagName);
- }
- }
- function isMathMLTextIntegrationPoint(tn, ns) {
- return ns === NS.MATHML && (tn === TAG_ID.MI || tn === TAG_ID.MO || tn === TAG_ID.MN || tn === TAG_ID.MS || tn === TAG_ID.MTEXT);
- }
- function isHtmlIntegrationPoint(tn, ns, attrs) {
- if (ns === NS.MATHML && tn === TAG_ID.ANNOTATION_XML) {
- for (let i = 0; i < attrs.length; i++) {
- if (attrs[i].name === ATTRS.ENCODING) {
- const value = attrs[i].value.toLowerCase();
- return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
- }
- }
- }
- return ns === NS.SVG && (tn === TAG_ID.FOREIGN_OBJECT || tn === TAG_ID.DESC || tn === TAG_ID.TITLE);
- }
- function isIntegrationPoint(tn, ns, attrs, foreignNS) {
- return (!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs) || (!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns);
- }
- // node_modules/parse5/dist/parser/index.js
- var HIDDEN_INPUT_TYPE = "hidden";
- var AA_OUTER_LOOP_ITER = 8;
- var AA_INNER_LOOP_ITER = 3;
- var InsertionMode;
- (function(InsertionMode2) {
- InsertionMode2[InsertionMode2["INITIAL"] = 0] = "INITIAL";
- InsertionMode2[InsertionMode2["BEFORE_HTML"] = 1] = "BEFORE_HTML";
- InsertionMode2[InsertionMode2["BEFORE_HEAD"] = 2] = "BEFORE_HEAD";
- InsertionMode2[InsertionMode2["IN_HEAD"] = 3] = "IN_HEAD";
- InsertionMode2[InsertionMode2["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT";
- InsertionMode2[InsertionMode2["AFTER_HEAD"] = 5] = "AFTER_HEAD";
- InsertionMode2[InsertionMode2["IN_BODY"] = 6] = "IN_BODY";
- InsertionMode2[InsertionMode2["TEXT"] = 7] = "TEXT";
- InsertionMode2[InsertionMode2["IN_TABLE"] = 8] = "IN_TABLE";
- InsertionMode2[InsertionMode2["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT";
- InsertionMode2[InsertionMode2["IN_CAPTION"] = 10] = "IN_CAPTION";
- InsertionMode2[InsertionMode2["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP";
- InsertionMode2[InsertionMode2["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY";
- InsertionMode2[InsertionMode2["IN_ROW"] = 13] = "IN_ROW";
- InsertionMode2[InsertionMode2["IN_CELL"] = 14] = "IN_CELL";
- InsertionMode2[InsertionMode2["IN_SELECT"] = 15] = "IN_SELECT";
- InsertionMode2[InsertionMode2["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE";
- InsertionMode2[InsertionMode2["IN_TEMPLATE"] = 17] = "IN_TEMPLATE";
- InsertionMode2[InsertionMode2["AFTER_BODY"] = 18] = "AFTER_BODY";
- InsertionMode2[InsertionMode2["IN_FRAMESET"] = 19] = "IN_FRAMESET";
- InsertionMode2[InsertionMode2["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET";
- InsertionMode2[InsertionMode2["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY";
- InsertionMode2[InsertionMode2["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET";
- })(InsertionMode || (InsertionMode = {}));
- var BASE_LOC = {
- startLine: -1,
- startCol: -1,
- startOffset: -1,
- endLine: -1,
- endCol: -1,
- endOffset: -1
- };
- var TABLE_STRUCTURE_TAGS = /* @__PURE__ */ new Set([TAG_ID.TABLE, TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TR]);
- var defaultParserOptions = {
- scriptingEnabled: true,
- sourceCodeLocationInfo: false,
- treeAdapter: defaultTreeAdapter,
- onParseError: null
- };
- var Parser = class {
- constructor(options, document, fragmentContext = null, scriptHandler = null) {
- this.fragmentContext = fragmentContext;
- this.scriptHandler = scriptHandler;
- this.currentToken = null;
- this.stopped = false;
- this.insertionMode = InsertionMode.INITIAL;
- this.originalInsertionMode = InsertionMode.INITIAL;
- this.headElement = null;
- this.formElement = null;
- this.currentNotInHTML = false;
- this.tmplInsertionModeStack = [];
- this.pendingCharacterTokens = [];
- this.hasNonWhitespacePendingCharacterToken = false;
- this.framesetOk = true;
- this.skipNextNewLine = false;
- this.fosterParentingEnabled = false;
- this.options = {
- ...defaultParserOptions,
- ...options
- };
- this.treeAdapter = this.options.treeAdapter;
- this.onParseError = this.options.onParseError;
- if (this.onParseError) {
- this.options.sourceCodeLocationInfo = true;
- }
- this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();
- this.tokenizer = new Tokenizer(this.options, this);
- this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
- this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : TAG_ID.UNKNOWN;
- this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);
- this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);
- }
- // API
- static parse(html, options) {
- const parser = new this(options);
- parser.tokenizer.write(html, true);
- return parser.document;
- }
- static getFragmentParser(fragmentContext, options) {
- const opts = {
- ...defaultParserOptions,
- ...options
- };
- fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : fragmentContext = opts.treeAdapter.createElement(TAG_NAMES.TEMPLATE, NS.HTML, []);
- const documentMock = opts.treeAdapter.createElement("documentmock", NS.HTML, []);
- const parser = new this(opts, documentMock, fragmentContext);
- if (parser.fragmentContextID === TAG_ID.TEMPLATE) {
- parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
- }
- parser._initTokenizerForFragmentParsing();
- parser._insertFakeRootElement();
- parser._resetInsertionMode();
- parser._findFormInFragmentContext();
- return parser;
- }
- getFragment() {
- const rootElement = this.treeAdapter.getFirstChild(this.document);
- const fragment = this.treeAdapter.createDocumentFragment();
- this._adoptNodes(rootElement, fragment);
- return fragment;
- }
- //Errors
- _err(token, code, beforeToken) {
- var _a2;
- if (!this.onParseError)
- return;
- const loc = (_a2 = token.location) !== null && _a2 !== void 0 ? _a2 : BASE_LOC;
- const err2 = {
- code,
- startLine: loc.startLine,
- startCol: loc.startCol,
- startOffset: loc.startOffset,
- endLine: beforeToken ? loc.startLine : loc.endLine,
- endCol: beforeToken ? loc.startCol : loc.endCol,
- endOffset: beforeToken ? loc.startOffset : loc.endOffset
- };
- this.onParseError(err2);
- }
- //Stack events
- onItemPush(node, tid, isTop) {
- var _a2, _b;
- (_b = (_a2 = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a2, node);
- if (isTop && this.openElements.stackTop > 0)
- this._setContextModes(node, tid);
- }
- onItemPop(node, isTop) {
- var _a2, _b;
- if (this.options.sourceCodeLocationInfo) {
- this._setEndLocation(node, this.currentToken);
- }
- (_b = (_a2 = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a2, node, this.openElements.current);
- if (isTop) {
- let current;
- let currentTagId;
- if (this.openElements.stackTop === 0 && this.fragmentContext) {
- current = this.fragmentContext;
- currentTagId = this.fragmentContextID;
- } else {
- ({ current, currentTagId } = this.openElements);
- }
- this._setContextModes(current, currentTagId);
- }
- }
- _setContextModes(current, tid) {
- const isHTML = current === this.document || this.treeAdapter.getNamespaceURI(current) === NS.HTML;
- this.currentNotInHTML = !isHTML;
- this.tokenizer.inForeignNode = !isHTML && !this._isIntegrationPoint(tid, current);
- }
- _switchToTextParsing(currentToken, nextTokenizerState) {
- this._insertElement(currentToken, NS.HTML);
- this.tokenizer.state = nextTokenizerState;
- this.originalInsertionMode = this.insertionMode;
- this.insertionMode = InsertionMode.TEXT;
- }
- switchToPlaintextParsing() {
- this.insertionMode = InsertionMode.TEXT;
- this.originalInsertionMode = InsertionMode.IN_BODY;
- this.tokenizer.state = TokenizerMode.PLAINTEXT;
- }
- //Fragment parsing
- _getAdjustedCurrentElement() {
- return this.openElements.stackTop === 0 && this.fragmentContext ? this.fragmentContext : this.openElements.current;
- }
- _findFormInFragmentContext() {
- let node = this.fragmentContext;
- while (node) {
- if (this.treeAdapter.getTagName(node) === TAG_NAMES.FORM) {
- this.formElement = node;
- break;
- }
- node = this.treeAdapter.getParentNode(node);
- }
- }
- _initTokenizerForFragmentParsing() {
- if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {
- return;
- }
- switch (this.fragmentContextID) {
- case TAG_ID.TITLE:
- case TAG_ID.TEXTAREA: {
- this.tokenizer.state = TokenizerMode.RCDATA;
- break;
- }
- case TAG_ID.STYLE:
- case TAG_ID.XMP:
- case TAG_ID.IFRAME:
- case TAG_ID.NOEMBED:
- case TAG_ID.NOFRAMES:
- case TAG_ID.NOSCRIPT: {
- this.tokenizer.state = TokenizerMode.RAWTEXT;
- break;
- }
- case TAG_ID.SCRIPT: {
- this.tokenizer.state = TokenizerMode.SCRIPT_DATA;
- break;
- }
- case TAG_ID.PLAINTEXT: {
- this.tokenizer.state = TokenizerMode.PLAINTEXT;
- break;
- }
- default:
- }
- }
- //Tree mutation
- _setDocumentType(token) {
- const name = token.name || "";
- const publicId = token.publicId || "";
- const systemId = token.systemId || "";
- this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);
- if (token.location) {
- const documentChildren = this.treeAdapter.getChildNodes(this.document);
- const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));
- if (docTypeNode) {
- this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);
- }
- }
- }
- _attachElementToTree(element, location2) {
- if (this.options.sourceCodeLocationInfo) {
- const loc = location2 && {
- ...location2,
- startTag: location2
- };
- this.treeAdapter.setNodeSourceCodeLocation(element, loc);
- }
- if (this._shouldFosterParentOnInsertion()) {
- this._fosterParentElement(element);
- } else {
- const parent = this.openElements.currentTmplContentOrNode;
- this.treeAdapter.appendChild(parent, element);
- }
- }
- _appendElement(token, namespaceURI) {
- const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
- this._attachElementToTree(element, token.location);
- }
- _insertElement(token, namespaceURI) {
- const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
- this._attachElementToTree(element, token.location);
- this.openElements.push(element, token.tagID);
- }
- _insertFakeElement(tagName, tagID) {
- const element = this.treeAdapter.createElement(tagName, NS.HTML, []);
- this._attachElementToTree(element, null);
- this.openElements.push(element, tagID);
- }
- _insertTemplate(token) {
- const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);
- const content = this.treeAdapter.createDocumentFragment();
- this.treeAdapter.setTemplateContent(tmpl, content);
- this._attachElementToTree(tmpl, token.location);
- this.openElements.push(tmpl, token.tagID);
- if (this.options.sourceCodeLocationInfo)
- this.treeAdapter.setNodeSourceCodeLocation(content, null);
- }
- _insertFakeRootElement() {
- const element = this.treeAdapter.createElement(TAG_NAMES.HTML, NS.HTML, []);
- if (this.options.sourceCodeLocationInfo)
- this.treeAdapter.setNodeSourceCodeLocation(element, null);
- this.treeAdapter.appendChild(this.openElements.current, element);
- this.openElements.push(element, TAG_ID.HTML);
- }
- _appendCommentNode(token, parent) {
- const commentNode = this.treeAdapter.createCommentNode(token.data);
- this.treeAdapter.appendChild(parent, commentNode);
- if (this.options.sourceCodeLocationInfo) {
- this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);
- }
- }
- _insertCharacters(token) {
- let parent;
- let beforeElement;
- if (this._shouldFosterParentOnInsertion()) {
- ({ parent, beforeElement } = this._findFosterParentingLocation());
- if (beforeElement) {
- this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);
- } else {
- this.treeAdapter.insertText(parent, token.chars);
- }
- } else {
- parent = this.openElements.currentTmplContentOrNode;
- this.treeAdapter.insertText(parent, token.chars);
- }
- if (!token.location)
- return;
- const siblings = this.treeAdapter.getChildNodes(parent);
- const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;
- const textNode = siblings[textNodeIdx - 1];
- const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);
- if (tnLoc) {
- const { endLine, endCol, endOffset } = token.location;
- this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });
- } else if (this.options.sourceCodeLocationInfo) {
- this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);
- }
- }
- _adoptNodes(donor, recipient) {
- for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {
- this.treeAdapter.detachNode(child);
- this.treeAdapter.appendChild(recipient, child);
- }
- }
- _setEndLocation(element, closingToken) {
- if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {
- const ctLoc = closingToken.location;
- const tn = this.treeAdapter.getTagName(element);
- const endLoc = (
- // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing
- // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.
- closingToken.type === TokenType.END_TAG && tn === closingToken.tagName ? {
- endTag: { ...ctLoc },
- endLine: ctLoc.endLine,
- endCol: ctLoc.endCol,
- endOffset: ctLoc.endOffset
- } : {
- endLine: ctLoc.startLine,
- endCol: ctLoc.startCol,
- endOffset: ctLoc.startOffset
- }
- );
- this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);
- }
- }
- //Token processing
- shouldProcessStartTagTokenInForeignContent(token) {
- if (!this.currentNotInHTML)
- return false;
- let current;
- let currentTagId;
- if (this.openElements.stackTop === 0 && this.fragmentContext) {
- current = this.fragmentContext;
- currentTagId = this.fragmentContextID;
- } else {
- ({ current, currentTagId } = this.openElements);
- }
- if (token.tagID === TAG_ID.SVG && this.treeAdapter.getTagName(current) === TAG_NAMES.ANNOTATION_XML && this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {
- return false;
- }
- return (
- // Check that `current` is not an integration point for HTML or MathML elements.
- this.tokenizer.inForeignNode || // If it _is_ an integration point, then we might have to check that it is not an HTML
- // integration point.
- (token.tagID === TAG_ID.MGLYPH || token.tagID === TAG_ID.MALIGNMARK) && !this._isIntegrationPoint(currentTagId, current, NS.HTML)
- );
- }
- _processToken(token) {
- switch (token.type) {
- case TokenType.CHARACTER: {
- this.onCharacter(token);
- break;
- }
- case TokenType.NULL_CHARACTER: {
- this.onNullCharacter(token);
- break;
- }
- case TokenType.COMMENT: {
- this.onComment(token);
- break;
- }
- case TokenType.DOCTYPE: {
- this.onDoctype(token);
- break;
- }
- case TokenType.START_TAG: {
- this._processStartTag(token);
- break;
- }
- case TokenType.END_TAG: {
- this.onEndTag(token);
- break;
- }
- case TokenType.EOF: {
- this.onEof(token);
- break;
- }
- case TokenType.WHITESPACE_CHARACTER: {
- this.onWhitespaceCharacter(token);
- break;
- }
- }
- }
- //Integration points
- _isIntegrationPoint(tid, element, foreignNS) {
- const ns = this.treeAdapter.getNamespaceURI(element);
- const attrs = this.treeAdapter.getAttrList(element);
- return isIntegrationPoint(tid, ns, attrs, foreignNS);
- }
- //Active formatting elements reconstruction
- _reconstructActiveFormattingElements() {
- const listLength = this.activeFormattingElements.entries.length;
- if (listLength) {
- const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));
- const unopenIdx = endIndex < 0 ? listLength - 1 : endIndex - 1;
- for (let i = unopenIdx; i >= 0; i--) {
- const entry = this.activeFormattingElements.entries[i];
- this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));
- entry.element = this.openElements.current;
- }
- }
- }
- //Close elements
- _closeTableCell() {
- this.openElements.generateImpliedEndTags();
- this.openElements.popUntilTableCellPopped();
- this.activeFormattingElements.clearToLastMarker();
- this.insertionMode = InsertionMode.IN_ROW;
- }
- _closePElement() {
- this.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.P);
- this.openElements.popUntilTagNamePopped(TAG_ID.P);
- }
- //Insertion modes
- _resetInsertionMode() {
- for (let i = this.openElements.stackTop; i >= 0; i--) {
- switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {
- case TAG_ID.TR: {
- this.insertionMode = InsertionMode.IN_ROW;
- return;
- }
- case TAG_ID.TBODY:
- case TAG_ID.THEAD:
- case TAG_ID.TFOOT: {
- this.insertionMode = InsertionMode.IN_TABLE_BODY;
- return;
- }
- case TAG_ID.CAPTION: {
- this.insertionMode = InsertionMode.IN_CAPTION;
- return;
- }
- case TAG_ID.COLGROUP: {
- this.insertionMode = InsertionMode.IN_COLUMN_GROUP;
- return;
- }
- case TAG_ID.TABLE: {
- this.insertionMode = InsertionMode.IN_TABLE;
- return;
- }
- case TAG_ID.BODY: {
- this.insertionMode = InsertionMode.IN_BODY;
- return;
- }
- case TAG_ID.FRAMESET: {
- this.insertionMode = InsertionMode.IN_FRAMESET;
- return;
- }
- case TAG_ID.SELECT: {
- this._resetInsertionModeForSelect(i);
- return;
- }
- case TAG_ID.TEMPLATE: {
- this.insertionMode = this.tmplInsertionModeStack[0];
- return;
- }
- case TAG_ID.HTML: {
- this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;
- return;
- }
- case TAG_ID.TD:
- case TAG_ID.TH: {
- if (i > 0) {
- this.insertionMode = InsertionMode.IN_CELL;
- return;
- }
- break;
- }
- case TAG_ID.HEAD: {
- if (i > 0) {
- this.insertionMode = InsertionMode.IN_HEAD;
- return;
- }
- break;
- }
- }
- }
- this.insertionMode = InsertionMode.IN_BODY;
- }
- _resetInsertionModeForSelect(selectIdx) {
- if (selectIdx > 0) {
- for (let i = selectIdx - 1; i > 0; i--) {
- const tn = this.openElements.tagIDs[i];
- if (tn === TAG_ID.TEMPLATE) {
- break;
- } else if (tn === TAG_ID.TABLE) {
- this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;
- return;
- }
- }
- }
- this.insertionMode = InsertionMode.IN_SELECT;
- }
- //Foster parenting
- _isElementCausesFosterParenting(tn) {
- return TABLE_STRUCTURE_TAGS.has(tn);
- }
- _shouldFosterParentOnInsertion() {
- return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId);
- }
- _findFosterParentingLocation() {
- for (let i = this.openElements.stackTop; i >= 0; i--) {
- const openElement = this.openElements.items[i];
- switch (this.openElements.tagIDs[i]) {
- case TAG_ID.TEMPLATE: {
- if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {
- return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };
- }
- break;
- }
- case TAG_ID.TABLE: {
- const parent = this.treeAdapter.getParentNode(openElement);
- if (parent) {
- return { parent, beforeElement: openElement };
- }
- return { parent: this.openElements.items[i - 1], beforeElement: null };
- }
- default:
- }
- }
- return { parent: this.openElements.items[0], beforeElement: null };
- }
- _fosterParentElement(element) {
- const location2 = this._findFosterParentingLocation();
- if (location2.beforeElement) {
- this.treeAdapter.insertBefore(location2.parent, element, location2.beforeElement);
- } else {
- this.treeAdapter.appendChild(location2.parent, element);
- }
- }
- //Special elements
- _isSpecialElement(element, id) {
- const ns = this.treeAdapter.getNamespaceURI(element);
- return SPECIAL_ELEMENTS[ns].has(id);
- }
- onCharacter(token) {
- this.skipNextNewLine = false;
- if (this.tokenizer.inForeignNode) {
- characterInForeignContent(this, token);
- return;
- }
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- tokenInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HTML: {
- tokenBeforeHtml(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD: {
- tokenBeforeHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD: {
- tokenInHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD_NO_SCRIPT: {
- tokenInHeadNoScript(this, token);
- break;
- }
- case InsertionMode.AFTER_HEAD: {
- tokenAfterHead(this, token);
- break;
- }
- case InsertionMode.IN_BODY:
- case InsertionMode.IN_CAPTION:
- case InsertionMode.IN_CELL:
- case InsertionMode.IN_TEMPLATE: {
- characterInBody(this, token);
- break;
- }
- case InsertionMode.TEXT:
- case InsertionMode.IN_SELECT:
- case InsertionMode.IN_SELECT_IN_TABLE: {
- this._insertCharacters(token);
- break;
- }
- case InsertionMode.IN_TABLE:
- case InsertionMode.IN_TABLE_BODY:
- case InsertionMode.IN_ROW: {
- characterInTable(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- characterInTableText(this, token);
- break;
- }
- case InsertionMode.IN_COLUMN_GROUP: {
- tokenInColumnGroup(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY: {
- tokenAfterBody(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_BODY: {
- tokenAfterAfterBody(this, token);
- break;
- }
- default:
- }
- }
- onNullCharacter(token) {
- this.skipNextNewLine = false;
- if (this.tokenizer.inForeignNode) {
- nullCharacterInForeignContent(this, token);
- return;
- }
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- tokenInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HTML: {
- tokenBeforeHtml(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD: {
- tokenBeforeHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD: {
- tokenInHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD_NO_SCRIPT: {
- tokenInHeadNoScript(this, token);
- break;
- }
- case InsertionMode.AFTER_HEAD: {
- tokenAfterHead(this, token);
- break;
- }
- case InsertionMode.TEXT: {
- this._insertCharacters(token);
- break;
- }
- case InsertionMode.IN_TABLE:
- case InsertionMode.IN_TABLE_BODY:
- case InsertionMode.IN_ROW: {
- characterInTable(this, token);
- break;
- }
- case InsertionMode.IN_COLUMN_GROUP: {
- tokenInColumnGroup(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY: {
- tokenAfterBody(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_BODY: {
- tokenAfterAfterBody(this, token);
- break;
- }
- default:
- }
- }
- onComment(token) {
- this.skipNextNewLine = false;
- if (this.currentNotInHTML) {
- appendComment(this, token);
- return;
- }
- switch (this.insertionMode) {
- case InsertionMode.INITIAL:
- case InsertionMode.BEFORE_HTML:
- case InsertionMode.BEFORE_HEAD:
- case InsertionMode.IN_HEAD:
- case InsertionMode.IN_HEAD_NO_SCRIPT:
- case InsertionMode.AFTER_HEAD:
- case InsertionMode.IN_BODY:
- case InsertionMode.IN_TABLE:
- case InsertionMode.IN_CAPTION:
- case InsertionMode.IN_COLUMN_GROUP:
- case InsertionMode.IN_TABLE_BODY:
- case InsertionMode.IN_ROW:
- case InsertionMode.IN_CELL:
- case InsertionMode.IN_SELECT:
- case InsertionMode.IN_SELECT_IN_TABLE:
- case InsertionMode.IN_TEMPLATE:
- case InsertionMode.IN_FRAMESET:
- case InsertionMode.AFTER_FRAMESET: {
- appendComment(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- tokenInTableText(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY: {
- appendCommentToRootHtmlElement(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_BODY:
- case InsertionMode.AFTER_AFTER_FRAMESET: {
- appendCommentToDocument(this, token);
- break;
- }
- default:
- }
- }
- onDoctype(token) {
- this.skipNextNewLine = false;
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- doctypeInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD:
- case InsertionMode.IN_HEAD:
- case InsertionMode.IN_HEAD_NO_SCRIPT:
- case InsertionMode.AFTER_HEAD: {
- this._err(token, ERR.misplacedDoctype);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- tokenInTableText(this, token);
- break;
- }
- default:
- }
- }
- onStartTag(token) {
- this.skipNextNewLine = false;
- this.currentToken = token;
- this._processStartTag(token);
- if (token.selfClosing && !token.ackSelfClosing) {
- this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);
- }
- }
- /**
- * Processes a given start tag.
- *
- * `onStartTag` checks if a self-closing tag was recognized. When a token
- * is moved inbetween multiple insertion modes, this check for self-closing
- * could lead to false positives. To avoid this, `_processStartTag` is used
- * for nested calls.
- *
- * @param token The token to process.
- */
- _processStartTag(token) {
- if (this.shouldProcessStartTagTokenInForeignContent(token)) {
- startTagInForeignContent(this, token);
- } else {
- this._startTagOutsideForeignContent(token);
- }
- }
- _startTagOutsideForeignContent(token) {
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- tokenInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HTML: {
- startTagBeforeHtml(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD: {
- startTagBeforeHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD: {
- startTagInHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD_NO_SCRIPT: {
- startTagInHeadNoScript(this, token);
- break;
- }
- case InsertionMode.AFTER_HEAD: {
- startTagAfterHead(this, token);
- break;
- }
- case InsertionMode.IN_BODY: {
- startTagInBody(this, token);
- break;
- }
- case InsertionMode.IN_TABLE: {
- startTagInTable(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- tokenInTableText(this, token);
- break;
- }
- case InsertionMode.IN_CAPTION: {
- startTagInCaption(this, token);
- break;
- }
- case InsertionMode.IN_COLUMN_GROUP: {
- startTagInColumnGroup(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_BODY: {
- startTagInTableBody(this, token);
- break;
- }
- case InsertionMode.IN_ROW: {
- startTagInRow(this, token);
- break;
- }
- case InsertionMode.IN_CELL: {
- startTagInCell(this, token);
- break;
- }
- case InsertionMode.IN_SELECT: {
- startTagInSelect(this, token);
- break;
- }
- case InsertionMode.IN_SELECT_IN_TABLE: {
- startTagInSelectInTable(this, token);
- break;
- }
- case InsertionMode.IN_TEMPLATE: {
- startTagInTemplate(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY: {
- startTagAfterBody(this, token);
- break;
- }
- case InsertionMode.IN_FRAMESET: {
- startTagInFrameset(this, token);
- break;
- }
- case InsertionMode.AFTER_FRAMESET: {
- startTagAfterFrameset(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_BODY: {
- startTagAfterAfterBody(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_FRAMESET: {
- startTagAfterAfterFrameset(this, token);
- break;
- }
- default:
- }
- }
- onEndTag(token) {
- this.skipNextNewLine = false;
- this.currentToken = token;
- if (this.currentNotInHTML) {
- endTagInForeignContent(this, token);
- } else {
- this._endTagOutsideForeignContent(token);
- }
- }
- _endTagOutsideForeignContent(token) {
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- tokenInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HTML: {
- endTagBeforeHtml(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD: {
- endTagBeforeHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD: {
- endTagInHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD_NO_SCRIPT: {
- endTagInHeadNoScript(this, token);
- break;
- }
- case InsertionMode.AFTER_HEAD: {
- endTagAfterHead(this, token);
- break;
- }
- case InsertionMode.IN_BODY: {
- endTagInBody(this, token);
- break;
- }
- case InsertionMode.TEXT: {
- endTagInText(this, token);
- break;
- }
- case InsertionMode.IN_TABLE: {
- endTagInTable(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- tokenInTableText(this, token);
- break;
- }
- case InsertionMode.IN_CAPTION: {
- endTagInCaption(this, token);
- break;
- }
- case InsertionMode.IN_COLUMN_GROUP: {
- endTagInColumnGroup(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_BODY: {
- endTagInTableBody(this, token);
- break;
- }
- case InsertionMode.IN_ROW: {
- endTagInRow(this, token);
- break;
- }
- case InsertionMode.IN_CELL: {
- endTagInCell(this, token);
- break;
- }
- case InsertionMode.IN_SELECT: {
- endTagInSelect(this, token);
- break;
- }
- case InsertionMode.IN_SELECT_IN_TABLE: {
- endTagInSelectInTable(this, token);
- break;
- }
- case InsertionMode.IN_TEMPLATE: {
- endTagInTemplate(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY: {
- endTagAfterBody(this, token);
- break;
- }
- case InsertionMode.IN_FRAMESET: {
- endTagInFrameset(this, token);
- break;
- }
- case InsertionMode.AFTER_FRAMESET: {
- endTagAfterFrameset(this, token);
- break;
- }
- case InsertionMode.AFTER_AFTER_BODY: {
- tokenAfterAfterBody(this, token);
- break;
- }
- default:
- }
- }
- onEof(token) {
- switch (this.insertionMode) {
- case InsertionMode.INITIAL: {
- tokenInInitialMode(this, token);
- break;
- }
- case InsertionMode.BEFORE_HTML: {
- tokenBeforeHtml(this, token);
- break;
- }
- case InsertionMode.BEFORE_HEAD: {
- tokenBeforeHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD: {
- tokenInHead(this, token);
- break;
- }
- case InsertionMode.IN_HEAD_NO_SCRIPT: {
- tokenInHeadNoScript(this, token);
- break;
- }
- case InsertionMode.AFTER_HEAD: {
- tokenAfterHead(this, token);
- break;
- }
- case InsertionMode.IN_BODY:
- case InsertionMode.IN_TABLE:
- case InsertionMode.IN_CAPTION:
- case InsertionMode.IN_COLUMN_GROUP:
- case InsertionMode.IN_TABLE_BODY:
- case InsertionMode.IN_ROW:
- case InsertionMode.IN_CELL:
- case InsertionMode.IN_SELECT:
- case InsertionMode.IN_SELECT_IN_TABLE: {
- eofInBody(this, token);
- break;
- }
- case InsertionMode.TEXT: {
- eofInText(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- tokenInTableText(this, token);
- break;
- }
- case InsertionMode.IN_TEMPLATE: {
- eofInTemplate(this, token);
- break;
- }
- case InsertionMode.AFTER_BODY:
- case InsertionMode.IN_FRAMESET:
- case InsertionMode.AFTER_FRAMESET:
- case InsertionMode.AFTER_AFTER_BODY:
- case InsertionMode.AFTER_AFTER_FRAMESET: {
- stopParsing(this, token);
- break;
- }
- default:
- }
- }
- onWhitespaceCharacter(token) {
- if (this.skipNextNewLine) {
- this.skipNextNewLine = false;
- if (token.chars.charCodeAt(0) === CODE_POINTS.LINE_FEED) {
- if (token.chars.length === 1) {
- return;
- }
- token.chars = token.chars.substr(1);
- }
- }
- if (this.tokenizer.inForeignNode) {
- this._insertCharacters(token);
- return;
- }
- switch (this.insertionMode) {
- case InsertionMode.IN_HEAD:
- case InsertionMode.IN_HEAD_NO_SCRIPT:
- case InsertionMode.AFTER_HEAD:
- case InsertionMode.TEXT:
- case InsertionMode.IN_COLUMN_GROUP:
- case InsertionMode.IN_SELECT:
- case InsertionMode.IN_SELECT_IN_TABLE:
- case InsertionMode.IN_FRAMESET:
- case InsertionMode.AFTER_FRAMESET: {
- this._insertCharacters(token);
- break;
- }
- case InsertionMode.IN_BODY:
- case InsertionMode.IN_CAPTION:
- case InsertionMode.IN_CELL:
- case InsertionMode.IN_TEMPLATE:
- case InsertionMode.AFTER_BODY:
- case InsertionMode.AFTER_AFTER_BODY:
- case InsertionMode.AFTER_AFTER_FRAMESET: {
- whitespaceCharacterInBody(this, token);
- break;
- }
- case InsertionMode.IN_TABLE:
- case InsertionMode.IN_TABLE_BODY:
- case InsertionMode.IN_ROW: {
- characterInTable(this, token);
- break;
- }
- case InsertionMode.IN_TABLE_TEXT: {
- whitespaceCharacterInTableText(this, token);
- break;
- }
- default:
- }
- }
- };
- function aaObtainFormattingElementEntry(p, token) {
- let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);
- if (formattingElementEntry) {
- if (!p.openElements.contains(formattingElementEntry.element)) {
- p.activeFormattingElements.removeEntry(formattingElementEntry);
- formattingElementEntry = null;
- } else if (!p.openElements.hasInScope(token.tagID)) {
- formattingElementEntry = null;
- }
- } else {
- genericEndTagInBody(p, token);
- }
- return formattingElementEntry;
- }
- function aaObtainFurthestBlock(p, formattingElementEntry) {
- let furthestBlock = null;
- let idx = p.openElements.stackTop;
- for (; idx >= 0; idx--) {
- const element = p.openElements.items[idx];
- if (element === formattingElementEntry.element) {
- break;
- }
- if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {
- furthestBlock = element;
- }
- }
- if (!furthestBlock) {
- p.openElements.shortenToLength(idx < 0 ? 0 : idx);
- p.activeFormattingElements.removeEntry(formattingElementEntry);
- }
- return furthestBlock;
- }
- function aaInnerLoop(p, furthestBlock, formattingElement) {
- let lastElement = furthestBlock;
- let nextElement = p.openElements.getCommonAncestor(furthestBlock);
- for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {
- nextElement = p.openElements.getCommonAncestor(element);
- const elementEntry = p.activeFormattingElements.getElementEntry(element);
- const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;
- const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;
- if (shouldRemoveFromOpenElements) {
- if (counterOverflow) {
- p.activeFormattingElements.removeEntry(elementEntry);
- }
- p.openElements.remove(element);
- } else {
- element = aaRecreateElementFromEntry(p, elementEntry);
- if (lastElement === furthestBlock) {
- p.activeFormattingElements.bookmark = elementEntry;
- }
- p.treeAdapter.detachNode(lastElement);
- p.treeAdapter.appendChild(element, lastElement);
- lastElement = element;
- }
- }
- return lastElement;
- }
- function aaRecreateElementFromEntry(p, elementEntry) {
- const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);
- const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);
- p.openElements.replace(elementEntry.element, newElement);
- elementEntry.element = newElement;
- return newElement;
- }
- function aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {
- const tn = p.treeAdapter.getTagName(commonAncestor);
- const tid = getTagID(tn);
- if (p._isElementCausesFosterParenting(tid)) {
- p._fosterParentElement(lastElement);
- } else {
- const ns = p.treeAdapter.getNamespaceURI(commonAncestor);
- if (tid === TAG_ID.TEMPLATE && ns === NS.HTML) {
- commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);
- }
- p.treeAdapter.appendChild(commonAncestor, lastElement);
- }
- }
- function aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {
- const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);
- const { token } = formattingElementEntry;
- const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);
- p._adoptNodes(furthestBlock, newElement);
- p.treeAdapter.appendChild(furthestBlock, newElement);
- p.activeFormattingElements.insertElementAfterBookmark(newElement, token);
- p.activeFormattingElements.removeEntry(formattingElementEntry);
- p.openElements.remove(formattingElementEntry.element);
- p.openElements.insertAfter(furthestBlock, newElement, token.tagID);
- }
- function callAdoptionAgency(p, token) {
- for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {
- const formattingElementEntry = aaObtainFormattingElementEntry(p, token);
- if (!formattingElementEntry) {
- break;
- }
- const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);
- if (!furthestBlock) {
- break;
- }
- p.activeFormattingElements.bookmark = formattingElementEntry;
- const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);
- const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);
- p.treeAdapter.detachNode(lastElement);
- if (commonAncestor)
- aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);
- aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);
- }
- }
- function appendComment(p, token) {
- p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);
- }
- function appendCommentToRootHtmlElement(p, token) {
- p._appendCommentNode(token, p.openElements.items[0]);
- }
- function appendCommentToDocument(p, token) {
- p._appendCommentNode(token, p.document);
- }
- function stopParsing(p, token) {
- p.stopped = true;
- if (token.location) {
- const target = p.fragmentContext ? 0 : 2;
- for (let i = p.openElements.stackTop; i >= target; i--) {
- p._setEndLocation(p.openElements.items[i], token);
- }
- if (!p.fragmentContext && p.openElements.stackTop >= 0) {
- const htmlElement = p.openElements.items[0];
- const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);
- if (htmlLocation && !htmlLocation.endTag) {
- p._setEndLocation(htmlElement, token);
- if (p.openElements.stackTop >= 1) {
- const bodyElement = p.openElements.items[1];
- const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);
- if (bodyLocation && !bodyLocation.endTag) {
- p._setEndLocation(bodyElement, token);
- }
- }
- }
- }
- }
- }
- function doctypeInInitialMode(p, token) {
- p._setDocumentType(token);
- const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : getDocumentMode(token);
- if (!isConforming(token)) {
- p._err(token, ERR.nonConformingDoctype);
- }
- p.treeAdapter.setDocumentMode(p.document, mode);
- p.insertionMode = InsertionMode.BEFORE_HTML;
- }
- function tokenInInitialMode(p, token) {
- p._err(token, ERR.missingDoctype, true);
- p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);
- p.insertionMode = InsertionMode.BEFORE_HTML;
- p._processToken(token);
- }
- function startTagBeforeHtml(p, token) {
- if (token.tagID === TAG_ID.HTML) {
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.BEFORE_HEAD;
- } else {
- tokenBeforeHtml(p, token);
- }
- }
- function endTagBeforeHtml(p, token) {
- const tn = token.tagID;
- if (tn === TAG_ID.HTML || tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.BR) {
- tokenBeforeHtml(p, token);
- }
- }
- function tokenBeforeHtml(p, token) {
- p._insertFakeRootElement();
- p.insertionMode = InsertionMode.BEFORE_HEAD;
- p._processToken(token);
- }
- function startTagBeforeHead(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.HEAD: {
- p._insertElement(token, NS.HTML);
- p.headElement = p.openElements.current;
- p.insertionMode = InsertionMode.IN_HEAD;
- break;
- }
- default: {
- tokenBeforeHead(p, token);
- }
- }
- }
- function endTagBeforeHead(p, token) {
- const tn = token.tagID;
- if (tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.HTML || tn === TAG_ID.BR) {
- tokenBeforeHead(p, token);
- } else {
- p._err(token, ERR.endTagWithoutMatchingOpenElement);
- }
- }
- function tokenBeforeHead(p, token) {
- p._insertFakeElement(TAG_NAMES.HEAD, TAG_ID.HEAD);
- p.headElement = p.openElements.current;
- p.insertionMode = InsertionMode.IN_HEAD;
- p._processToken(token);
- }
- function startTagInHead(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.BASE:
- case TAG_ID.BASEFONT:
- case TAG_ID.BGSOUND:
- case TAG_ID.LINK:
- case TAG_ID.META: {
- p._appendElement(token, NS.HTML);
- token.ackSelfClosing = true;
- break;
- }
- case TAG_ID.TITLE: {
- p._switchToTextParsing(token, TokenizerMode.RCDATA);
- break;
- }
- case TAG_ID.NOSCRIPT: {
- if (p.options.scriptingEnabled) {
- p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
- } else {
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;
- }
- break;
- }
- case TAG_ID.NOFRAMES:
- case TAG_ID.STYLE: {
- p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
- break;
- }
- case TAG_ID.SCRIPT: {
- p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);
- break;
- }
- case TAG_ID.TEMPLATE: {
- p._insertTemplate(token);
- p.activeFormattingElements.insertMarker();
- p.framesetOk = false;
- p.insertionMode = InsertionMode.IN_TEMPLATE;
- p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
- break;
- }
- case TAG_ID.HEAD: {
- p._err(token, ERR.misplacedStartTagForHeadElement);
- break;
- }
- default: {
- tokenInHead(p, token);
- }
- }
- }
- function endTagInHead(p, token) {
- switch (token.tagID) {
- case TAG_ID.HEAD: {
- p.openElements.pop();
- p.insertionMode = InsertionMode.AFTER_HEAD;
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.BR:
- case TAG_ID.HTML: {
- tokenInHead(p, token);
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- default: {
- p._err(token, ERR.endTagWithoutMatchingOpenElement);
- }
- }
- }
- function templateEndTagInHead(p, token) {
- if (p.openElements.tmplCount > 0) {
- p.openElements.generateImpliedEndTagsThoroughly();
- if (p.openElements.currentTagId !== TAG_ID.TEMPLATE) {
- p._err(token, ERR.closingOfElementWithOpenChildElements);
- }
- p.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
- p.activeFormattingElements.clearToLastMarker();
- p.tmplInsertionModeStack.shift();
- p._resetInsertionMode();
- } else {
- p._err(token, ERR.endTagWithoutMatchingOpenElement);
- }
- }
- function tokenInHead(p, token) {
- p.openElements.pop();
- p.insertionMode = InsertionMode.AFTER_HEAD;
- p._processToken(token);
- }
- function startTagInHeadNoScript(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.BASEFONT:
- case TAG_ID.BGSOUND:
- case TAG_ID.HEAD:
- case TAG_ID.LINK:
- case TAG_ID.META:
- case TAG_ID.NOFRAMES:
- case TAG_ID.STYLE: {
- startTagInHead(p, token);
- break;
- }
- case TAG_ID.NOSCRIPT: {
- p._err(token, ERR.nestedNoscriptInHead);
- break;
- }
- default: {
- tokenInHeadNoScript(p, token);
- }
- }
- }
- function endTagInHeadNoScript(p, token) {
- switch (token.tagID) {
- case TAG_ID.NOSCRIPT: {
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_HEAD;
- break;
- }
- case TAG_ID.BR: {
- tokenInHeadNoScript(p, token);
- break;
- }
- default: {
- p._err(token, ERR.endTagWithoutMatchingOpenElement);
- }
- }
- }
- function tokenInHeadNoScript(p, token) {
- const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;
- p._err(token, errCode);
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_HEAD;
- p._processToken(token);
- }
- function startTagAfterHead(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.BODY: {
- p._insertElement(token, NS.HTML);
- p.framesetOk = false;
- p.insertionMode = InsertionMode.IN_BODY;
- break;
- }
- case TAG_ID.FRAMESET: {
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_FRAMESET;
- break;
- }
- case TAG_ID.BASE:
- case TAG_ID.BASEFONT:
- case TAG_ID.BGSOUND:
- case TAG_ID.LINK:
- case TAG_ID.META:
- case TAG_ID.NOFRAMES:
- case TAG_ID.SCRIPT:
- case TAG_ID.STYLE:
- case TAG_ID.TEMPLATE:
- case TAG_ID.TITLE: {
- p._err(token, ERR.abandonedHeadElementChild);
- p.openElements.push(p.headElement, TAG_ID.HEAD);
- startTagInHead(p, token);
- p.openElements.remove(p.headElement);
- break;
- }
- case TAG_ID.HEAD: {
- p._err(token, ERR.misplacedStartTagForHeadElement);
- break;
- }
- default: {
- tokenAfterHead(p, token);
- }
- }
- }
- function endTagAfterHead(p, token) {
- switch (token.tagID) {
- case TAG_ID.BODY:
- case TAG_ID.HTML:
- case TAG_ID.BR: {
- tokenAfterHead(p, token);
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- default: {
- p._err(token, ERR.endTagWithoutMatchingOpenElement);
- }
- }
- }
- function tokenAfterHead(p, token) {
- p._insertFakeElement(TAG_NAMES.BODY, TAG_ID.BODY);
- p.insertionMode = InsertionMode.IN_BODY;
- modeInBody(p, token);
- }
- function modeInBody(p, token) {
- switch (token.type) {
- case TokenType.CHARACTER: {
- characterInBody(p, token);
- break;
- }
- case TokenType.WHITESPACE_CHARACTER: {
- whitespaceCharacterInBody(p, token);
- break;
- }
- case TokenType.COMMENT: {
- appendComment(p, token);
- break;
- }
- case TokenType.START_TAG: {
- startTagInBody(p, token);
- break;
- }
- case TokenType.END_TAG: {
- endTagInBody(p, token);
- break;
- }
- case TokenType.EOF: {
- eofInBody(p, token);
- break;
- }
- default:
- }
- }
- function whitespaceCharacterInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertCharacters(token);
- }
- function characterInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertCharacters(token);
- p.framesetOk = false;
- }
- function htmlStartTagInBody(p, token) {
- if (p.openElements.tmplCount === 0) {
- p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);
- }
- }
- function bodyStartTagInBody(p, token) {
- const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
- if (bodyElement && p.openElements.tmplCount === 0) {
- p.framesetOk = false;
- p.treeAdapter.adoptAttributes(bodyElement, token.attrs);
- }
- }
- function framesetStartTagInBody(p, token) {
- const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
- if (p.framesetOk && bodyElement) {
- p.treeAdapter.detachNode(bodyElement);
- p.openElements.popAllUpToHtmlElement();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_FRAMESET;
- }
- }
- function addressStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- }
- function numberedHeaderStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- if (isNumberedHeader(p.openElements.currentTagId)) {
- p.openElements.pop();
- }
- p._insertElement(token, NS.HTML);
- }
- function preStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- p.skipNextNewLine = true;
- p.framesetOk = false;
- }
- function formStartTagInBody(p, token) {
- const inTemplate = p.openElements.tmplCount > 0;
- if (!p.formElement || inTemplate) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- if (!inTemplate) {
- p.formElement = p.openElements.current;
- }
- }
- }
- function listItemStartTagInBody(p, token) {
- p.framesetOk = false;
- const tn = token.tagID;
- for (let i = p.openElements.stackTop; i >= 0; i--) {
- const elementId = p.openElements.tagIDs[i];
- if (tn === TAG_ID.LI && elementId === TAG_ID.LI || (tn === TAG_ID.DD || tn === TAG_ID.DT) && (elementId === TAG_ID.DD || elementId === TAG_ID.DT)) {
- p.openElements.generateImpliedEndTagsWithExclusion(elementId);
- p.openElements.popUntilTagNamePopped(elementId);
- break;
- }
- if (elementId !== TAG_ID.ADDRESS && elementId !== TAG_ID.DIV && elementId !== TAG_ID.P && p._isSpecialElement(p.openElements.items[i], elementId)) {
- break;
- }
- }
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- }
- function plaintextStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- p.tokenizer.state = TokenizerMode.PLAINTEXT;
- }
- function buttonStartTagInBody(p, token) {
- if (p.openElements.hasInScope(TAG_ID.BUTTON)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(TAG_ID.BUTTON);
- }
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- p.framesetOk = false;
- }
- function aStartTagInBody(p, token) {
- const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TAG_NAMES.A);
- if (activeElementEntry) {
- callAdoptionAgency(p, token);
- p.openElements.remove(activeElementEntry.element);
- p.activeFormattingElements.removeEntry(activeElementEntry);
- }
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- p.activeFormattingElements.pushElement(p.openElements.current, token);
- }
- function bStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- p.activeFormattingElements.pushElement(p.openElements.current, token);
- }
- function nobrStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- if (p.openElements.hasInScope(TAG_ID.NOBR)) {
- callAdoptionAgency(p, token);
- p._reconstructActiveFormattingElements();
- }
- p._insertElement(token, NS.HTML);
- p.activeFormattingElements.pushElement(p.openElements.current, token);
- }
- function appletStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- p.activeFormattingElements.insertMarker();
- p.framesetOk = false;
- }
- function tableStartTagInBody(p, token) {
- if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._insertElement(token, NS.HTML);
- p.framesetOk = false;
- p.insertionMode = InsertionMode.IN_TABLE;
- }
- function areaStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._appendElement(token, NS.HTML);
- p.framesetOk = false;
- token.ackSelfClosing = true;
- }
- function isHiddenInput(token) {
- const inputType = getTokenAttr(token, ATTRS.TYPE);
- return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;
- }
- function inputStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._appendElement(token, NS.HTML);
- if (!isHiddenInput(token)) {
- p.framesetOk = false;
- }
- token.ackSelfClosing = true;
- }
- function paramStartTagInBody(p, token) {
- p._appendElement(token, NS.HTML);
- token.ackSelfClosing = true;
- }
- function hrStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._appendElement(token, NS.HTML);
- p.framesetOk = false;
- token.ackSelfClosing = true;
- }
- function imageStartTagInBody(p, token) {
- token.tagName = TAG_NAMES.IMG;
- token.tagID = TAG_ID.IMG;
- areaStartTagInBody(p, token);
- }
- function textareaStartTagInBody(p, token) {
- p._insertElement(token, NS.HTML);
- p.skipNextNewLine = true;
- p.tokenizer.state = TokenizerMode.RCDATA;
- p.originalInsertionMode = p.insertionMode;
- p.framesetOk = false;
- p.insertionMode = InsertionMode.TEXT;
- }
- function xmpStartTagInBody(p, token) {
- if (p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._closePElement();
- }
- p._reconstructActiveFormattingElements();
- p.framesetOk = false;
- p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
- }
- function iframeStartTagInBody(p, token) {
- p.framesetOk = false;
- p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
- }
- function noembedStartTagInBody(p, token) {
- p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
- }
- function selectStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- p.framesetOk = false;
- p.insertionMode = p.insertionMode === InsertionMode.IN_TABLE || p.insertionMode === InsertionMode.IN_CAPTION || p.insertionMode === InsertionMode.IN_TABLE_BODY || p.insertionMode === InsertionMode.IN_ROW || p.insertionMode === InsertionMode.IN_CELL ? InsertionMode.IN_SELECT_IN_TABLE : InsertionMode.IN_SELECT;
- }
- function optgroupStartTagInBody(p, token) {
- if (p.openElements.currentTagId === TAG_ID.OPTION) {
- p.openElements.pop();
- }
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- }
- function rbStartTagInBody(p, token) {
- if (p.openElements.hasInScope(TAG_ID.RUBY)) {
- p.openElements.generateImpliedEndTags();
- }
- p._insertElement(token, NS.HTML);
- }
- function rtStartTagInBody(p, token) {
- if (p.openElements.hasInScope(TAG_ID.RUBY)) {
- p.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.RTC);
- }
- p._insertElement(token, NS.HTML);
- }
- function mathStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- adjustTokenMathMLAttrs(token);
- adjustTokenXMLAttrs(token);
- if (token.selfClosing) {
- p._appendElement(token, NS.MATHML);
- } else {
- p._insertElement(token, NS.MATHML);
- }
- token.ackSelfClosing = true;
- }
- function svgStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- adjustTokenSVGAttrs(token);
- adjustTokenXMLAttrs(token);
- if (token.selfClosing) {
- p._appendElement(token, NS.SVG);
- } else {
- p._insertElement(token, NS.SVG);
- }
- token.ackSelfClosing = true;
- }
- function genericStartTagInBody(p, token) {
- p._reconstructActiveFormattingElements();
- p._insertElement(token, NS.HTML);
- }
- function startTagInBody(p, token) {
- switch (token.tagID) {
- case TAG_ID.I:
- case TAG_ID.S:
- case TAG_ID.B:
- case TAG_ID.U:
- case TAG_ID.EM:
- case TAG_ID.TT:
- case TAG_ID.BIG:
- case TAG_ID.CODE:
- case TAG_ID.FONT:
- case TAG_ID.SMALL:
- case TAG_ID.STRIKE:
- case TAG_ID.STRONG: {
- bStartTagInBody(p, token);
- break;
- }
- case TAG_ID.A: {
- aStartTagInBody(p, token);
- break;
- }
- case TAG_ID.H1:
- case TAG_ID.H2:
- case TAG_ID.H3:
- case TAG_ID.H4:
- case TAG_ID.H5:
- case TAG_ID.H6: {
- numberedHeaderStartTagInBody(p, token);
- break;
- }
- case TAG_ID.P:
- case TAG_ID.DL:
- case TAG_ID.OL:
- case TAG_ID.UL:
- case TAG_ID.DIV:
- case TAG_ID.DIR:
- case TAG_ID.NAV:
- case TAG_ID.MAIN:
- case TAG_ID.MENU:
- case TAG_ID.ASIDE:
- case TAG_ID.CENTER:
- case TAG_ID.FIGURE:
- case TAG_ID.FOOTER:
- case TAG_ID.HEADER:
- case TAG_ID.HGROUP:
- case TAG_ID.DIALOG:
- case TAG_ID.DETAILS:
- case TAG_ID.ADDRESS:
- case TAG_ID.ARTICLE:
- case TAG_ID.SECTION:
- case TAG_ID.SUMMARY:
- case TAG_ID.FIELDSET:
- case TAG_ID.BLOCKQUOTE:
- case TAG_ID.FIGCAPTION: {
- addressStartTagInBody(p, token);
- break;
- }
- case TAG_ID.LI:
- case TAG_ID.DD:
- case TAG_ID.DT: {
- listItemStartTagInBody(p, token);
- break;
- }
- case TAG_ID.BR:
- case TAG_ID.IMG:
- case TAG_ID.WBR:
- case TAG_ID.AREA:
- case TAG_ID.EMBED:
- case TAG_ID.KEYGEN: {
- areaStartTagInBody(p, token);
- break;
- }
- case TAG_ID.HR: {
- hrStartTagInBody(p, token);
- break;
- }
- case TAG_ID.RB:
- case TAG_ID.RTC: {
- rbStartTagInBody(p, token);
- break;
- }
- case TAG_ID.RT:
- case TAG_ID.RP: {
- rtStartTagInBody(p, token);
- break;
- }
- case TAG_ID.PRE:
- case TAG_ID.LISTING: {
- preStartTagInBody(p, token);
- break;
- }
- case TAG_ID.XMP: {
- xmpStartTagInBody(p, token);
- break;
- }
- case TAG_ID.SVG: {
- svgStartTagInBody(p, token);
- break;
- }
- case TAG_ID.HTML: {
- htmlStartTagInBody(p, token);
- break;
- }
- case TAG_ID.BASE:
- case TAG_ID.LINK:
- case TAG_ID.META:
- case TAG_ID.STYLE:
- case TAG_ID.TITLE:
- case TAG_ID.SCRIPT:
- case TAG_ID.BGSOUND:
- case TAG_ID.BASEFONT:
- case TAG_ID.TEMPLATE: {
- startTagInHead(p, token);
- break;
- }
- case TAG_ID.BODY: {
- bodyStartTagInBody(p, token);
- break;
- }
- case TAG_ID.FORM: {
- formStartTagInBody(p, token);
- break;
- }
- case TAG_ID.NOBR: {
- nobrStartTagInBody(p, token);
- break;
- }
- case TAG_ID.MATH: {
- mathStartTagInBody(p, token);
- break;
- }
- case TAG_ID.TABLE: {
- tableStartTagInBody(p, token);
- break;
- }
- case TAG_ID.INPUT: {
- inputStartTagInBody(p, token);
- break;
- }
- case TAG_ID.PARAM:
- case TAG_ID.TRACK:
- case TAG_ID.SOURCE: {
- paramStartTagInBody(p, token);
- break;
- }
- case TAG_ID.IMAGE: {
- imageStartTagInBody(p, token);
- break;
- }
- case TAG_ID.BUTTON: {
- buttonStartTagInBody(p, token);
- break;
- }
- case TAG_ID.APPLET:
- case TAG_ID.OBJECT:
- case TAG_ID.MARQUEE: {
- appletStartTagInBody(p, token);
- break;
- }
- case TAG_ID.IFRAME: {
- iframeStartTagInBody(p, token);
- break;
- }
- case TAG_ID.SELECT: {
- selectStartTagInBody(p, token);
- break;
- }
- case TAG_ID.OPTION:
- case TAG_ID.OPTGROUP: {
- optgroupStartTagInBody(p, token);
- break;
- }
- case TAG_ID.NOEMBED: {
- noembedStartTagInBody(p, token);
- break;
- }
- case TAG_ID.FRAMESET: {
- framesetStartTagInBody(p, token);
- break;
- }
- case TAG_ID.TEXTAREA: {
- textareaStartTagInBody(p, token);
- break;
- }
- case TAG_ID.NOSCRIPT: {
- if (p.options.scriptingEnabled) {
- noembedStartTagInBody(p, token);
- } else {
- genericStartTagInBody(p, token);
- }
- break;
- }
- case TAG_ID.PLAINTEXT: {
- plaintextStartTagInBody(p, token);
- break;
- }
- case TAG_ID.COL:
- case TAG_ID.TH:
- case TAG_ID.TD:
- case TAG_ID.TR:
- case TAG_ID.HEAD:
- case TAG_ID.FRAME:
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD:
- case TAG_ID.CAPTION:
- case TAG_ID.COLGROUP: {
- break;
- }
- default: {
- genericStartTagInBody(p, token);
- }
- }
- }
- function bodyEndTagInBody(p, token) {
- if (p.openElements.hasInScope(TAG_ID.BODY)) {
- p.insertionMode = InsertionMode.AFTER_BODY;
- if (p.options.sourceCodeLocationInfo) {
- const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
- if (bodyElement) {
- p._setEndLocation(bodyElement, token);
- }
- }
- }
- }
- function htmlEndTagInBody(p, token) {
- if (p.openElements.hasInScope(TAG_ID.BODY)) {
- p.insertionMode = InsertionMode.AFTER_BODY;
- endTagAfterBody(p, token);
- }
- }
- function addressEndTagInBody(p, token) {
- const tn = token.tagID;
- if (p.openElements.hasInScope(tn)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(tn);
- }
- }
- function formEndTagInBody(p) {
- const inTemplate = p.openElements.tmplCount > 0;
- const { formElement } = p;
- if (!inTemplate) {
- p.formElement = null;
- }
- if ((formElement || inTemplate) && p.openElements.hasInScope(TAG_ID.FORM)) {
- p.openElements.generateImpliedEndTags();
- if (inTemplate) {
- p.openElements.popUntilTagNamePopped(TAG_ID.FORM);
- } else if (formElement) {
- p.openElements.remove(formElement);
- }
- }
- }
- function pEndTagInBody(p) {
- if (!p.openElements.hasInButtonScope(TAG_ID.P)) {
- p._insertFakeElement(TAG_NAMES.P, TAG_ID.P);
- }
- p._closePElement();
- }
- function liEndTagInBody(p) {
- if (p.openElements.hasInListItemScope(TAG_ID.LI)) {
- p.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.LI);
- p.openElements.popUntilTagNamePopped(TAG_ID.LI);
- }
- }
- function ddEndTagInBody(p, token) {
- const tn = token.tagID;
- if (p.openElements.hasInScope(tn)) {
- p.openElements.generateImpliedEndTagsWithExclusion(tn);
- p.openElements.popUntilTagNamePopped(tn);
- }
- }
- function numberedHeaderEndTagInBody(p) {
- if (p.openElements.hasNumberedHeaderInScope()) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilNumberedHeaderPopped();
- }
- }
- function appletEndTagInBody(p, token) {
- const tn = token.tagID;
- if (p.openElements.hasInScope(tn)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(tn);
- p.activeFormattingElements.clearToLastMarker();
- }
- }
- function brEndTagInBody(p) {
- p._reconstructActiveFormattingElements();
- p._insertFakeElement(TAG_NAMES.BR, TAG_ID.BR);
- p.openElements.pop();
- p.framesetOk = false;
- }
- function genericEndTagInBody(p, token) {
- const tn = token.tagName;
- const tid = token.tagID;
- for (let i = p.openElements.stackTop; i > 0; i--) {
- const element = p.openElements.items[i];
- const elementId = p.openElements.tagIDs[i];
- if (tid === elementId && (tid !== TAG_ID.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {
- p.openElements.generateImpliedEndTagsWithExclusion(tid);
- if (p.openElements.stackTop >= i)
- p.openElements.shortenToLength(i);
- break;
- }
- if (p._isSpecialElement(element, elementId)) {
- break;
- }
- }
- }
- function endTagInBody(p, token) {
- switch (token.tagID) {
- case TAG_ID.A:
- case TAG_ID.B:
- case TAG_ID.I:
- case TAG_ID.S:
- case TAG_ID.U:
- case TAG_ID.EM:
- case TAG_ID.TT:
- case TAG_ID.BIG:
- case TAG_ID.CODE:
- case TAG_ID.FONT:
- case TAG_ID.NOBR:
- case TAG_ID.SMALL:
- case TAG_ID.STRIKE:
- case TAG_ID.STRONG: {
- callAdoptionAgency(p, token);
- break;
- }
- case TAG_ID.P: {
- pEndTagInBody(p);
- break;
- }
- case TAG_ID.DL:
- case TAG_ID.UL:
- case TAG_ID.OL:
- case TAG_ID.DIR:
- case TAG_ID.DIV:
- case TAG_ID.NAV:
- case TAG_ID.PRE:
- case TAG_ID.MAIN:
- case TAG_ID.MENU:
- case TAG_ID.ASIDE:
- case TAG_ID.BUTTON:
- case TAG_ID.CENTER:
- case TAG_ID.FIGURE:
- case TAG_ID.FOOTER:
- case TAG_ID.HEADER:
- case TAG_ID.HGROUP:
- case TAG_ID.DIALOG:
- case TAG_ID.ADDRESS:
- case TAG_ID.ARTICLE:
- case TAG_ID.DETAILS:
- case TAG_ID.SECTION:
- case TAG_ID.SUMMARY:
- case TAG_ID.LISTING:
- case TAG_ID.FIELDSET:
- case TAG_ID.BLOCKQUOTE:
- case TAG_ID.FIGCAPTION: {
- addressEndTagInBody(p, token);
- break;
- }
- case TAG_ID.LI: {
- liEndTagInBody(p);
- break;
- }
- case TAG_ID.DD:
- case TAG_ID.DT: {
- ddEndTagInBody(p, token);
- break;
- }
- case TAG_ID.H1:
- case TAG_ID.H2:
- case TAG_ID.H3:
- case TAG_ID.H4:
- case TAG_ID.H5:
- case TAG_ID.H6: {
- numberedHeaderEndTagInBody(p);
- break;
- }
- case TAG_ID.BR: {
- brEndTagInBody(p);
- break;
- }
- case TAG_ID.BODY: {
- bodyEndTagInBody(p, token);
- break;
- }
- case TAG_ID.HTML: {
- htmlEndTagInBody(p, token);
- break;
- }
- case TAG_ID.FORM: {
- formEndTagInBody(p);
- break;
- }
- case TAG_ID.APPLET:
- case TAG_ID.OBJECT:
- case TAG_ID.MARQUEE: {
- appletEndTagInBody(p, token);
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- default: {
- genericEndTagInBody(p, token);
- }
- }
- }
- function eofInBody(p, token) {
- if (p.tmplInsertionModeStack.length > 0) {
- eofInTemplate(p, token);
- } else {
- stopParsing(p, token);
- }
- }
- function endTagInText(p, token) {
- var _a2;
- if (token.tagID === TAG_ID.SCRIPT) {
- (_a2 = p.scriptHandler) === null || _a2 === void 0 ? void 0 : _a2.call(p, p.openElements.current);
- }
- p.openElements.pop();
- p.insertionMode = p.originalInsertionMode;
- }
- function eofInText(p, token) {
- p._err(token, ERR.eofInElementThatCanContainOnlyText);
- p.openElements.pop();
- p.insertionMode = p.originalInsertionMode;
- p.onEof(token);
- }
- function characterInTable(p, token) {
- if (TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {
- p.pendingCharacterTokens.length = 0;
- p.hasNonWhitespacePendingCharacterToken = false;
- p.originalInsertionMode = p.insertionMode;
- p.insertionMode = InsertionMode.IN_TABLE_TEXT;
- switch (token.type) {
- case TokenType.CHARACTER: {
- characterInTableText(p, token);
- break;
- }
- case TokenType.WHITESPACE_CHARACTER: {
- whitespaceCharacterInTableText(p, token);
- break;
- }
- }
- } else {
- tokenInTable(p, token);
- }
- }
- function captionStartTagInTable(p, token) {
- p.openElements.clearBackToTableContext();
- p.activeFormattingElements.insertMarker();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_CAPTION;
- }
- function colgroupStartTagInTable(p, token) {
- p.openElements.clearBackToTableContext();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
- }
- function colStartTagInTable(p, token) {
- p.openElements.clearBackToTableContext();
- p._insertFakeElement(TAG_NAMES.COLGROUP, TAG_ID.COLGROUP);
- p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
- startTagInColumnGroup(p, token);
- }
- function tbodyStartTagInTable(p, token) {
- p.openElements.clearBackToTableContext();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- }
- function tdStartTagInTable(p, token) {
- p.openElements.clearBackToTableContext();
- p._insertFakeElement(TAG_NAMES.TBODY, TAG_ID.TBODY);
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- startTagInTableBody(p, token);
- }
- function tableStartTagInTable(p, token) {
- if (p.openElements.hasInTableScope(TAG_ID.TABLE)) {
- p.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
- p._resetInsertionMode();
- p._processStartTag(token);
- }
- }
- function inputStartTagInTable(p, token) {
- if (isHiddenInput(token)) {
- p._appendElement(token, NS.HTML);
- } else {
- tokenInTable(p, token);
- }
- token.ackSelfClosing = true;
- }
- function formStartTagInTable(p, token) {
- if (!p.formElement && p.openElements.tmplCount === 0) {
- p._insertElement(token, NS.HTML);
- p.formElement = p.openElements.current;
- p.openElements.pop();
- }
- }
- function startTagInTable(p, token) {
- switch (token.tagID) {
- case TAG_ID.TD:
- case TAG_ID.TH:
- case TAG_ID.TR: {
- tdStartTagInTable(p, token);
- break;
- }
- case TAG_ID.STYLE:
- case TAG_ID.SCRIPT:
- case TAG_ID.TEMPLATE: {
- startTagInHead(p, token);
- break;
- }
- case TAG_ID.COL: {
- colStartTagInTable(p, token);
- break;
- }
- case TAG_ID.FORM: {
- formStartTagInTable(p, token);
- break;
- }
- case TAG_ID.TABLE: {
- tableStartTagInTable(p, token);
- break;
- }
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD: {
- tbodyStartTagInTable(p, token);
- break;
- }
- case TAG_ID.INPUT: {
- inputStartTagInTable(p, token);
- break;
- }
- case TAG_ID.CAPTION: {
- captionStartTagInTable(p, token);
- break;
- }
- case TAG_ID.COLGROUP: {
- colgroupStartTagInTable(p, token);
- break;
- }
- default: {
- tokenInTable(p, token);
- }
- }
- }
- function endTagInTable(p, token) {
- switch (token.tagID) {
- case TAG_ID.TABLE: {
- if (p.openElements.hasInTableScope(TAG_ID.TABLE)) {
- p.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
- p._resetInsertionMode();
- }
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.HTML:
- case TAG_ID.TBODY:
- case TAG_ID.TD:
- case TAG_ID.TFOOT:
- case TAG_ID.TH:
- case TAG_ID.THEAD:
- case TAG_ID.TR: {
- break;
- }
- default: {
- tokenInTable(p, token);
- }
- }
- }
- function tokenInTable(p, token) {
- const savedFosterParentingState = p.fosterParentingEnabled;
- p.fosterParentingEnabled = true;
- modeInBody(p, token);
- p.fosterParentingEnabled = savedFosterParentingState;
- }
- function whitespaceCharacterInTableText(p, token) {
- p.pendingCharacterTokens.push(token);
- }
- function characterInTableText(p, token) {
- p.pendingCharacterTokens.push(token);
- p.hasNonWhitespacePendingCharacterToken = true;
- }
- function tokenInTableText(p, token) {
- let i = 0;
- if (p.hasNonWhitespacePendingCharacterToken) {
- for (; i < p.pendingCharacterTokens.length; i++) {
- tokenInTable(p, p.pendingCharacterTokens[i]);
- }
- } else {
- for (; i < p.pendingCharacterTokens.length; i++) {
- p._insertCharacters(p.pendingCharacterTokens[i]);
- }
- }
- p.insertionMode = p.originalInsertionMode;
- p._processToken(token);
- }
- var TABLE_VOID_ELEMENTS = /* @__PURE__ */ new Set([TAG_ID.CAPTION, TAG_ID.COL, TAG_ID.COLGROUP, TAG_ID.TBODY, TAG_ID.TD, TAG_ID.TFOOT, TAG_ID.TH, TAG_ID.THEAD, TAG_ID.TR]);
- function startTagInCaption(p, token) {
- const tn = token.tagID;
- if (TABLE_VOID_ELEMENTS.has(tn)) {
- if (p.openElements.hasInTableScope(TAG_ID.CAPTION)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
- p.activeFormattingElements.clearToLastMarker();
- p.insertionMode = InsertionMode.IN_TABLE;
- startTagInTable(p, token);
- }
- } else {
- startTagInBody(p, token);
- }
- }
- function endTagInCaption(p, token) {
- const tn = token.tagID;
- switch (tn) {
- case TAG_ID.CAPTION:
- case TAG_ID.TABLE: {
- if (p.openElements.hasInTableScope(TAG_ID.CAPTION)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
- p.activeFormattingElements.clearToLastMarker();
- p.insertionMode = InsertionMode.IN_TABLE;
- if (tn === TAG_ID.TABLE) {
- endTagInTable(p, token);
- }
- }
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.HTML:
- case TAG_ID.TBODY:
- case TAG_ID.TD:
- case TAG_ID.TFOOT:
- case TAG_ID.TH:
- case TAG_ID.THEAD:
- case TAG_ID.TR: {
- break;
- }
- default: {
- endTagInBody(p, token);
- }
- }
- }
- function startTagInColumnGroup(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.COL: {
- p._appendElement(token, NS.HTML);
- token.ackSelfClosing = true;
- break;
- }
- case TAG_ID.TEMPLATE: {
- startTagInHead(p, token);
- break;
- }
- default: {
- tokenInColumnGroup(p, token);
- }
- }
- }
- function endTagInColumnGroup(p, token) {
- switch (token.tagID) {
- case TAG_ID.COLGROUP: {
- if (p.openElements.currentTagId === TAG_ID.COLGROUP) {
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE;
- }
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- case TAG_ID.COL: {
- break;
- }
- default: {
- tokenInColumnGroup(p, token);
- }
- }
- }
- function tokenInColumnGroup(p, token) {
- if (p.openElements.currentTagId === TAG_ID.COLGROUP) {
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE;
- p._processToken(token);
- }
- }
- function startTagInTableBody(p, token) {
- switch (token.tagID) {
- case TAG_ID.TR: {
- p.openElements.clearBackToTableBodyContext();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_ROW;
- break;
- }
- case TAG_ID.TH:
- case TAG_ID.TD: {
- p.openElements.clearBackToTableBodyContext();
- p._insertFakeElement(TAG_NAMES.TR, TAG_ID.TR);
- p.insertionMode = InsertionMode.IN_ROW;
- startTagInRow(p, token);
- break;
- }
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD: {
- if (p.openElements.hasTableBodyContextInTableScope()) {
- p.openElements.clearBackToTableBodyContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE;
- startTagInTable(p, token);
- }
- break;
- }
- default: {
- startTagInTable(p, token);
- }
- }
- }
- function endTagInTableBody(p, token) {
- const tn = token.tagID;
- switch (token.tagID) {
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD: {
- if (p.openElements.hasInTableScope(tn)) {
- p.openElements.clearBackToTableBodyContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE;
- }
- break;
- }
- case TAG_ID.TABLE: {
- if (p.openElements.hasTableBodyContextInTableScope()) {
- p.openElements.clearBackToTableBodyContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE;
- endTagInTable(p, token);
- }
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.HTML:
- case TAG_ID.TD:
- case TAG_ID.TH:
- case TAG_ID.TR: {
- break;
- }
- default: {
- endTagInTable(p, token);
- }
- }
- }
- function startTagInRow(p, token) {
- switch (token.tagID) {
- case TAG_ID.TH:
- case TAG_ID.TD: {
- p.openElements.clearBackToTableRowContext();
- p._insertElement(token, NS.HTML);
- p.insertionMode = InsertionMode.IN_CELL;
- p.activeFormattingElements.insertMarker();
- break;
- }
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD:
- case TAG_ID.TR: {
- if (p.openElements.hasInTableScope(TAG_ID.TR)) {
- p.openElements.clearBackToTableRowContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- startTagInTableBody(p, token);
- }
- break;
- }
- default: {
- startTagInTable(p, token);
- }
- }
- }
- function endTagInRow(p, token) {
- switch (token.tagID) {
- case TAG_ID.TR: {
- if (p.openElements.hasInTableScope(TAG_ID.TR)) {
- p.openElements.clearBackToTableRowContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- }
- break;
- }
- case TAG_ID.TABLE: {
- if (p.openElements.hasInTableScope(TAG_ID.TR)) {
- p.openElements.clearBackToTableRowContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- endTagInTableBody(p, token);
- }
- break;
- }
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD: {
- if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope(TAG_ID.TR)) {
- p.openElements.clearBackToTableRowContext();
- p.openElements.pop();
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- endTagInTableBody(p, token);
- }
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.HTML:
- case TAG_ID.TD:
- case TAG_ID.TH: {
- break;
- }
- default: {
- endTagInTable(p, token);
- }
- }
- }
- function startTagInCell(p, token) {
- const tn = token.tagID;
- if (TABLE_VOID_ELEMENTS.has(tn)) {
- if (p.openElements.hasInTableScope(TAG_ID.TD) || p.openElements.hasInTableScope(TAG_ID.TH)) {
- p._closeTableCell();
- startTagInRow(p, token);
- }
- } else {
- startTagInBody(p, token);
- }
- }
- function endTagInCell(p, token) {
- const tn = token.tagID;
- switch (tn) {
- case TAG_ID.TD:
- case TAG_ID.TH: {
- if (p.openElements.hasInTableScope(tn)) {
- p.openElements.generateImpliedEndTags();
- p.openElements.popUntilTagNamePopped(tn);
- p.activeFormattingElements.clearToLastMarker();
- p.insertionMode = InsertionMode.IN_ROW;
- }
- break;
- }
- case TAG_ID.TABLE:
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD:
- case TAG_ID.TR: {
- if (p.openElements.hasInTableScope(tn)) {
- p._closeTableCell();
- endTagInRow(p, token);
- }
- break;
- }
- case TAG_ID.BODY:
- case TAG_ID.CAPTION:
- case TAG_ID.COL:
- case TAG_ID.COLGROUP:
- case TAG_ID.HTML: {
- break;
- }
- default: {
- endTagInBody(p, token);
- }
- }
- }
- function startTagInSelect(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.OPTION: {
- if (p.openElements.currentTagId === TAG_ID.OPTION) {
- p.openElements.pop();
- }
- p._insertElement(token, NS.HTML);
- break;
- }
- case TAG_ID.OPTGROUP: {
- if (p.openElements.currentTagId === TAG_ID.OPTION) {
- p.openElements.pop();
- }
- if (p.openElements.currentTagId === TAG_ID.OPTGROUP) {
- p.openElements.pop();
- }
- p._insertElement(token, NS.HTML);
- break;
- }
- case TAG_ID.INPUT:
- case TAG_ID.KEYGEN:
- case TAG_ID.TEXTAREA:
- case TAG_ID.SELECT: {
- if (p.openElements.hasInSelectScope(TAG_ID.SELECT)) {
- p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
- p._resetInsertionMode();
- if (token.tagID !== TAG_ID.SELECT) {
- p._processStartTag(token);
- }
- }
- break;
- }
- case TAG_ID.SCRIPT:
- case TAG_ID.TEMPLATE: {
- startTagInHead(p, token);
- break;
- }
- default:
- }
- }
- function endTagInSelect(p, token) {
- switch (token.tagID) {
- case TAG_ID.OPTGROUP: {
- if (p.openElements.stackTop > 0 && p.openElements.currentTagId === TAG_ID.OPTION && p.openElements.tagIDs[p.openElements.stackTop - 1] === TAG_ID.OPTGROUP) {
- p.openElements.pop();
- }
- if (p.openElements.currentTagId === TAG_ID.OPTGROUP) {
- p.openElements.pop();
- }
- break;
- }
- case TAG_ID.OPTION: {
- if (p.openElements.currentTagId === TAG_ID.OPTION) {
- p.openElements.pop();
- }
- break;
- }
- case TAG_ID.SELECT: {
- if (p.openElements.hasInSelectScope(TAG_ID.SELECT)) {
- p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
- p._resetInsertionMode();
- }
- break;
- }
- case TAG_ID.TEMPLATE: {
- templateEndTagInHead(p, token);
- break;
- }
- default:
- }
- }
- function startTagInSelectInTable(p, token) {
- const tn = token.tagID;
- if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
- p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
- p._resetInsertionMode();
- p._processStartTag(token);
- } else {
- startTagInSelect(p, token);
- }
- }
- function endTagInSelectInTable(p, token) {
- const tn = token.tagID;
- if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
- if (p.openElements.hasInTableScope(tn)) {
- p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
- p._resetInsertionMode();
- p.onEndTag(token);
- }
- } else {
- endTagInSelect(p, token);
- }
- }
- function startTagInTemplate(p, token) {
- switch (token.tagID) {
- case TAG_ID.BASE:
- case TAG_ID.BASEFONT:
- case TAG_ID.BGSOUND:
- case TAG_ID.LINK:
- case TAG_ID.META:
- case TAG_ID.NOFRAMES:
- case TAG_ID.SCRIPT:
- case TAG_ID.STYLE:
- case TAG_ID.TEMPLATE:
- case TAG_ID.TITLE: {
- startTagInHead(p, token);
- break;
- }
- case TAG_ID.CAPTION:
- case TAG_ID.COLGROUP:
- case TAG_ID.TBODY:
- case TAG_ID.TFOOT:
- case TAG_ID.THEAD: {
- p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;
- p.insertionMode = InsertionMode.IN_TABLE;
- startTagInTable(p, token);
- break;
- }
- case TAG_ID.COL: {
- p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;
- p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
- startTagInColumnGroup(p, token);
- break;
- }
- case TAG_ID.TR: {
- p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;
- p.insertionMode = InsertionMode.IN_TABLE_BODY;
- startTagInTableBody(p, token);
- break;
- }
- case TAG_ID.TD:
- case TAG_ID.TH: {
- p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;
- p.insertionMode = InsertionMode.IN_ROW;
- startTagInRow(p, token);
- break;
- }
- default: {
- p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;
- p.insertionMode = InsertionMode.IN_BODY;
- startTagInBody(p, token);
- }
- }
- }
- function endTagInTemplate(p, token) {
- if (token.tagID === TAG_ID.TEMPLATE) {
- templateEndTagInHead(p, token);
- }
- }
- function eofInTemplate(p, token) {
- if (p.openElements.tmplCount > 0) {
- p.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
- p.activeFormattingElements.clearToLastMarker();
- p.tmplInsertionModeStack.shift();
- p._resetInsertionMode();
- p.onEof(token);
- } else {
- stopParsing(p, token);
- }
- }
- function startTagAfterBody(p, token) {
- if (token.tagID === TAG_ID.HTML) {
- startTagInBody(p, token);
- } else {
- tokenAfterBody(p, token);
- }
- }
- function endTagAfterBody(p, token) {
- var _a2;
- if (token.tagID === TAG_ID.HTML) {
- if (!p.fragmentContext) {
- p.insertionMode = InsertionMode.AFTER_AFTER_BODY;
- }
- if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === TAG_ID.HTML) {
- p._setEndLocation(p.openElements.items[0], token);
- const bodyElement = p.openElements.items[1];
- if (bodyElement && !((_a2 = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a2 === void 0 ? void 0 : _a2.endTag)) {
- p._setEndLocation(bodyElement, token);
- }
- }
- } else {
- tokenAfterBody(p, token);
- }
- }
- function tokenAfterBody(p, token) {
- p.insertionMode = InsertionMode.IN_BODY;
- modeInBody(p, token);
- }
- function startTagInFrameset(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.FRAMESET: {
- p._insertElement(token, NS.HTML);
- break;
- }
- case TAG_ID.FRAME: {
- p._appendElement(token, NS.HTML);
- token.ackSelfClosing = true;
- break;
- }
- case TAG_ID.NOFRAMES: {
- startTagInHead(p, token);
- break;
- }
- default:
- }
- }
- function endTagInFrameset(p, token) {
- if (token.tagID === TAG_ID.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {
- p.openElements.pop();
- if (!p.fragmentContext && p.openElements.currentTagId !== TAG_ID.FRAMESET) {
- p.insertionMode = InsertionMode.AFTER_FRAMESET;
- }
- }
- }
- function startTagAfterFrameset(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.NOFRAMES: {
- startTagInHead(p, token);
- break;
- }
- default:
- }
- }
- function endTagAfterFrameset(p, token) {
- if (token.tagID === TAG_ID.HTML) {
- p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;
- }
- }
- function startTagAfterAfterBody(p, token) {
- if (token.tagID === TAG_ID.HTML) {
- startTagInBody(p, token);
- } else {
- tokenAfterAfterBody(p, token);
- }
- }
- function tokenAfterAfterBody(p, token) {
- p.insertionMode = InsertionMode.IN_BODY;
- modeInBody(p, token);
- }
- function startTagAfterAfterFrameset(p, token) {
- switch (token.tagID) {
- case TAG_ID.HTML: {
- startTagInBody(p, token);
- break;
- }
- case TAG_ID.NOFRAMES: {
- startTagInHead(p, token);
- break;
- }
- default:
- }
- }
- function nullCharacterInForeignContent(p, token) {
- token.chars = REPLACEMENT_CHARACTER;
- p._insertCharacters(token);
- }
- function characterInForeignContent(p, token) {
- p._insertCharacters(token);
- p.framesetOk = false;
- }
- function popUntilHtmlOrIntegrationPoint(p) {
- while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML && !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {
- p.openElements.pop();
- }
- }
- function startTagInForeignContent(p, token) {
- if (causesExit(token)) {
- popUntilHtmlOrIntegrationPoint(p);
- p._startTagOutsideForeignContent(token);
- } else {
- const current = p._getAdjustedCurrentElement();
- const currentNs = p.treeAdapter.getNamespaceURI(current);
- if (currentNs === NS.MATHML) {
- adjustTokenMathMLAttrs(token);
- } else if (currentNs === NS.SVG) {
- adjustTokenSVGTagName(token);
- adjustTokenSVGAttrs(token);
- }
- adjustTokenXMLAttrs(token);
- if (token.selfClosing) {
- p._appendElement(token, currentNs);
- } else {
- p._insertElement(token, currentNs);
- }
- token.ackSelfClosing = true;
- }
- }
- function endTagInForeignContent(p, token) {
- if (token.tagID === TAG_ID.P || token.tagID === TAG_ID.BR) {
- popUntilHtmlOrIntegrationPoint(p);
- p._endTagOutsideForeignContent(token);
- return;
- }
- for (let i = p.openElements.stackTop; i > 0; i--) {
- const element = p.openElements.items[i];
- if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {
- p._endTagOutsideForeignContent(token);
- break;
- }
- const tagName = p.treeAdapter.getTagName(element);
- if (tagName.toLowerCase() === token.tagName) {
- token.tagName = tagName;
- p.openElements.shortenToLength(i);
- break;
- }
- }
- }
- // node_modules/entities/lib/esm/escape.js
- var xmlCodeMap = /* @__PURE__ */ new Map([
- [34, """],
- [38, "&"],
- [39, "'"],
- [60, "<"],
- [62, ">"]
- ]);
- var getCodePoint = (
- // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
- String.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) : (
- // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
- (c, index) => (c.charCodeAt(index) & 64512) === 55296 ? (c.charCodeAt(index) - 55296) * 1024 + c.charCodeAt(index + 1) - 56320 + 65536 : c.charCodeAt(index)
- )
- );
- function getEscaper(regex, map2) {
- return function escape(data) {
- let match;
- let lastIdx = 0;
- let result = "";
- while (match = regex.exec(data)) {
- if (lastIdx !== match.index) {
- result += data.substring(lastIdx, match.index);
- }
- result += map2.get(match[0].charCodeAt(0));
- lastIdx = match.index + 1;
- }
- return result + data.substring(lastIdx);
- };
- }
- var escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
- var escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
- [34, """],
- [38, "&"],
- [160, " "]
- ]));
- var escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
- [38, "&"],
- [60, "<"],
- [62, ">"],
- [160, " "]
- ]));
- // node_modules/parse5/dist/serializer/index.js
- var VOID_ELEMENTS = /* @__PURE__ */ new Set([
- TAG_NAMES.AREA,
- TAG_NAMES.BASE,
- TAG_NAMES.BASEFONT,
- TAG_NAMES.BGSOUND,
- TAG_NAMES.BR,
- TAG_NAMES.COL,
- TAG_NAMES.EMBED,
- TAG_NAMES.FRAME,
- TAG_NAMES.HR,
- TAG_NAMES.IMG,
- TAG_NAMES.INPUT,
- TAG_NAMES.KEYGEN,
- TAG_NAMES.LINK,
- TAG_NAMES.META,
- TAG_NAMES.PARAM,
- TAG_NAMES.SOURCE,
- TAG_NAMES.TRACK,
- TAG_NAMES.WBR
- ]);
- // node_modules/parse5/dist/index.js
- function parse(html, options) {
- return Parser.parse(html, options);
- }
- function parseFragment(fragmentContext, html, options) {
- if (typeof fragmentContext === "string") {
- options = html;
- html = fragmentContext;
- fragmentContext = null;
- }
- const parser = Parser.getFragmentParser(fragmentContext, options);
- parser.tokenizer.write(html, true);
- return parser.getFragment();
- }
- // src/mock-doc/parse-util.ts
- var docParser = /* @__PURE__ */ new WeakMap();
- function parseDocumentUtil(ownerDocument, html) {
- const doc = parse(html.trim(), getParser(ownerDocument));
- doc.documentElement = doc.firstElementChild;
- doc.head = doc.documentElement.firstElementChild;
- doc.body = doc.head.nextElementSibling;
- return doc;
- }
- function parseFragmentUtil(ownerDocument, html) {
- if (typeof html === "string") {
- html = html.trim();
- } else {
- html = "";
- }
- const frag = parseFragment(html, getParser(ownerDocument));
- return frag;
- }
- function getParser(ownerDocument) {
- let parseOptions = docParser.get(ownerDocument);
- if (parseOptions != null) {
- return parseOptions;
- }
- const treeAdapter = {
- createDocument() {
- const doc = ownerDocument.createElement("#document" /* DOCUMENT_NODE */);
- doc["x-mode"] = "no-quirks";
- return doc;
- },
- setNodeSourceCodeLocation(node, location2) {
- node.sourceCodeLocation = location2;
- },
- getNodeSourceCodeLocation(node) {
- return node.sourceCodeLocation;
- },
- createDocumentFragment() {
- return ownerDocument.createDocumentFragment();
- },
- createElement(tagName, namespaceURI, attrs) {
- const elm = ownerDocument.createElementNS(namespaceURI, tagName);
- for (let i = 0; i < attrs.length; i++) {
- const attr = attrs[i];
- if (attr.namespace == null || attr.namespace === "http://www.w3.org/1999/xhtml") {
- elm.setAttribute(attr.name, attr.value);
- } else {
- elm.setAttributeNS(attr.namespace, attr.name, attr.value);
- }
- }
- return elm;
- },
- createCommentNode(data) {
- return ownerDocument.createComment(data);
- },
- appendChild(parentNode, newNode) {
- parentNode.appendChild(newNode);
- },
- insertBefore(parentNode, newNode, referenceNode) {
- parentNode.insertBefore(newNode, referenceNode);
- },
- setTemplateContent(templateElement, contentElement) {
- templateElement.content = contentElement;
- },
- getTemplateContent(templateElement) {
- return templateElement.content;
- },
- setDocumentType(doc, name, publicId, systemId) {
- let doctypeNode = doc.childNodes.find((n) => n.nodeType === 10 /* DOCUMENT_TYPE_NODE */);
- if (doctypeNode == null) {
- doctypeNode = ownerDocument.createDocumentTypeNode();
- doc.insertBefore(doctypeNode, doc.firstChild);
- }
- doctypeNode.nodeValue = "!DOCTYPE";
- doctypeNode["x-name"] = name;
- doctypeNode["x-publicId"] = publicId;
- doctypeNode["x-systemId"] = systemId;
- },
- setDocumentMode(doc, mode) {
- doc["x-mode"] = mode;
- },
- getDocumentMode(doc) {
- return doc["x-mode"];
- },
- detachNode(node) {
- node.remove();
- },
- insertText(parentNode, text) {
- const lastChild = parentNode.lastChild;
- if (lastChild != null && lastChild.nodeType === 3 /* TEXT_NODE */) {
- lastChild.nodeValue += text;
- } else {
- parentNode.appendChild(ownerDocument.createTextNode(text));
- }
- },
- insertTextBefore(parentNode, text, referenceNode) {
- const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
- if (prevNode != null && prevNode.nodeType === 3 /* TEXT_NODE */) {
- prevNode.nodeValue += text;
- } else {
- parentNode.insertBefore(ownerDocument.createTextNode(text), referenceNode);
- }
- },
- adoptAttributes(recipient, attrs) {
- for (let i = 0; i < attrs.length; i++) {
- const attr = attrs[i];
- if (recipient.hasAttributeNS(attr.namespace, attr.name) === false) {
- recipient.setAttributeNS(attr.namespace, attr.name, attr.value);
- }
- }
- },
- getFirstChild(node) {
- return node.childNodes[0];
- },
- getChildNodes(node) {
- return node.childNodes;
- },
- getParentNode(node) {
- return node.parentNode;
- },
- getAttrList(element) {
- const attrs = element.attributes.__items.map((attr) => {
- return {
- name: attr.name,
- value: attr.value,
- namespace: attr.namespaceURI,
- prefix: null
- };
- });
- return attrs;
- },
- getTagName(element) {
- if (element.namespaceURI === "http://www.w3.org/1999/xhtml") {
- return element.nodeName.toLowerCase();
- } else {
- return element.nodeName;
- }
- },
- getNamespaceURI(element) {
- return element.namespaceURI;
- },
- getTextNodeContent(textNode) {
- return textNode.nodeValue;
- },
- getCommentNodeContent(commentNode) {
- return commentNode.nodeValue;
- },
- getDocumentTypeNodeName(doctypeNode) {
- return doctypeNode["x-name"];
- },
- getDocumentTypeNodePublicId(doctypeNode) {
- return doctypeNode["x-publicId"];
- },
- getDocumentTypeNodeSystemId(doctypeNode) {
- return doctypeNode["x-systemId"];
- },
- // @ts-ignore - a `MockNode` will never be assignable to a `TreeAdapterTypeMap['text']`. As a result, we cannot
- // complete this function signature
- isTextNode(node) {
- return node.nodeType === 3 /* TEXT_NODE */;
- },
- // @ts-ignore - a `MockNode` will never be assignable to a `TreeAdapterTypeMap['comment']`. As a result, we cannot
- // complete this function signature (which requires its return type to be a type predicate)
- isCommentNode(node) {
- return node.nodeType === 8 /* COMMENT_NODE */;
- },
- // @ts-ignore - a `MockNode` will never be assignable to a `TreeAdapterTypeMap['document']`. As a result, we cannot
- // complete this function signature (which requires its return type to be a type predicate)
- isDocumentTypeNode(node) {
- return node.nodeType === 10 /* DOCUMENT_TYPE_NODE */;
- },
- // @ts-ignore - a `MockNode` will never be assignable to a `TreeAdapterTypeMap['element']`. As a result, we cannot
- // complete this function signature (which requires its return type to be a type predicate)
- isElementNode(node) {
- return node.nodeType === 1 /* ELEMENT_NODE */;
- }
- };
- parseOptions = {
- treeAdapter
- };
- docParser.set(ownerDocument, parseOptions);
- return parseOptions;
- }
- // src/mock-doc/third-party/jquery.ts
- var jquery_default = (
- /*!
- * jQuery JavaScript Library v4.0.0-pre+9352011a7.dirty +selector
- * https://jquery.com/
- *
- * Copyright OpenJS Foundation and other contributors
- * Released under the MIT license
- * https://jquery.org/license
- *
- * Date: 2023-12-11T17:55Z
- */
- function(global2, factory) {
- "use strict";
- if (true) {
- return factory(global2, true);
- } else {
- factory(global2);
- }
- }({
- document: {
- createElement() {
- return {};
- },
- nodeType: 9,
- documentElement: {
- nodeType: 1,
- nodeName: "HTML"
- }
- }
- }, function(window, noGlobal) {
- "use strict";
- if (!window.document) {
- throw new Error("jQuery requires a window with a document");
- }
- var arr = [];
- var getProto = Object.getPrototypeOf;
- var slice = arr.slice;
- var flat = arr.flat ? function(array) {
- return arr.flat.call(array);
- } : function(array) {
- return arr.concat.apply([], array);
- };
- var push = arr.push;
- var indexOf = arr.indexOf;
- var class2type = {};
- var toString = class2type.toString;
- var hasOwn = class2type.hasOwnProperty;
- var fnToString = hasOwn.toString;
- var ObjectFunctionString = fnToString.call(Object);
- var support = {};
- function toType(obj) {
- if (obj == null) {
- return obj + "";
- }
- return typeof obj === "object" ? class2type[toString.call(obj)] || "object" : typeof obj;
- }
- function isWindow(obj) {
- return obj != null && obj === obj.window;
- }
- function isArrayLike(obj) {
- var length = !!obj && obj.length, type = toType(obj);
- if (typeof obj === "function" || isWindow(obj)) {
- return false;
- }
- return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
- }
- var document = window.document;
- var preservedScriptAttributes = {
- type: true,
- src: true,
- nonce: true,
- noModule: true
- };
- function DOMEval(code, node, doc) {
- doc = doc || document;
- var i2, script = doc.createElement("script");
- script.text = code;
- if (node) {
- for (i2 in preservedScriptAttributes) {
- if (node[i2]) {
- script[i2] = node[i2];
- }
- }
- }
- doc.head.appendChild(script).parentNode.removeChild(script);
- }
- const jQuery = {};
- var version = "4.0.0-pre+9352011a7.dirty +selector", rhtmlSuffix = /HTML$/i, jQueryOrig = function(selector, context) {
- return new jQuery.fn.init(selector, context);
- };
- jQuery.fn = jQuery.prototype = {
- // The current version of jQuery being used
- jquery: version,
- constructor: jQuery,
- // The default length of a jQuery object is 0
- length: 0,
- toArray: function() {
- return slice.call(this);
- },
- // Get the Nth element in the matched element set OR
- // Get the whole matched element set as a clean array
- get: function(num) {
- if (num == null) {
- return slice.call(this);
- }
- return num < 0 ? this[num + this.length] : this[num];
- },
- // Take an array of elements and push it onto the stack
- // (returning the new matched element set)
- pushStack: function(elems) {
- var ret = jQuery.merge(this.constructor(), elems);
- ret.prevObject = this;
- return ret;
- },
- // Execute a callback for every element in the matched set.
- each: function(callback) {
- return jQuery.each(this, callback);
- },
- map: function(callback) {
- return this.pushStack(jQuery.map(this, function(elem, i2) {
- return callback.call(elem, i2, elem);
- }));
- },
- slice: function() {
- return this.pushStack(slice.apply(this, arguments));
- },
- first: function() {
- return this.eq(0);
- },
- last: function() {
- return this.eq(-1);
- },
- even: function() {
- return this.pushStack(jQuery.grep(this, function(_elem, i2) {
- return (i2 + 1) % 2;
- }));
- },
- odd: function() {
- return this.pushStack(jQuery.grep(this, function(_elem, i2) {
- return i2 % 2;
- }));
- },
- eq: function(i2) {
- var len = this.length, j = +i2 + (i2 < 0 ? len : 0);
- return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
- },
- end: function() {
- return this.prevObject || this.constructor();
- }
- };
- jQuery.extend = jQuery.fn.extend = function() {
- var options, name, src, copy, copyIsArray, clone, target = arguments[0] || {}, i2 = 1, length = arguments.length, deep = false;
- if (typeof target === "boolean") {
- deep = target;
- target = arguments[i2] || {};
- i2++;
- }
- if (typeof target !== "object" && typeof target !== "function") {
- target = {};
- }
- if (i2 === length) {
- target = this;
- i2--;
- }
- for (; i2 < length; i2++) {
- if ((options = arguments[i2]) != null) {
- for (name in options) {
- copy = options[name];
- if (name === "__proto__" || target === copy) {
- continue;
- }
- if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
- src = target[name];
- if (copyIsArray && !Array.isArray(src)) {
- clone = [];
- } else if (!copyIsArray && !jQuery.isPlainObject(src)) {
- clone = {};
- } else {
- clone = src;
- }
- copyIsArray = false;
- target[name] = jQuery.extend(deep, clone, copy);
- } else if (copy !== void 0) {
- target[name] = copy;
- }
- }
- }
- }
- return target;
- };
- jQuery.extend({
- // Unique for each copy of jQuery on the page
- expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
- // Assume jQuery is ready without the ready module
- isReady: true,
- error: function(msg) {
- throw new Error(msg);
- },
- noop: function() {
- },
- isPlainObject: function(obj) {
- var proto, Ctor;
- if (!obj || toString.call(obj) !== "[object Object]") {
- return false;
- }
- proto = getProto(obj);
- if (!proto) {
- return true;
- }
- Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
- return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
- },
- isEmptyObject: function(obj) {
- var name;
- for (name in obj) {
- return false;
- }
- return true;
- },
- // Evaluates a script in a provided context; falls back to the global one
- // if not specified.
- globalEval: function(code, options, doc) {
- DOMEval(code, { nonce: options && options.nonce }, doc);
- },
- each: function(obj, callback) {
- var length, i2 = 0;
- if (isArrayLike(obj)) {
- length = obj.length;
- for (; i2 < length; i2++) {
- if (callback.call(obj[i2], i2, obj[i2]) === false) {
- break;
- }
- }
- } else {
- for (i2 in obj) {
- if (callback.call(obj[i2], i2, obj[i2]) === false) {
- break;
- }
- }
- }
- return obj;
- },
- // Retrieve the text value of an array of DOM nodes
- text: function(elem) {
- var node, ret = "", i2 = 0, nodeType = elem.nodeType;
- if (!nodeType) {
- while (node = elem[i2++]) {
- ret += jQuery.text(node);
- }
- }
- if (nodeType === 1 || nodeType === 11) {
- return elem.textContent;
- }
- if (nodeType === 9) {
- return elem.documentElement.textContent;
- }
- if (nodeType === 3 || nodeType === 4) {
- return elem.nodeValue;
- }
- return ret;
- },
- // results is for internal usage only
- makeArray: function(arr2, results) {
- var ret = results || [];
- if (arr2 != null) {
- if (isArrayLike(Object(arr2))) {
- jQuery.merge(
- ret,
- typeof arr2 === "string" ? [arr2] : arr2
- );
- } else {
- push.call(ret, arr2);
- }
- }
- return ret;
- },
- inArray: function(elem, arr2, i2) {
- return arr2 == null ? -1 : indexOf.call(arr2, elem, i2);
- },
- isXMLDoc: function(elem) {
- var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;
- return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML");
- },
- // Note: an element does not contain itself
- contains: function(a, b) {
- var bup = b && b.parentNode;
- return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+
- // IE doesn't have `contains` on SVG.
- (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
- },
- merge: function(first, second) {
- var len = +second.length, j = 0, i2 = first.length;
- for (; j < len; j++) {
- first[i2++] = second[j];
- }
- first.length = i2;
- return first;
- },
- grep: function(elems, callback, invert) {
- var callbackInverse, matches3 = [], i2 = 0, length = elems.length, callbackExpect = !invert;
- for (; i2 < length; i2++) {
- callbackInverse = !callback(elems[i2], i2);
- if (callbackInverse !== callbackExpect) {
- matches3.push(elems[i2]);
- }
- }
- return matches3;
- },
- // arg is for internal usage only
- map: function(elems, callback, arg) {
- var length, value, i2 = 0, ret = [];
- if (isArrayLike(elems)) {
- length = elems.length;
- for (; i2 < length; i2++) {
- value = callback(elems[i2], i2, arg);
- if (value != null) {
- ret.push(value);
- }
- }
- } else {
- for (i2 in elems) {
- value = callback(elems[i2], i2, arg);
- if (value != null) {
- ret.push(value);
- }
- }
- }
- return flat(ret);
- },
- // A global GUID counter for objects
- guid: 1,
- // jQuery.support is not used in Core but other projects attach their
- // properties to it so it needs to exist.
- support
- });
- if (typeof Symbol === "function") {
- jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
- }
- jQuery.each(
- "Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),
- function(_i, name) {
- class2type["[object " + name + "]"] = name.toLowerCase();
- }
- );
- function nodeName(elem, name) {
- return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
- }
- var pop = arr.pop;
- var whitespace = "[\\x20\\t\\r\\n\\f]";
- var isIE = document.documentMode;
- try {
- document.querySelector(":has(*,:jqfake)");
- support.cssHas = false;
- } catch (e) {
- support.cssHas = true;
- }
- var rbuggyQSA = [];
- if (isIE) {
- rbuggyQSA.push(
- // Support: IE 9 - 11+
- // IE's :disabled selector does not pick up the children of disabled fieldsets
- ":enabled",
- ":disabled",
- // Support: IE 11+
- // IE 11 doesn't find elements on a `[name='']` query in some cases.
- // Adding a temporary attribute to the document before the selection works
- // around the issue.
- "\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`
- );
- }
- if (!support.cssHas) {
- rbuggyQSA.push(":has");
- }
- rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
- var rtrimCSS = new RegExp(
- "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
- "g"
- );
- var identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+";
- var booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped";
- var rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*");
- var rdescend = new RegExp(whitespace + "|>");
- var rsibling = /[+~]/;
- var documentElement = document.documentElement;
- var matches2 = documentElement.matches || documentElement.msMatchesSelector;
- function createCache() {
- var keys = [];
- function cache(key, value) {
- if (keys.push(key + " ") > jQuery.expr.cacheLength) {
- delete cache[keys.shift()];
- }
- return cache[key + " "] = value;
- }
- return cache;
- }
- function testContext(context) {
- return context && typeof context.getElementsByTagName !== "undefined" && context;
- }
- var attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
- "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
- `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]";
- var pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)";
- var filterMatchExpr = {
- ID: new RegExp("^#(" + identifier + ")"),
- CLASS: new RegExp("^\\.(" + identifier + ")"),
- TAG: new RegExp("^(" + identifier + "|[*])"),
- ATTR: new RegExp("^" + attributes),
- PSEUDO: new RegExp("^" + pseudos),
- CHILD: new RegExp(
- "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)",
- "i"
- )
- };
- var rpseudo = new RegExp(pseudos);
- var runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) {
- var high = "0x" + escape.slice(1) - 65536;
- if (nonHex) {
- return nonHex;
- }
- return high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
- };
- function unescapeSelector(sel) {
- return sel.replace(runescape, funescape);
- }
- function selectorError(msg) {
- jQuery.error("Syntax error, unrecognized expression: " + msg);
- }
- var rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*");
- var tokenCache = createCache();
- function tokenize(selector, parseOnly) {
- var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
- if (cached) {
- return parseOnly ? 0 : cached.slice(0);
- }
- soFar = selector;
- groups = [];
- preFilters = jQuery.expr.preFilter;
- while (soFar) {
- if (!matched || (match = rcomma.exec(soFar))) {
- if (match) {
- soFar = soFar.slice(match[0].length) || soFar;
- }
- groups.push(tokens = []);
- }
- matched = false;
- if (match = rleadingCombinator.exec(soFar)) {
- matched = match.shift();
- tokens.push({
- value: matched,
- // Cast descendant combinators to space
- type: match[0].replace(rtrimCSS, " ")
- });
- soFar = soFar.slice(matched.length);
- }
- for (type in filterMatchExpr) {
- if ((match = jQuery.expr.match[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
- matched = match.shift();
- tokens.push({
- value: matched,
- type,
- matches: match
- });
- soFar = soFar.slice(matched.length);
- }
- }
- if (!matched) {
- break;
- }
- }
- if (parseOnly) {
- return soFar.length;
- }
- return soFar ? selectorError(selector) : (
- // Cache the tokens
- tokenCache(selector, groups).slice(0)
- );
- }
- var preFilter = {
- ATTR: function(match) {
- match[1] = unescapeSelector(match[1]);
- match[3] = unescapeSelector(match[3] || match[4] || match[5] || "");
- if (match[2] === "~=") {
- match[3] = " " + match[3] + " ";
- }
- return match.slice(0, 4);
- },
- CHILD: function(match) {
- match[1] = match[1].toLowerCase();
- if (match[1].slice(0, 3) === "nth") {
- if (!match[3]) {
- selectorError(match[0]);
- }
- match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
- match[5] = +(match[7] + match[8] || match[3] === "odd");
- } else if (match[3]) {
- selectorError(match[0]);
- }
- return match;
- },
- PSEUDO: function(match) {
- var excess, unquoted = !match[6] && match[2];
- if (filterMatchExpr.CHILD.test(match[0])) {
- return null;
- }
- if (match[3]) {
- match[2] = match[4] || match[5] || "";
- } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)
- (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis
- (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
- match[0] = match[0].slice(0, excess);
- match[2] = unquoted.slice(0, excess);
- }
- return match.slice(0, 3);
- }
- };
- function toSelector(tokens) {
- var i2 = 0, len = tokens.length, selector = "";
- for (; i2 < len; i2++) {
- selector += tokens[i2].value;
- }
- return selector;
- }
- var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
- function fcssescape(ch, asCodePoint) {
- if (asCodePoint) {
- if (ch === "\0") {
- return "\uFFFD";
- }
- return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
- }
- return "\\" + ch;
- }
- jQuery.escapeSelector = function(sel) {
- return (sel + "").replace(rcssescape, fcssescape);
- };
- var sort = arr.sort;
- var splice = arr.splice;
- var hasDuplicate;
- function sortOrder(a, b) {
- if (a === b) {
- hasDuplicate = true;
- return 0;
- }
- var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
- if (compare) {
- return compare;
- }
- compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (
- // Otherwise we know they are disconnected
- 1
- );
- if (compare & 1) {
- if (a == document || a.ownerDocument == document && jQuery.contains(document, a)) {
- return -1;
- }
- if (b == document || b.ownerDocument == document && jQuery.contains(document, b)) {
- return 1;
- }
- return 0;
- }
- return compare & 4 ? -1 : 1;
- }
- jQuery.uniqueSort = function(results) {
- var elem, duplicates = [], j = 0, i2 = 0;
- hasDuplicate = false;
- sort.call(results, sortOrder);
- if (hasDuplicate) {
- while (elem = results[i2++]) {
- if (elem === results[i2]) {
- j = duplicates.push(i2);
- }
- }
- while (j--) {
- splice.call(results, duplicates[j], 1);
- }
- }
- return results;
- };
- jQuery.fn.uniqueSort = function() {
- return this.pushStack(jQuery.uniqueSort(slice.apply(this)));
- };
- var i, outermostContext, document$1, documentElement$1, documentIsHTML, dirruns = 0, done = 0, classCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), rwhitespace = new RegExp(whitespace + "+", "g"), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = jQuery.extend({
- bool: new RegExp("^(?:" + booleans + ")$", "i"),
- // For use in libraries implementing .is()
- // We use this for POS matching in `select`
- needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
- }, filterMatchExpr), rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, unloadHandler = function() {
- setDocument();
- }, inDisabledFieldset = addCombinator(
- function(elem) {
- return elem.disabled === true && nodeName(elem, "fieldset");
- },
- { dir: "parentNode", next: "legend" }
- );
- function find(selector, context, results, seed) {
- var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
- results = results || [];
- if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
- return results;
- }
- if (false) {
- setDocument(context);
- context = context || document$1;
- if (documentIsHTML) {
- if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
- if (m = match[1]) {
- if (nodeType === 9) {
- if (elem = context.getElementById(m)) {
- push.call(results, elem);
- }
- return results;
- } else {
- if (newContext && (elem = newContext.getElementById(m)) && jQuery.contains(context, elem)) {
- push.call(results, elem);
- return results;
- }
- }
- } else if (match[2]) {
- push.apply(results, context.getElementsByTagName(selector));
- return results;
- } else if ((m = match[3]) && context.getElementsByClassName) {
- push.apply(results, context.getElementsByClassName(m));
- return results;
- }
- }
- if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
- newSelector = selector;
- newContext = context;
- if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
- newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
- if (newContext != context || isIE) {
- if (nid = context.getAttribute("id")) {
- nid = jQuery.escapeSelector(nid);
- } else {
- context.setAttribute("id", nid = jQuery.expando);
- }
- }
- groups = tokenize(selector);
- i2 = groups.length;
- while (i2--) {
- groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]);
- }
- newSelector = groups.join(",");
- }
- try {
- push.apply(
- results,
- newContext.querySelectorAll(newSelector)
- );
- return results;
- } catch (qsaError) {
- nonnativeSelectorCache(selector, true);
- } finally {
- if (nid === jQuery.expando) {
- context.removeAttribute("id");
- }
- }
- }
- }
- }
- return select(selector.replace(rtrimCSS, "$1"), context, results, seed);
- }
- function markFunction(fn) {
- fn[jQuery.expando] = true;
- return fn;
- }
- function createInputPseudo(type) {
- return function(elem) {
- return nodeName(elem, "input") && elem.type === type;
- };
- }
- function createButtonPseudo(type) {
- return function(elem) {
- return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type;
- };
- }
- function createDisabledPseudo(disabled) {
- return function(elem) {
- if ("form" in elem) {
- if (elem.parentNode && elem.disabled === false) {
- if ("label" in elem) {
- if ("label" in elem.parentNode) {
- return elem.parentNode.disabled === disabled;
- } else {
- return elem.disabled === disabled;
- }
- }
- return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
- elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
- }
- return elem.disabled === disabled;
- } else if ("label" in elem) {
- return elem.disabled === disabled;
- }
- return false;
- };
- }
- function createPositionalPseudo(fn) {
- return markFunction(function(argument) {
- argument = +argument;
- return markFunction(function(seed, matches3) {
- var j, matchIndexes = fn([], seed.length, argument), i2 = matchIndexes.length;
- while (i2--) {
- if (seed[j = matchIndexes[i2]]) {
- seed[j] = !(matches3[j] = seed[j]);
- }
- }
- });
- });
- }
- function setDocument(node) {
- var subWindow, doc = node ? node.ownerDocument || node : document;
- if (doc == document$1 || doc.nodeType !== 9) {
- return;
- }
- document$1 = doc;
- documentElement$1 = document$1.documentElement;
- documentIsHTML = !jQuery.isXMLDoc(document$1);
- if (isIE && document != document$1 && (subWindow = document$1.defaultView) && subWindow.top !== subWindow) {
- subWindow.addEventListener("unload", unloadHandler);
- }
- }
- find.matches = function(expr, elements) {
- return find(expr, null, null, elements);
- };
- find.matchesSelector = function(elem, expr) {
- setDocument(elem);
- if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
- try {
- return matches2.call(elem, expr);
- } catch (e) {
- nonnativeSelectorCache(expr, true);
- }
- }
- return find(expr, document$1, null, [elem]).length > 0;
- };
- jQuery.expr = {
- // Can be adjusted by the user
- cacheLength: 50,
- createPseudo: markFunction,
- match: matchExpr,
- find: {
- ID: function(id, context) {
- if (typeof context.getElementById !== "undefined" && documentIsHTML) {
- var elem = context.getElementById(id);
- return elem ? [elem] : [];
- }
- },
- TAG: function(tag, context) {
- if (typeof context.getElementsByTagName !== "undefined") {
- return context.getElementsByTagName(tag);
- } else {
- return context.querySelectorAll(tag);
- }
- },
- CLASS: function(className, context) {
- if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
- return context.getElementsByClassName(className);
- }
- }
- },
- relative: {
- ">": { dir: "parentNode", first: true },
- " ": { dir: "parentNode" },
- "+": { dir: "previousSibling", first: true },
- "~": { dir: "previousSibling" }
- },
- preFilter,
- filter: {
- ID: function(id) {
- var attrId = unescapeSelector(id);
- return function(elem) {
- return elem.getAttribute("id") === attrId;
- };
- },
- TAG: function(nodeNameSelector) {
- var expectedNodeName = unescapeSelector(nodeNameSelector).toLowerCase();
- return nodeNameSelector === "*" ? function() {
- return true;
- } : function(elem) {
- return nodeName(elem, expectedNodeName);
- };
- },
- CLASS: function(className) {
- var pattern = classCache[className + " "];
- return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
- return pattern.test(
- typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""
- );
- });
- },
- ATTR: function(name, operator, check) {
- return function(elem) {
- var result = elem.getAttribute(name);
- if (result == null) {
- return operator === "!=";
- }
- if (!operator) {
- return true;
- }
- result += "";
- if (operator === "=") {
- return result === check;
- }
- if (operator === "!=") {
- return result !== check;
- }
- if (operator === "^=") {
- return check && result.indexOf(check) === 0;
- }
- if (operator === "*=") {
- return check && result.indexOf(check) > -1;
- }
- if (operator === "$=") {
- return check && result.slice(-check.length) === check;
- }
- if (operator === "~=") {
- return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1;
- }
- if (operator === "|=") {
- return result === check || result.slice(0, check.length + 1) === check + "-";
- }
- return false;
- };
- },
- CHILD: function(type, what, _argument, first, last) {
- var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
- return first === 1 && last === 0 ? (
- // Shortcut for :nth-*(n)
- function(elem) {
- return !!elem.parentNode;
- }
- ) : function(elem, _context, xml) {
- var cache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
- if (parent) {
- if (simple) {
- while (dir) {
- node = elem;
- while (node = node[dir]) {
- if (ofType ? nodeName(node, name) : node.nodeType === 1) {
- return false;
- }
- }
- start = dir = type === "only" && !start && "nextSibling";
- }
- return true;
- }
- start = [forward ? parent.firstChild : parent.lastChild];
- if (forward && useCache) {
- outerCache = parent[jQuery.expando] || (parent[jQuery.expando] = {});
- cache = outerCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = nodeIndex && cache[2];
- node = nodeIndex && parent.childNodes[nodeIndex];
- while (node = ++nodeIndex && node && node[dir] || // Fallback to seeking `elem` from the start
- (diff = nodeIndex = 0) || start.pop()) {
- if (node.nodeType === 1 && ++diff && node === elem) {
- outerCache[type] = [dirruns, nodeIndex, diff];
- break;
- }
- }
- } else {
- if (useCache) {
- outerCache = elem[jQuery.expando] || (elem[jQuery.expando] = {});
- cache = outerCache[type] || [];
- nodeIndex = cache[0] === dirruns && cache[1];
- diff = nodeIndex;
- }
- if (diff === false) {
- while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {
- if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {
- if (useCache) {
- outerCache = node[jQuery.expando] || (node[jQuery.expando] = {});
- outerCache[type] = [dirruns, diff];
- }
- if (node === elem) {
- break;
- }
- }
- }
- }
- }
- diff -= last;
- return diff === first || diff % first === 0 && diff / first >= 0;
- }
- };
- },
- PSEUDO: function(pseudo, argument) {
- var fn = jQuery.expr.pseudos[pseudo] || jQuery.expr.setFilters[pseudo.toLowerCase()] || selectorError("unsupported pseudo: " + pseudo);
- if (fn[jQuery.expando]) {
- return fn(argument);
- }
- return fn;
- }
- },
- pseudos: {
- // Potentially complex pseudos
- not: markFunction(function(selector) {
- var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, "$1"));
- return matcher[jQuery.expando] ? markFunction(function(seed, matches3, _context, xml) {
- var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;
- while (i2--) {
- if (elem = unmatched[i2]) {
- seed[i2] = !(matches3[i2] = elem);
- }
- }
- }) : function(elem, _context, xml) {
- input[0] = elem;
- matcher(input, null, xml, results);
- input[0] = null;
- return !results.pop();
- };
- }),
- has: markFunction(function(selector) {
- return function(elem) {
- return find(selector, elem).length > 0;
- };
- }),
- contains: markFunction(function(text) {
- text = unescapeSelector(text);
- return function(elem) {
- return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;
- };
- }),
- // "Whether an element is represented by a :lang() selector
- // is based solely on the element's language value
- // being equal to the identifier C,
- // or beginning with the identifier C immediately followed by "-".
- // The matching of C against the element's language value is performed case-insensitively.
- // The identifier C does not have to be a valid language name."
- // https://www.w3.org/TR/selectors/#lang-pseudo
- lang: markFunction(function(lang) {
- if (!ridentifier.test(lang || "")) {
- selectorError("unsupported lang: " + lang);
- }
- lang = unescapeSelector(lang).toLowerCase();
- return function(elem) {
- var elemLang;
- do {
- if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
- elemLang = elemLang.toLowerCase();
- return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
- }
- } while ((elem = elem.parentNode) && elem.nodeType === 1);
- return false;
- };
- }),
- // Miscellaneous
- target: function(elem) {
- var hash = window.location && window.location.hash;
- return hash && hash.slice(1) === elem.id;
- },
- root: function(elem) {
- return elem === documentElement$1;
- },
- focus: function(elem) {
- return elem === document$1.activeElement && document$1.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);
- },
- // Boolean properties
- enabled: createDisabledPseudo(false),
- disabled: createDisabledPseudo(true),
- checked: function(elem) {
- return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected;
- },
- selected: function(elem) {
- if (isIE && elem.parentNode) {
- elem.parentNode.selectedIndex;
- }
- return elem.selected === true;
- },
- // Contents
- empty: function(elem) {
- for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
- if (elem.nodeType < 6) {
- return false;
- }
- }
- return true;
- },
- parent: function(elem) {
- return !jQuery.expr.pseudos.empty(elem);
- },
- // Element/input types
- header: function(elem) {
- return rheader.test(elem.nodeName);
- },
- input: function(elem) {
- return rinputs.test(elem.nodeName);
- },
- button: function(elem) {
- return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button");
- },
- text: function(elem) {
- return nodeName(elem, "input") && elem.type === "text";
- },
- // Position-in-collection
- first: createPositionalPseudo(function() {
- return [0];
- }),
- last: createPositionalPseudo(function(_matchIndexes, length) {
- return [length - 1];
- }),
- eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
- return [argument < 0 ? argument + length : argument];
- }),
- even: createPositionalPseudo(function(matchIndexes, length) {
- var i2 = 0;
- for (; i2 < length; i2 += 2) {
- matchIndexes.push(i2);
- }
- return matchIndexes;
- }),
- odd: createPositionalPseudo(function(matchIndexes, length) {
- var i2 = 1;
- for (; i2 < length; i2 += 2) {
- matchIndexes.push(i2);
- }
- return matchIndexes;
- }),
- lt: createPositionalPseudo(function(matchIndexes, length, argument) {
- var i2;
- if (argument < 0) {
- i2 = argument + length;
- } else if (argument > length) {
- i2 = length;
- } else {
- i2 = argument;
- }
- for (; --i2 >= 0; ) {
- matchIndexes.push(i2);
- }
- return matchIndexes;
- }),
- gt: createPositionalPseudo(function(matchIndexes, length, argument) {
- var i2 = argument < 0 ? argument + length : argument;
- for (; ++i2 < length; ) {
- matchIndexes.push(i2);
- }
- return matchIndexes;
- })
- }
- };
- jQuery.expr.pseudos.nth = jQuery.expr.pseudos.eq;
- for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
- jQuery.expr.pseudos[i] = createInputPseudo(i);
- }
- for (i in { submit: true, reset: true }) {
- jQuery.expr.pseudos[i] = createButtonPseudo(i);
- }
- function setFilters() {
- }
- setFilters.prototype = jQuery.expr.filters = jQuery.expr.pseudos;
- jQuery.expr.setFilters = new setFilters();
- function addCombinator(matcher, combinator, base) {
- var dir = combinator.dir, skip = combinator.next, key = skip || dir, checkNonElements = base && key === "parentNode", doneName = done++;
- return combinator.first ? (
- // Check against closest ancestor/preceding element
- function(elem, context, xml) {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- return matcher(elem, context, xml);
- }
- }
- return false;
- }
- ) : (
- // Check against all ancestor/preceding elements
- function(elem, context, xml) {
- var oldCache, outerCache, newCache = [dirruns, doneName];
- if (xml) {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- if (matcher(elem, context, xml)) {
- return true;
- }
- }
- }
- } else {
- while (elem = elem[dir]) {
- if (elem.nodeType === 1 || checkNonElements) {
- outerCache = elem[jQuery.expando] || (elem[jQuery.expando] = {});
- if (skip && nodeName(elem, skip)) {
- elem = elem[dir] || elem;
- } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
- return newCache[2] = oldCache[2];
- } else {
- outerCache[key] = newCache;
- if (newCache[2] = matcher(elem, context, xml)) {
- return true;
- }
- }
- }
- }
- }
- return false;
- }
- );
- }
- function elementMatcher(matchers) {
- return matchers.length > 1 ? function(elem, context, xml) {
- var i2 = matchers.length;
- while (i2--) {
- if (!matchers[i2](elem, context, xml)) {
- return false;
- }
- }
- return true;
- } : matchers[0];
- }
- function multipleContexts(selector, contexts, results) {
- var i2 = 0, len = contexts.length;
- for (; i2 < len; i2++) {
- find(selector, contexts[i2], results);
- }
- return results;
- }
- function condense(unmatched, map2, filter, context, xml) {
- var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map2 != null;
- for (; i2 < len; i2++) {
- if (elem = unmatched[i2]) {
- if (!filter || filter(elem, context, xml)) {
- newUnmatched.push(elem);
- if (mapped) {
- map2.push(i2);
- }
- }
- }
- }
- return newUnmatched;
- }
- function setMatcher(preFilter2, selector, matcher, postFilter, postFinder, postSelector) {
- if (postFilter && !postFilter[jQuery.expando]) {
- postFilter = setMatcher(postFilter);
- }
- if (postFinder && !postFinder[jQuery.expando]) {
- postFinder = setMatcher(postFinder, postSelector);
- }
- return markFunction(function(seed, results, context, xml) {
- var temp, i2, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(
- selector || "*",
- context.nodeType ? [context] : context,
- []
- ), matcherIn = preFilter2 && (seed || !selector) ? condense(elems, preMap, preFilter2, context, xml) : elems;
- if (matcher) {
- matcherOut = postFinder || (seed ? preFilter2 : preexisting || postFilter) ? (
- // ...intermediate processing is necessary
- []
- ) : (
- // ...otherwise use results directly
- results
- );
- matcher(matcherIn, matcherOut, context, xml);
- } else {
- matcherOut = matcherIn;
- }
- if (postFilter) {
- temp = condense(matcherOut, postMap);
- postFilter(temp, [], context, xml);
- i2 = temp.length;
- while (i2--) {
- if (elem = temp[i2]) {
- matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);
- }
- }
- }
- if (seed) {
- if (postFinder || preFilter2) {
- if (postFinder) {
- temp = [];
- i2 = matcherOut.length;
- while (i2--) {
- if (elem = matcherOut[i2]) {
- temp.push(matcherIn[i2] = elem);
- }
- }
- postFinder(null, matcherOut = [], temp, xml);
- }
- i2 = matcherOut.length;
- while (i2--) {
- if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i2]) > -1) {
- seed[temp] = !(results[temp] = elem);
- }
- }
- }
- } else {
- matcherOut = condense(
- matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut
- );
- if (postFinder) {
- postFinder(null, results, matcherOut, xml);
- } else {
- push.apply(results, matcherOut);
- }
- }
- });
- }
- function matcherFromTokens(tokens) {
- var checkContext, matcher, j, len = tokens.length, leadingRelative = jQuery.expr.relative[tokens[0].type], implicitRelative = leadingRelative || jQuery.expr.relative[" "], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
- return elem === checkContext;
- }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
- return indexOf.call(checkContext, elem) > -1;
- }, implicitRelative, true), matchers = [function(elem, context, xml) {
- var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
- checkContext = null;
- return ret;
- }];
- for (; i2 < len; i2++) {
- if (matcher = jQuery.expr.relative[tokens[i2].type]) {
- matchers = [addCombinator(elementMatcher(matchers), matcher)];
- } else {
- matcher = jQuery.expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);
- if (matcher[jQuery.expando]) {
- j = ++i2;
- for (; j < len; j++) {
- if (jQuery.expr.relative[tokens[j].type]) {
- break;
- }
- }
- return setMatcher(
- i2 > 1 && elementMatcher(matchers),
- i2 > 1 && toSelector(
- // If the preceding token was a descendant combinator, insert an implicit any-element `*`
- tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === " " ? "*" : "" })
- ).replace(rtrimCSS, "$1"),
- matcher,
- i2 < j && matcherFromTokens(tokens.slice(i2, j)),
- j < len && matcherFromTokens(tokens = tokens.slice(j)),
- j < len && toSelector(tokens)
- );
- }
- matchers.push(matcher);
- }
- }
- return elementMatcher(matchers);
- }
- function matcherFromGroupMatchers(elementMatchers, setMatchers) {
- var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
- var elem, j, matcher, matchedCount = 0, i2 = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && jQuery.expr.find.TAG("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1;
- if (outermost) {
- outermostContext = context == document$1 || context || outermost;
- }
- for (; (elem = elems[i2]) != null; i2++) {
- if (byElement && elem) {
- j = 0;
- if (!context && elem.ownerDocument != document$1) {
- setDocument(elem);
- xml = !documentIsHTML;
- }
- while (matcher = elementMatchers[j++]) {
- if (matcher(elem, context || document$1, xml)) {
- push.call(results, elem);
- break;
- }
- }
- if (outermost) {
- dirruns = dirrunsUnique;
- }
- }
- if (bySet) {
- if (elem = !matcher && elem) {
- matchedCount--;
- }
- if (seed) {
- unmatched.push(elem);
- }
- }
- }
- matchedCount += i2;
- if (bySet && i2 !== matchedCount) {
- j = 0;
- while (matcher = setMatchers[j++]) {
- matcher(unmatched, setMatched, context, xml);
- }
- if (seed) {
- if (matchedCount > 0) {
- while (i2--) {
- if (!(unmatched[i2] || setMatched[i2])) {
- setMatched[i2] = pop.call(results);
- }
- }
- }
- setMatched = condense(setMatched);
- }
- push.apply(results, setMatched);
- if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
- jQuery.uniqueSort(results);
- }
- }
- if (outermost) {
- dirruns = dirrunsUnique;
- outermostContext = contextBackup;
- }
- return unmatched;
- };
- return bySet ? markFunction(superMatcher) : superMatcher;
- }
- function compile(selector, match) {
- var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
- if (!cached) {
- if (!match) {
- match = tokenize(selector);
- }
- i2 = match.length;
- while (i2--) {
- cached = matcherFromTokens(match[i2]);
- if (cached[jQuery.expando]) {
- setMatchers.push(cached);
- } else {
- elementMatchers.push(cached);
- }
- }
- cached = compilerCache(
- selector,
- matcherFromGroupMatchers(elementMatchers, setMatchers)
- );
- cached.selector = selector;
- }
- return cached;
- }
- function select(selector, context, results, seed) {
- var i2, tokens, token, type, find2, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
- results = results || [];
- if (match.length === 1) {
- tokens = match[0] = match[0].slice(0);
- if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && jQuery.expr.relative[tokens[1].type]) {
- context = (jQuery.expr.find.ID(
- unescapeSelector(token.matches[0]),
- context
- ) || [])[0];
- if (!context) {
- return results;
- } else if (compiled) {
- context = context.parentNode;
- }
- selector = selector.slice(tokens.shift().value.length);
- }
- i2 = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
- while (i2--) {
- token = tokens[i2];
- if (jQuery.expr.relative[type = token.type]) {
- break;
- }
- if (find2 = jQuery.expr.find[type]) {
- if (seed = find2(
- unescapeSelector(token.matches[0]),
- rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
- )) {
- tokens.splice(i2, 1);
- selector = seed.length && toSelector(tokens);
- if (!selector) {
- push.apply(results, seed);
- return results;
- }
- break;
- }
- }
- }
- }
- (compiled || compile(selector, match))(
- seed,
- context,
- !documentIsHTML,
- results,
- !context || rsibling.test(selector) && testContext(context.parentNode) || context
- );
- return results;
- }
- setDocument();
- jQuery.find = find;
- find.compile = compile;
- find.select = select;
- find.setDocument = setDocument;
- find.tokenize = tokenize;
- return jQuery;
- })
- );
- // src/mock-doc/selector.ts
- function matches(selector, elm) {
- try {
- const r = jquery_default.find(selector, void 0, void 0, [elm]);
- return r.length > 0;
- } catch (e) {
- updateSelectorError(selector, e);
- throw e;
- }
- }
- function selectOne(selector, elm) {
- try {
- const r = jquery_default.find(selector, elm, void 0, void 0);
- return r[0] || null;
- } catch (e) {
- updateSelectorError(selector, e);
- throw e;
- }
- }
- function selectAll(selector, elm) {
- try {
- return jquery_default.find(selector, elm, void 0, void 0);
- } catch (e) {
- updateSelectorError(selector, e);
- throw e;
- }
- }
- var PROBLEMATIC_SELECTORS = [":scope", ":where", ":is"];
- function updateSelectorError(selector, e) {
- const selectorsPresent = PROBLEMATIC_SELECTORS.filter((s) => selector.includes(s));
- if (selectorsPresent.length > 0 && e.message) {
- e.message = `At present jQuery does not support the ${humanReadableList(selectorsPresent)} ${selectorsPresent.length === 1 ? "selector" : "selectors"}.
- If you need this in your test, consider writing an end-to-end test instead.
- ` + e.message;
- }
- }
- function humanReadableList(items) {
- if (items.length <= 1) {
- return items.join("");
- }
- return `${items.slice(0, items.length - 1).join(", ")} and ${items[items.length - 1]}`;
- }
- // src/mock-doc/serialize-node.ts
- function normalizeSerializationOptions(opts = {}) {
- return {
- ...opts,
- outerHtml: typeof opts.outerHtml !== "boolean" ? false : opts.outerHtml,
- ...opts.prettyHtml ? {
- indentSpaces: typeof opts.indentSpaces !== "number" ? 2 : opts.indentSpaces,
- newLines: typeof opts.newLines !== "boolean" ? true : opts.newLines
- } : {
- prettyHtml: false,
- indentSpaces: typeof opts.indentSpaces !== "number" ? 0 : opts.indentSpaces,
- newLines: typeof opts.newLines !== "boolean" ? false : opts.newLines
- },
- approximateLineWidth: typeof opts.approximateLineWidth !== "number" ? -1 : opts.approximateLineWidth,
- removeEmptyAttributes: typeof opts.removeEmptyAttributes !== "boolean" ? true : opts.removeEmptyAttributes,
- removeAttributeQuotes: typeof opts.removeAttributeQuotes !== "boolean" ? false : opts.removeAttributeQuotes,
- removeBooleanAttributeQuotes: typeof opts.removeBooleanAttributeQuotes !== "boolean" ? false : opts.removeBooleanAttributeQuotes,
- removeHtmlComments: typeof opts.removeHtmlComments !== "boolean" ? false : opts.removeHtmlComments,
- serializeShadowRoot: typeof opts.serializeShadowRoot !== "boolean" ? true : opts.serializeShadowRoot,
- fullDocument: typeof opts.fullDocument !== "boolean" ? true : opts.fullDocument
- };
- }
- function serializeNodeToHtml(elm, serializationOptions = {}) {
- const opts = normalizeSerializationOptions(serializationOptions);
- const output = {
- currentLineWidth: 0,
- indent: 0,
- isWithinBody: false,
- text: []
- };
- let renderedNode = "";
- const children = !opts.fullDocument && elm.body ? Array.from(elm.body.childNodes) : opts.outerHtml ? [elm] : Array.from(elm.childNodes);
- for (let i = 0, ii = children.length; i < ii; i++) {
- const child = children[i];
- const chunks = Array.from(streamToHtml(child, opts, output));
- renderedNode += chunks.join("");
- }
- return renderedNode.trim();
- }
- var shadowRootTag = "mock:shadow-root";
- function* streamToHtml(node, opts, output) {
- var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;
- const isShadowRoot = node.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */;
- if (node.nodeType === 1 /* ELEMENT_NODE */ || isShadowRoot) {
- const tagName = isShadowRoot ? shadowRootTag : getTagName(node);
- if (tagName === "body") {
- output.isWithinBody = true;
- }
- const ignoreTag = opts.excludeTags != null && opts.excludeTags.includes(tagName);
- if (ignoreTag === false) {
- const isWithinWhitespaceSensitiveNode = opts.newLines || ((_a2 = opts.indentSpaces) != null ? _a2 : 0) > 0 ? isWithinWhitespaceSensitive(node) : false;
- if (opts.newLines && !isWithinWhitespaceSensitiveNode) {
- yield "\n";
- output.currentLineWidth = 0;
- }
- if (((_b = opts.indentSpaces) != null ? _b : 0) > 0 && !isWithinWhitespaceSensitiveNode) {
- for (let i = 0; i < output.indent; i++) {
- yield " ";
- }
- output.currentLineWidth += output.indent;
- }
- const tag = tagName === shadowRootTag ? "template" : tagName;
- yield "<" + tag;
- output.currentLineWidth += tag.length + 1;
- if (tag === "template") {
- const mode = ` shadowrootmode="open"`;
- yield mode;
- output.currentLineWidth += mode.length;
- }
- const attrsLength = node.attributes.length;
- const attributes = opts.prettyHtml && attrsLength > 1 ? cloneAttributes(node.attributes, true) : node.attributes;
- for (let i = 0; i < attrsLength; i++) {
- const attr = attributes.item(i);
- const attrName = attr.name;
- if (attrName === "style") {
- continue;
- }
- let attrValue = attr.value;
- if (opts.removeEmptyAttributes && attrValue === "" && REMOVE_EMPTY_ATTR.has(attrName)) {
- continue;
- }
- const attrNamespaceURI = attr.namespaceURI;
- if (attrNamespaceURI == null) {
- output.currentLineWidth += attrName.length + 1;
- if (opts.approximateLineWidth && opts.approximateLineWidth > 0 && output.currentLineWidth > opts.approximateLineWidth) {
- yield "\n" + attrName;
- output.currentLineWidth = 0;
- } else {
- yield " " + attrName;
- }
- } else if (attrNamespaceURI === "http://www.w3.org/XML/1998/namespace") {
- yield " xml:" + attrName;
- output.currentLineWidth += attrName.length + 5;
- } else if (attrNamespaceURI === "http://www.w3.org/2000/xmlns/") {
- if (attrName !== "xmlns") {
- yield " xmlns:" + attrName;
- output.currentLineWidth += attrName.length + 7;
- } else {
- yield " " + attrName;
- output.currentLineWidth += attrName.length + 1;
- }
- } else if (attrNamespaceURI === XLINK_NS) {
- yield " xlink:" + attrName;
- output.currentLineWidth += attrName.length + 7;
- } else {
- yield " " + attrNamespaceURI + ":" + attrName;
- output.currentLineWidth += attrNamespaceURI.length + attrName.length + 2;
- }
- if (opts.prettyHtml && attrName === "class") {
- attrValue = attr.value = attrValue.split(" ").filter((t) => t !== "").sort().join(" ").trim();
- }
- if (attrValue === "") {
- if (opts.removeBooleanAttributeQuotes && BOOLEAN_ATTR.has(attrName)) {
- continue;
- }
- if (opts.removeEmptyAttributes && attrName.startsWith("data-")) {
- continue;
- }
- }
- if (opts.removeAttributeQuotes && CAN_REMOVE_ATTR_QUOTES.test(attrValue)) {
- yield "=" + escapeString(attrValue, true);
- output.currentLineWidth += attrValue.length + 1;
- } else {
- yield '="' + escapeString(attrValue, true) + '"';
- output.currentLineWidth += attrValue.length + 3;
- }
- }
- if (node.hasAttribute("style")) {
- const cssText = node.style.cssText;
- if (opts.approximateLineWidth && opts.approximateLineWidth > 0 && output.currentLineWidth + cssText.length + 10 > opts.approximateLineWidth) {
- yield `
- style="${cssText}">`;
- output.currentLineWidth = 0;
- } else {
- yield ` style="${cssText}">`;
- output.currentLineWidth += cssText.length + 10;
- }
- } else {
- yield ">";
- output.currentLineWidth += 1;
- }
- }
- if (EMPTY_ELEMENTS.has(tagName) === false) {
- const shadowRoot = node.shadowRoot;
- if (shadowRoot != null && opts.serializeShadowRoot) {
- output.indent = output.indent + ((_c = opts.indentSpaces) != null ? _c : 0);
- yield* streamToHtml(shadowRoot, opts, output);
- output.indent = output.indent - ((_d = opts.indentSpaces) != null ? _d : 0);
- if (opts.newLines && (node.childNodes.length === 0 || node.childNodes.length === 1 && node.childNodes[0].nodeType === 3 /* TEXT_NODE */ && ((_e = node.childNodes[0].nodeValue) == null ? void 0 : _e.trim()) === "")) {
- yield "\n";
- output.currentLineWidth = 0;
- for (let i = 0; i < output.indent; i++) {
- yield " ";
- }
- output.currentLineWidth += output.indent;
- }
- }
- if (opts.excludeTagContent == null || opts.excludeTagContent.includes(tagName) === false) {
- const tag = tagName === shadowRootTag ? "template" : tagName;
- const childNodes = tagName === "template" ? node.content.childNodes : node.childNodes;
- const childNodeLength = childNodes.length;
- if (childNodeLength > 0) {
- if (childNodeLength === 1 && childNodes[0].nodeType === 3 /* TEXT_NODE */ && (typeof childNodes[0].nodeValue !== "string" || childNodes[0].nodeValue.trim() === "")) {
- } else {
- const isWithinWhitespaceSensitiveNode = opts.newLines || ((_f = opts.indentSpaces) != null ? _f : 0) > 0 ? isWithinWhitespaceSensitive(node) : false;
- if (!isWithinWhitespaceSensitiveNode && ((_g = opts.indentSpaces) != null ? _g : 0) > 0 && ignoreTag === false) {
- output.indent = output.indent + ((_h = opts.indentSpaces) != null ? _h : 0);
- }
- for (let i = 0; i < childNodeLength; i++) {
- yield* streamToHtml(childNodes[i], opts, output);
- }
- if (ignoreTag === false) {
- if (opts.newLines && !isWithinWhitespaceSensitiveNode) {
- yield "\n";
- output.currentLineWidth = 0;
- }
- if (((_i = opts.indentSpaces) != null ? _i : 0) > 0 && !isWithinWhitespaceSensitiveNode) {
- output.indent = output.indent - ((_j = opts.indentSpaces) != null ? _j : 0);
- for (let i = 0; i < output.indent; i++) {
- yield " ";
- }
- output.currentLineWidth += output.indent;
- }
- }
- }
- }
- if (ignoreTag === false) {
- yield "</" + tag + ">";
- output.currentLineWidth += tag.length + 3;
- }
- }
- }
- if (((_k = opts.approximateLineWidth) != null ? _k : 0) > 0 && STRUCTURE_ELEMENTS.has(tagName)) {
- yield "\n";
- output.currentLineWidth = 0;
- }
- if (tagName === "body") {
- output.isWithinBody = false;
- }
- } else if (node.nodeType === 3 /* TEXT_NODE */) {
- let textContent = node.nodeValue;
- if (typeof textContent === "string") {
- const trimmedTextContent = textContent.trim();
- if (trimmedTextContent === "") {
- if (isWithinWhitespaceSensitive(node)) {
- yield textContent;
- output.currentLineWidth += textContent.length;
- } else if (((_l = opts.approximateLineWidth) != null ? _l : 0) > 0 && !output.isWithinBody) {
- } else if (!opts.prettyHtml) {
- output.currentLineWidth += 1;
- if (opts.approximateLineWidth && opts.approximateLineWidth > 0 && output.currentLineWidth > opts.approximateLineWidth) {
- yield "\n";
- output.currentLineWidth = 0;
- } else {
- yield " ";
- }
- }
- } else {
- const isWithinWhitespaceSensitiveNode = opts.newLines || ((_m = opts.indentSpaces) != null ? _m : 0) > 0 || opts.prettyHtml ? isWithinWhitespaceSensitive(node) : false;
- if (opts.newLines && !isWithinWhitespaceSensitiveNode) {
- yield "\n";
- output.currentLineWidth = 0;
- }
- if (((_n = opts.indentSpaces) != null ? _n : 0) > 0 && !isWithinWhitespaceSensitiveNode) {
- for (let i = 0; i < output.indent; i++) {
- yield " ";
- }
- output.currentLineWidth += output.indent;
- }
- let textContentLength = textContent.length;
- if (textContentLength > 0) {
- const parentTagName = node.parentNode != null && node.parentNode.nodeType === 1 /* ELEMENT_NODE */ ? node.parentNode.nodeName : null;
- if (typeof parentTagName === "string" && NON_ESCAPABLE_CONTENT.has(parentTagName)) {
- if (isWithinWhitespaceSensitive(node)) {
- yield textContent;
- } else {
- yield trimmedTextContent;
- textContentLength = trimmedTextContent.length;
- }
- output.currentLineWidth += textContentLength;
- } else {
- if (opts.prettyHtml && !isWithinWhitespaceSensitiveNode) {
- yield escapeString(textContent.replace(/\s\s+/g, " ").trim(), false);
- output.currentLineWidth += textContentLength;
- } else {
- if (isWithinWhitespaceSensitive(node)) {
- output.currentLineWidth += textContentLength;
- } else {
- if (/\s/.test(textContent.charAt(0))) {
- textContent = " " + textContent.trimLeft();
- }
- textContentLength = textContent.length;
- if (textContentLength > 1) {
- if (/\s/.test(textContent.charAt(textContentLength - 1))) {
- if (opts.approximateLineWidth && opts.approximateLineWidth > 0 && output.currentLineWidth + textContentLength > opts.approximateLineWidth) {
- textContent = textContent.trimRight() + "\n";
- output.currentLineWidth = 0;
- } else {
- textContent = textContent.trimRight() + " ";
- }
- }
- }
- output.currentLineWidth += textContentLength;
- }
- yield escapeString(textContent, false);
- }
- }
- }
- }
- }
- } else if (node.nodeType === 8 /* COMMENT_NODE */) {
- const nodeValue = node.nodeValue;
- const isHydrateAnnotation = (nodeValue == null ? void 0 : nodeValue.startsWith(CONTENT_REF_ID + ".")) || (nodeValue == null ? void 0 : nodeValue.startsWith(ORG_LOCATION_ID + ".")) || (nodeValue == null ? void 0 : nodeValue.startsWith(SLOT_NODE_ID + ".")) || (nodeValue == null ? void 0 : nodeValue.startsWith(TEXT_NODE_ID + "."));
- if (opts.removeHtmlComments && !isHydrateAnnotation) {
- return;
- }
- const isWithinWhitespaceSensitiveNode = opts.newLines || ((_o = opts.indentSpaces) != null ? _o : 0) > 0 ? isWithinWhitespaceSensitive(node) : false;
- if (opts.newLines && !isWithinWhitespaceSensitiveNode) {
- yield "\n";
- output.currentLineWidth = 0;
- }
- if (((_p = opts.indentSpaces) != null ? _p : 0) > 0 && !isWithinWhitespaceSensitiveNode) {
- for (let i = 0; i < output.indent; i++) {
- yield " ";
- }
- output.currentLineWidth += output.indent;
- }
- yield "<!--" + nodeValue + "-->";
- if (nodeValue) {
- output.currentLineWidth += nodeValue.length + 7;
- }
- } else if (node.nodeType === 10 /* DOCUMENT_TYPE_NODE */) {
- yield "<!doctype html>";
- }
- }
- var AMP_REGEX = /&/g;
- var NBSP_REGEX = /\u00a0/g;
- var DOUBLE_QUOTE_REGEX = /"/g;
- var LT_REGEX = /</g;
- var GT_REGEX = />/g;
- var CAN_REMOVE_ATTR_QUOTES = /^[^ \t\n\f\r"'`=<>\/\\-]+$/;
- function getTagName(element) {
- if (element.namespaceURI === "http://www.w3.org/1999/xhtml") {
- return element.nodeName.toLowerCase();
- } else {
- return element.nodeName;
- }
- }
- function escapeString(str, attrMode) {
- str = str.replace(AMP_REGEX, "&").replace(NBSP_REGEX, " ");
- if (attrMode) {
- return str.replace(DOUBLE_QUOTE_REGEX, """);
- }
- return str.replace(LT_REGEX, "<").replace(GT_REGEX, ">");
- }
- function isWithinWhitespaceSensitive(node) {
- let _node = node;
- while (_node == null ? void 0 : _node.nodeName) {
- if (WHITESPACE_SENSITIVE.has(_node.nodeName)) {
- return true;
- }
- _node = _node.parentNode;
- }
- return false;
- }
- var NON_ESCAPABLE_CONTENT = /* @__PURE__ */ new Set([
- "STYLE",
- "SCRIPT",
- "IFRAME",
- "NOSCRIPT",
- "XMP",
- "NOEMBED",
- "NOFRAMES",
- "PLAINTEXT"
- ]);
- var WHITESPACE_SENSITIVE = /* @__PURE__ */ new Set([
- "CODE",
- "OUTPUT",
- "PLAINTEXT",
- "PRE",
- "SCRIPT",
- "TEMPLATE",
- "TEXTAREA"
- ]);
- var EMPTY_ELEMENTS = /* @__PURE__ */ new Set([
- "area",
- "base",
- "basefont",
- "bgsound",
- "br",
- "col",
- "embed",
- "frame",
- "hr",
- "img",
- "input",
- "keygen",
- "link",
- "meta",
- "param",
- "source",
- "trace",
- "track",
- "wbr"
- ]);
- var REMOVE_EMPTY_ATTR = /* @__PURE__ */ new Set(["class", "dir", "id", "lang", "name", "title"]);
- var BOOLEAN_ATTR = /* @__PURE__ */ new Set([
- "allowfullscreen",
- "async",
- "autofocus",
- "autoplay",
- "checked",
- "compact",
- "controls",
- "declare",
- "default",
- "defaultchecked",
- "defaultmuted",
- "defaultselected",
- "defer",
- "disabled",
- "enabled",
- "formnovalidate",
- "hidden",
- "indeterminate",
- "inert",
- "ismap",
- "itemscope",
- "loop",
- "multiple",
- "muted",
- "nohref",
- "nomodule",
- "noresize",
- "noshade",
- "novalidate",
- "nowrap",
- "open",
- "pauseonexit",
- "readonly",
- "required",
- "reversed",
- "scoped",
- "seamless",
- "selected",
- "sortable",
- "truespeed",
- "typemustmatch",
- "visible"
- ]);
- var STRUCTURE_ELEMENTS = /* @__PURE__ */ new Set([
- "html",
- "body",
- "head",
- "iframe",
- "meta",
- "link",
- "base",
- "title",
- "script",
- "style"
- ]);
- // src/mock-doc/node.ts
- var MockNode2 = class {
- constructor(ownerDocument, nodeType, nodeName, nodeValue) {
- this.ownerDocument = ownerDocument;
- this.nodeType = nodeType;
- this.nodeName = nodeName;
- this._nodeValue = nodeValue;
- this.parentNode = null;
- this.childNodes = [];
- }
- appendChild(newNode) {
- if (newNode.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {
- const nodes = newNode.childNodes.slice();
- for (const child of nodes) {
- this.appendChild(child);
- }
- } else {
- newNode.remove();
- newNode.parentNode = this;
- this.childNodes.push(newNode);
- connectNode(this.ownerDocument, newNode);
- }
- return newNode;
- }
- append(...items) {
- items.forEach((item) => {
- const isNode = typeof item === "object" && item !== null && "nodeType" in item;
- this.appendChild(isNode ? item : this.ownerDocument.createTextNode(String(item)));
- });
- }
- prepend(...items) {
- const firstChild = this.firstChild;
- items.forEach((item) => {
- const isNode = typeof item === "object" && item !== null && "nodeType" in item;
- if (firstChild) {
- this.insertBefore(isNode ? item : this.ownerDocument.createTextNode(String(item)), firstChild);
- }
- });
- }
- cloneNode(deep) {
- throw new Error(`invalid node type to clone: ${this.nodeType}, deep: ${deep}`);
- }
- compareDocumentPosition(_other) {
- return -1;
- }
- get firstChild() {
- return this.childNodes[0] || null;
- }
- insertBefore(newNode, referenceNode) {
- if (newNode.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {
- for (let i = 0, ii = newNode.childNodes.length; i < ii; i++) {
- insertBefore(this, newNode.childNodes[i], referenceNode);
- }
- } else {
- insertBefore(this, newNode, referenceNode);
- }
- return newNode;
- }
- get isConnected() {
- let node = this;
- while (node != null) {
- if (node.nodeType === 9 /* DOCUMENT_NODE */) {
- return true;
- }
- node = node.parentNode;
- if (node != null && node.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */) {
- node = node.host;
- }
- }
- return false;
- }
- isSameNode(node) {
- return this === node;
- }
- get lastChild() {
- return this.childNodes[this.childNodes.length - 1] || null;
- }
- get nextSibling() {
- if (this.parentNode != null) {
- const index = this.parentNode.childNodes.indexOf(this) + 1;
- return this.parentNode.childNodes[index] || null;
- }
- return null;
- }
- get nodeValue() {
- var _a2;
- return (_a2 = this._nodeValue) != null ? _a2 : "";
- }
- set nodeValue(value) {
- this._nodeValue = value;
- }
- get parentElement() {
- return this.parentNode || null;
- }
- set parentElement(value) {
- this.parentNode = value;
- }
- get previousSibling() {
- if (this.parentNode != null) {
- const index = this.parentNode.childNodes.indexOf(this) - 1;
- return this.parentNode.childNodes[index] || null;
- }
- return null;
- }
- contains(otherNode) {
- if (otherNode === this) {
- return true;
- }
- const childNodes = Array.from(this.childNodes);
- if (childNodes.includes(otherNode)) {
- return true;
- }
- return childNodes.some((node) => this.contains.bind(node)(otherNode));
- }
- removeChild(childNode) {
- const index = this.childNodes.indexOf(childNode);
- if (index > -1) {
- this.childNodes.splice(index, 1);
- if (this.nodeType === 1 /* ELEMENT_NODE */) {
- const wasConnected = this.isConnected;
- childNode.parentNode = null;
- if (wasConnected === true) {
- disconnectNode(childNode);
- }
- } else {
- childNode.parentNode = null;
- }
- } else {
- throw new Error(`node not found within childNodes during removeChild`);
- }
- return childNode;
- }
- remove() {
- if (this.parentNode != null) {
- this.parentNode.removeChild(this);
- }
- }
- replaceChild(newChild, oldChild) {
- if (oldChild.parentNode === this) {
- this.insertBefore(newChild, oldChild);
- oldChild.remove();
- return newChild;
- }
- return null;
- }
- get textContent() {
- var _a2;
- return (_a2 = this._nodeValue) != null ? _a2 : "";
- }
- set textContent(value) {
- this._nodeValue = String(value);
- }
- };
- MockNode2.ELEMENT_NODE = 1;
- MockNode2.TEXT_NODE = 3;
- MockNode2.PROCESSING_INSTRUCTION_NODE = 7;
- MockNode2.COMMENT_NODE = 8;
- MockNode2.DOCUMENT_NODE = 9;
- MockNode2.DOCUMENT_TYPE_NODE = 10;
- MockNode2.DOCUMENT_FRAGMENT_NODE = 11;
- var MockNodeList = class {
- constructor(ownerDocument, childNodes, length) {
- this.ownerDocument = ownerDocument;
- this.childNodes = childNodes;
- this.length = length;
- }
- };
- var MockElement = class extends MockNode2 {
- attachInternals() {
- return new Proxy({}, {
- get: function(_target, prop, _receiver) {
- console.error(
- `NOTE: Property ${String(prop)} was accessed on ElementInternals, but this property is not implemented.
- Testing components with ElementInternals is fully supported in e2e tests.`
- );
- }
- });
- }
- constructor(ownerDocument, nodeName, namespaceURI = null) {
- super(ownerDocument, 1 /* ELEMENT_NODE */, typeof nodeName === "string" ? nodeName : null, null);
- this.__namespaceURI = namespaceURI;
- this.__shadowRoot = null;
- this.__attributeMap = null;
- }
- addEventListener(type, handler) {
- addEventListener(this, type, handler);
- }
- attachShadow(_opts) {
- const shadowRoot = this.ownerDocument.createDocumentFragment();
- this.shadowRoot = shadowRoot;
- return shadowRoot;
- }
- blur() {
- dispatchEvent(
- this,
- new MockFocusEvent("blur", { relatedTarget: null, bubbles: true, cancelable: true, composed: true })
- );
- }
- get localName() {
- if (!this.nodeName) {
- throw new Error(`Can't compute elements localName without nodeName`);
- }
- return this.nodeName.toLocaleLowerCase();
- }
- get namespaceURI() {
- return this.__namespaceURI;
- }
- get shadowRoot() {
- return this.__shadowRoot || null;
- }
- /**
- * Set shadow root for element
- * @param shadowRoot - ShadowRoot to set
- */
- set shadowRoot(shadowRoot) {
- if (shadowRoot != null) {
- shadowRoot.host = this;
- this.__shadowRoot = shadowRoot;
- } else {
- delete this.__shadowRoot;
- }
- }
- get attributes() {
- if (this.__attributeMap == null) {
- const attrMap = createAttributeProxy(false);
- this.__attributeMap = attrMap;
- return attrMap;
- }
- return this.__attributeMap;
- }
- set attributes(attrs) {
- this.__attributeMap = attrs;
- }
- get children() {
- return this.childNodes.filter((n) => n.nodeType === 1 /* ELEMENT_NODE */);
- }
- get childElementCount() {
- return this.childNodes.filter((n) => n.nodeType === 1 /* ELEMENT_NODE */).length;
- }
- get className() {
- return this.getAttributeNS(null, "class") || "";
- }
- set className(value) {
- this.setAttributeNS(null, "class", value);
- }
- get classList() {
- return new MockClassList(this);
- }
- click() {
- dispatchEvent(this, new MockEvent("click", { bubbles: true, cancelable: true, composed: true }));
- }
- cloneNode(_deep) {
- return null;
- }
- closest(selector) {
- let elm = this;
- while (elm != null) {
- if (elm.matches(selector)) {
- return elm;
- }
- elm = elm.parentNode;
- }
- return null;
- }
- get dataset() {
- return dataset(this);
- }
- get dir() {
- return this.getAttributeNS(null, "dir") || "";
- }
- set dir(value) {
- this.setAttributeNS(null, "dir", value);
- }
- dispatchEvent(ev) {
- return dispatchEvent(this, ev);
- }
- get firstElementChild() {
- return this.children[0] || null;
- }
- focus(_options) {
- dispatchEvent(
- this,
- new MockFocusEvent("focus", { relatedTarget: null, bubbles: true, cancelable: true, composed: true })
- );
- }
- getAttribute(attrName) {
- if (attrName === "style") {
- if (this.__style != null && this.__style.length > 0) {
- return this.style.cssText;
- }
- return null;
- }
- const attr = this.attributes.getNamedItem(attrName);
- if (attr != null) {
- return attr.value;
- }
- return null;
- }
- getAttributeNS(namespaceURI, attrName) {
- const attr = this.attributes.getNamedItemNS(namespaceURI, attrName);
- if (attr != null) {
- return attr.value;
- }
- return null;
- }
- getAttributeNode(attrName) {
- if (!this.hasAttribute(attrName)) {
- return null;
- }
- return new MockAttr(attrName, this.getAttribute(attrName));
- }
- getBoundingClientRect() {
- return { bottom: 0, height: 0, left: 0, right: 0, top: 0, width: 0, x: 0, y: 0 };
- }
- getRootNode(opts) {
- const isComposed = opts != null && opts.composed === true;
- let node = this;
- while (node.parentNode != null) {
- node = node.parentNode;
- if (isComposed === true && node.parentNode == null && node.host != null) {
- node = node.host;
- }
- }
- return node;
- }
- get draggable() {
- return this.getAttributeNS(null, "draggable") === "true";
- }
- set draggable(value) {
- this.setAttributeNS(null, "draggable", value);
- }
- hasChildNodes() {
- return this.childNodes.length > 0;
- }
- get id() {
- return this.getAttributeNS(null, "id") || "";
- }
- set id(value) {
- this.setAttributeNS(null, "id", value);
- }
- get innerHTML() {
- if (this.childNodes.length === 0) {
- return "";
- }
- return serializeNodeToHtml(this, {
- newLines: false,
- indentSpaces: 0
- });
- }
- set innerHTML(html) {
- var _a2;
- if (NON_ESCAPABLE_CONTENT.has((_a2 = this.nodeName) != null ? _a2 : "") === true) {
- setTextContent(this, html);
- } else {
- for (let i = this.childNodes.length - 1; i >= 0; i--) {
- this.removeChild(this.childNodes[i]);
- }
- if (typeof html === "string") {
- const frag = parseFragmentUtil(this.ownerDocument, html);
- while (frag.childNodes.length > 0) {
- this.appendChild(frag.childNodes[0]);
- }
- }
- }
- }
- get innerText() {
- const text = [];
- getTextContent(this.childNodes, text);
- return text.join("");
- }
- set innerText(value) {
- setTextContent(this, value);
- }
- insertAdjacentElement(position, elm) {
- if (position === "beforebegin" && this.parentNode) {
- insertBefore(this.parentNode, elm, this);
- } else if (position === "afterbegin") {
- this.prepend(elm);
- } else if (position === "beforeend") {
- this.appendChild(elm);
- } else if (position === "afterend" && this.parentNode) {
- insertBefore(this.parentNode, elm, this.nextSibling);
- }
- return elm;
- }
- insertAdjacentHTML(position, html) {
- const frag = parseFragmentUtil(this.ownerDocument, html);
- if (position === "beforebegin") {
- while (frag.childNodes.length > 0) {
- if (this.parentNode) {
- insertBefore(this.parentNode, frag.childNodes[0], this);
- }
- }
- } else if (position === "afterbegin") {
- while (frag.childNodes.length > 0) {
- this.prepend(frag.childNodes[frag.childNodes.length - 1]);
- }
- } else if (position === "beforeend") {
- while (frag.childNodes.length > 0) {
- this.appendChild(frag.childNodes[0]);
- }
- } else if (position === "afterend") {
- while (frag.childNodes.length > 0) {
- if (this.parentNode) {
- insertBefore(this.parentNode, frag.childNodes[frag.childNodes.length - 1], this.nextSibling);
- }
- }
- }
- }
- insertAdjacentText(position, text) {
- const elm = this.ownerDocument.createTextNode(text);
- if (position === "beforebegin" && this.parentNode) {
- insertBefore(this.parentNode, elm, this);
- } else if (position === "afterbegin") {
- this.prepend(elm);
- } else if (position === "beforeend") {
- this.appendChild(elm);
- } else if (position === "afterend" && this.parentNode) {
- insertBefore(this.parentNode, elm, this.nextSibling);
- }
- }
- hasAttribute(attrName) {
- if (attrName === "style") {
- return this.__style != null && this.__style.length > 0;
- }
- return this.getAttribute(attrName) !== null;
- }
- hasAttributeNS(namespaceURI, name) {
- return this.getAttributeNS(namespaceURI, name) !== null;
- }
- get hidden() {
- return this.hasAttributeNS(null, "hidden");
- }
- set hidden(isHidden) {
- if (isHidden === true) {
- this.setAttributeNS(null, "hidden", "");
- } else {
- this.removeAttributeNS(null, "hidden");
- }
- }
- get lang() {
- return this.getAttributeNS(null, "lang") || "";
- }
- set lang(value) {
- this.setAttributeNS(null, "lang", value);
- }
- get lastElementChild() {
- const children = this.children;
- return children[children.length - 1] || null;
- }
- matches(selector) {
- return matches(selector, this);
- }
- get nextElementSibling() {
- const parentElement = this.parentElement;
- if (parentElement != null && (parentElement.nodeType === 1 /* ELEMENT_NODE */ || parentElement.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */ || parentElement.nodeType === 9 /* DOCUMENT_NODE */)) {
- const children = parentElement.children;
- const index = children.indexOf(this) + 1;
- return parentElement.children[index] || null;
- }
- return null;
- }
- get outerHTML() {
- return serializeNodeToHtml(this, {
- newLines: false,
- outerHtml: true,
- indentSpaces: 0
- });
- }
- get previousElementSibling() {
- const parentElement = this.parentElement;
- if (parentElement != null && (parentElement.nodeType === 1 /* ELEMENT_NODE */ || parentElement.nodeType === 11 /* DOCUMENT_FRAGMENT_NODE */ || parentElement.nodeType === 9 /* DOCUMENT_NODE */)) {
- const children = parentElement.children;
- const index = children.indexOf(this) - 1;
- return parentElement.children[index] || null;
- }
- return null;
- }
- getElementsByClassName(classNames) {
- const classes = classNames.trim().split(" ").filter((c) => c.length > 0);
- const results = [];
- getElementsByClassName(this, classes, results);
- return results;
- }
- getElementsByTagName(tagName) {
- const results = [];
- getElementsByTagName(this, tagName.toLowerCase(), results);
- return results;
- }
- querySelector(selector) {
- return selectOne(selector, this);
- }
- querySelectorAll(selector) {
- return selectAll(selector, this);
- }
- removeAttribute(attrName) {
- if (attrName === "style") {
- delete this.__style;
- } else {
- const attr = this.attributes.getNamedItem(attrName);
- if (attr != null) {
- this.attributes.removeNamedItemNS(attr);
- if (checkAttributeChanged(this) === true) {
- attributeChanged(this, attrName, attr.value, null);
- }
- }
- }
- }
- removeAttributeNS(namespaceURI, attrName) {
- const attr = this.attributes.getNamedItemNS(namespaceURI, attrName);
- if (attr != null) {
- this.attributes.removeNamedItemNS(attr);
- if (checkAttributeChanged(this) === true) {
- attributeChanged(this, attrName, attr.value, null);
- }
- }
- }
- removeEventListener(type, handler) {
- removeEventListener(this, type, handler);
- }
- setAttribute(attrName, value) {
- if (attrName === "style") {
- this.style = value;
- } else {
- const attributes = this.attributes;
- let attr = attributes.getNamedItem(attrName);
- const checkAttrChanged = checkAttributeChanged(this);
- if (attr != null) {
- if (checkAttrChanged === true) {
- const oldValue = attr.value;
- attr.value = value;
- if (oldValue !== attr.value) {
- attributeChanged(this, attr.name, oldValue, attr.value);
- }
- } else {
- attr.value = value;
- }
- } else {
- if (attributes.caseInsensitive) {
- attrName = attrName.toLowerCase();
- }
- attr = new MockAttr(attrName, value);
- attributes.__items.push(attr);
- if (checkAttrChanged === true) {
- attributeChanged(this, attrName, null, attr.value);
- }
- }
- }
- }
- setAttributeNS(namespaceURI, attrName, value) {
- const attributes = this.attributes;
- let attr = attributes.getNamedItemNS(namespaceURI, attrName);
- const checkAttrChanged = checkAttributeChanged(this);
- if (attr != null) {
- if (checkAttrChanged === true) {
- const oldValue = attr.value;
- attr.value = value;
- if (oldValue !== attr.value) {
- attributeChanged(this, attr.name, oldValue, attr.value);
- }
- } else {
- attr.value = value;
- }
- } else {
- attr = new MockAttr(attrName, value, namespaceURI);
- attributes.__items.push(attr);
- if (checkAttrChanged === true) {
- attributeChanged(this, attrName, null, attr.value);
- }
- }
- }
- get style() {
- if (this.__style == null) {
- this.__style = createCSSStyleDeclaration();
- }
- return this.__style;
- }
- set style(val) {
- if (typeof val === "string") {
- if (this.__style == null) {
- this.__style = createCSSStyleDeclaration();
- }
- this.__style.cssText = val;
- } else {
- this.__style = val;
- }
- }
- get tabIndex() {
- return parseInt(this.getAttributeNS(null, "tabindex") || "-1", 10);
- }
- set tabIndex(value) {
- this.setAttributeNS(null, "tabindex", value);
- }
- get tagName() {
- var _a2;
- return (_a2 = this.nodeName) != null ? _a2 : "";
- }
- set tagName(value) {
- this.nodeName = value;
- }
- get textContent() {
- const text = [];
- getTextContent(this.childNodes, text);
- return text.join("");
- }
- set textContent(value) {
- setTextContent(this, value);
- }
- get title() {
- return this.getAttributeNS(null, "title") || "";
- }
- set title(value) {
- this.setAttributeNS(null, "title", value);
- }
- animate() {
- }
- onanimationstart() {
- }
- onanimationend() {
- }
- onanimationiteration() {
- }
- onabort() {
- }
- onauxclick() {
- }
- onbeforecopy() {
- }
- onbeforecut() {
- }
- onbeforepaste() {
- }
- onblur() {
- }
- oncancel() {
- }
- oncanplay() {
- }
- oncanplaythrough() {
- }
- onchange() {
- }
- onclick() {
- }
- onclose() {
- }
- oncontextmenu() {
- }
- oncopy() {
- }
- oncuechange() {
- }
- oncut() {
- }
- ondblclick() {
- }
- ondrag() {
- }
- ondragend() {
- }
- ondragenter() {
- }
- ondragleave() {
- }
- ondragover() {
- }
- ondragstart() {
- }
- ondrop() {
- }
- ondurationchange() {
- }
- onemptied() {
- }
- onended() {
- }
- onerror() {
- }
- onfocus() {
- }
- onfocusin() {
- }
- onfocusout() {
- }
- onformdata() {
- }
- onfullscreenchange() {
- }
- onfullscreenerror() {
- }
- ongotpointercapture() {
- }
- oninput() {
- }
- oninvalid() {
- }
- onkeydown() {
- }
- onkeypress() {
- }
- onkeyup() {
- }
- onload() {
- }
- onloadeddata() {
- }
- onloadedmetadata() {
- }
- onloadstart() {
- }
- onlostpointercapture() {
- }
- onmousedown() {
- }
- onmouseenter() {
- }
- onmouseleave() {
- }
- onmousemove() {
- }
- onmouseout() {
- }
- onmouseover() {
- }
- onmouseup() {
- }
- onmousewheel() {
- }
- onpaste() {
- }
- onpause() {
- }
- onplay() {
- }
- onplaying() {
- }
- onpointercancel() {
- }
- onpointerdown() {
- }
- onpointerenter() {
- }
- onpointerleave() {
- }
- onpointermove() {
- }
- onpointerout() {
- }
- onpointerover() {
- }
- onpointerup() {
- }
- onprogress() {
- }
- onratechange() {
- }
- onreset() {
- }
- onresize() {
- }
- onscroll() {
- }
- onsearch() {
- }
- onseeked() {
- }
- onseeking() {
- }
- onselect() {
- }
- onselectstart() {
- }
- onstalled() {
- }
- onsubmit() {
- }
- onsuspend() {
- }
- ontimeupdate() {
- }
- ontoggle() {
- }
- onvolumechange() {
- }
- onwaiting() {
- }
- onwebkitfullscreenchange() {
- }
- onwebkitfullscreenerror() {
- }
- onwheel() {
- }
- requestFullscreen() {
- }
- scrollBy() {
- }
- scrollTo() {
- }
- scrollIntoView() {
- }
- toString(opts) {
- return serializeNodeToHtml(this, opts);
- }
- };
- function getElementsByClassName(elm, classNames, foundElms) {
- const children = elm.children;
- for (let i = 0, ii = children.length; i < ii; i++) {
- const childElm = children[i];
- for (let j = 0, jj = classNames.length; j < jj; j++) {
- if (childElm.classList.contains(classNames[j])) {
- foundElms.push(childElm);
- }
- }
- getElementsByClassName(childElm, classNames, foundElms);
- }
- }
- function getElementsByTagName(elm, tagName, foundElms) {
- var _a2;
- const children = elm.children;
- for (let i = 0, ii = children.length; i < ii; i++) {
- const childElm = children[i];
- if (tagName === "*" || ((_a2 = childElm.nodeName) != null ? _a2 : "").toLowerCase() === tagName) {
- foundElms.push(childElm);
- }
- getElementsByTagName(childElm, tagName, foundElms);
- }
- }
- function resetElement(elm) {
- resetEventListeners(elm);
- delete elm.__attributeMap;
- delete elm.__shadowRoot;
- delete elm.__style;
- }
- function insertBefore(parentNode, newNode, referenceNode) {
- if (newNode !== referenceNode) {
- newNode.remove();
- newNode.parentNode = parentNode;
- newNode.ownerDocument = parentNode.ownerDocument;
- if (referenceNode != null) {
- const index = parentNode.childNodes.indexOf(referenceNode);
- if (index > -1) {
- parentNode.childNodes.splice(index, 0, newNode);
- } else {
- throw new Error(`referenceNode not found in parentNode.childNodes`);
- }
- } else {
- parentNode.childNodes.push(newNode);
- }
- connectNode(parentNode.ownerDocument, newNode);
- }
- return newNode;
- }
- var MockHTMLElement = class extends MockElement {
- constructor(ownerDocument, nodeName) {
- super(ownerDocument, typeof nodeName === "string" ? nodeName.toUpperCase() : null);
- this.__namespaceURI = "http://www.w3.org/1999/xhtml";
- }
- get tagName() {
- var _a2;
- return (_a2 = this.nodeName) != null ? _a2 : "";
- }
- set tagName(value) {
- this.nodeName = value;
- }
- /**
- * A node’s parent of type Element is known as its parent element.
- * If the node has a parent of a different type, its parent element
- * is null.
- * @returns MockElement
- */
- get parentElement() {
- if (this.nodeName === "HTML") {
- return null;
- }
- return super.parentElement;
- }
- get attributes() {
- if (this.__attributeMap == null) {
- const attrMap = createAttributeProxy(true);
- this.__attributeMap = attrMap;
- return attrMap;
- }
- return this.__attributeMap;
- }
- set attributes(attrs) {
- this.__attributeMap = attrs;
- }
- };
- var MockTextNode = class _MockTextNode extends MockNode2 {
- constructor(ownerDocument, text) {
- super(ownerDocument, 3 /* TEXT_NODE */, "#text" /* TEXT_NODE */, text);
- }
- cloneNode(_deep) {
- return new _MockTextNode(null, this.nodeValue);
- }
- get textContent() {
- return this.nodeValue;
- }
- set textContent(text) {
- this.nodeValue = text;
- }
- get data() {
- return this.nodeValue;
- }
- set data(text) {
- this.nodeValue = text;
- }
- get wholeText() {
- if (this.parentNode != null) {
- const text = [];
- for (let i = 0, ii = this.parentNode.childNodes.length; i < ii; i++) {
- const childNode = this.parentNode.childNodes[i];
- if (childNode.nodeType === 3 /* TEXT_NODE */) {
- text.push(childNode.nodeValue);
- }
- }
- return text.join("");
- }
- return this.nodeValue;
- }
- };
- function getTextContent(childNodes, text) {
- for (let i = 0, ii = childNodes.length; i < ii; i++) {
- const childNode = childNodes[i];
- if (childNode.nodeType === 3 /* TEXT_NODE */) {
- text.push(childNode.nodeValue);
- } else if (childNode.nodeType === 1 /* ELEMENT_NODE */) {
- getTextContent(childNode.childNodes, text);
- }
- }
- }
- function setTextContent(elm, text) {
- for (let i = elm.childNodes.length - 1; i >= 0; i--) {
- elm.removeChild(elm.childNodes[i]);
- }
- const textNode = new MockTextNode(elm.ownerDocument, text);
- elm.appendChild(textNode);
- }
- // src/mock-doc/comment-node.ts
- var MockComment = class _MockComment extends MockNode2 {
- constructor(ownerDocument, data) {
- super(ownerDocument, 8 /* COMMENT_NODE */, "#comment" /* COMMENT_NODE */, data);
- }
- cloneNode(_deep) {
- return new _MockComment(null, this.nodeValue);
- }
- get textContent() {
- return this.nodeValue;
- }
- set textContent(text) {
- this.nodeValue = text;
- }
- };
- // src/mock-doc/document-fragment.ts
- var MockDocumentFragment = class _MockDocumentFragment extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, null);
- this.nodeName = "#document-fragment" /* DOCUMENT_FRAGMENT_NODE */;
- this.nodeType = 11 /* DOCUMENT_FRAGMENT_NODE */;
- }
- getElementById(id) {
- return getElementById(this, id);
- }
- cloneNode(deep) {
- const cloned = new _MockDocumentFragment(null);
- if (deep) {
- for (let i = 0, ii = this.childNodes.length; i < ii; i++) {
- const childNode = this.childNodes[i];
- if (childNode.nodeType === 1 /* ELEMENT_NODE */ || childNode.nodeType === 3 /* TEXT_NODE */ || childNode.nodeType === 8 /* COMMENT_NODE */) {
- const clonedChildNode = this.childNodes[i].cloneNode(true);
- cloned.appendChild(clonedChildNode);
- }
- }
- }
- return cloned;
- }
- };
- // src/mock-doc/document-type-node.ts
- var MockDocumentTypeNode = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "!DOCTYPE");
- this.nodeType = 10 /* DOCUMENT_TYPE_NODE */;
- this.setAttribute("html", "");
- }
- };
- // src/mock-doc/css-style-sheet.ts
- var MockCSSRule = class {
- constructor(parentStyleSheet) {
- this.parentStyleSheet = parentStyleSheet;
- this.cssText = "";
- this.type = 0;
- }
- };
- var MockCSSStyleSheet = class {
- constructor(ownerNode) {
- this.type = "text/css";
- this.parentStyleSheet = null;
- this.cssRules = [];
- this.ownerNode = ownerNode;
- }
- get rules() {
- return this.cssRules;
- }
- set rules(rules) {
- this.cssRules = rules;
- }
- deleteRule(index) {
- if (index >= 0 && index < this.cssRules.length) {
- this.cssRules.splice(index, 1);
- updateStyleTextNode(this.ownerNode);
- }
- }
- insertRule(rule, index = 0) {
- if (typeof index !== "number") {
- index = 0;
- }
- if (index < 0) {
- index = 0;
- }
- if (index > this.cssRules.length) {
- index = this.cssRules.length;
- }
- const cssRule = new MockCSSRule(this);
- cssRule.cssText = rule;
- this.cssRules.splice(index, 0, cssRule);
- updateStyleTextNode(this.ownerNode);
- return index;
- }
- };
- function getStyleElementText(styleElm) {
- const output = [];
- for (let i = 0; i < styleElm.childNodes.length; i++) {
- output.push(styleElm.childNodes[i].nodeValue);
- }
- return output.join("");
- }
- function setStyleElementText(styleElm, text) {
- const sheet = styleElm.sheet;
- sheet.cssRules.length = 0;
- sheet.insertRule(text);
- updateStyleTextNode(styleElm);
- }
- function updateStyleTextNode(styleElm) {
- const childNodeLen = styleElm.childNodes.length;
- if (childNodeLen > 1) {
- for (let i = childNodeLen - 1; i >= 1; i--) {
- styleElm.removeChild(styleElm.childNodes[i]);
- }
- } else if (childNodeLen < 1) {
- styleElm.appendChild(styleElm.ownerDocument.createTextNode(""));
- }
- const textNode = styleElm.childNodes[0];
- textNode.nodeValue = styleElm.sheet.cssRules.map((r) => r.cssText).join("\n");
- }
- // src/mock-doc/element.ts
- function createElement(ownerDocument, tagName) {
- if (typeof tagName !== "string" || tagName === "" || !/^[a-z0-9-_:]+$/i.test(tagName)) {
- throw new Error(`The tag name provided (${tagName}) is not a valid name.`);
- }
- tagName = tagName.toLowerCase();
- switch (tagName) {
- case "a":
- return new MockAnchorElement(ownerDocument);
- case "base":
- return new MockBaseElement(ownerDocument);
- case "button":
- return new MockButtonElement(ownerDocument);
- case "canvas":
- return new MockCanvasElement(ownerDocument);
- case "form":
- return new MockFormElement(ownerDocument);
- case "img":
- return new MockImageElement(ownerDocument);
- case "input":
- return new MockInputElement(ownerDocument);
- case "link":
- return new MockLinkElement(ownerDocument);
- case "meta":
- return new MockMetaElement(ownerDocument);
- case "script":
- return new MockScriptElement(ownerDocument);
- case "style":
- return new MockStyleElement(ownerDocument);
- case "template":
- return new MockTemplateElement(ownerDocument);
- case "title":
- return new MockTitleElement(ownerDocument);
- case "ul":
- return new MockUListElement(ownerDocument);
- }
- if (ownerDocument != null && tagName.includes("-")) {
- const win = ownerDocument.defaultView;
- if (win != null && win.customElements != null) {
- return createCustomElement(win.customElements, ownerDocument, tagName);
- }
- }
- return new MockHTMLElement(ownerDocument, tagName);
- }
- function createElementNS(ownerDocument, namespaceURI, tagName) {
- if (namespaceURI === "http://www.w3.org/1999/xhtml") {
- return createElement(ownerDocument, tagName);
- } else if (namespaceURI === "http://www.w3.org/2000/svg") {
- switch (tagName.toLowerCase()) {
- case "text":
- case "tspan":
- case "tref":
- case "altglyph":
- case "textpath":
- return new MockSVGTextContentElement(ownerDocument, tagName);
- case "circle":
- case "ellipse":
- case "image":
- case "line":
- case "path":
- case "polygon":
- case "polyline":
- case "rect":
- case "use":
- return new MockSVGGraphicsElement(ownerDocument, tagName);
- case "svg":
- return new MockSVGSVGElement(ownerDocument, tagName);
- default:
- return new MockSVGElement(ownerDocument, tagName);
- }
- } else {
- return new MockElement(ownerDocument, tagName, namespaceURI);
- }
- }
- var MockAnchorElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "a");
- }
- get href() {
- return fullUrl(this, "href");
- }
- set href(value) {
- this.setAttribute("href", value);
- }
- get pathname() {
- return new URL(this.href).pathname;
- }
- };
- var MockButtonElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "button");
- }
- };
- patchPropAttributes(
- MockButtonElement.prototype,
- {
- type: String
- },
- {
- type: "submit"
- }
- );
- var MockImageElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "img");
- }
- get draggable() {
- return this.getAttributeNS(null, "draggable") !== "false";
- }
- set draggable(value) {
- this.setAttributeNS(null, "draggable", value);
- }
- get src() {
- return fullUrl(this, "src");
- }
- set src(value) {
- this.setAttribute("src", value);
- }
- };
- patchPropAttributes(MockImageElement.prototype, {
- height: Number,
- width: Number
- });
- var MockInputElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "input");
- }
- get list() {
- const listId = this.getAttribute("list");
- if (listId) {
- return this.ownerDocument.getElementById(listId);
- }
- return null;
- }
- };
- patchPropAttributes(
- MockInputElement.prototype,
- {
- accept: String,
- autocomplete: String,
- autofocus: Boolean,
- capture: String,
- checked: Boolean,
- disabled: Boolean,
- form: String,
- formaction: String,
- formenctype: String,
- formmethod: String,
- formnovalidate: String,
- formtarget: String,
- height: Number,
- inputmode: String,
- max: String,
- maxLength: Number,
- min: String,
- minLength: Number,
- multiple: Boolean,
- name: String,
- pattern: String,
- placeholder: String,
- required: Boolean,
- readOnly: Boolean,
- size: Number,
- spellCheck: Boolean,
- src: String,
- step: String,
- type: String,
- value: String,
- width: Number
- },
- {
- type: "text"
- }
- );
- var MockFormElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "form");
- }
- };
- patchPropAttributes(MockFormElement.prototype, {
- name: String
- });
- var MockLinkElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "link");
- }
- get href() {
- return fullUrl(this, "href");
- }
- set href(value) {
- this.setAttribute("href", value);
- }
- };
- patchPropAttributes(MockLinkElement.prototype, {
- crossorigin: String,
- media: String,
- rel: String,
- type: String
- });
- var MockMetaElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "meta");
- }
- };
- patchPropAttributes(MockMetaElement.prototype, {
- charset: String,
- content: String,
- name: String
- });
- var MockScriptElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "script");
- }
- get src() {
- return fullUrl(this, "src");
- }
- set src(value) {
- this.setAttribute("src", value);
- }
- };
- patchPropAttributes(MockScriptElement.prototype, {
- type: String
- });
- var MockDOMMatrix = class _MockDOMMatrix {
- constructor() {
- this.a = 1;
- this.b = 0;
- this.c = 0;
- this.d = 1;
- this.e = 0;
- this.f = 0;
- this.m11 = 1;
- this.m12 = 0;
- this.m13 = 0;
- this.m14 = 0;
- this.m21 = 0;
- this.m22 = 1;
- this.m23 = 0;
- this.m24 = 0;
- this.m31 = 0;
- this.m32 = 0;
- this.m33 = 1;
- this.m34 = 0;
- this.m41 = 0;
- this.m42 = 0;
- this.m43 = 0;
- this.m44 = 1;
- this.is2D = true;
- this.isIdentity = true;
- }
- static fromMatrix() {
- return new _MockDOMMatrix();
- }
- inverse() {
- return new _MockDOMMatrix();
- }
- flipX() {
- return new _MockDOMMatrix();
- }
- flipY() {
- return new _MockDOMMatrix();
- }
- multiply() {
- return new _MockDOMMatrix();
- }
- rotate() {
- return new _MockDOMMatrix();
- }
- rotateAxisAngle() {
- return new _MockDOMMatrix();
- }
- rotateFromVector() {
- return new _MockDOMMatrix();
- }
- scale() {
- return new _MockDOMMatrix();
- }
- scaleNonUniform() {
- return new _MockDOMMatrix();
- }
- skewX() {
- return new _MockDOMMatrix();
- }
- skewY() {
- return new _MockDOMMatrix();
- }
- toJSON() {
- }
- toString() {
- }
- transformPoint() {
- return new MockDOMPoint();
- }
- translate() {
- return new _MockDOMMatrix();
- }
- };
- var MockDOMPoint = class {
- constructor() {
- this.w = 1;
- this.x = 0;
- this.y = 0;
- this.z = 0;
- }
- toJSON() {
- }
- matrixTransform() {
- return new MockDOMMatrix();
- }
- };
- var MockSVGRect = class {
- constructor() {
- this.height = 10;
- this.width = 10;
- this.x = 0;
- this.y = 0;
- }
- };
- var MockStyleElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "style");
- this.sheet = new MockCSSStyleSheet(this);
- }
- get innerHTML() {
- return getStyleElementText(this);
- }
- set innerHTML(value) {
- setStyleElementText(this, value);
- }
- get innerText() {
- return getStyleElementText(this);
- }
- set innerText(value) {
- setStyleElementText(this, value);
- }
- get textContent() {
- return getStyleElementText(this);
- }
- set textContent(value) {
- setStyleElementText(this, value);
- }
- };
- var MockSVGElement = class extends MockElement {
- constructor() {
- super(...arguments);
- this.__namespaceURI = "http://www.w3.org/2000/svg";
- }
- // SVGElement properties and methods
- get ownerSVGElement() {
- return null;
- }
- get viewportElement() {
- return null;
- }
- onunload() {
- }
- // SVGGeometryElement properties and methods
- get pathLength() {
- return 0;
- }
- isPointInFill(_pt) {
- return false;
- }
- isPointInStroke(_pt) {
- return false;
- }
- getTotalLength() {
- return 0;
- }
- };
- var MockSVGGraphicsElement = class extends MockSVGElement {
- getBBox(_options) {
- return new MockSVGRect();
- }
- getCTM() {
- return new MockDOMMatrix();
- }
- getScreenCTM() {
- return new MockDOMMatrix();
- }
- };
- var MockSVGSVGElement = class extends MockSVGGraphicsElement {
- createSVGPoint() {
- return new MockDOMPoint();
- }
- };
- var MockSVGTextContentElement = class extends MockSVGGraphicsElement {
- getComputedTextLength() {
- return 0;
- }
- };
- var MockBaseElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "base");
- }
- get href() {
- return fullUrl(this, "href");
- }
- set href(value) {
- this.setAttribute("href", value);
- }
- };
- var MockTemplateElement = class _MockTemplateElement extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "template");
- this.content = new MockDocumentFragment(ownerDocument);
- }
- get innerHTML() {
- return this.content.innerHTML;
- }
- set innerHTML(html) {
- this.content.innerHTML = html;
- }
- cloneNode(deep) {
- const cloned = new _MockTemplateElement(null);
- cloned.attributes = cloneAttributes(this.attributes);
- const styleCssText = this.getAttribute("style");
- if (styleCssText != null && styleCssText.length > 0) {
- cloned.setAttribute("style", styleCssText);
- }
- cloned.content = this.content.cloneNode(deep);
- if (deep) {
- for (let i = 0, ii = this.childNodes.length; i < ii; i++) {
- const clonedChildNode = this.childNodes[i].cloneNode(true);
- cloned.appendChild(clonedChildNode);
- }
- }
- return cloned;
- }
- };
- var MockTitleElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "title");
- }
- get text() {
- return this.textContent;
- }
- set text(value) {
- this.textContent = value;
- }
- };
- var MockUListElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "ul");
- }
- };
- var CanvasRenderingContext = class {
- constructor(context, contextAttributes) {
- this.context = context;
- this.contextAttributes = contextAttributes;
- }
- fillRect() {
- return;
- }
- clearRect() {
- }
- getImageData(_, __, w, h) {
- return {
- data: new Array(w * h * 4)
- };
- }
- toDataURL() {
- return "data:,";
- }
- putImageData() {
- }
- createImageData() {
- return {};
- }
- setTransform() {
- }
- drawImage() {
- }
- save() {
- }
- fillText() {
- }
- restore() {
- }
- beginPath() {
- }
- moveTo() {
- }
- lineTo() {
- }
- closePath() {
- }
- stroke() {
- }
- translate() {
- }
- scale() {
- }
- rotate() {
- }
- arc() {
- }
- fill() {
- }
- measureText() {
- return { width: 0 };
- }
- transform() {
- }
- rect() {
- }
- clip() {
- }
- };
- var MockCanvasElement = class extends MockHTMLElement {
- constructor(ownerDocument) {
- super(ownerDocument, "canvas");
- }
- getContext(context, contextAttributes) {
- return new CanvasRenderingContext(context, contextAttributes);
- }
- };
- function fullUrl(elm, attrName) {
- const val = elm.getAttribute(attrName) || "";
- if (elm.ownerDocument != null) {
- const win = elm.ownerDocument.defaultView;
- if (win != null) {
- const loc = win.location;
- if (loc != null) {
- try {
- const url = new URL(val, loc.href);
- return url.href;
- } catch (e) {
- }
- }
- }
- }
- return val.replace(/\'|\"/g, "").trim();
- }
- function patchPropAttributes(prototype, attrs, defaults = {}) {
- Object.keys(attrs).forEach((propName) => {
- const attr = attrs[propName];
- const defaultValue = defaults[propName];
- if (attr === Boolean) {
- Object.defineProperty(prototype, propName, {
- get() {
- return this.hasAttribute(propName);
- },
- set(value) {
- if (value) {
- this.setAttribute(propName, "");
- } else {
- this.removeAttribute(propName);
- }
- }
- });
- } else if (attr === Number) {
- Object.defineProperty(prototype, propName, {
- get() {
- const value = this.getAttribute(propName);
- return value ? parseInt(value, 10) : defaultValue === void 0 ? 0 : defaultValue;
- },
- set(value) {
- this.setAttribute(propName, value);
- }
- });
- } else {
- Object.defineProperty(prototype, propName, {
- get() {
- return this.hasAttribute(propName) ? this.getAttribute(propName) : defaultValue || "";
- },
- set(value) {
- this.setAttribute(propName, value);
- }
- });
- }
- });
- }
- MockElement.prototype.cloneNode = function(deep) {
- const cloned = createElement(this.ownerDocument, this.nodeName);
- cloned.attributes = cloneAttributes(this.attributes);
- const styleCssText = this.getAttribute("style");
- if (styleCssText != null && styleCssText.length > 0) {
- cloned.setAttribute("style", styleCssText);
- }
- if (deep) {
- for (let i = 0, ii = this.childNodes.length; i < ii; i++) {
- const clonedChildNode = this.childNodes[i].cloneNode(true);
- cloned.appendChild(clonedChildNode);
- }
- }
- return cloned;
- };
- // src/mock-doc/parse-html.ts
- var sharedDocument;
- function parseHtmlToDocument(html, ownerDocument = null) {
- if (ownerDocument == null) {
- if (sharedDocument == null) {
- sharedDocument = new MockDocument();
- }
- ownerDocument = sharedDocument;
- }
- return parseDocumentUtil(ownerDocument, html);
- }
- // src/mock-doc/console.ts
- var consoleNoop = () => {
- };
- function createConsole() {
- return {
- debug: consoleNoop,
- error: consoleNoop,
- info: consoleNoop,
- log: consoleNoop,
- warn: consoleNoop,
- dir: consoleNoop,
- dirxml: consoleNoop,
- table: consoleNoop,
- trace: consoleNoop,
- group: consoleNoop,
- groupCollapsed: consoleNoop,
- groupEnd: consoleNoop,
- clear: consoleNoop,
- count: consoleNoop,
- countReset: consoleNoop,
- assert: consoleNoop,
- profile: consoleNoop,
- profileEnd: consoleNoop,
- time: consoleNoop,
- timeLog: consoleNoop,
- timeEnd: consoleNoop,
- timeStamp: consoleNoop,
- context: consoleNoop,
- memory: consoleNoop
- };
- }
- // src/mock-doc/headers.ts
- var MockHeaders = class {
- constructor(init) {
- this._values = [];
- if (typeof init === "object") {
- if (typeof init[Symbol.iterator] === "function") {
- const kvs = [];
- for (const kv of init) {
- if (typeof kv[Symbol.iterator] === "function") {
- kvs.push([...kv]);
- }
- }
- for (const kv of kvs) {
- this.append(kv[0], kv[1]);
- }
- } else {
- for (const key in init) {
- this.append(key, init[key]);
- }
- }
- }
- }
- append(key, value) {
- this._values.push([key, value + ""]);
- }
- delete(key) {
- key = key.toLowerCase();
- for (let i = this._values.length - 1; i >= 0; i--) {
- if (this._values[i][0].toLowerCase() === key) {
- this._values.splice(i, 1);
- }
- }
- }
- entries() {
- const entries = [];
- for (const kv of this.keys()) {
- entries.push([kv, this.get(kv)]);
- }
- let index = -1;
- return {
- next() {
- index++;
- return {
- value: entries[index],
- done: !entries[index]
- };
- },
- [Symbol.iterator]() {
- return this;
- }
- };
- }
- forEach(cb) {
- for (const kv of this.entries()) {
- cb(kv[1], kv[0]);
- }
- }
- get(key) {
- const rtn = [];
- key = key.toLowerCase();
- for (const kv of this._values) {
- if (kv[0].toLowerCase() === key) {
- rtn.push(kv[1]);
- }
- }
- return rtn.length > 0 ? rtn.join(", ") : null;
- }
- has(key) {
- key = key.toLowerCase();
- for (const kv of this._values) {
- if (kv[0].toLowerCase() === key) {
- return true;
- }
- }
- return false;
- }
- keys() {
- const keys = [];
- for (const kv of this._values) {
- const key = kv[0].toLowerCase();
- if (!keys.includes(key)) {
- keys.push(key);
- }
- }
- let index = -1;
- return {
- next() {
- index++;
- return {
- value: keys[index],
- done: !keys[index]
- };
- },
- [Symbol.iterator]() {
- return this;
- }
- };
- }
- set(key, value) {
- for (const kv of this._values) {
- if (kv[0].toLowerCase() === key.toLowerCase()) {
- kv[1] = value + "";
- return;
- }
- }
- this.append(key, value);
- }
- values() {
- const values = this._values;
- let index = -1;
- return {
- next() {
- index++;
- const done = !values[index];
- return {
- value: done ? void 0 : values[index][1],
- done
- };
- },
- [Symbol.iterator]() {
- return this;
- }
- };
- }
- [Symbol.iterator]() {
- return this.entries();
- }
- };
- // src/mock-doc/parser.ts
- var MockDOMParser = class {
- parseFromString(htmlToParse, mimeType) {
- if (mimeType !== "text/html") {
- console.error("XML parsing not implemented yet, continuing as html");
- }
- return parseHtmlToDocument(htmlToParse);
- }
- };
- // src/mock-doc/request-response.ts
- var MockRequest = class _MockRequest {
- constructor(input, init = {}) {
- this._method = "GET";
- this._url = "/";
- this.bodyUsed = false;
- this.cache = "default";
- this.credentials = "same-origin";
- this.integrity = "";
- this.keepalive = false;
- this.mode = "cors";
- this.redirect = "follow";
- this.referrer = "about:client";
- this.referrerPolicy = "";
- if (typeof input === "string") {
- this.url = input;
- } else if (input) {
- Object.assign(this, input);
- this.headers = new MockHeaders(input.headers);
- }
- Object.assign(this, init);
- if (init.headers) {
- this.headers = new MockHeaders(init.headers);
- }
- if (!this.headers) {
- this.headers = new MockHeaders();
- }
- }
- get url() {
- if (typeof this._url === "string") {
- return new URL(this._url, location.href).href;
- }
- return new URL("/", location.href).href;
- }
- set url(value) {
- this._url = value;
- }
- get method() {
- if (typeof this._method === "string") {
- return this._method.toUpperCase();
- }
- return "GET";
- }
- set method(value) {
- this._method = value;
- }
- clone() {
- const clone = { ...this };
- clone.headers = new MockHeaders(this.headers);
- return new _MockRequest(clone);
- }
- };
- var MockResponse = class _MockResponse {
- constructor(body, init = {}) {
- this.ok = true;
- this.status = 200;
- this.statusText = "";
- this.type = "default";
- this.url = "";
- this._body = body;
- if (init) {
- Object.assign(this, init);
- }
- this.headers = new MockHeaders(init.headers);
- }
- async json() {
- return JSON.parse(this._body);
- }
- async text() {
- return this._body;
- }
- clone() {
- const initClone = { ...this };
- initClone.headers = new MockHeaders(this.headers);
- return new _MockResponse(this._body, initClone);
- }
- };
- // src/mock-doc/global.ts
- function patchWindow(winToBePatched) {
- const mockWin = new MockWindow(false);
- WINDOW_FUNCTIONS.forEach((fnName) => {
- if (typeof winToBePatched[fnName] !== "function") {
- winToBePatched[fnName] = mockWin[fnName].bind(mockWin);
- }
- });
- WINDOW_PROPS.forEach((propName) => {
- if (winToBePatched === void 0) {
- Object.defineProperty(winToBePatched, propName, {
- get() {
- return mockWin[propName];
- },
- set(val) {
- mockWin[propName] = val;
- },
- configurable: true,
- enumerable: true
- });
- }
- });
- }
- function addGlobalsToWindowPrototype(mockWinPrototype) {
- GLOBAL_CONSTRUCTORS.forEach(([cstrName, Cstr]) => {
- Object.defineProperty(mockWinPrototype, cstrName, {
- get() {
- return this["__" + cstrName] || Cstr;
- },
- set(cstr) {
- this["__" + cstrName] = cstr;
- },
- configurable: true,
- enumerable: true
- });
- });
- }
- var WINDOW_FUNCTIONS = [
- "addEventListener",
- "alert",
- "blur",
- "cancelAnimationFrame",
- "cancelIdleCallback",
- "clearInterval",
- "clearTimeout",
- "close",
- "confirm",
- "dispatchEvent",
- "focus",
- "getComputedStyle",
- "matchMedia",
- "open",
- "prompt",
- "removeEventListener",
- "requestAnimationFrame",
- "requestIdleCallback",
- "URL"
- ];
- var WINDOW_PROPS = [
- "customElements",
- "devicePixelRatio",
- "document",
- "history",
- "innerHeight",
- "innerWidth",
- "localStorage",
- "location",
- "navigator",
- "pageXOffset",
- "pageYOffset",
- "performance",
- "screenLeft",
- "screenTop",
- "screenX",
- "screenY",
- "scrollX",
- "scrollY",
- "sessionStorage",
- "CSS",
- "CustomEvent",
- "Event",
- "Element",
- "HTMLElement",
- "Node",
- "NodeList",
- "FocusEvent",
- "KeyboardEvent",
- "MouseEvent"
- ];
- var GLOBAL_CONSTRUCTORS = [
- ["CustomEvent", MockCustomEvent],
- ["DocumentFragment", MockDocumentFragment],
- ["DOMParser", MockDOMParser],
- ["Event", MockEvent],
- ["FocusEvent", MockFocusEvent],
- ["Headers", MockHeaders],
- ["KeyboardEvent", MockKeyboardEvent],
- ["MouseEvent", MockMouseEvent],
- ["Request", MockRequest],
- ["Response", MockResponse],
- ["ShadowRoot", MockDocumentFragment],
- ["HTMLAnchorElement", MockAnchorElement],
- ["HTMLBaseElement", MockBaseElement],
- ["HTMLButtonElement", MockButtonElement],
- ["HTMLCanvasElement", MockCanvasElement],
- ["HTMLFormElement", MockFormElement],
- ["HTMLImageElement", MockImageElement],
- ["HTMLInputElement", MockInputElement],
- ["HTMLLinkElement", MockLinkElement],
- ["HTMLMetaElement", MockMetaElement],
- ["HTMLScriptElement", MockScriptElement],
- ["HTMLStyleElement", MockStyleElement],
- ["HTMLTemplateElement", MockTemplateElement],
- ["HTMLTitleElement", MockTitleElement],
- ["HTMLUListElement", MockUListElement]
- ];
- // src/mock-doc/history.ts
- var MockHistory = class {
- constructor() {
- this.items = [];
- }
- get length() {
- return this.items.length;
- }
- back() {
- this.go(-1);
- }
- forward() {
- this.go(1);
- }
- go(_value) {
- }
- pushState(_state, _title, _url) {
- }
- replaceState(_state, _title, _url) {
- }
- };
- // src/mock-doc/intersection-observer.ts
- var MockIntersectionObserver = class {
- constructor() {
- }
- disconnect() {
- }
- observe() {
- }
- takeRecords() {
- return [];
- }
- unobserve() {
- }
- };
- // src/mock-doc/location.ts
- var MockLocation = class {
- constructor() {
- this.ancestorOrigins = null;
- this.protocol = "";
- this.host = "";
- this.hostname = "";
- this.port = "";
- this.pathname = "";
- this.search = "";
- this.hash = "";
- this.username = "";
- this.password = "";
- this.origin = "";
- this._href = "";
- }
- get href() {
- return this._href;
- }
- set href(value) {
- const url = new URL(value, "http://mockdoc.stenciljs.com");
- this._href = url.href;
- this.protocol = url.protocol;
- this.host = url.host;
- this.hostname = url.hostname;
- this.port = url.port;
- this.pathname = url.pathname;
- this.search = url.search;
- this.hash = url.hash;
- this.username = url.username;
- this.password = url.password;
- this.origin = url.origin;
- }
- assign(_url) {
- }
- reload(_forcedReload) {
- }
- replace(_url) {
- }
- toString() {
- return this.href;
- }
- };
- // src/mock-doc/navigator.ts
- var MockNavigator = class {
- constructor() {
- this.appCodeName = "MockNavigator";
- this.appName = "MockNavigator";
- this.appVersion = "MockNavigator";
- this.platform = "MockNavigator";
- this.userAgent = "MockNavigator";
- }
- };
- // src/mock-doc/performance.ts
- var MockPerformance = class {
- constructor() {
- this.timeOrigin = Date.now();
- this.eventCounts = /* @__PURE__ */ new Map();
- }
- addEventListener() {
- }
- clearMarks() {
- }
- clearMeasures() {
- }
- clearResourceTimings() {
- }
- dispatchEvent() {
- return true;
- }
- getEntries() {
- return [];
- }
- getEntriesByName() {
- return [];
- }
- getEntriesByType() {
- return [];
- }
- // Stencil's implementation of `mark` is non-compliant with the `Performance` interface. Because Stencil will
- // instantiate an instance of this class and may attempt to assign it to a variable of type `Performance`, the return
- // type must match the `Performance` interface (rather than typing this function as returning `void` and ignoring the
- // associated errors returned by the type checker)
- // @ts-ignore
- mark() {
- }
- // Stencil's implementation of `measure` is non-compliant with the `Performance` interface. Because Stencil will
- // instantiate an instance of this class and may attempt to assign it to a variable of type `Performance`, the return
- // type must match the `Performance` interface (rather than typing this function as returning `void` and ignoring the
- // associated errors returned by the type checker)
- // @ts-ignore
- measure() {
- }
- get navigation() {
- return {};
- }
- now() {
- return Date.now() - this.timeOrigin;
- }
- get onresourcetimingbufferfull() {
- return null;
- }
- removeEventListener() {
- }
- setResourceTimingBufferSize() {
- }
- get timing() {
- return {};
- }
- toJSON() {
- }
- };
- function resetPerformance(perf) {
- if (perf != null) {
- try {
- perf.timeOrigin = Date.now();
- } catch (e) {
- }
- }
- }
- // src/mock-doc/storage.ts
- var MockStorage = class {
- constructor() {
- this.items = /* @__PURE__ */ new Map();
- }
- key(_value) {
- }
- getItem(key) {
- key = String(key);
- if (this.items.has(key)) {
- return this.items.get(key);
- }
- return null;
- }
- setItem(key, value) {
- if (value == null) {
- value = "null";
- }
- this.items.set(String(key), String(value));
- }
- removeItem(key) {
- this.items.delete(String(key));
- }
- clear() {
- this.items.clear();
- }
- };
- // src/mock-doc/window.ts
- var nativeClearInterval = clearInterval;
- var nativeClearTimeout = clearTimeout;
- var nativeSetInterval = setInterval;
- var nativeSetTimeout = setTimeout;
- var nativeURL = URL;
- var nativeWindow = globalThis.window;
- var MockWindow = class {
- constructor(html = null) {
- if (html !== false) {
- this.document = new MockDocument(html, this);
- } else {
- this.document = null;
- }
- this.performance = new MockPerformance();
- this.customElements = new MockCustomElementRegistry(this);
- this.console = createConsole();
- resetWindowDefaults(this);
- resetWindowDimensions(this);
- }
- addEventListener(type, handler) {
- addEventListener(this, type, handler);
- }
- alert(msg) {
- if (this.console) {
- this.console.debug(msg);
- } else {
- console.debug(msg);
- }
- }
- blur() {
- }
- cancelAnimationFrame(id) {
- this.__clearTimeout.call(nativeWindow || this, id);
- }
- cancelIdleCallback(id) {
- this.__clearTimeout.call(nativeWindow || this, id);
- }
- get CharacterData() {
- if (this.__charDataCstr == null) {
- const ownerDocument = this.document;
- this.__charDataCstr = class extends MockNode2 {
- constructor() {
- super(ownerDocument, 0, "test", "");
- throw new Error("Illegal constructor: cannot construct CharacterData");
- }
- };
- }
- return this.__charDataCstr;
- }
- set CharacterData(charDataCstr) {
- this.__charDataCstr = charDataCstr;
- }
- clearInterval(id) {
- this.__clearInterval.call(nativeWindow || this, id);
- }
- clearTimeout(id) {
- this.__clearTimeout.call(nativeWindow || this, id);
- }
- close() {
- resetWindow(this);
- }
- confirm() {
- return false;
- }
- get CSS() {
- return {
- supports: () => true
- };
- }
- get Document() {
- if (this.__docCstr == null) {
- const win = this;
- this.__docCstr = class extends MockDocument {
- constructor() {
- super(false, win);
- throw new Error("Illegal constructor: cannot construct Document");
- }
- };
- }
- return this.__docCstr;
- }
- set Document(docCstr) {
- this.__docCstr = docCstr;
- }
- get DocumentFragment() {
- if (this.__docFragCstr == null) {
- const ownerDocument = this.document;
- this.__docFragCstr = class extends MockDocumentFragment {
- constructor() {
- super(ownerDocument);
- throw new Error("Illegal constructor: cannot construct DocumentFragment");
- }
- };
- }
- return this.__docFragCstr;
- }
- set DocumentFragment(docFragCstr) {
- this.__docFragCstr = docFragCstr;
- }
- get DocumentType() {
- if (this.__docTypeCstr == null) {
- const ownerDocument = this.document;
- this.__docTypeCstr = class extends MockNode2 {
- constructor() {
- super(ownerDocument, 0, "test", "");
- throw new Error("Illegal constructor: cannot construct DocumentType");
- }
- };
- }
- return this.__docTypeCstr;
- }
- set DocumentType(docTypeCstr) {
- this.__docTypeCstr = docTypeCstr;
- }
- get DOMTokenList() {
- if (this.__domTokenListCstr == null) {
- this.__domTokenListCstr = class MockDOMTokenList {
- };
- }
- return this.__domTokenListCstr;
- }
- set DOMTokenList(domTokenListCstr) {
- this.__domTokenListCstr = domTokenListCstr;
- }
- dispatchEvent(ev) {
- return dispatchEvent(this, ev);
- }
- get Element() {
- if (this.__elementCstr == null) {
- const ownerDocument = this.document;
- this.__elementCstr = class extends MockElement {
- constructor() {
- super(ownerDocument, "");
- throw new Error("Illegal constructor: cannot construct Element");
- }
- };
- }
- return this.__elementCstr;
- }
- fetch(input, init) {
- if (typeof fetch === "function") {
- return fetch(input, init);
- }
- throw new Error(`fetch() not implemented`);
- }
- focus() {
- }
- getComputedStyle(_) {
- return {
- cssText: "",
- length: 0,
- parentRule: null,
- getPropertyPriority() {
- return null;
- },
- getPropertyValue() {
- return "";
- },
- item() {
- return null;
- },
- removeProperty() {
- return null;
- },
- setProperty() {
- return null;
- }
- };
- }
- get globalThis() {
- return this;
- }
- get history() {
- if (this.__history == null) {
- this.__history = new MockHistory();
- }
- return this.__history;
- }
- set history(hsty) {
- this.__history = hsty;
- }
- get JSON() {
- return JSON;
- }
- get HTMLElement() {
- if (this.__htmlElementCstr == null) {
- const ownerDocument = this.document;
- this.__htmlElementCstr = class extends MockHTMLElement {
- constructor() {
- super(ownerDocument, "");
- const observedAttributes = this.constructor.observedAttributes;
- if (Array.isArray(observedAttributes) && typeof this.attributeChangedCallback === "function") {
- observedAttributes.forEach((attrName) => {
- const attrValue = this.getAttribute(attrName);
- if (attrValue != null) {
- this.attributeChangedCallback(attrName, null, attrValue);
- }
- });
- }
- }
- };
- }
- return this.__htmlElementCstr;
- }
- set HTMLElement(htmlElementCstr) {
- this.__htmlElementCstr = htmlElementCstr;
- }
- get IntersectionObserver() {
- return MockIntersectionObserver;
- }
- get localStorage() {
- if (this.__localStorage == null) {
- this.__localStorage = new MockStorage();
- }
- return this.__localStorage;
- }
- set localStorage(locStorage) {
- this.__localStorage = locStorage;
- }
- get location() {
- if (this.__location == null) {
- this.__location = new MockLocation();
- }
- return this.__location;
- }
- set location(val) {
- if (typeof val === "string") {
- if (this.__location == null) {
- this.__location = new MockLocation();
- }
- this.__location.href = val;
- } else {
- this.__location = val;
- }
- }
- matchMedia(media) {
- return {
- media,
- matches: false,
- addListener: (_handler) => {
- },
- removeListener: (_handler) => {
- },
- addEventListener: (_type, _handler) => {
- },
- removeEventListener: (_type, _handler) => {
- },
- dispatchEvent: (_ev) => {
- },
- onchange: null
- };
- }
- get Node() {
- if (this.__nodeCstr == null) {
- const ownerDocument = this.document;
- this.__nodeCstr = class extends MockNode2 {
- constructor() {
- super(ownerDocument, 0, "test", "");
- throw new Error("Illegal constructor: cannot construct Node");
- }
- };
- }
- return this.__nodeCstr;
- }
- get NodeList() {
- if (this.__nodeListCstr == null) {
- const ownerDocument = this.document;
- this.__nodeListCstr = class extends MockNodeList {
- constructor() {
- super(ownerDocument, [], 0);
- throw new Error("Illegal constructor: cannot construct NodeList");
- }
- };
- }
- return this.__nodeListCstr;
- }
- get navigator() {
- if (this.__navigator == null) {
- this.__navigator = new MockNavigator();
- }
- return this.__navigator;
- }
- set navigator(nav) {
- this.__navigator = nav;
- }
- get parent() {
- return null;
- }
- prompt() {
- return "";
- }
- open() {
- return null;
- }
- get origin() {
- return this.location.origin;
- }
- removeEventListener(type, handler) {
- removeEventListener(this, type, handler);
- }
- requestAnimationFrame(callback) {
- return this.setTimeout(() => {
- callback(Date.now());
- }, 0);
- }
- requestIdleCallback(callback) {
- return this.setTimeout(() => {
- callback({
- didTimeout: false,
- timeRemaining: () => 0
- });
- }, 0);
- }
- scroll(_x, _y) {
- }
- scrollBy(_x, _y) {
- }
- scrollTo(_x, _y) {
- }
- get self() {
- return this;
- }
- get sessionStorage() {
- if (this.__sessionStorage == null) {
- this.__sessionStorage = new MockStorage();
- }
- return this.__sessionStorage;
- }
- set sessionStorage(locStorage) {
- this.__sessionStorage = locStorage;
- }
- setInterval(callback, ms, ...args) {
- if (this.__timeouts == null) {
- this.__timeouts = /* @__PURE__ */ new Set();
- }
- ms = Math.min(ms, this.__maxTimeout);
- if (this.__allowInterval) {
- const intervalId = this.__setInterval(() => {
- if (this.__timeouts) {
- this.__timeouts.delete(intervalId);
- try {
- callback(...args);
- } catch (e) {
- if (this.console) {
- this.console.error(e);
- } else {
- console.error(e);
- }
- }
- }
- }, ms);
- if (this.__timeouts) {
- this.__timeouts.add(intervalId);
- }
- return intervalId;
- }
- const timeoutId = this.__setTimeout.call(
- nativeWindow || this,
- () => {
- if (this.__timeouts) {
- this.__timeouts.delete(timeoutId);
- try {
- callback(...args);
- } catch (e) {
- if (this.console) {
- this.console.error(e);
- } else {
- console.error(e);
- }
- }
- }
- },
- ms
- );
- if (this.__timeouts) {
- this.__timeouts.add(timeoutId);
- }
- return timeoutId;
- }
- setTimeout(callback, ms, ...args) {
- if (this.__timeouts == null) {
- this.__timeouts = /* @__PURE__ */ new Set();
- }
- ms = Math.min(ms, this.__maxTimeout);
- const timeoutId = this.__setTimeout.call(
- nativeWindow || this,
- () => {
- if (this.__timeouts) {
- this.__timeouts.delete(timeoutId);
- try {
- callback(...args);
- } catch (e) {
- if (this.console) {
- this.console.error(e);
- } else {
- console.error(e);
- }
- }
- }
- },
- ms
- );
- if (this.__timeouts) {
- this.__timeouts.add(timeoutId);
- }
- return timeoutId;
- }
- get top() {
- return this;
- }
- get window() {
- return this;
- }
- onanimationstart() {
- }
- onanimationend() {
- }
- onanimationiteration() {
- }
- onabort() {
- }
- onauxclick() {
- }
- onbeforecopy() {
- }
- onbeforecut() {
- }
- onbeforepaste() {
- }
- onblur() {
- }
- oncancel() {
- }
- oncanplay() {
- }
- oncanplaythrough() {
- }
- onchange() {
- }
- onclick() {
- }
- onclose() {
- }
- oncontextmenu() {
- }
- oncopy() {
- }
- oncuechange() {
- }
- oncut() {
- }
- ondblclick() {
- }
- ondrag() {
- }
- ondragend() {
- }
- ondragenter() {
- }
- ondragleave() {
- }
- ondragover() {
- }
- ondragstart() {
- }
- ondrop() {
- }
- ondurationchange() {
- }
- onemptied() {
- }
- onended() {
- }
- onerror() {
- }
- onfocus() {
- }
- onfocusin() {
- }
- onfocusout() {
- }
- onformdata() {
- }
- onfullscreenchange() {
- }
- onfullscreenerror() {
- }
- ongotpointercapture() {
- }
- oninput() {
- }
- oninvalid() {
- }
- onkeydown() {
- }
- onkeypress() {
- }
- onkeyup() {
- }
- onload() {
- }
- onloadeddata() {
- }
- onloadedmetadata() {
- }
- onloadstart() {
- }
- onlostpointercapture() {
- }
- onmousedown() {
- }
- onmouseenter() {
- }
- onmouseleave() {
- }
- onmousemove() {
- }
- onmouseout() {
- }
- onmouseover() {
- }
- onmouseup() {
- }
- onmousewheel() {
- }
- onpaste() {
- }
- onpause() {
- }
- onplay() {
- }
- onplaying() {
- }
- onpointercancel() {
- }
- onpointerdown() {
- }
- onpointerenter() {
- }
- onpointerleave() {
- }
- onpointermove() {
- }
- onpointerout() {
- }
- onpointerover() {
- }
- onpointerup() {
- }
- onprogress() {
- }
- onratechange() {
- }
- onreset() {
- }
- onresize() {
- }
- onscroll() {
- }
- onsearch() {
- }
- onseeked() {
- }
- onseeking() {
- }
- onselect() {
- }
- onselectstart() {
- }
- onstalled() {
- }
- onsubmit() {
- }
- onsuspend() {
- }
- ontimeupdate() {
- }
- ontoggle() {
- }
- onvolumechange() {
- }
- onwaiting() {
- }
- onwebkitfullscreenchange() {
- }
- onwebkitfullscreenerror() {
- }
- onwheel() {
- }
- };
- addGlobalsToWindowPrototype(MockWindow.prototype);
- function resetWindowDefaults(win) {
- win.__clearInterval = nativeClearInterval;
- win.__clearTimeout = nativeClearTimeout;
- win.__setInterval = nativeSetInterval;
- win.__setTimeout = nativeSetTimeout;
- win.__maxTimeout = 3e4;
- win.__allowInterval = true;
- win.URL = nativeURL;
- }
- function cloneWindow(srcWin, opts = {}) {
- if (srcWin == null) {
- return null;
- }
- const clonedWin = new MockWindow(false);
- if (!opts.customElementProxy) {
- srcWin.customElements = null;
- }
- if (srcWin.document != null) {
- const clonedDoc = new MockDocument(false, clonedWin);
- clonedWin.document = clonedDoc;
- clonedDoc.documentElement = srcWin.document.documentElement.cloneNode(true);
- } else {
- clonedWin.document = new MockDocument(null, clonedWin);
- }
- return clonedWin;
- }
- function constrainTimeouts(win) {
- win.__allowInterval = false;
- win.__maxTimeout = 0;
- }
- function resetWindow(win) {
- if (win != null) {
- if (win.__timeouts) {
- win.__timeouts.forEach((timeoutId) => {
- nativeClearInterval(timeoutId);
- nativeClearTimeout(timeoutId);
- });
- win.__timeouts.clear();
- }
- if (win.customElements && win.customElements.clear) {
- win.customElements.clear();
- }
- resetDocument(win.document);
- resetPerformance(win.performance);
- for (const key in win) {
- if (win.hasOwnProperty(key) && key !== "document" && key !== "performance" && key !== "customElements") {
- delete win[key];
- }
- }
- resetWindowDefaults(win);
- resetWindowDimensions(win);
- resetEventListeners(win);
- if (win.document != null) {
- try {
- win.document.defaultView = win;
- } catch (e) {
- }
- }
- win.fetch = null;
- win.Headers = null;
- win.Request = null;
- win.Response = null;
- win.FetchError = null;
- }
- }
- function resetWindowDimensions(win) {
- try {
- win.devicePixelRatio = 1;
- win.innerHeight = 768;
- win.innerWidth = 1366;
- win.pageXOffset = 0;
- win.pageYOffset = 0;
- win.screenLeft = 0;
- win.screenTop = 0;
- win.screenX = 0;
- win.screenY = 0;
- win.scrollX = 0;
- win.scrollY = 0;
- win.screen = {
- availHeight: win.innerHeight,
- availLeft: 0,
- availTop: 0,
- availWidth: win.innerWidth,
- colorDepth: 24,
- height: win.innerHeight,
- keepAwake: false,
- orientation: {
- angle: 0,
- type: "portrait-primary"
- },
- pixelDepth: 24,
- width: win.innerWidth
- };
- } catch (e) {
- }
- }
- // src/mock-doc/document.ts
- var MockDocument = class _MockDocument extends MockHTMLElement {
- constructor(html = null, win = null) {
- super(null, null);
- this.nodeName = "#document" /* DOCUMENT_NODE */;
- this.nodeType = 9 /* DOCUMENT_NODE */;
- this.defaultView = win;
- this.cookie = "";
- this.referrer = "";
- this.appendChild(this.createDocumentTypeNode());
- if (typeof html === "string") {
- const parsedDoc = parseDocumentUtil(this, html);
- const documentElement = parsedDoc.children.find((elm) => elm.nodeName === "HTML");
- if (documentElement != null) {
- this.appendChild(documentElement);
- setOwnerDocument(documentElement, this);
- }
- } else if (html !== false) {
- const documentElement = new MockHTMLElement(this, "html");
- this.appendChild(documentElement);
- documentElement.appendChild(new MockHTMLElement(this, "head"));
- documentElement.appendChild(new MockHTMLElement(this, "body"));
- }
- }
- get dir() {
- return this.documentElement.dir;
- }
- set dir(value) {
- this.documentElement.dir = value;
- }
- get localName() {
- throw new Error("Unimplemented");
- }
- get location() {
- if (this.defaultView != null) {
- return this.defaultView.location;
- }
- return null;
- }
- set location(val) {
- if (this.defaultView != null) {
- this.defaultView.location = val;
- }
- }
- get baseURI() {
- const baseNode = this.head.childNodes.find((node) => node.nodeName === "BASE");
- if (baseNode) {
- return baseNode.href;
- }
- return this.URL;
- }
- get URL() {
- return this.location.href;
- }
- get styleSheets() {
- return this.querySelectorAll("style");
- }
- get scripts() {
- return this.querySelectorAll("script");
- }
- get forms() {
- return this.querySelectorAll("form");
- }
- get images() {
- return this.querySelectorAll("img");
- }
- get scrollingElement() {
- return this.documentElement;
- }
- get documentElement() {
- for (let i = this.childNodes.length - 1; i >= 0; i--) {
- if (this.childNodes[i].nodeName === "HTML") {
- return this.childNodes[i];
- }
- }
- const documentElement = new MockHTMLElement(this, "html");
- this.appendChild(documentElement);
- return documentElement;
- }
- set documentElement(documentElement) {
- for (let i = this.childNodes.length - 1; i >= 0; i--) {
- if (this.childNodes[i].nodeType !== 10 /* DOCUMENT_TYPE_NODE */) {
- this.childNodes[i].remove();
- }
- }
- if (documentElement != null) {
- this.appendChild(documentElement);
- setOwnerDocument(documentElement, this);
- }
- }
- get head() {
- const documentElement = this.documentElement;
- for (let i = 0; i < documentElement.childNodes.length; i++) {
- if (documentElement.childNodes[i].nodeName === "HEAD") {
- return documentElement.childNodes[i];
- }
- }
- const head = new MockHTMLElement(this, "head");
- documentElement.insertBefore(head, documentElement.firstChild);
- return head;
- }
- set head(head) {
- const documentElement = this.documentElement;
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
- if (documentElement.childNodes[i].nodeName === "HEAD") {
- documentElement.childNodes[i].remove();
- }
- }
- if (head != null) {
- documentElement.insertBefore(head, documentElement.firstChild);
- setOwnerDocument(head, this);
- }
- }
- get body() {
- const documentElement = this.documentElement;
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
- if (documentElement.childNodes[i].nodeName === "BODY") {
- return documentElement.childNodes[i];
- }
- }
- const body = new MockHTMLElement(this, "body");
- documentElement.appendChild(body);
- return body;
- }
- set body(body) {
- const documentElement = this.documentElement;
- for (let i = documentElement.childNodes.length - 1; i >= 0; i--) {
- if (documentElement.childNodes[i].nodeName === "BODY") {
- documentElement.childNodes[i].remove();
- }
- }
- if (body != null) {
- documentElement.appendChild(body);
- setOwnerDocument(body, this);
- }
- }
- appendChild(newNode) {
- newNode.remove();
- newNode.parentNode = this;
- this.childNodes.push(newNode);
- return newNode;
- }
- createComment(data) {
- return new MockComment(this, data);
- }
- createAttribute(attrName) {
- return new MockAttr(attrName.toLowerCase(), "");
- }
- createAttributeNS(namespaceURI, attrName) {
- return new MockAttr(attrName, "", namespaceURI);
- }
- createElement(tagName) {
- if (tagName === "#document" /* DOCUMENT_NODE */) {
- const doc = new _MockDocument(false);
- doc.nodeName = tagName;
- doc.parentNode = null;
- return doc;
- }
- return createElement(this, tagName);
- }
- createElementNS(namespaceURI, tagName) {
- const elmNs = createElementNS(this, namespaceURI, tagName);
- return elmNs;
- }
- createTextNode(text) {
- return new MockTextNode(this, text);
- }
- createDocumentFragment() {
- return new MockDocumentFragment(this);
- }
- createDocumentTypeNode() {
- return new MockDocumentTypeNode(this);
- }
- getElementById(id) {
- return getElementById(this, id);
- }
- getElementsByName(elmName) {
- return getElementsByName(this, elmName.toLowerCase());
- }
- get title() {
- const title = this.head.childNodes.find((elm) => elm.nodeName === "TITLE");
- if (title != null && typeof title.textContent === "string") {
- return title.textContent.trim();
- }
- return "";
- }
- set title(value) {
- const head = this.head;
- let title = head.childNodes.find((elm) => elm.nodeName === "TITLE");
- if (title == null) {
- title = this.createElement("title");
- head.appendChild(title);
- }
- title.textContent = value;
- }
- };
- function resetDocument(doc) {
- if (doc != null) {
- resetEventListeners(doc);
- const documentElement = doc.documentElement;
- if (documentElement != null) {
- resetElement(documentElement);
- for (let i = 0, ii = documentElement.childNodes.length; i < ii; i++) {
- const childNode = documentElement.childNodes[i];
- resetElement(childNode);
- childNode.childNodes.length = 0;
- }
- }
- for (const key in doc) {
- if (doc.hasOwnProperty(key) && !DOC_KEY_KEEPERS.has(key)) {
- delete doc[key];
- }
- }
- try {
- doc.nodeName = "#document" /* DOCUMENT_NODE */;
- } catch (e) {
- }
- try {
- doc.nodeType = 9 /* DOCUMENT_NODE */;
- } catch (e) {
- }
- try {
- doc.cookie = "";
- } catch (e) {
- }
- try {
- doc.referrer = "";
- } catch (e) {
- }
- }
- }
- var DOC_KEY_KEEPERS = /* @__PURE__ */ new Set([
- "nodeName",
- "nodeType",
- "nodeValue",
- "ownerDocument",
- "parentNode",
- "childNodes",
- "_shadowRoot"
- ]);
- function getElementById(elm, id) {
- const children = elm.children;
- for (let i = 0, ii = children.length; i < ii; i++) {
- const childElm = children[i];
- if (childElm.id === id) {
- return childElm;
- }
- const childElmFound = getElementById(childElm, id);
- if (childElmFound != null) {
- return childElmFound;
- }
- }
- return null;
- }
- function getElementsByName(elm, elmName, foundElms = []) {
- const children = elm.children;
- for (let i = 0, ii = children.length; i < ii; i++) {
- const childElm = children[i];
- if (childElm.name && childElm.name.toLowerCase() === elmName) {
- foundElms.push(childElm);
- }
- getElementsByName(childElm, elmName, foundElms);
- }
- return foundElms;
- }
- function setOwnerDocument(elm, ownerDocument) {
- for (let i = 0, ii = elm.childNodes.length; i < ii; i++) {
- elm.childNodes[i].ownerDocument = ownerDocument;
- if (elm.childNodes[i].nodeType === 1 /* ELEMENT_NODE */) {
- setOwnerDocument(elm.childNodes[i], ownerDocument);
- }
- }
- }
- // src/hydrate/runner/create-window.ts
- var templateWindows = /* @__PURE__ */ new Map();
- function createWindowFromHtml(templateHtml, uniqueId) {
- let templateWindow = templateWindows.get(uniqueId);
- if (templateWindow == null) {
- templateWindow = new MockWindow(templateHtml);
- templateWindows.set(uniqueId, templateWindow);
- }
- const win = cloneWindow(templateWindow);
- return win;
- }
- // src/hydrate/runner/render.ts
- import { Readable } from "stream";
- import { hydrateFactory } from "@stencil/core/hydrate-factory";
- // src/utils/helpers.ts
- var isString = (v) => typeof v === "string";
- // src/utils/message-utils.ts
- var catchError = (diagnostics, err2, msg) => {
- const diagnostic = {
- level: "error",
- type: "build",
- header: "Build Error",
- messageText: "build error",
- lines: []
- };
- if (isString(msg)) {
- diagnostic.messageText = msg.length ? msg : "UNKNOWN ERROR";
- } else if (err2 != null) {
- if (err2.stack != null) {
- diagnostic.messageText = err2.stack.toString();
- } else {
- if (err2.message != null) {
- diagnostic.messageText = err2.message.length ? err2.message : "UNKNOWN ERROR";
- } else {
- diagnostic.messageText = err2.toString();
- }
- }
- }
- if (diagnostics != null && !shouldIgnoreError(diagnostic.messageText)) {
- diagnostics.push(diagnostic);
- }
- return diagnostic;
- };
- var hasError = (diagnostics) => {
- if (diagnostics == null || diagnostics.length === 0) {
- return false;
- }
- return diagnostics.some((d) => d.level === "error" && d.type !== "runtime");
- };
- var shouldIgnoreError = (msg) => {
- return msg === TASK_CANCELED_MSG;
- };
- var TASK_CANCELED_MSG = `task canceled`;
- // src/utils/result.ts
- var result_exports = {};
- __export(result_exports, {
- err: () => err,
- map: () => map,
- ok: () => ok,
- unwrap: () => unwrap,
- unwrapErr: () => unwrapErr
- });
- var ok = (value) => ({
- isOk: true,
- isErr: false,
- value
- });
- var err = (value) => ({
- isOk: false,
- isErr: true,
- value
- });
- function map(result, fn) {
- if (result.isOk) {
- const val = fn(result.value);
- if (val instanceof Promise) {
- return val.then((newVal) => ok(newVal));
- } else {
- return ok(val);
- }
- }
- if (result.isErr) {
- const value = result.value;
- return err(value);
- }
- throw "should never get here";
- }
- var unwrap = (result) => {
- if (result.isOk) {
- return result.value;
- } else {
- throw result.value;
- }
- };
- var unwrapErr = (result) => {
- if (result.isErr) {
- return result.value;
- } else {
- throw result.value;
- }
- };
- // src/compiler/html/canonical-link.ts
- var updateCanonicalLink = (doc, href) => {
- var _a2;
- let canonicalLinkElm = doc.head.querySelector('link[rel="canonical"]');
- if (typeof href === "string") {
- if (canonicalLinkElm == null) {
- canonicalLinkElm = doc.createElement("link");
- canonicalLinkElm.setAttribute("rel", "canonical");
- doc.head.appendChild(canonicalLinkElm);
- }
- canonicalLinkElm.setAttribute("href", href);
- } else {
- if (canonicalLinkElm != null) {
- const existingHref = canonicalLinkElm.getAttribute("href");
- if (!existingHref) {
- (_a2 = canonicalLinkElm.parentNode) == null ? void 0 : _a2.removeChild(canonicalLinkElm);
- }
- }
- }
- };
- // src/compiler/html/relocate-meta-charset.ts
- var relocateMetaCharset = (doc) => {
- const head = doc.head;
- let charsetElm = head.querySelector("meta[charset]");
- if (charsetElm == null) {
- charsetElm = doc.createElement("meta");
- charsetElm.setAttribute("charset", "utf-8");
- } else {
- charsetElm.remove();
- }
- head.insertBefore(charsetElm, head.firstChild);
- };
- // src/compiler/style/css-parser/parse-css.ts
- var parseCss = (css, filePath) => {
- let lineno = 1;
- let column = 1;
- const diagnostics = [];
- const updatePosition = (str) => {
- const lines = str.match(/\n/g);
- if (lines) lineno += lines.length;
- const i = str.lastIndexOf("\n");
- column = ~i ? str.length - i : column + str.length;
- };
- const position = () => {
- const start = { line: lineno, column };
- return (node) => {
- node.position = new ParsePosition(start);
- whitespace();
- return node;
- };
- };
- const error = (msg) => {
- const srcLines = css.split("\n");
- const d = {
- level: "error",
- type: "css",
- language: "css",
- header: "CSS Parse",
- messageText: msg,
- absFilePath: filePath,
- lines: [
- {
- lineIndex: lineno - 1,
- lineNumber: lineno,
- errorCharStart: column,
- text: css[lineno - 1]
- }
- ]
- };
- if (lineno > 1) {
- const previousLine = {
- lineIndex: lineno - 1,
- lineNumber: lineno - 1,
- text: css[lineno - 2],
- errorCharStart: -1,
- errorLength: -1
- };
- d.lines.unshift(previousLine);
- }
- if (lineno + 2 < srcLines.length) {
- const nextLine = {
- lineIndex: lineno,
- lineNumber: lineno + 1,
- text: srcLines[lineno],
- errorCharStart: -1,
- errorLength: -1
- };
- d.lines.push(nextLine);
- }
- diagnostics.push(d);
- return null;
- };
- const stylesheet = () => {
- const rulesList = rules();
- return {
- type: 14 /* StyleSheet */,
- stylesheet: {
- source: filePath,
- rules: rulesList
- }
- };
- };
- const open = () => match(/^{\s*/);
- const close = () => match(/^}/);
- const match = (re) => {
- const m = re.exec(css);
- if (!m) return;
- const str = m[0];
- updatePosition(str);
- css = css.slice(str.length);
- return m;
- };
- const rules = () => {
- let node;
- const rules2 = [];
- whitespace();
- comments(rules2);
- while (css.length && css.charAt(0) !== "}" && (node = atrule() || rule())) {
- rules2.push(node);
- comments(rules2);
- }
- return rules2;
- };
- const whitespace = () => match(/^\s*/);
- const comments = (rules2) => {
- let c;
- rules2 = rules2 || [];
- while (c = comment()) {
- rules2.push(c);
- }
- return rules2;
- };
- const comment = () => {
- const pos = position();
- if ("/" !== css.charAt(0) || "*" !== css.charAt(1)) return null;
- let i = 2;
- while ("" !== css.charAt(i) && ("*" !== css.charAt(i) || "/" !== css.charAt(i + 1))) ++i;
- i += 2;
- if ("" === css.charAt(i - 1)) {
- return error("End of comment missing");
- }
- const comment2 = css.slice(2, i - 2);
- column += 2;
- updatePosition(comment2);
- css = css.slice(i);
- column += 2;
- return pos({
- type: 1 /* Comment */,
- comment: comment2
- });
- };
- const selector = () => {
- const m = match(/^([^{]+)/);
- if (!m) return null;
- return trim(m[0]).replace(/\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*\/+/g, "").replace(/"(?:\\"|[^"])*"|'(?:\\'|[^'])*'/g, function(m2) {
- return m2.replace(/,/g, "\u200C");
- }).split(/\s*(?![^(]*\)),\s*/).map(function(s) {
- return s.replace(/\u200C/g, ",");
- });
- };
- const declaration = () => {
- const pos = position();
- let prop = match(/^(\*?[-#\/\*\\\w]+(\[[0-9a-z_-]+\])?)\s*/);
- if (!prop) return null;
- prop = trim(prop[0]);
- if (!match(/^:\s*/)) return error(`property missing ':'`);
- const val = match(/^((?:'(?:\\'|.)*?'|"(?:\\"|.)*?"|\([^\)]*?\)|[^};])+)/);
- const ret = pos({
- type: 4 /* Declaration */,
- property: prop.replace(commentre, ""),
- value: val ? trim(val[0]).replace(commentre, "") : ""
- });
- match(/^[;\s]*/);
- return ret;
- };
- const declarations = () => {
- const decls = [];
- if (!open()) return error(`missing '{'`);
- comments(decls);
- let decl;
- while (decl = declaration()) {
- decls.push(decl);
- comments(decls);
- }
- if (!close()) return error(`missing '}'`);
- return decls;
- };
- const keyframe = () => {
- let m;
- const values = [];
- const pos = position();
- while (m = match(/^((\d+\.\d+|\.\d+|\d+)%?|[a-z]+)\s*/)) {
- values.push(m[1]);
- match(/^,\s*/);
- }
- if (!values.length) return null;
- return pos({
- type: 9 /* KeyFrame */,
- values,
- declarations: declarations()
- });
- };
- const atkeyframes = () => {
- const pos = position();
- let m = match(/^@([-\w]+)?keyframes\s*/);
- if (!m) return null;
- const vendor = m[1];
- m = match(/^([-\w]+)\s*/);
- if (!m) return error(`@keyframes missing name`);
- const name = m[1];
- if (!open()) return error(`@keyframes missing '{'`);
- let frame;
- let frames = comments();
- while (frame = keyframe()) {
- frames.push(frame);
- frames = frames.concat(comments());
- }
- if (!close()) return error(`@keyframes missing '}'`);
- return pos({
- type: 8 /* KeyFrames */,
- name,
- vendor,
- keyframes: frames
- });
- };
- const atsupports = () => {
- const pos = position();
- const m = match(/^@supports *([^{]+)/);
- if (!m) return null;
- const supports = trim(m[1]);
- if (!open()) return error(`@supports missing '{'`);
- const style = comments().concat(rules());
- if (!close()) return error(`@supports missing '}'`);
- return pos({
- type: 15 /* Supports */,
- supports,
- rules: style
- });
- };
- const athost = () => {
- const pos = position();
- const m = match(/^@host\s*/);
- if (!m) return null;
- if (!open()) return error(`@host missing '{'`);
- const style = comments().concat(rules());
- if (!close()) return error(`@host missing '}'`);
- return pos({
- type: 6 /* Host */,
- rules: style
- });
- };
- const atmedia = () => {
- const pos = position();
- const m = match(/^@media *([^{]+)/);
- if (!m) return null;
- const media = trim(m[1]);
- if (!open()) return error(`@media missing '{'`);
- const style = comments().concat(rules());
- if (!close()) return error(`@media missing '}'`);
- return pos({
- type: 10 /* Media */,
- media,
- rules: style
- });
- };
- const atcustommedia = () => {
- const pos = position();
- const m = match(/^@custom-media\s+(--[^\s]+)\s*([^{;]+);/);
- if (!m) return null;
- return pos({
- type: 2 /* CustomMedia */,
- name: trim(m[1]),
- media: trim(m[2])
- });
- };
- const atpage = () => {
- const pos = position();
- const m = match(/^@page */);
- if (!m) return null;
- const sel = selector() || [];
- if (!open()) return error(`@page missing '{'`);
- let decls = comments();
- let decl;
- while (decl = declaration()) {
- decls.push(decl);
- decls = decls.concat(comments());
- }
- if (!close()) return error(`@page missing '}'`);
- return pos({
- type: 12 /* Page */,
- selectors: sel,
- declarations: decls
- });
- };
- const atdocument = () => {
- const pos = position();
- const m = match(/^@([-\w]+)?document *([^{]+)/);
- if (!m) return null;
- const vendor = trim(m[1]);
- const doc = trim(m[2]);
- if (!open()) return error(`@document missing '{'`);
- const style = comments().concat(rules());
- if (!close()) return error(`@document missing '}'`);
- return pos({
- type: 3 /* Document */,
- document: doc,
- vendor,
- rules: style
- });
- };
- const atfontface = () => {
- const pos = position();
- const m = match(/^@font-face\s*/);
- if (!m) return null;
- if (!open()) return error(`@font-face missing '{'`);
- let decls = comments();
- let decl;
- while (decl = declaration()) {
- decls.push(decl);
- decls = decls.concat(comments());
- }
- if (!close()) return error(`@font-face missing '}'`);
- return pos({
- type: 5 /* FontFace */,
- declarations: decls
- });
- };
- const compileAtrule = (nodeName, nodeType) => {
- const re = new RegExp("^@" + nodeName + "\\s*([^;]+);");
- return () => {
- const pos = position();
- const m = match(re);
- if (!m) return null;
- const node = {
- type: nodeType
- };
- node[nodeName] = m[1].trim();
- return pos(node);
- };
- };
- const atimport = compileAtrule("import", 7 /* Import */);
- const atcharset = compileAtrule("charset", 0 /* Charset */);
- const atnamespace = compileAtrule("namespace", 11 /* Namespace */);
- const atrule = () => {
- if (css[0] !== "@") return null;
- return atkeyframes() || atmedia() || atcustommedia() || atsupports() || atimport() || atcharset() || atnamespace() || atdocument() || atpage() || athost() || atfontface();
- };
- const rule = () => {
- const pos = position();
- const sel = selector();
- if (!sel) return error("selector missing");
- comments();
- return pos({
- type: 13 /* Rule */,
- selectors: sel,
- declarations: declarations()
- });
- };
- class ParsePosition {
- constructor(start) {
- this.start = start;
- this.end = { line: lineno, column };
- this.source = filePath;
- }
- }
- ParsePosition.prototype.content = css;
- return {
- diagnostics,
- ...addParent(stylesheet())
- };
- };
- var trim = (str) => str ? str.trim() : "";
- var addParent = (obj, parent) => {
- const isNode = obj && typeof obj.type === "string";
- const childParent = isNode ? obj : parent;
- for (const k in obj) {
- const value = obj[k];
- if (Array.isArray(value)) {
- value.forEach(function(v) {
- addParent(v, childParent);
- });
- } else if (value && typeof value === "object") {
- addParent(value, childParent);
- }
- }
- if (isNode) {
- Object.defineProperty(obj, "parent", {
- configurable: true,
- writable: true,
- enumerable: false,
- value: parent || null
- });
- }
- return obj;
- };
- var commentre = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//g;
- // src/compiler/style/css-parser/get-css-selectors.ts
- var getCssSelectors = (sel) => {
- SELECTORS.all.length = SELECTORS.tags.length = SELECTORS.classNames.length = SELECTORS.ids.length = SELECTORS.attrs.length = 0;
- sel = sel.replace(/\./g, " .").replace(/\#/g, " #").replace(/\[/g, " [").replace(/\>/g, " > ").replace(/\+/g, " + ").replace(/\~/g, " ~ ").replace(/\*/g, " * ").replace(/\:not\((.*?)\)/g, " ");
- const items = sel.split(" ");
- for (let i = 0, l = items.length; i < l; i++) {
- items[i] = items[i].split(":")[0];
- if (items[i].length === 0) continue;
- if (items[i].charAt(0) === ".") {
- SELECTORS.classNames.push(items[i].slice(1));
- } else if (items[i].charAt(0) === "#") {
- SELECTORS.ids.push(items[i].slice(1));
- } else if (items[i].charAt(0) === "[") {
- items[i] = items[i].slice(1).split("=")[0].split("]")[0].trim();
- SELECTORS.attrs.push(items[i].toLowerCase());
- } else if (/[a-z]/g.test(items[i].charAt(0))) {
- SELECTORS.tags.push(items[i].toLowerCase());
- }
- }
- SELECTORS.classNames = SELECTORS.classNames.sort((a, b) => {
- if (a.length < b.length) return -1;
- if (a.length > b.length) return 1;
- return 0;
- });
- return SELECTORS;
- };
- var SELECTORS = {
- all: [],
- tags: [],
- classNames: [],
- ids: [],
- attrs: []
- };
- // src/compiler/style/css-parser/serialize-css.ts
- var serializeCss = (stylesheet, serializeOpts) => {
- const usedSelectors = serializeOpts.usedSelectors || null;
- const opts = {
- usedSelectors: usedSelectors || null,
- hasUsedAttrs: !!usedSelectors && usedSelectors.attrs.size > 0,
- hasUsedClassNames: !!usedSelectors && usedSelectors.classNames.size > 0,
- hasUsedIds: !!usedSelectors && usedSelectors.ids.size > 0,
- hasUsedTags: !!usedSelectors && usedSelectors.tags.size > 0
- };
- const rules = stylesheet.rules;
- if (!rules) {
- return "";
- }
- const rulesLen = rules.length;
- const out = [];
- for (let i = 0; i < rulesLen; i++) {
- out.push(serializeCssVisitNode(opts, rules[i], i, rulesLen));
- }
- return out.join("");
- };
- var serializeCssVisitNode = (opts, node, index, len) => {
- var _a2;
- const nodeType = node.type;
- if (nodeType === 4 /* Declaration */) {
- return serializeCssDeclaration(node, index, len);
- }
- if (nodeType === 13 /* Rule */) {
- return serializeCssRule(opts, node);
- }
- if (nodeType === 1 /* Comment */) {
- if (((_a2 = node.comment) == null ? void 0 : _a2[0]) === "!") {
- return `/*${node.comment}*/`;
- } else {
- return "";
- }
- }
- if (nodeType === 10 /* Media */) {
- return serializeCssMedia(opts, node);
- }
- if (nodeType === 8 /* KeyFrames */) {
- return serializeCssKeyframes(opts, node);
- }
- if (nodeType === 9 /* KeyFrame */) {
- return serializeCssKeyframe(opts, node);
- }
- if (nodeType === 5 /* FontFace */) {
- return serializeCssFontFace(opts, node);
- }
- if (nodeType === 15 /* Supports */) {
- return serializeCssSupports(opts, node);
- }
- if (nodeType === 7 /* Import */) {
- return "@import " + node.import + ";";
- }
- if (nodeType === 0 /* Charset */) {
- return "@charset " + node.charset + ";";
- }
- if (nodeType === 12 /* Page */) {
- return serializeCssPage(opts, node);
- }
- if (nodeType === 6 /* Host */) {
- return "@host{" + serializeCssMapVisit(opts, node.rules) + "}";
- }
- if (nodeType === 2 /* CustomMedia */) {
- return "@custom-media " + node.name + " " + node.media + ";";
- }
- if (nodeType === 3 /* Document */) {
- return serializeCssDocument(opts, node);
- }
- if (nodeType === 11 /* Namespace */) {
- return "@namespace " + node.namespace + ";";
- }
- return "";
- };
- var serializeCssRule = (opts, node) => {
- var _a2, _b;
- const decls = node.declarations;
- const usedSelectors = opts.usedSelectors;
- const selectors = (_b = (_a2 = node.selectors) == null ? void 0 : _a2.slice()) != null ? _b : [];
- if (decls == null || decls.length === 0) {
- return "";
- }
- if (usedSelectors) {
- let i;
- let j;
- let include = true;
- for (i = selectors.length - 1; i >= 0; i--) {
- const sel = getCssSelectors(selectors[i]);
- include = true;
- let jlen = sel.classNames.length;
- if (jlen > 0 && opts.hasUsedClassNames) {
- for (j = 0; j < jlen; j++) {
- if (!usedSelectors.classNames.has(sel.classNames[j])) {
- include = false;
- break;
- }
- }
- }
- if (include && opts.hasUsedTags) {
- jlen = sel.tags.length;
- if (jlen > 0) {
- for (j = 0; j < jlen; j++) {
- if (!usedSelectors.tags.has(sel.tags[j])) {
- include = false;
- break;
- }
- }
- }
- }
- if (include && opts.hasUsedAttrs) {
- jlen = sel.attrs.length;
- if (jlen > 0) {
- for (j = 0; j < jlen; j++) {
- if (!usedSelectors.attrs.has(sel.attrs[j])) {
- include = false;
- break;
- }
- }
- }
- }
- if (include && opts.hasUsedIds) {
- jlen = sel.ids.length;
- if (jlen > 0) {
- for (j = 0; j < jlen; j++) {
- if (!usedSelectors.ids.has(sel.ids[j])) {
- include = false;
- break;
- }
- }
- }
- }
- if (!include) {
- selectors.splice(i, 1);
- }
- }
- }
- if (selectors.length === 0) {
- return "";
- }
- const cleanedSelectors = [];
- let cleanedSelector = "";
- if (node.selectors) {
- for (const selector of node.selectors) {
- cleanedSelector = removeSelectorWhitespace(selector);
- if (!cleanedSelectors.includes(cleanedSelector)) {
- cleanedSelectors.push(cleanedSelector);
- }
- }
- }
- return `${cleanedSelectors}{${serializeCssMapVisit(opts, decls)}}`;
- };
- var serializeCssDeclaration = (node, index, len) => {
- if (node.value === "") {
- return "";
- }
- if (len - 1 === index) {
- return node.property + ":" + node.value;
- }
- return node.property + ":" + node.value + ";";
- };
- var serializeCssMedia = (opts, node) => {
- const mediaCss = serializeCssMapVisit(opts, node.rules);
- if (mediaCss === "") {
- return "";
- }
- return "@media " + removeMediaWhitespace(node.media) + "{" + mediaCss + "}";
- };
- var serializeCssKeyframes = (opts, node) => {
- const keyframesCss = serializeCssMapVisit(opts, node.keyframes);
- if (keyframesCss === "") {
- return "";
- }
- return "@" + (node.vendor || "") + "keyframes " + node.name + "{" + keyframesCss + "}";
- };
- var serializeCssKeyframe = (opts, node) => {
- var _a2, _b;
- return ((_b = (_a2 = node.values) == null ? void 0 : _a2.join(",")) != null ? _b : "") + "{" + serializeCssMapVisit(opts, node.declarations) + "}";
- };
- var serializeCssFontFace = (opts, node) => {
- const fontCss = serializeCssMapVisit(opts, node.declarations);
- if (fontCss === "") {
- return "";
- }
- return "@font-face{" + fontCss + "}";
- };
- var serializeCssSupports = (opts, node) => {
- const supportsCss = serializeCssMapVisit(opts, node.rules);
- if (supportsCss === "") {
- return "";
- }
- return "@supports " + node.supports + "{" + supportsCss + "}";
- };
- var serializeCssPage = (opts, node) => {
- var _a2, _b;
- const sel = (_b = (_a2 = node.selectors) == null ? void 0 : _a2.join(", ")) != null ? _b : "";
- return "@page " + sel + "{" + serializeCssMapVisit(opts, node.declarations) + "}";
- };
- var serializeCssDocument = (opts, node) => {
- const documentCss = serializeCssMapVisit(opts, node.rules);
- const doc = "@" + (node.vendor || "") + "document " + node.document;
- if (documentCss === "") {
- return "";
- }
- return doc + "{" + documentCss + "}";
- };
- var serializeCssMapVisit = (opts, nodes) => {
- let rtn = "";
- if (nodes) {
- for (let i = 0, len = nodes.length; i < len; i++) {
- rtn += serializeCssVisitNode(opts, nodes[i], i, len);
- }
- }
- return rtn;
- };
- var removeSelectorWhitespace = (selector) => {
- let rtn = "";
- let char = "";
- let inAttr = false;
- selector = selector.trim();
- for (let i = 0, l = selector.length; i < l; i++) {
- char = selector[i];
- if (char === "[" && rtn[rtn.length - 1] !== "\\") {
- inAttr = true;
- } else if (char === "]" && rtn[rtn.length - 1] !== "\\") {
- inAttr = false;
- }
- if (!inAttr && CSS_WS_REG.test(char)) {
- if (CSS_NEXT_CHAR_REG.test(selector[i + 1])) {
- continue;
- }
- if (CSS_PREV_CHAR_REG.test(rtn[rtn.length - 1])) {
- continue;
- }
- rtn += " ";
- } else {
- rtn += char;
- }
- }
- return rtn;
- };
- var removeMediaWhitespace = (media) => {
- var _a2;
- let rtn = "";
- let char = "";
- media = (_a2 = media == null ? void 0 : media.trim()) != null ? _a2 : "";
- for (let i = 0, l = media.length; i < l; i++) {
- char = media[i];
- if (CSS_WS_REG.test(char)) {
- if (CSS_WS_REG.test(rtn[rtn.length - 1])) {
- continue;
- }
- rtn += " ";
- } else {
- rtn += char;
- }
- }
- return rtn;
- };
- var CSS_WS_REG = /\s/;
- var CSS_NEXT_CHAR_REG = /[>\(\)\~\,\+\s]/;
- var CSS_PREV_CHAR_REG = /[>\(\~\,\+]/;
- // src/compiler/style/css-parser/used-selectors.ts
- var getUsedSelectors = (elm) => {
- const usedSelectors = {
- attrs: /* @__PURE__ */ new Set(),
- classNames: /* @__PURE__ */ new Set(),
- ids: /* @__PURE__ */ new Set(),
- tags: /* @__PURE__ */ new Set()
- };
- collectUsedSelectors(usedSelectors, elm);
- return usedSelectors;
- };
- var collectUsedSelectors = (usedSelectors, elm) => {
- if (elm != null && elm.nodeType === 1) {
- const children = elm.children;
- const tagName = elm.nodeName.toLowerCase();
- usedSelectors.tags.add(tagName);
- const attributes = elm.attributes;
- for (let i = 0, l = attributes.length; i < l; i++) {
- const attr = attributes.item(i);
- const attrName = attr.name.toLowerCase();
- usedSelectors.attrs.add(attrName);
- if (attrName === "class") {
- const classList = elm.classList;
- for (let i2 = 0, l2 = classList.length; i2 < l2; i2++) {
- usedSelectors.classNames.add(classList.item(i2));
- }
- } else if (attrName === "id") {
- usedSelectors.ids.add(attr.value);
- }
- }
- if (children) {
- for (let i = 0, l = children.length; i < l; i++) {
- collectUsedSelectors(usedSelectors, children[i]);
- }
- }
- }
- };
- // src/compiler/html/remove-unused-styles.ts
- var removeUnusedStyles = (doc, diagnostics) => {
- try {
- const styleElms = doc.head.querySelectorAll(`style[data-styles]`);
- const styleLen = styleElms.length;
- if (styleLen > 0) {
- const usedSelectors = getUsedSelectors(doc.documentElement);
- for (let i = 0; i < styleLen; i++) {
- removeUnusedStyleText(usedSelectors, diagnostics, styleElms[i]);
- }
- }
- } catch (e) {
- catchError(diagnostics, e);
- }
- };
- var removeUnusedStyleText = (usedSelectors, diagnostics, styleElm) => {
- try {
- const parseResults = parseCss(styleElm.innerHTML);
- diagnostics.push(...parseResults.diagnostics);
- if (hasError(diagnostics)) {
- return;
- }
- try {
- styleElm.innerHTML = serializeCss(parseResults.stylesheet, {
- usedSelectors
- });
- } catch (e) {
- diagnostics.push({
- level: "warn",
- type: "css",
- header: "CSS Stringify",
- messageText: e,
- lines: []
- });
- }
- } catch (e) {
- diagnostics.push({
- level: "warn",
- type: "css",
- header: "CSS Parse",
- messageText: e,
- lines: []
- });
- }
- };
- // src/hydrate/runner/inspect-element.ts
- function inspectElement(results, elm, depth) {
- const children = [...Array.from(elm.children), ...Array.from(elm.shadowRoot ? elm.shadowRoot.children : [])];
- for (let i = 0, ii = children.length; i < ii; i++) {
- const childElm = children[i];
- const tagName = childElm.nodeName.toLowerCase();
- if (tagName.includes("-")) {
- const cmp = results.components.find((c) => c.tag === tagName);
- if (cmp != null) {
- cmp.count++;
- if (depth > cmp.depth) {
- cmp.depth = depth;
- }
- }
- } else {
- switch (tagName) {
- case "a":
- const anchor = collectAttributes(childElm);
- anchor.href = childElm.href;
- if (typeof anchor.href === "string") {
- if (!results.anchors.some((a) => a.href === anchor.href)) {
- results.anchors.push(anchor);
- }
- }
- break;
- case "img":
- const img = collectAttributes(childElm);
- img.src = childElm.src;
- if (typeof img.src === "string") {
- if (!results.imgs.some((a) => a.src === img.src)) {
- results.imgs.push(img);
- }
- }
- break;
- case "link":
- const link = collectAttributes(childElm);
- link.href = childElm.href;
- if (typeof link.rel === "string" && link.rel.toLowerCase() === "stylesheet") {
- if (typeof link.href === "string") {
- if (!results.styles.some((s) => s.link === link.href)) {
- delete link.rel;
- delete link.type;
- results.styles.push(link);
- }
- }
- }
- break;
- case "script":
- const script = collectAttributes(childElm);
- if (childElm.hasAttribute("src")) {
- script.src = childElm.src;
- if (typeof script.src === "string") {
- if (!results.scripts.some((s) => s.src === script.src)) {
- results.scripts.push(script);
- }
- }
- } else {
- const staticDataKey = childElm.getAttribute("data-stencil-static");
- if (staticDataKey) {
- results.staticData.push({
- id: staticDataKey,
- type: childElm.getAttribute("type"),
- content: childElm.textContent
- });
- }
- }
- break;
- }
- }
- depth++;
- inspectElement(results, childElm, depth);
- }
- }
- function collectAttributes(node) {
- const parsedElm = {};
- const attrs = node.attributes;
- for (let i = 0, ii = attrs.length; i < ii; i++) {
- const attr = attrs.item(i);
- const attrName = attr.nodeName.toLowerCase();
- if (SKIP_ATTRS.has(attrName)) {
- continue;
- }
- const attrValue = attr.nodeValue;
- if (attrName === "class" && attrValue === "") {
- continue;
- }
- parsedElm[attrName] = attrValue;
- }
- return parsedElm;
- }
- var SKIP_ATTRS = /* @__PURE__ */ new Set(["s-id", "c-id"]);
- // src/hydrate/runner/patch-dom-implementation.ts
- function patchDomImplementation(doc, opts) {
- let win;
- if (doc.defaultView != null) {
- opts.destroyWindow = true;
- patchWindow(doc.defaultView);
- win = doc.defaultView;
- } else {
- opts.destroyWindow = true;
- opts.destroyDocument = false;
- win = new MockWindow(false);
- }
- if (win.document !== doc) {
- win.document = doc;
- }
- if (doc.defaultView !== win) {
- doc.defaultView = win;
- }
- const HTMLElement = doc.documentElement.constructor.prototype;
- if (typeof HTMLElement.getRootNode !== "function") {
- const elm = doc.createElement("unknown-element");
- const HTMLUnknownElement = elm.constructor.prototype;
- HTMLUnknownElement.getRootNode = getRootNode;
- }
- if (typeof doc.createEvent === "function") {
- const CustomEvent = doc.createEvent("CustomEvent").constructor;
- if (win.CustomEvent !== CustomEvent) {
- win.CustomEvent = CustomEvent;
- }
- }
- try {
- win.__stencil_baseURI = doc.baseURI;
- } catch (e) {
- Object.defineProperty(doc, "baseURI", {
- get() {
- const baseElm = doc.querySelector("base[href]");
- if (baseElm) {
- return new URL(baseElm.getAttribute("href"), win.location.href).href;
- }
- return win.location.href;
- }
- });
- }
- return win;
- }
- function getRootNode(opts) {
- const isComposed = opts != null && opts.composed === true;
- let node = this;
- while (node.parentNode != null) {
- node = node.parentNode;
- if (isComposed === true && node.parentNode == null && node.host != null) {
- node = node.host;
- }
- }
- return node;
- }
- // src/hydrate/runner/render-utils.ts
- function normalizeHydrateOptions(inputOpts) {
- const outputOpts = Object.assign(
- {
- serializeToHtml: false,
- destroyWindow: false,
- destroyDocument: false
- },
- inputOpts || {}
- );
- if (typeof outputOpts.clientHydrateAnnotations !== "boolean") {
- outputOpts.clientHydrateAnnotations = true;
- }
- if (typeof outputOpts.constrainTimeouts !== "boolean") {
- outputOpts.constrainTimeouts = true;
- }
- if (typeof outputOpts.maxHydrateCount !== "number") {
- outputOpts.maxHydrateCount = 300;
- }
- if (typeof outputOpts.runtimeLogging !== "boolean") {
- outputOpts.runtimeLogging = false;
- }
- if (typeof outputOpts.timeout !== "number") {
- outputOpts.timeout = 15e3;
- }
- if (Array.isArray(outputOpts.excludeComponents)) {
- outputOpts.excludeComponents = outputOpts.excludeComponents.filter(filterValidTags).map(mapValidTags);
- } else {
- outputOpts.excludeComponents = [];
- }
- if (Array.isArray(outputOpts.staticComponents)) {
- outputOpts.staticComponents = outputOpts.staticComponents.filter(filterValidTags).map(mapValidTags);
- } else {
- outputOpts.staticComponents = [];
- }
- return outputOpts;
- }
- function filterValidTags(tag) {
- return typeof tag === "string" && tag.includes("-");
- }
- function mapValidTags(tag) {
- return tag.trim().toLowerCase();
- }
- function generateHydrateResults(opts) {
- if (typeof opts.url !== "string") {
- opts.url = `https://hydrate.stenciljs.com/`;
- }
- if (typeof opts.buildId !== "string") {
- opts.buildId = createHydrateBuildId();
- }
- const results = {
- buildId: opts.buildId,
- diagnostics: [],
- url: opts.url,
- host: null,
- hostname: null,
- href: null,
- pathname: null,
- port: null,
- search: null,
- hash: null,
- html: null,
- httpStatus: null,
- hydratedCount: 0,
- anchors: [],
- components: [],
- imgs: [],
- scripts: [],
- staticData: [],
- styles: [],
- title: null
- };
- try {
- const url = new URL(opts.url, `https://hydrate.stenciljs.com/`);
- results.url = url.href;
- results.host = url.host;
- results.hostname = url.hostname;
- results.href = url.href;
- results.port = url.port;
- results.pathname = url.pathname;
- results.search = url.search;
- results.hash = url.hash;
- } catch (e) {
- renderCatchError(results, e);
- }
- return results;
- }
- var createHydrateBuildId = () => {
- let chars = "abcdefghijklmnopqrstuvwxyz";
- let buildId = "";
- while (buildId.length < 8) {
- const char = chars[Math.floor(Math.random() * chars.length)];
- buildId += char;
- if (buildId.length === 1) {
- chars += "0123456789";
- }
- }
- return buildId;
- };
- function renderBuildDiagnostic(results, level, header, msg) {
- const diagnostic = {
- level,
- type: "build",
- header,
- messageText: msg,
- relFilePath: void 0,
- absFilePath: void 0,
- lines: []
- };
- if (results.pathname) {
- if (results.pathname !== "/") {
- diagnostic.header += ": " + results.pathname;
- }
- } else if (results.url) {
- diagnostic.header += ": " + results.url;
- }
- results.diagnostics.push(diagnostic);
- return diagnostic;
- }
- function renderBuildError(results, msg) {
- return renderBuildDiagnostic(results, "error", "Hydrate Error", msg || "");
- }
- function renderCatchError(results, err2) {
- const diagnostic = renderBuildError(results);
- if (err2 != null) {
- if (err2.stack != null) {
- diagnostic.messageText = err2.stack.toString();
- } else {
- if (err2.message != null) {
- diagnostic.messageText = err2.message.toString();
- } else {
- diagnostic.messageText = err2.toString();
- }
- }
- }
- return diagnostic;
- }
- // src/hydrate/runner/runtime-log.ts
- function runtimeLogging(win, opts, results) {
- try {
- const pathname = win.location.pathname;
- win.console.error = (...msgs) => {
- const errMsg = msgs.reduce((errMsg2, m) => {
- if (m) {
- if (m.stack != null) {
- return errMsg2 + " " + String(m.stack);
- } else {
- if (m.message != null) {
- return errMsg2 + " " + String(m.message);
- }
- }
- }
- return String(m);
- }, "").trim();
- if (errMsg !== "") {
- renderCatchError(results, errMsg);
- if (opts.runtimeLogging) {
- runtimeLog(pathname, "error", [errMsg]);
- }
- }
- };
- win.console.debug = (...msgs) => {
- renderBuildDiagnostic(results, "debug", "Hydrate Debug", [...msgs].join(", "));
- if (opts.runtimeLogging) {
- runtimeLog(pathname, "debug", msgs);
- }
- };
- if (opts.runtimeLogging) {
- ["log", "warn", "assert", "info", "trace"].forEach((type) => {
- win.console[type] = (...msgs) => {
- runtimeLog(pathname, type, msgs);
- };
- });
- }
- } catch (e) {
- renderCatchError(results, e);
- }
- }
- function runtimeLog(pathname, type, msgs) {
- global.console[type].apply(global.console, [`[ ${pathname} ${type} ] `, ...msgs]);
- }
- // src/hydrate/runner/window-initialize.ts
- function initializeWindow(win, doc, opts, results) {
- if (typeof opts.url === "string") {
- try {
- win.location.href = opts.url;
- } catch (e) {
- }
- }
- if (typeof opts.userAgent === "string") {
- try {
- win.navigator.userAgent = opts.userAgent;
- } catch (e) {
- }
- }
- if (typeof opts.cookie === "string") {
- try {
- doc.cookie = opts.cookie;
- } catch (e) {
- }
- }
- if (typeof opts.referrer === "string") {
- try {
- doc.referrer = opts.referrer;
- } catch (e) {
- }
- }
- if (typeof opts.direction === "string") {
- try {
- doc.documentElement.setAttribute("dir", opts.direction);
- } catch (e) {
- }
- }
- if (typeof opts.language === "string") {
- try {
- doc.documentElement.setAttribute("lang", opts.language);
- } catch (e) {
- }
- }
- if (typeof opts.buildId === "string") {
- try {
- doc.documentElement.setAttribute("data-stencil-build", opts.buildId);
- } catch (e) {
- }
- }
- try {
- win.customElements = null;
- } catch (e) {
- }
- if (opts.constrainTimeouts) {
- constrainTimeouts(win);
- }
- runtimeLogging(win, opts, results);
- return win;
- }
- // src/hydrate/runner/render.ts
- var NOOP = () => {
- };
- function streamToString(html, option) {
- return renderToString(html, option, true);
- }
- function renderToString(html, options, asStream) {
- const opts = normalizeHydrateOptions(options);
- opts.serializeToHtml = true;
- opts.fullDocument = typeof opts.fullDocument === "boolean" ? opts.fullDocument : true;
- opts.serializeShadowRoot = typeof opts.serializeShadowRoot === "boolean" ? opts.serializeShadowRoot : true;
- opts.constrainTimeouts = false;
- return hydrateDocument(html, opts, asStream);
- }
- function hydrateDocument(doc, options, asStream) {
- const opts = normalizeHydrateOptions(options);
- let win = null;
- const results = generateHydrateResults(opts);
- if (hasError(results.diagnostics)) {
- return Promise.resolve(results);
- }
- if (typeof doc === "string") {
- try {
- opts.destroyWindow = true;
- opts.destroyDocument = true;
- win = new MockWindow(doc);
- if (!asStream) {
- return render(win, opts, results).then(() => results);
- }
- return renderStream(win, opts, results);
- } catch (e) {
- if (win && win.close) {
- win.close();
- }
- win = null;
- renderCatchError(results, e);
- return Promise.resolve(results);
- }
- }
- if (isValidDocument(doc)) {
- try {
- opts.destroyDocument = false;
- win = patchDomImplementation(doc, opts);
- if (!asStream) {
- return render(win, opts, results).then(() => results);
- }
- return renderStream(win, opts, results);
- } catch (e) {
- if (win && win.close) {
- win.close();
- }
- win = null;
- renderCatchError(results, e);
- return Promise.resolve(results);
- }
- }
- renderBuildError(results, `Invalid html or document. Must be either a valid "html" string, or DOM "document".`);
- return Promise.resolve(results);
- }
- async function render(win, opts, results) {
- if ("process" in globalThis && typeof process.on === "function" && !process.__stencilErrors) {
- process.__stencilErrors = true;
- process.on("unhandledRejection", (e) => {
- console.log("unhandledRejection", e);
- });
- }
- initializeWindow(win, win.document, opts, results);
- const beforeHydrateFn = typeof opts.beforeHydrate === "function" ? opts.beforeHydrate : NOOP;
- try {
- await Promise.resolve(beforeHydrateFn(win.document));
- return new Promise((resolve) => hydrateFactory(win, opts, results, afterHydrate, resolve));
- } catch (e) {
- renderCatchError(results, e);
- return finalizeHydrate(win, win.document, opts, results);
- }
- }
- function renderStream(win, opts, results) {
- async function* processRender() {
- const renderResult = await render(win, opts, results);
- yield renderResult.html;
- }
- return Readable.from(processRender());
- }
- async function afterHydrate(win, opts, results, resolve) {
- const afterHydrateFn = typeof opts.afterHydrate === "function" ? opts.afterHydrate : NOOP;
- try {
- await Promise.resolve(afterHydrateFn(win.document));
- return resolve(finalizeHydrate(win, win.document, opts, results));
- } catch (e) {
- renderCatchError(results, e);
- return resolve(finalizeHydrate(win, win.document, opts, results));
- }
- }
- function finalizeHydrate(win, doc, opts, results) {
- try {
- inspectElement(results, doc.documentElement, 0);
- if (opts.removeUnusedStyles !== false) {
- try {
- removeUnusedStyles(doc, results.diagnostics);
- } catch (e) {
- renderCatchError(results, e);
- }
- }
- if (typeof opts.title === "string") {
- try {
- doc.title = opts.title;
- } catch (e) {
- renderCatchError(results, e);
- }
- }
- results.title = doc.title;
- if (opts.removeScripts) {
- removeScripts(doc.documentElement);
- }
- try {
- updateCanonicalLink(doc, opts.canonicalUrl);
- } catch (e) {
- renderCatchError(results, e);
- }
- try {
- relocateMetaCharset(doc);
- } catch (e) {
- }
- if (!hasError(results.diagnostics)) {
- results.httpStatus = 200;
- }
- try {
- const metaStatus = doc.head.querySelector('meta[http-equiv="status"]');
- if (metaStatus != null) {
- const metaStatusContent = metaStatus.getAttribute("content");
- if (metaStatusContent && metaStatusContent.length > 0) {
- results.httpStatus = parseInt(metaStatusContent, 10);
- }
- }
- } catch (e) {
- }
- if (opts.clientHydrateAnnotations) {
- doc.documentElement.classList.add("hydrated");
- }
- if (opts.serializeToHtml) {
- results.html = serializeDocumentToString(doc, opts);
- }
- } catch (e) {
- renderCatchError(results, e);
- }
- destroyWindow(win, doc, opts, results);
- return results;
- }
- function destroyWindow(win, doc, opts, results) {
- if (!opts.destroyWindow) {
- return;
- }
- try {
- if (!opts.destroyDocument) {
- win.document = null;
- doc.defaultView = null;
- }
- if (win.close) {
- win.close();
- }
- } catch (e) {
- renderCatchError(results, e);
- }
- }
- function serializeDocumentToString(doc, opts) {
- return serializeNodeToHtml(doc, {
- approximateLineWidth: opts.approximateLineWidth,
- outerHtml: false,
- prettyHtml: opts.prettyHtml,
- removeAttributeQuotes: opts.removeAttributeQuotes,
- removeBooleanAttributeQuotes: opts.removeBooleanAttributeQuotes,
- removeEmptyAttributes: opts.removeEmptyAttributes,
- removeHtmlComments: opts.removeHtmlComments,
- serializeShadowRoot: opts.serializeShadowRoot,
- fullDocument: opts.fullDocument
- });
- }
- function isValidDocument(doc) {
- return doc != null && doc.nodeType === 9 && doc.documentElement != null && doc.documentElement.nodeType === 1 && doc.body != null && doc.body.nodeType === 1;
- }
- function removeScripts(elm) {
- const children = elm.children;
- for (let i = children.length - 1; i >= 0; i--) {
- const child = children[i];
- removeScripts(child);
- if (child.nodeName === "SCRIPT" || child.nodeName === "LINK" && child.getAttribute("rel") === "modulepreload") {
- child.remove();
- }
- }
- }
- export {
- createWindowFromHtml,
- hydrateDocument,
- renderToString,
- serializeDocumentToString,
- streamToString
- };
|