diff --git a/.gitignore b/.gitignore index 8f2f576..9dcc237 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ .travis.yml .DS_Store .github/ -lib/ debug/ coverage/ reference/ @@ -17,4 +16,4 @@ package-lock.json *.tgz *.zip RELEASE -TODO \ No newline at end of file +TODO diff --git a/lib/entities.js b/lib/entities.js deleted file mode 100644 index 49892d5..0000000 --- a/lib/entities.js +++ /dev/null @@ -1 +0,0 @@ -if(window.DOM)DOM.EntityEncoder.defaultEntities=JSON.parse('{"Aacute":193,"aacute":225,"Abreve":258,"abreve":259,"ac":8766,"acd":8767,"acE":"\\u223e\\u0333","Acirc":194,"acirc":226,"acute":180,"Acy":1040,"acy":1072,"AElig":198,"aelig":230,"af":8289,"Afr":"\\ud835\\udd04","afr":"\\ud835\\udd1e","Agrave":192,"agrave":224,"alefsym":8501,"aleph":8501,"Alpha":913,"alpha":945,"Amacr":256,"amacr":257,"amalg":10815,"amp":"&","And":10835,"and":8743,"andand":10837,"andd":10844,"andslope":10840,"andv":10842,"ang":8736,"ange":10660,"angle":8736,"angmsd":8737,"angmsdaa":10664,"angmsdab":10665,"angmsdac":10666,"angmsdad":10667,"angmsdae":10668,"angmsdaf":10669,"angmsdag":10670,"angmsdah":10671,"angrt":8735,"angrtvb":8894,"angrtvbd":10653,"angsph":8738,"angst":197,"angzarr":9084,"Aogon":260,"aogon":261,"Aopf":"\\ud835\\udd38","aopf":"\\ud835\\udd52","ap":8776,"apacir":10863,"apE":10864,"ape":8778,"apid":8779,"apos":"\'","ApplyFunction":8289,"approx":8776,"approxeq":8778,"Aring":197,"aring":229,"Ascr":"\\ud835\\udc9c","ascr":"\\ud835\\udcb6","Assign":8788,"ast":"*","asymp":8776,"asympeq":8781,"Atilde":195,"atilde":227,"Auml":196,"auml":228,"awconint":8755,"awint":10769,"backcong":8780,"backepsilon":1014,"backprime":8245,"backsim":8765,"backsimeq":8909,"Backslash":8726,"Barv":10983,"barvee":8893,"Barwed":8966,"barwed":8965,"barwedge":8965,"bbrk":9141,"bbrktbrk":9142,"bcong":8780,"Bcy":1041,"bcy":1073,"bdquo":8222,"becaus":8757,"because":8757,"bemptyv":10672,"bepsi":1014,"bernou":8492,"Bernoullis":8492,"Beta":914,"beta":946,"beth":8502,"between":8812,"Bfr":"\\ud835\\udd05","bfr":"\\ud835\\udd1f","bigcap":8898,"bigcirc":9711,"bigcup":8899,"bigodot":10752,"bigoplus":10753,"bigotimes":10754,"bigsqcup":10758,"bigstar":9733,"bigtriangledown":9661,"bigtriangleup":9651,"biguplus":10756,"bigvee":8897,"bigwedge":8896,"bkarow":10509,"blacklozenge":10731,"blacksquare":9642,"blacktriangle":9652,"blacktriangledown":9662,"blacktriangleleft":9666,"blacktriangleright":9656,"blank":9251,"blk12":9618,"blk14":9617,"blk34":9619,"block":9608,"bne":"=\\u20e5","bnequiv":"\\u2261\\u20e5","bNot":10989,"bnot":8976,"Bopf":"\\ud835\\udd39","bopf":"\\ud835\\udd53","bot":8869,"bottom":8869,"bowtie":8904,"boxbox":10697,"boxDL":9559,"boxDl":9558,"boxdL":9557,"boxdl":9488,"boxDR":9556,"boxDr":9555,"boxdR":9554,"boxdr":9484,"boxH":9552,"boxh":9472,"boxHD":9574,"boxHd":9572,"boxhD":9573,"boxhd":9516,"boxHU":9577,"boxHu":9575,"boxhU":9576,"boxhu":9524,"boxminus":8863,"boxplus":8862,"boxtimes":8864,"boxUL":9565,"boxUl":9564,"boxuL":9563,"boxul":9496,"boxUR":9562,"boxUr":9561,"boxuR":9560,"boxur":9492,"boxV":9553,"boxv":9474,"boxVH":9580,"boxVh":9579,"boxvH":9578,"boxvh":9532,"boxVL":9571,"boxVl":9570,"boxvL":9569,"boxvl":9508,"boxVR":9568,"boxVr":9567,"boxvR":9566,"boxvr":9500,"bprime":8245,"breve":728,"brvbar":166,"Bscr":8492,"bscr":"\\ud835\\udcb7","bsemi":8271,"bsim":8765,"bsime":8909,"bsol":"\\\\","bsolb":10693,"bsolhsub":10184,"bull":8226,"bullet":8226,"bump":8782,"bumpE":10926,"bumpe":8783,"Bumpeq":8782,"bumpeq":8783,"Cacute":262,"cacute":263,"Cap":8914,"cap":8745,"capand":10820,"capbrcup":10825,"capcap":10827,"capcup":10823,"capdot":10816,"CapitalDifferentialD":8517,"caps":"\\u2229\\ufe00","caret":8257,"caron":711,"Cayleys":8493,"ccaps":10829,"Ccaron":268,"ccaron":269,"Ccedil":199,"ccedil":231,"Ccirc":264,"ccirc":265,"Cconint":8752,"ccups":10828,"ccupssm":10832,"Cdot":266,"cdot":267,"cedil":184,"Cedilla":184,"cemptyv":10674,"cent":162,"centerdot":183,"Cfr":8493,"cfr":"\\ud835\\udd20","CHcy":1063,"chcy":1095,"check":10003,"checkmark":10003,"Chi":935,"chi":967,"cir":9675,"circ":710,"circeq":8791,"circlearrowleft":8634,"circlearrowright":8635,"circledast":8859,"circledcirc":8858,"circleddash":8861,"CircleDot":8857,"circledR":174,"circledS":9416,"CircleMinus":8854,"CirclePlus":8853,"CircleTimes":8855,"cirE":10691,"cire":8791,"cirfnint":10768,"cirmid":10991,"cirscir":10690,"ClockwiseContourIntegral":8754,"CloseCurlyDoubleQuote":8221,"CloseCurlyQuote":8217,"clubs":9827,"clubsuit":9827,"Colon":8759,"colon":":","Colone":10868,"colone":8788,"coloneq":8788,"comma":",","commat":"@","comp":8705,"compfn":8728,"complement":8705,"complexes":8450,"cong":8773,"congdot":10861,"Congruent":8801,"Conint":8751,"conint":8750,"ContourIntegral":8750,"Copf":8450,"copf":"\\ud835\\udd54","coprod":8720,"Coproduct":8720,"copy":169,"copysr":8471,"CounterClockwiseContourIntegral":8755,"crarr":8629,"Cross":10799,"cross":10007,"Cscr":"\\ud835\\udc9e","cscr":"\\ud835\\udcb8","csub":10959,"csube":10961,"csup":10960,"csupe":10962,"ctdot":8943,"cudarrl":10552,"cudarrr":10549,"cuepr":8926,"cuesc":8927,"cularr":8630,"cularrp":10557,"Cup":8915,"cup":8746,"cupbrcap":10824,"CupCap":8781,"cupcap":10822,"cupcup":10826,"cupdot":8845,"cupor":10821,"cups":"\\u222a\\ufe00","curarr":8631,"curarrm":10556,"curlyeqprec":8926,"curlyeqsucc":8927,"curlyvee":8910,"curlywedge":8911,"curren":164,"curvearrowleft":8630,"curvearrowright":8631,"cuvee":8910,"cuwed":8911,"cwconint":8754,"cwint":8753,"cylcty":9005,"Dagger":8225,"dagger":8224,"daleth":8504,"Darr":8609,"dArr":8659,"darr":8595,"dash":8208,"Dashv":10980,"dashv":8867,"dbkarow":10511,"dblac":733,"Dcaron":270,"dcaron":271,"Dcy":1044,"dcy":1076,"DD":8517,"dd":8518,"ddagger":8225,"ddarr":8650,"DDotrahd":10513,"ddotseq":10871,"deg":176,"Del":8711,"Delta":916,"delta":948,"demptyv":10673,"dfisht":10623,"Dfr":"\\ud835\\udd07","dfr":"\\ud835\\udd21","dHar":10597,"dharl":8643,"dharr":8642,"DiacriticalAcute":180,"DiacriticalDot":729,"DiacriticalDoubleAcute":733,"DiacriticalGrave":"`","DiacriticalTilde":732,"diam":8900,"diamond":8900,"diamondsuit":9830,"diams":9830,"die":168,"DifferentialD":8518,"digamma":989,"disin":8946,"div":247,"divide":247,"divideontimes":8903,"divonx":8903,"DJcy":1026,"djcy":1106,"dlcorn":8990,"dlcrop":8973,"dollar":"$","Dopf":"\\ud835\\udd3b","dopf":"\\ud835\\udd55","Dot":168,"dot":729,"DotDot":8412,"doteq":8784,"doteqdot":8785,"DotEqual":8784,"dotminus":8760,"dotplus":8724,"dotsquare":8865,"doublebarwedge":8966,"DoubleContourIntegral":8751,"DoubleDot":168,"DoubleDownArrow":8659,"DoubleLeftArrow":8656,"DoubleLeftRightArrow":8660,"DoubleLeftTee":10980,"DoubleLongLeftArrow":10232,"DoubleLongLeftRightArrow":10234,"DoubleLongRightArrow":10233,"DoubleRightArrow":8658,"DoubleRightTee":8872,"DoubleUpArrow":8657,"DoubleUpDownArrow":8661,"DoubleVerticalBar":8741,"Downarrow":8659,"downarrow":8595,"DownArrowBar":10515,"DownArrowUpArrow":8693,"DownBreve":785,"downdownarrows":8650,"downharpoonleft":8643,"downharpoonright":8642,"DownLeftRightVector":10576,"DownLeftTeeVector":10590,"DownLeftVector":8637,"DownLeftVectorBar":10582,"DownRightTeeVector":10591,"DownRightVector":8641,"DownRightVectorBar":10583,"DownTee":8868,"DownTeeArrow":8615,"drbkarow":10512,"drcorn":8991,"drcrop":8972,"Dscr":"\\ud835\\udc9f","dscr":"\\ud835\\udcb9","DScy":1029,"dscy":1109,"dsol":10742,"Dstrok":272,"dstrok":273,"dtdot":8945,"dtri":9663,"dtrif":9662,"duarr":8693,"duhar":10607,"dwangle":10662,"DZcy":1039,"dzcy":1119,"dzigrarr":10239,"Eacute":201,"eacute":233,"easter":10862,"Ecaron":282,"ecaron":283,"ecir":8790,"Ecirc":202,"ecirc":234,"ecolon":8789,"Ecy":1069,"ecy":1101,"eDDot":10871,"Edot":278,"eDot":8785,"edot":279,"ee":8519,"efDot":8786,"Efr":"\\ud835\\udd08","efr":"\\ud835\\udd22","eg":10906,"Egrave":200,"egrave":232,"egs":10902,"egsdot":10904,"el":10905,"Element":8712,"elinters":9191,"ell":8467,"els":10901,"elsdot":10903,"Emacr":274,"emacr":275,"empty":8709,"emptyset":8709,"EmptySmallSquare":9723,"emptyv":8709,"EmptyVerySmallSquare":9643,"emsp":8195,"emsp13":8196,"emsp14":8197,"ENG":330,"eng":331,"ensp":8194,"Eogon":280,"eogon":281,"Eopf":"\\ud835\\udd3c","eopf":"\\ud835\\udd56","epar":8917,"eparsl":10723,"eplus":10865,"epsi":949,"Epsilon":917,"epsilon":949,"epsiv":1013,"eqcirc":8790,"eqcolon":8789,"eqsim":8770,"eqslantgtr":10902,"eqslantless":10901,"Equal":10869,"equals":"=","EqualTilde":8770,"equest":8799,"Equilibrium":8652,"equiv":8801,"equivDD":10872,"eqvparsl":10725,"erarr":10609,"erDot":8787,"Escr":8496,"escr":8495,"esdot":8784,"Esim":10867,"esim":8770,"Eta":919,"eta":951,"ETH":208,"eth":240,"Euml":203,"euml":235,"euro":8364,"excl":"!","exist":8707,"Exists":8707,"expectation":8496,"exponentiale":8519,"fallingdotseq":8786,"Fcy":1060,"fcy":1092,"female":9792,"ffilig":64259,"fflig":64256,"ffllig":64260,"Ffr":"\\ud835\\udd09","ffr":"\\ud835\\udd23","filig":64257,"FilledSmallSquare":9724,"FilledVerySmallSquare":9642,"fjlig":"fj","flat":9837,"fllig":64258,"fltns":9649,"fnof":402,"Fopf":"\\ud835\\udd3d","fopf":"\\ud835\\udd57","forall":8704,"fork":8916,"forkv":10969,"Fouriertrf":8497,"fpartint":10765,"frac12":189,"frac13":8531,"frac14":188,"frac15":8533,"frac16":8537,"frac18":8539,"frac23":8532,"frac25":8534,"frac34":190,"frac35":8535,"frac38":8540,"frac45":8536,"frac56":8538,"frac58":8541,"frac78":8542,"frasl":8260,"frown":8994,"Fscr":8497,"fscr":"\\ud835\\udcbb","gacute":501,"Gamma":915,"gamma":947,"Gammad":988,"gammad":989,"gap":10886,"Gbreve":286,"gbreve":287,"Gcedil":290,"Gcirc":284,"gcirc":285,"Gcy":1043,"gcy":1075,"Gdot":288,"gdot":289,"gE":8807,"ge":8805,"gEl":10892,"gel":8923,"geq":8805,"geqq":8807,"geqslant":10878,"ges":10878,"gescc":10921,"gesdot":10880,"gesdoto":10882,"gesdotol":10884,"gesl":"\\u22db\\ufe00","gesles":10900,"Gfr":"\\ud835\\udd0a","gfr":"\\ud835\\udd24","Gg":8921,"gg":8811,"ggg":8921,"gimel":8503,"GJcy":1027,"gjcy":1107,"gl":8823,"gla":10917,"glE":10898,"glj":10916,"gnap":10890,"gnapprox":10890,"gnE":8809,"gne":10888,"gneq":10888,"gneqq":8809,"gnsim":8935,"Gopf":"\\ud835\\udd3e","gopf":"\\ud835\\udd58","grave":"`","GreaterEqual":8805,"GreaterEqualLess":8923,"GreaterFullEqual":8807,"GreaterGreater":10914,"GreaterLess":8823,"GreaterSlantEqual":10878,"GreaterTilde":8819,"Gscr":"\\ud835\\udca2","gscr":8458,"gsim":8819,"gsime":10894,"gsiml":10896,"Gt":8811,"gt":">","gtcc":10919,"gtcir":10874,"gtdot":8919,"gtlPar":10645,"gtquest":10876,"gtrapprox":10886,"gtrarr":10616,"gtrdot":8919,"gtreqless":8923,"gtreqqless":10892,"gtrless":8823,"gtrsim":8819,"gvertneqq":"\\u2269\\ufe00","gvnE":"\\u2269\\ufe00","Hacek":711,"hairsp":8202,"half":189,"hamilt":8459,"HARDcy":1066,"hardcy":1098,"hArr":8660,"harr":8596,"harrcir":10568,"harrw":8621,"Hat":"^","hbar":8463,"Hcirc":292,"hcirc":293,"hearts":9829,"heartsuit":9829,"hellip":8230,"hercon":8889,"Hfr":8460,"hfr":"\\ud835\\udd25","HilbertSpace":8459,"hksearow":10533,"hkswarow":10534,"hoarr":8703,"homtht":8763,"hookleftarrow":8617,"hookrightarrow":8618,"Hopf":8461,"hopf":"\\ud835\\udd59","horbar":8213,"HorizontalLine":9472,"Hscr":8459,"hscr":"\\ud835\\udcbd","hslash":8463,"Hstrok":294,"hstrok":295,"HumpDownHump":8782,"HumpEqual":8783,"hybull":8259,"hyphen":8208,"Iacute":205,"iacute":237,"ic":8291,"Icirc":206,"icirc":238,"Icy":1048,"icy":1080,"Idot":304,"IEcy":1045,"iecy":1077,"iexcl":161,"iff":8660,"Ifr":8465,"ifr":"\\ud835\\udd26","Igrave":204,"igrave":236,"ii":8520,"iiiint":10764,"iiint":8749,"iinfin":10716,"iiota":8489,"IJlig":306,"ijlig":307,"Im":8465,"Imacr":298,"imacr":299,"image":8465,"ImaginaryI":8520,"imagline":8464,"imagpart":8465,"imath":305,"imof":8887,"imped":437,"Implies":8658,"in":8712,"incare":8453,"infin":8734,"infintie":10717,"inodot":305,"Int":8748,"int":8747,"intcal":8890,"integers":8484,"Integral":8747,"intercal":8890,"Intersection":8898,"intlarhk":10775,"intprod":10812,"InvisibleComma":8291,"InvisibleTimes":8290,"IOcy":1025,"iocy":1105,"Iogon":302,"iogon":303,"Iopf":"\\ud835\\udd40","iopf":"\\ud835\\udd5a","Iota":921,"iota":953,"iprod":10812,"iquest":191,"Iscr":8464,"iscr":"\\ud835\\udcbe","isin":8712,"isindot":8949,"isinE":8953,"isins":8948,"isinsv":8947,"isinv":8712,"it":8290,"Itilde":296,"itilde":297,"Iukcy":1030,"iukcy":1110,"Iuml":207,"iuml":239,"Jcirc":308,"jcirc":309,"Jcy":1049,"jcy":1081,"Jfr":"\\ud835\\udd0d","jfr":"\\ud835\\udd27","jmath":567,"Jopf":"\\ud835\\udd41","jopf":"\\ud835\\udd5b","Jscr":"\\ud835\\udca5","jscr":"\\ud835\\udcbf","Jsercy":1032,"jsercy":1112,"Jukcy":1028,"jukcy":1108,"Kappa":922,"kappa":954,"kappav":1008,"Kcedil":310,"kcedil":311,"Kcy":1050,"kcy":1082,"Kfr":"\\ud835\\udd0e","kfr":"\\ud835\\udd28","kgreen":312,"KHcy":1061,"khcy":1093,"KJcy":1036,"kjcy":1116,"Kopf":"\\ud835\\udd42","kopf":"\\ud835\\udd5c","Kscr":"\\ud835\\udca6","kscr":"\\ud835\\udcc0","lAarr":8666,"Lacute":313,"lacute":314,"laemptyv":10676,"lagran":8466,"Lambda":923,"lambda":955,"Lang":10218,"lang":10216,"langd":10641,"langle":10216,"lap":10885,"Laplacetrf":8466,"laquo":171,"Larr":8606,"lArr":8656,"larr":8592,"larrb":8676,"larrbfs":10527,"larrfs":10525,"larrhk":8617,"larrlp":8619,"larrpl":10553,"larrsim":10611,"larrtl":8610,"lat":10923,"lAtail":10523,"latail":10521,"late":10925,"lates":"\\u2aad\\ufe00","lBarr":10510,"lbarr":10508,"lbbrk":10098,"lbrace":"{","lbrack":"[","lbrke":10635,"lbrksld":10639,"lbrkslu":10637,"Lcaron":317,"lcaron":318,"Lcedil":315,"lcedil":316,"lceil":8968,"lcub":"{","Lcy":1051,"lcy":1083,"ldca":10550,"ldquo":8220,"ldquor":8222,"ldrdhar":10599,"ldrushar":10571,"ldsh":8626,"lE":8806,"le":8804,"LeftAngleBracket":10216,"Leftarrow":8656,"leftarrow":8592,"LeftArrowBar":8676,"LeftArrowRightArrow":8646,"leftarrowtail":8610,"LeftCeiling":8968,"LeftDoubleBracket":10214,"LeftDownTeeVector":10593,"LeftDownVector":8643,"LeftDownVectorBar":10585,"LeftFloor":8970,"leftharpoondown":8637,"leftharpoonup":8636,"leftleftarrows":8647,"Leftrightarrow":8660,"leftrightarrow":8596,"leftrightarrows":8646,"leftrightharpoons":8651,"leftrightsquigarrow":8621,"LeftRightVector":10574,"LeftTee":8867,"LeftTeeArrow":8612,"LeftTeeVector":10586,"leftthreetimes":8907,"LeftTriangle":8882,"LeftTriangleBar":10703,"LeftTriangleEqual":8884,"LeftUpDownVector":10577,"LeftUpTeeVector":10592,"LeftUpVector":8639,"LeftUpVectorBar":10584,"LeftVector":8636,"LeftVectorBar":10578,"lEg":10891,"leg":8922,"leq":8804,"leqq":8806,"leqslant":10877,"les":10877,"lescc":10920,"lesdot":10879,"lesdoto":10881,"lesdotor":10883,"lesg":"\\u22da\\ufe00","lesges":10899,"lessapprox":10885,"lessdot":8918,"lesseqgtr":8922,"lesseqqgtr":10891,"LessEqualGreater":8922,"LessFullEqual":8806,"LessGreater":8822,"lessgtr":8822,"LessLess":10913,"lesssim":8818,"LessSlantEqual":10877,"LessTilde":8818,"lfisht":10620,"lfloor":8970,"Lfr":"\\ud835\\udd0f","lfr":"\\ud835\\udd29","lg":8822,"lgE":10897,"lHar":10594,"lhard":8637,"lharu":8636,"lharul":10602,"lhblk":9604,"LJcy":1033,"ljcy":1113,"Ll":8920,"ll":8810,"llarr":8647,"llcorner":8990,"Lleftarrow":8666,"llhard":10603,"lltri":9722,"Lmidot":319,"lmidot":320,"lmoust":9136,"lmoustache":9136,"lnap":10889,"lnapprox":10889,"lnE":8808,"lne":10887,"lneq":10887,"lneqq":8808,"lnsim":8934,"loang":10220,"loarr":8701,"lobrk":10214,"Longleftarrow":10232,"longleftarrow":10229,"Longleftrightarrow":10234,"longleftrightarrow":10231,"longmapsto":10236,"Longrightarrow":10233,"longrightarrow":10230,"looparrowleft":8619,"looparrowright":8620,"lopar":10629,"Lopf":"\\ud835\\udd43","lopf":"\\ud835\\udd5d","loplus":10797,"lotimes":10804,"lowast":8727,"lowbar":"_","LowerLeftArrow":8601,"LowerRightArrow":8600,"loz":9674,"lozenge":9674,"lozf":10731,"lpar":"(","lparlt":10643,"lrarr":8646,"lrcorner":8991,"lrhar":8651,"lrhard":10605,"lrm":8206,"lrtri":8895,"lsaquo":8249,"Lscr":8466,"lscr":"\\ud835\\udcc1","lsh":8624,"lsim":8818,"lsime":10893,"lsimg":10895,"lsqb":"[","lsquo":8216,"lsquor":8218,"Lstrok":321,"lstrok":322,"Lt":8810,"lt":"<","ltcc":10918,"ltcir":10873,"ltdot":8918,"lthree":8907,"ltimes":8905,"ltlarr":10614,"ltquest":10875,"ltri":9667,"ltrie":8884,"ltrif":9666,"ltrPar":10646,"lurdshar":10570,"luruhar":10598,"lvertneqq":"\\u2268\\ufe00","lvnE":"\\u2268\\ufe00","macr":175,"male":9794,"malt":10016,"maltese":10016,"Map":10501,"map":8614,"mapsto":8614,"mapstodown":8615,"mapstoleft":8612,"mapstoup":8613,"marker":9646,"mcomma":10793,"Mcy":1052,"mcy":1084,"mdash":8212,"mDDot":8762,"measuredangle":8737,"MediumSpace":8287,"Mellintrf":8499,"Mfr":"\\ud835\\udd10","mfr":"\\ud835\\udd2a","mho":8487,"micro":181,"mid":8739,"midast":"*","midcir":10992,"middot":183,"minus":8722,"minusb":8863,"minusd":8760,"minusdu":10794,"MinusPlus":8723,"mlcp":10971,"mldr":8230,"mnplus":8723,"models":8871,"Mopf":"\\ud835\\udd44","mopf":"\\ud835\\udd5e","mp":8723,"Mscr":8499,"mscr":"\\ud835\\udcc2","mstpos":8766,"Mu":924,"mu":956,"multimap":8888,"mumap":8888,"nabla":8711,"Nacute":323,"nacute":324,"nang":"\\u2220\\u20d2","nap":8777,"napE":"\\u2a70\\u0338","napid":"\\u224b\\u0338","napos":329,"napprox":8777,"natur":9838,"natural":9838,"naturals":8469,"nbsp":160,"nbump":"\\u224e\\u0338","nbumpe":"\\u224f\\u0338","ncap":10819,"Ncaron":327,"ncaron":328,"Ncedil":325,"ncedil":326,"ncong":8775,"ncongdot":"\\u2a6d\\u0338","ncup":10818,"Ncy":1053,"ncy":1085,"ndash":8211,"ne":8800,"nearhk":10532,"neArr":8663,"nearr":8599,"nearrow":8599,"nedot":"\\u2250\\u0338","NegativeMediumSpace":8203,"NegativeThickSpace":8203,"NegativeThinSpace":8203,"NegativeVeryThinSpace":8203,"nequiv":8802,"nesear":10536,"nesim":"\\u2242\\u0338","NestedGreaterGreater":8811,"NestedLessLess":8810,"NewLine":"\\n","nexist":8708,"nexists":8708,"Nfr":"\\ud835\\udd11","nfr":"\\ud835\\udd2b","ngE":"\\u2267\\u0338","nge":8817,"ngeq":8817,"ngeqq":"\\u2267\\u0338","ngeqslant":"\\u2a7e\\u0338","nges":"\\u2a7e\\u0338","nGg":"\\u22d9\\u0338","ngsim":8821,"nGt":"\\u226b\\u20d2","ngt":8815,"ngtr":8815,"nGtv":"\\u226b\\u0338","nhArr":8654,"nharr":8622,"nhpar":10994,"ni":8715,"nis":8956,"nisd":8954,"niv":8715,"NJcy":1034,"njcy":1114,"nlArr":8653,"nlarr":8602,"nldr":8229,"nlE":"\\u2266\\u0338","nle":8816,"nLeftarrow":8653,"nleftarrow":8602,"nLeftrightarrow":8654,"nleftrightarrow":8622,"nleq":8816,"nleqq":"\\u2266\\u0338","nleqslant":"\\u2a7d\\u0338","nles":"\\u2a7d\\u0338","nless":8814,"nLl":"\\u22d8\\u0338","nlsim":8820,"nLt":"\\u226a\\u20d2","nlt":8814,"nltri":8938,"nltrie":8940,"nLtv":"\\u226a\\u0338","nmid":8740,"NoBreak":8288,"NonBreakingSpace":160,"Nopf":8469,"nopf":"\\ud835\\udd5f","not":172,"Not":10988,"NotCongruent":8802,"NotCupCap":8813,"NotDoubleVerticalBar":8742,"NotElement":8713,"NotEqual":8800,"NotEqualTilde":"\\u2242\\u0338","NotExists":8708,"NotGreater":8815,"NotGreaterEqual":8817,"NotGreaterFullEqual":"\\u2267\\u0338","NotGreaterGreater":"\\u226b\\u0338","NotGreaterLess":8825,"NotGreaterSlantEqual":"\\u2a7e\\u0338","NotGreaterTilde":8821,"NotHumpDownHump":"\\u224e\\u0338","NotHumpEqual":"\\u224f\\u0338","notin":8713,"notindot":"\\u22f5\\u0338","notinE":"\\u22f9\\u0338","notinva":8713,"notinvb":8951,"notinvc":8950,"NotLeftTriangle":8938,"NotLeftTriangleBar":"\\u29cf\\u0338","NotLeftTriangleEqual":8940,"NotLess":8814,"NotLessEqual":8816,"NotLessGreater":8824,"NotLessLess":"\\u226a\\u0338","NotLessSlantEqual":"\\u2a7d\\u0338","NotLessTilde":8820,"NotNestedGreaterGreater":"\\u2aa2\\u0338","NotNestedLessLess":"\\u2aa1\\u0338","notni":8716,"notniva":8716,"notnivb":8958,"notnivc":8957,"NotPrecedes":8832,"NotPrecedesEqual":"\\u2aaf\\u0338","NotPrecedesSlantEqual":8928,"NotReverseElement":8716,"NotRightTriangle":8939,"NotRightTriangleBar":"\\u29d0\\u0338","NotRightTriangleEqual":8941,"NotSquareSubset":"\\u228f\\u0338","NotSquareSubsetEqual":8930,"NotSquareSuperset":"\\u2290\\u0338","NotSquareSupersetEqual":8931,"NotSubset":"\\u2282\\u20d2","NotSubsetEqual":8840,"NotSucceeds":8833,"NotSucceedsEqual":"\\u2ab0\\u0338","NotSucceedsSlantEqual":8929,"NotSucceedsTilde":"\\u227f\\u0338","NotSuperset":"\\u2283\\u20d2","NotSupersetEqual":8841,"NotTilde":8769,"NotTildeEqual":8772,"NotTildeFullEqual":8775,"NotTildeTilde":8777,"NotVerticalBar":8740,"npar":8742,"nparallel":8742,"nparsl":"\\u2afd\\u20e5","npart":"\\u2202\\u0338","npolint":10772,"npr":8832,"nprcue":8928,"npre":"\\u2aaf\\u0338","nprec":8832,"npreceq":"\\u2aaf\\u0338","nrArr":8655,"nrarr":8603,"nrarrc":"\\u2933\\u0338","nrarrw":"\\u219d\\u0338","nRightarrow":8655,"nrightarrow":8603,"nrtri":8939,"nrtrie":8941,"nsc":8833,"nsccue":8929,"nsce":"\\u2ab0\\u0338","Nscr":"\\ud835\\udca9","nscr":"\\ud835\\udcc3","nshortmid":8740,"nshortparallel":8742,"nsim":8769,"nsime":8772,"nsimeq":8772,"nsmid":8740,"nspar":8742,"nsqsube":8930,"nsqsupe":8931,"nsub":8836,"nsubE":"\\u2ac5\\u0338","nsube":8840,"nsubset":"\\u2282\\u20d2","nsubseteq":8840,"nsubseteqq":"\\u2ac5\\u0338","nsucc":8833,"nsucceq":"\\u2ab0\\u0338","nsup":8837,"nsupE":"\\u2ac6\\u0338","nsupe":8841,"nsupset":"\\u2283\\u20d2","nsupseteq":8841,"nsupseteqq":"\\u2ac6\\u0338","ntgl":8825,"Ntilde":209,"ntilde":241,"ntlg":8824,"ntriangleleft":8938,"ntrianglelefteq":8940,"ntriangleright":8939,"ntrianglerighteq":8941,"Nu":925,"nu":957,"num":"#","numero":8470,"numsp":8199,"nvap":"\\u224d\\u20d2","nVDash":8879,"nVdash":8878,"nvDash":8877,"nvdash":8876,"nvge":"\\u2265\\u20d2","nvgt":">\\u20d2","nvHarr":10500,"nvinfin":10718,"nvlArr":10498,"nvle":"\\u2264\\u20d2","nvlt":"<\\u20d2","nvltrie":"\\u22b4\\u20d2","nvrArr":10499,"nvrtrie":"\\u22b5\\u20d2","nvsim":"\\u223c\\u20d2","nwarhk":10531,"nwArr":8662,"nwarr":8598,"nwarrow":8598,"nwnear":10535,"Oacute":211,"oacute":243,"oast":8859,"ocir":8858,"Ocirc":212,"ocirc":244,"Ocy":1054,"ocy":1086,"odash":8861,"Odblac":336,"odblac":337,"odiv":10808,"odot":8857,"odsold":10684,"OElig":338,"oelig":339,"ofcir":10687,"Ofr":"\\ud835\\udd12","ofr":"\\ud835\\udd2c","ogon":731,"Ograve":210,"ograve":242,"ogt":10689,"ohbar":10677,"ohm":937,"oint":8750,"olarr":8634,"olcir":10686,"olcross":10683,"oline":8254,"olt":10688,"Omacr":332,"omacr":333,"Omega":937,"omega":969,"Omicron":927,"omicron":959,"omid":10678,"ominus":8854,"Oopf":"\\ud835\\udd46","oopf":"\\ud835\\udd60","opar":10679,"OpenCurlyDoubleQuote":8220,"OpenCurlyQuote":8216,"operp":10681,"oplus":8853,"Or":10836,"or":8744,"orarr":8635,"ord":10845,"order":8500,"orderof":8500,"ordf":170,"ordm":186,"origof":8886,"oror":10838,"orslope":10839,"orv":10843,"oS":9416,"Oscr":"\\ud835\\udcaa","oscr":8500,"Oslash":216,"oslash":248,"osol":8856,"Otilde":213,"otilde":245,"Otimes":10807,"otimes":8855,"otimesas":10806,"Ouml":214,"ouml":246,"ovbar":9021,"OverBar":8254,"OverBrace":9182,"OverBracket":9140,"OverParenthesis":9180,"par":8741,"para":182,"parallel":8741,"parsim":10995,"parsl":11005,"part":8706,"PartialD":8706,"Pcy":1055,"pcy":1087,"percnt":"%","period":".","permil":8240,"perp":8869,"pertenk":8241,"Pfr":"\\ud835\\udd13","pfr":"\\ud835\\udd2d","Phi":934,"phi":966,"phiv":981,"phmmat":8499,"phone":9742,"Pi":928,"pi":960,"pitchfork":8916,"piv":982,"planck":8463,"planckh":8462,"plankv":8463,"plus":"+","plusacir":10787,"plusb":8862,"pluscir":10786,"plusdo":8724,"plusdu":10789,"pluse":10866,"PlusMinus":177,"plusmn":177,"plussim":10790,"plustwo":10791,"pm":177,"Poincareplane":8460,"pointint":10773,"Popf":8473,"popf":"\\ud835\\udd61","pound":163,"Pr":10939,"pr":8826,"prap":10935,"prcue":8828,"prE":10931,"pre":10927,"prec":8826,"precapprox":10935,"preccurlyeq":8828,"Precedes":8826,"PrecedesEqual":10927,"PrecedesSlantEqual":8828,"PrecedesTilde":8830,"preceq":10927,"precnapprox":10937,"precneqq":10933,"precnsim":8936,"precsim":8830,"Prime":8243,"prime":8242,"primes":8473,"prnap":10937,"prnE":10933,"prnsim":8936,"prod":8719,"Product":8719,"profalar":9006,"profline":8978,"profsurf":8979,"prop":8733,"Proportion":8759,"Proportional":8733,"propto":8733,"prsim":8830,"prurel":8880,"Pscr":"\\ud835\\udcab","pscr":"\\ud835\\udcc5","Psi":936,"psi":968,"puncsp":8200,"Qfr":"\\ud835\\udd14","qfr":"\\ud835\\udd2e","qint":10764,"Qopf":8474,"qopf":"\\ud835\\udd62","qprime":8279,"Qscr":"\\ud835\\udcac","qscr":"\\ud835\\udcc6","quaternions":8461,"quatint":10774,"quest":"?","questeq":8799,"quot":"\\"","rAarr":8667,"race":"\\u223d\\u0331","Racute":340,"racute":341,"radic":8730,"raemptyv":10675,"Rang":10219,"rang":10217,"rangd":10642,"range":10661,"rangle":10217,"raquo":187,"Rarr":8608,"rArr":8658,"rarr":8594,"rarrap":10613,"rarrb":8677,"rarrbfs":10528,"rarrc":10547,"rarrfs":10526,"rarrhk":8618,"rarrlp":8620,"rarrpl":10565,"rarrsim":10612,"Rarrtl":10518,"rarrtl":8611,"rarrw":8605,"rAtail":10524,"ratail":10522,"ratio":8758,"rationals":8474,"RBarr":10512,"rBarr":10511,"rbarr":10509,"rbbrk":10099,"rbrace":"}","rbrack":"]","rbrke":10636,"rbrksld":10638,"rbrkslu":10640,"Rcaron":344,"rcaron":345,"Rcedil":342,"rcedil":343,"rceil":8969,"rcub":"}","Rcy":1056,"rcy":1088,"rdca":10551,"rdldhar":10601,"rdquo":8221,"rdquor":8221,"rdsh":8627,"Re":8476,"real":8476,"realine":8475,"realpart":8476,"reals":8477,"rect":9645,"reg":174,"ReverseElement":8715,"ReverseEquilibrium":8651,"ReverseUpEquilibrium":10607,"rfisht":10621,"rfloor":8971,"Rfr":8476,"rfr":"\\ud835\\udd2f","rHar":10596,"rhard":8641,"rharu":8640,"rharul":10604,"Rho":929,"rho":961,"rhov":1009,"RightAngleBracket":10217,"Rightarrow":8658,"rightarrow":8594,"RightArrowBar":8677,"RightArrowLeftArrow":8644,"rightarrowtail":8611,"RightCeiling":8969,"RightDoubleBracket":10215,"RightDownTeeVector":10589,"RightDownVector":8642,"RightDownVectorBar":10581,"RightFloor":8971,"rightharpoondown":8641,"rightharpoonup":8640,"rightleftarrows":8644,"rightleftharpoons":8652,"rightrightarrows":8649,"rightsquigarrow":8605,"RightTee":8866,"RightTeeArrow":8614,"RightTeeVector":10587,"rightthreetimes":8908,"RightTriangle":8883,"RightTriangleBar":10704,"RightTriangleEqual":8885,"RightUpDownVector":10575,"RightUpTeeVector":10588,"RightUpVector":8638,"RightUpVectorBar":10580,"RightVector":8640,"RightVectorBar":10579,"ring":730,"risingdotseq":8787,"rlarr":8644,"rlhar":8652,"rlm":8207,"rmoust":9137,"rmoustache":9137,"rnmid":10990,"roang":10221,"roarr":8702,"robrk":10215,"ropar":10630,"Ropf":8477,"ropf":"\\ud835\\udd63","roplus":10798,"rotimes":10805,"RoundImplies":10608,"rpar":")","rpargt":10644,"rppolint":10770,"rrarr":8649,"Rrightarrow":8667,"rsaquo":8250,"Rscr":8475,"rscr":"\\ud835\\udcc7","rsh":8625,"rsqb":"]","rsquo":8217,"rsquor":8217,"rthree":8908,"rtimes":8906,"rtri":9657,"rtrie":8885,"rtrif":9656,"rtriltri":10702,"RuleDelayed":10740,"ruluhar":10600,"rx":8478,"Sacute":346,"sacute":347,"sbquo":8218,"Sc":10940,"sc":8827,"scap":10936,"Scaron":352,"scaron":353,"sccue":8829,"scE":10932,"sce":10928,"Scedil":350,"scedil":351,"Scirc":348,"scirc":349,"scnap":10938,"scnE":10934,"scnsim":8937,"scpolint":10771,"scsim":8831,"Scy":1057,"scy":1089,"sdot":8901,"sdotb":8865,"sdote":10854,"searhk":10533,"seArr":8664,"searr":8600,"searrow":8600,"sect":167,"semi":";","seswar":10537,"setminus":8726,"setmn":8726,"sext":10038,"Sfr":"\\ud835\\udd16","sfr":"\\ud835\\udd30","sfrown":8994,"sharp":9839,"SHCHcy":1065,"shchcy":1097,"SHcy":1064,"shcy":1096,"ShortDownArrow":8595,"ShortLeftArrow":8592,"shortmid":8739,"shortparallel":8741,"ShortRightArrow":8594,"ShortUpArrow":8593,"shy":173,"Sigma":931,"sigma":963,"sigmaf":962,"sigmav":962,"sim":8764,"simdot":10858,"sime":8771,"simeq":8771,"simg":10910,"simgE":10912,"siml":10909,"simlE":10911,"simne":8774,"simplus":10788,"simrarr":10610,"slarr":8592,"SmallCircle":8728,"smallsetminus":8726,"smashp":10803,"smeparsl":10724,"smid":8739,"smile":8995,"smt":10922,"smte":10924,"smtes":"\\u2aac\\ufe00","SOFTcy":1068,"softcy":1100,"sol":"/","solb":10692,"solbar":9023,"Sopf":"\\ud835\\udd4a","sopf":"\\ud835\\udd64","spades":9824,"spadesuit":9824,"spar":8741,"sqcap":8851,"sqcaps":"\\u2293\\ufe00","sqcup":8852,"sqcups":"\\u2294\\ufe00","Sqrt":8730,"sqsub":8847,"sqsube":8849,"sqsubset":8847,"sqsubseteq":8849,"sqsup":8848,"sqsupe":8850,"sqsupset":8848,"sqsupseteq":8850,"squ":9633,"square":9633,"SquareIntersection":8851,"SquareSubset":8847,"SquareSubsetEqual":8849,"SquareSuperset":8848,"SquareSupersetEqual":8850,"SquareUnion":8852,"squarf":9642,"squf":9642,"srarr":8594,"Sscr":"\\ud835\\udcae","sscr":"\\ud835\\udcc8","ssetmn":8726,"ssmile":8995,"sstarf":8902,"Star":8902,"star":9734,"starf":9733,"straightepsilon":1013,"straightphi":981,"strns":175,"Sub":8912,"sub":8834,"subdot":10941,"subE":10949,"sube":8838,"subedot":10947,"submult":10945,"subnE":10955,"subne":8842,"subplus":10943,"subrarr":10617,"Subset":8912,"subset":8834,"subseteq":8838,"subseteqq":10949,"SubsetEqual":8838,"subsetneq":8842,"subsetneqq":10955,"subsim":10951,"subsub":10965,"subsup":10963,"succ":8827,"succapprox":10936,"succcurlyeq":8829,"Succeeds":8827,"SucceedsEqual":10928,"SucceedsSlantEqual":8829,"SucceedsTilde":8831,"succeq":10928,"succnapprox":10938,"succneqq":10934,"succnsim":8937,"succsim":8831,"SuchThat":8715,"sum":8721,"sung":9834,"Sup":8913,"sup":8835,"sup1":185,"sup2":178,"sup3":179,"supdot":10942,"supdsub":10968,"supE":10950,"supe":8839,"supedot":10948,"Superset":8835,"SupersetEqual":8839,"suphsol":10185,"suphsub":10967,"suplarr":10619,"supmult":10946,"supnE":10956,"supne":8843,"supplus":10944,"Supset":8913,"supset":8835,"supseteq":8839,"supseteqq":10950,"supsetneq":8843,"supsetneqq":10956,"supsim":10952,"supsub":10964,"supsup":10966,"swarhk":10534,"swArr":8665,"swarr":8601,"swarrow":8601,"swnwar":10538,"szlig":223,"Tab":"\\t","target":8982,"Tau":932,"tau":964,"tbrk":9140,"Tcaron":356,"tcaron":357,"Tcedil":354,"tcedil":355,"Tcy":1058,"tcy":1090,"tdot":8411,"telrec":8981,"Tfr":"\\ud835\\udd17","tfr":"\\ud835\\udd31","there4":8756,"therefore":8756,"Theta":920,"theta":952,"thetasym":977,"thetav":977,"thickapprox":8776,"thicksim":8764,"ThickSpace":"\\u205f\\u200a","thinsp":8201,"ThinSpace":8201,"thkap":8776,"thksim":8764,"THORN":222,"thorn":254,"Tilde":8764,"tilde":732,"TildeEqual":8771,"TildeFullEqual":8773,"TildeTilde":8776,"times":215,"timesb":8864,"timesbar":10801,"timesd":10800,"tint":8749,"toea":10536,"top":8868,"topbot":9014,"topcir":10993,"Topf":"\\ud835\\udd4b","topf":"\\ud835\\udd65","topfork":10970,"tosa":10537,"tprime":8244,"trade":8482,"triangle":9653,"triangledown":9663,"triangleleft":9667,"trianglelefteq":8884,"triangleq":8796,"triangleright":9657,"trianglerighteq":8885,"tridot":9708,"trie":8796,"triminus":10810,"TripleDot":8411,"triplus":10809,"trisb":10701,"tritime":10811,"trpezium":9186,"Tscr":"\\ud835\\udcaf","tscr":"\\ud835\\udcc9","TScy":1062,"tscy":1094,"TSHcy":1035,"tshcy":1115,"Tstrok":358,"tstrok":359,"twixt":8812,"twoheadleftarrow":8606,"twoheadrightarrow":8608,"Uacute":218,"uacute":250,"Uarr":8607,"uArr":8657,"uarr":8593,"Uarrocir":10569,"Ubrcy":1038,"ubrcy":1118,"Ubreve":364,"ubreve":365,"Ucirc":219,"ucirc":251,"Ucy":1059,"ucy":1091,"udarr":8645,"Udblac":368,"udblac":369,"udhar":10606,"ufisht":10622,"Ufr":"\\ud835\\udd18","ufr":"\\ud835\\udd32","Ugrave":217,"ugrave":249,"uHar":10595,"uharl":8639,"uharr":8638,"uhblk":9600,"ulcorn":8988,"ulcorner":8988,"ulcrop":8975,"ultri":9720,"Umacr":362,"umacr":363,"uml":168,"UnderBar":"_","UnderBrace":9183,"UnderBracket":9141,"UnderParenthesis":9181,"Union":8899,"UnionPlus":8846,"Uogon":370,"uogon":371,"Uopf":"\\ud835\\udd4c","uopf":"\\ud835\\udd66","Uparrow":8657,"uparrow":8593,"UpArrowBar":10514,"UpArrowDownArrow":8645,"Updownarrow":8661,"updownarrow":8597,"UpEquilibrium":10606,"upharpoonleft":8639,"upharpoonright":8638,"uplus":8846,"UpperLeftArrow":8598,"UpperRightArrow":8599,"Upsi":978,"upsi":965,"upsih":978,"Upsilon":933,"upsilon":965,"UpTee":8869,"UpTeeArrow":8613,"upuparrows":8648,"urcorn":8989,"urcorner":8989,"urcrop":8974,"Uring":366,"uring":367,"urtri":9721,"Uscr":"\\ud835\\udcb0","uscr":"\\ud835\\udcca","utdot":8944,"Utilde":360,"utilde":361,"utri":9653,"utrif":9652,"uuarr":8648,"Uuml":220,"uuml":252,"uwangle":10663,"vangrt":10652,"varepsilon":1013,"varkappa":1008,"varnothing":8709,"varphi":981,"varpi":982,"varpropto":8733,"vArr":8661,"varr":8597,"varrho":1009,"varsigma":962,"varsubsetneq":"\\u228a\\ufe00","varsubsetneqq":"\\u2acb\\ufe00","varsupsetneq":"\\u228b\\ufe00","varsupsetneqq":"\\u2acc\\ufe00","vartheta":977,"vartriangleleft":8882,"vartriangleright":8883,"Vbar":10987,"vBar":10984,"vBarv":10985,"Vcy":1042,"vcy":1074,"VDash":8875,"Vdash":8873,"vDash":8872,"vdash":8866,"Vdashl":10982,"Vee":8897,"vee":8744,"veebar":8891,"veeeq":8794,"vellip":8942,"Verbar":8214,"verbar":"|","Vert":8214,"vert":"|","VerticalBar":8739,"VerticalLine":"|","VerticalSeparator":10072,"VerticalTilde":8768,"VeryThinSpace":8202,"Vfr":"\\ud835\\udd19","vfr":"\\ud835\\udd33","vltri":8882,"vnsub":"\\u2282\\u20d2","vnsup":"\\u2283\\u20d2","Vopf":"\\ud835\\udd4d","vopf":"\\ud835\\udd67","vprop":8733,"vrtri":8883,"Vscr":"\\ud835\\udcb1","vscr":"\\ud835\\udccb","vsubnE":"\\u2acb\\ufe00","vsubne":"\\u228a\\ufe00","vsupnE":"\\u2acc\\ufe00","vsupne":"\\u228b\\ufe00","Vvdash":8874,"vzigzag":10650,"Wcirc":372,"wcirc":373,"wedbar":10847,"Wedge":8896,"wedge":8743,"wedgeq":8793,"weierp":8472,"Wfr":"\\ud835\\udd1a","wfr":"\\ud835\\udd34","Wopf":"\\ud835\\udd4e","wopf":"\\ud835\\udd68","wp":8472,"wr":8768,"wreath":8768,"Wscr":"\\ud835\\udcb2","wscr":"\\ud835\\udccc","xcap":8898,"xcirc":9711,"xcup":8899,"xdtri":9661,"Xfr":"\\ud835\\udd1b","xfr":"\\ud835\\udd35","xhArr":10234,"xharr":10231,"Xi":926,"xi":958,"xlArr":10232,"xlarr":10229,"xmap":10236,"xnis":8955,"xodot":10752,"Xopf":"\\ud835\\udd4f","xopf":"\\ud835\\udd69","xoplus":10753,"xotime":10754,"xrArr":10233,"xrarr":10230,"Xscr":"\\ud835\\udcb3","xscr":"\\ud835\\udccd","xsqcup":10758,"xuplus":10756,"xutri":9651,"xvee":8897,"xwedge":8896,"Yacute":221,"yacute":253,"YAcy":1071,"yacy":1103,"Ycirc":374,"ycirc":375,"Ycy":1067,"ycy":1099,"yen":165,"Yfr":"\\ud835\\udd1c","yfr":"\\ud835\\udd36","YIcy":1031,"yicy":1111,"Yopf":"\\ud835\\udd50","yopf":"\\ud835\\udd6a","Yscr":"\\ud835\\udcb4","yscr":"\\ud835\\udcce","YUcy":1070,"yucy":1102,"yuml":255,"Yuml":376,"Zacute":377,"zacute":378,"Zcaron":381,"zcaron":382,"Zcy":1047,"zcy":1079,"Zdot":379,"zdot":380,"zeetrf":8488,"ZeroWidthSpace":8203,"Zeta":918,"zeta":950,"Zfr":8488,"zfr":"\\ud835\\udd37","ZHcy":1046,"zhcy":1078,"zigrarr":8669,"Zopf":8484,"zopf":"\\ud835\\udd6b","Zscr":"\\ud835\\udcb5","zscr":"\\ud835\\udccf","zwj":8205,"zwnj":8204}') \ No newline at end of file diff --git a/lib/entities.json b/lib/entities.json deleted file mode 100644 index 4051cea..0000000 --- a/lib/entities.json +++ /dev/null @@ -1 +0,0 @@ -{"Aacute":193,"aacute":225,"Abreve":258,"abreve":259,"ac":8766,"acd":8767,"acE":"\u223e\u0333","Acirc":194,"acirc":226,"acute":180,"Acy":1040,"acy":1072,"AElig":198,"aelig":230,"af":8289,"Afr":"\ud835\udd04","afr":"\ud835\udd1e","Agrave":192,"agrave":224,"alefsym":8501,"aleph":8501,"Alpha":913,"alpha":945,"Amacr":256,"amacr":257,"amalg":10815,"amp":"&","And":10835,"and":8743,"andand":10837,"andd":10844,"andslope":10840,"andv":10842,"ang":8736,"ange":10660,"angle":8736,"angmsd":8737,"angmsdaa":10664,"angmsdab":10665,"angmsdac":10666,"angmsdad":10667,"angmsdae":10668,"angmsdaf":10669,"angmsdag":10670,"angmsdah":10671,"angrt":8735,"angrtvb":8894,"angrtvbd":10653,"angsph":8738,"angst":197,"angzarr":9084,"Aogon":260,"aogon":261,"Aopf":"\ud835\udd38","aopf":"\ud835\udd52","ap":8776,"apacir":10863,"apE":10864,"ape":8778,"apid":8779,"apos":"'","ApplyFunction":8289,"approx":8776,"approxeq":8778,"Aring":197,"aring":229,"Ascr":"\ud835\udc9c","ascr":"\ud835\udcb6","Assign":8788,"ast":"*","asymp":8776,"asympeq":8781,"Atilde":195,"atilde":227,"Auml":196,"auml":228,"awconint":8755,"awint":10769,"backcong":8780,"backepsilon":1014,"backprime":8245,"backsim":8765,"backsimeq":8909,"Backslash":8726,"Barv":10983,"barvee":8893,"Barwed":8966,"barwed":8965,"barwedge":8965,"bbrk":9141,"bbrktbrk":9142,"bcong":8780,"Bcy":1041,"bcy":1073,"bdquo":8222,"becaus":8757,"because":8757,"bemptyv":10672,"bepsi":1014,"bernou":8492,"Bernoullis":8492,"Beta":914,"beta":946,"beth":8502,"between":8812,"Bfr":"\ud835\udd05","bfr":"\ud835\udd1f","bigcap":8898,"bigcirc":9711,"bigcup":8899,"bigodot":10752,"bigoplus":10753,"bigotimes":10754,"bigsqcup":10758,"bigstar":9733,"bigtriangledown":9661,"bigtriangleup":9651,"biguplus":10756,"bigvee":8897,"bigwedge":8896,"bkarow":10509,"blacklozenge":10731,"blacksquare":9642,"blacktriangle":9652,"blacktriangledown":9662,"blacktriangleleft":9666,"blacktriangleright":9656,"blank":9251,"blk12":9618,"blk14":9617,"blk34":9619,"block":9608,"bne":"=\u20e5","bnequiv":"\u2261\u20e5","bNot":10989,"bnot":8976,"Bopf":"\ud835\udd39","bopf":"\ud835\udd53","bot":8869,"bottom":8869,"bowtie":8904,"boxbox":10697,"boxDL":9559,"boxDl":9558,"boxdL":9557,"boxdl":9488,"boxDR":9556,"boxDr":9555,"boxdR":9554,"boxdr":9484,"boxH":9552,"boxh":9472,"boxHD":9574,"boxHd":9572,"boxhD":9573,"boxhd":9516,"boxHU":9577,"boxHu":9575,"boxhU":9576,"boxhu":9524,"boxminus":8863,"boxplus":8862,"boxtimes":8864,"boxUL":9565,"boxUl":9564,"boxuL":9563,"boxul":9496,"boxUR":9562,"boxUr":9561,"boxuR":9560,"boxur":9492,"boxV":9553,"boxv":9474,"boxVH":9580,"boxVh":9579,"boxvH":9578,"boxvh":9532,"boxVL":9571,"boxVl":9570,"boxvL":9569,"boxvl":9508,"boxVR":9568,"boxVr":9567,"boxvR":9566,"boxvr":9500,"bprime":8245,"breve":728,"brvbar":166,"Bscr":8492,"bscr":"\ud835\udcb7","bsemi":8271,"bsim":8765,"bsime":8909,"bsol":"\\","bsolb":10693,"bsolhsub":10184,"bull":8226,"bullet":8226,"bump":8782,"bumpE":10926,"bumpe":8783,"Bumpeq":8782,"bumpeq":8783,"Cacute":262,"cacute":263,"Cap":8914,"cap":8745,"capand":10820,"capbrcup":10825,"capcap":10827,"capcup":10823,"capdot":10816,"CapitalDifferentialD":8517,"caps":"\u2229\ufe00","caret":8257,"caron":711,"Cayleys":8493,"ccaps":10829,"Ccaron":268,"ccaron":269,"Ccedil":199,"ccedil":231,"Ccirc":264,"ccirc":265,"Cconint":8752,"ccups":10828,"ccupssm":10832,"Cdot":266,"cdot":267,"cedil":184,"Cedilla":184,"cemptyv":10674,"cent":162,"centerdot":183,"Cfr":8493,"cfr":"\ud835\udd20","CHcy":1063,"chcy":1095,"check":10003,"checkmark":10003,"Chi":935,"chi":967,"cir":9675,"circ":710,"circeq":8791,"circlearrowleft":8634,"circlearrowright":8635,"circledast":8859,"circledcirc":8858,"circleddash":8861,"CircleDot":8857,"circledR":174,"circledS":9416,"CircleMinus":8854,"CirclePlus":8853,"CircleTimes":8855,"cirE":10691,"cire":8791,"cirfnint":10768,"cirmid":10991,"cirscir":10690,"ClockwiseContourIntegral":8754,"CloseCurlyDoubleQuote":8221,"CloseCurlyQuote":8217,"clubs":9827,"clubsuit":9827,"Colon":8759,"colon":":","Colone":10868,"colone":8788,"coloneq":8788,"comma":",","commat":"@","comp":8705,"compfn":8728,"complement":8705,"complexes":8450,"cong":8773,"congdot":10861,"Congruent":8801,"Conint":8751,"conint":8750,"ContourIntegral":8750,"Copf":8450,"copf":"\ud835\udd54","coprod":8720,"Coproduct":8720,"copy":169,"copysr":8471,"CounterClockwiseContourIntegral":8755,"crarr":8629,"Cross":10799,"cross":10007,"Cscr":"\ud835\udc9e","cscr":"\ud835\udcb8","csub":10959,"csube":10961,"csup":10960,"csupe":10962,"ctdot":8943,"cudarrl":10552,"cudarrr":10549,"cuepr":8926,"cuesc":8927,"cularr":8630,"cularrp":10557,"Cup":8915,"cup":8746,"cupbrcap":10824,"CupCap":8781,"cupcap":10822,"cupcup":10826,"cupdot":8845,"cupor":10821,"cups":"\u222a\ufe00","curarr":8631,"curarrm":10556,"curlyeqprec":8926,"curlyeqsucc":8927,"curlyvee":8910,"curlywedge":8911,"curren":164,"curvearrowleft":8630,"curvearrowright":8631,"cuvee":8910,"cuwed":8911,"cwconint":8754,"cwint":8753,"cylcty":9005,"Dagger":8225,"dagger":8224,"daleth":8504,"Darr":8609,"dArr":8659,"darr":8595,"dash":8208,"Dashv":10980,"dashv":8867,"dbkarow":10511,"dblac":733,"Dcaron":270,"dcaron":271,"Dcy":1044,"dcy":1076,"DD":8517,"dd":8518,"ddagger":8225,"ddarr":8650,"DDotrahd":10513,"ddotseq":10871,"deg":176,"Del":8711,"Delta":916,"delta":948,"demptyv":10673,"dfisht":10623,"Dfr":"\ud835\udd07","dfr":"\ud835\udd21","dHar":10597,"dharl":8643,"dharr":8642,"DiacriticalAcute":180,"DiacriticalDot":729,"DiacriticalDoubleAcute":733,"DiacriticalGrave":"`","DiacriticalTilde":732,"diam":8900,"diamond":8900,"diamondsuit":9830,"diams":9830,"die":168,"DifferentialD":8518,"digamma":989,"disin":8946,"div":247,"divide":247,"divideontimes":8903,"divonx":8903,"DJcy":1026,"djcy":1106,"dlcorn":8990,"dlcrop":8973,"dollar":"$","Dopf":"\ud835\udd3b","dopf":"\ud835\udd55","Dot":168,"dot":729,"DotDot":8412,"doteq":8784,"doteqdot":8785,"DotEqual":8784,"dotminus":8760,"dotplus":8724,"dotsquare":8865,"doublebarwedge":8966,"DoubleContourIntegral":8751,"DoubleDot":168,"DoubleDownArrow":8659,"DoubleLeftArrow":8656,"DoubleLeftRightArrow":8660,"DoubleLeftTee":10980,"DoubleLongLeftArrow":10232,"DoubleLongLeftRightArrow":10234,"DoubleLongRightArrow":10233,"DoubleRightArrow":8658,"DoubleRightTee":8872,"DoubleUpArrow":8657,"DoubleUpDownArrow":8661,"DoubleVerticalBar":8741,"Downarrow":8659,"downarrow":8595,"DownArrowBar":10515,"DownArrowUpArrow":8693,"DownBreve":785,"downdownarrows":8650,"downharpoonleft":8643,"downharpoonright":8642,"DownLeftRightVector":10576,"DownLeftTeeVector":10590,"DownLeftVector":8637,"DownLeftVectorBar":10582,"DownRightTeeVector":10591,"DownRightVector":8641,"DownRightVectorBar":10583,"DownTee":8868,"DownTeeArrow":8615,"drbkarow":10512,"drcorn":8991,"drcrop":8972,"Dscr":"\ud835\udc9f","dscr":"\ud835\udcb9","DScy":1029,"dscy":1109,"dsol":10742,"Dstrok":272,"dstrok":273,"dtdot":8945,"dtri":9663,"dtrif":9662,"duarr":8693,"duhar":10607,"dwangle":10662,"DZcy":1039,"dzcy":1119,"dzigrarr":10239,"Eacute":201,"eacute":233,"easter":10862,"Ecaron":282,"ecaron":283,"ecir":8790,"Ecirc":202,"ecirc":234,"ecolon":8789,"Ecy":1069,"ecy":1101,"eDDot":10871,"Edot":278,"eDot":8785,"edot":279,"ee":8519,"efDot":8786,"Efr":"\ud835\udd08","efr":"\ud835\udd22","eg":10906,"Egrave":200,"egrave":232,"egs":10902,"egsdot":10904,"el":10905,"Element":8712,"elinters":9191,"ell":8467,"els":10901,"elsdot":10903,"Emacr":274,"emacr":275,"empty":8709,"emptyset":8709,"EmptySmallSquare":9723,"emptyv":8709,"EmptyVerySmallSquare":9643,"emsp":8195,"emsp13":8196,"emsp14":8197,"ENG":330,"eng":331,"ensp":8194,"Eogon":280,"eogon":281,"Eopf":"\ud835\udd3c","eopf":"\ud835\udd56","epar":8917,"eparsl":10723,"eplus":10865,"epsi":949,"Epsilon":917,"epsilon":949,"epsiv":1013,"eqcirc":8790,"eqcolon":8789,"eqsim":8770,"eqslantgtr":10902,"eqslantless":10901,"Equal":10869,"equals":"=","EqualTilde":8770,"equest":8799,"Equilibrium":8652,"equiv":8801,"equivDD":10872,"eqvparsl":10725,"erarr":10609,"erDot":8787,"Escr":8496,"escr":8495,"esdot":8784,"Esim":10867,"esim":8770,"Eta":919,"eta":951,"ETH":208,"eth":240,"Euml":203,"euml":235,"euro":8364,"excl":"!","exist":8707,"Exists":8707,"expectation":8496,"exponentiale":8519,"fallingdotseq":8786,"Fcy":1060,"fcy":1092,"female":9792,"ffilig":64259,"fflig":64256,"ffllig":64260,"Ffr":"\ud835\udd09","ffr":"\ud835\udd23","filig":64257,"FilledSmallSquare":9724,"FilledVerySmallSquare":9642,"fjlig":"fj","flat":9837,"fllig":64258,"fltns":9649,"fnof":402,"Fopf":"\ud835\udd3d","fopf":"\ud835\udd57","forall":8704,"fork":8916,"forkv":10969,"Fouriertrf":8497,"fpartint":10765,"frac12":189,"frac13":8531,"frac14":188,"frac15":8533,"frac16":8537,"frac18":8539,"frac23":8532,"frac25":8534,"frac34":190,"frac35":8535,"frac38":8540,"frac45":8536,"frac56":8538,"frac58":8541,"frac78":8542,"frasl":8260,"frown":8994,"Fscr":8497,"fscr":"\ud835\udcbb","gacute":501,"Gamma":915,"gamma":947,"Gammad":988,"gammad":989,"gap":10886,"Gbreve":286,"gbreve":287,"Gcedil":290,"Gcirc":284,"gcirc":285,"Gcy":1043,"gcy":1075,"Gdot":288,"gdot":289,"gE":8807,"ge":8805,"gEl":10892,"gel":8923,"geq":8805,"geqq":8807,"geqslant":10878,"ges":10878,"gescc":10921,"gesdot":10880,"gesdoto":10882,"gesdotol":10884,"gesl":"\u22db\ufe00","gesles":10900,"Gfr":"\ud835\udd0a","gfr":"\ud835\udd24","Gg":8921,"gg":8811,"ggg":8921,"gimel":8503,"GJcy":1027,"gjcy":1107,"gl":8823,"gla":10917,"glE":10898,"glj":10916,"gnap":10890,"gnapprox":10890,"gnE":8809,"gne":10888,"gneq":10888,"gneqq":8809,"gnsim":8935,"Gopf":"\ud835\udd3e","gopf":"\ud835\udd58","grave":"`","GreaterEqual":8805,"GreaterEqualLess":8923,"GreaterFullEqual":8807,"GreaterGreater":10914,"GreaterLess":8823,"GreaterSlantEqual":10878,"GreaterTilde":8819,"Gscr":"\ud835\udca2","gscr":8458,"gsim":8819,"gsime":10894,"gsiml":10896,"Gt":8811,"gt":">","gtcc":10919,"gtcir":10874,"gtdot":8919,"gtlPar":10645,"gtquest":10876,"gtrapprox":10886,"gtrarr":10616,"gtrdot":8919,"gtreqless":8923,"gtreqqless":10892,"gtrless":8823,"gtrsim":8819,"gvertneqq":"\u2269\ufe00","gvnE":"\u2269\ufe00","Hacek":711,"hairsp":8202,"half":189,"hamilt":8459,"HARDcy":1066,"hardcy":1098,"hArr":8660,"harr":8596,"harrcir":10568,"harrw":8621,"Hat":"^","hbar":8463,"Hcirc":292,"hcirc":293,"hearts":9829,"heartsuit":9829,"hellip":8230,"hercon":8889,"Hfr":8460,"hfr":"\ud835\udd25","HilbertSpace":8459,"hksearow":10533,"hkswarow":10534,"hoarr":8703,"homtht":8763,"hookleftarrow":8617,"hookrightarrow":8618,"Hopf":8461,"hopf":"\ud835\udd59","horbar":8213,"HorizontalLine":9472,"Hscr":8459,"hscr":"\ud835\udcbd","hslash":8463,"Hstrok":294,"hstrok":295,"HumpDownHump":8782,"HumpEqual":8783,"hybull":8259,"hyphen":8208,"Iacute":205,"iacute":237,"ic":8291,"Icirc":206,"icirc":238,"Icy":1048,"icy":1080,"Idot":304,"IEcy":1045,"iecy":1077,"iexcl":161,"iff":8660,"Ifr":8465,"ifr":"\ud835\udd26","Igrave":204,"igrave":236,"ii":8520,"iiiint":10764,"iiint":8749,"iinfin":10716,"iiota":8489,"IJlig":306,"ijlig":307,"Im":8465,"Imacr":298,"imacr":299,"image":8465,"ImaginaryI":8520,"imagline":8464,"imagpart":8465,"imath":305,"imof":8887,"imped":437,"Implies":8658,"in":8712,"incare":8453,"infin":8734,"infintie":10717,"inodot":305,"Int":8748,"int":8747,"intcal":8890,"integers":8484,"Integral":8747,"intercal":8890,"Intersection":8898,"intlarhk":10775,"intprod":10812,"InvisibleComma":8291,"InvisibleTimes":8290,"IOcy":1025,"iocy":1105,"Iogon":302,"iogon":303,"Iopf":"\ud835\udd40","iopf":"\ud835\udd5a","Iota":921,"iota":953,"iprod":10812,"iquest":191,"Iscr":8464,"iscr":"\ud835\udcbe","isin":8712,"isindot":8949,"isinE":8953,"isins":8948,"isinsv":8947,"isinv":8712,"it":8290,"Itilde":296,"itilde":297,"Iukcy":1030,"iukcy":1110,"Iuml":207,"iuml":239,"Jcirc":308,"jcirc":309,"Jcy":1049,"jcy":1081,"Jfr":"\ud835\udd0d","jfr":"\ud835\udd27","jmath":567,"Jopf":"\ud835\udd41","jopf":"\ud835\udd5b","Jscr":"\ud835\udca5","jscr":"\ud835\udcbf","Jsercy":1032,"jsercy":1112,"Jukcy":1028,"jukcy":1108,"Kappa":922,"kappa":954,"kappav":1008,"Kcedil":310,"kcedil":311,"Kcy":1050,"kcy":1082,"Kfr":"\ud835\udd0e","kfr":"\ud835\udd28","kgreen":312,"KHcy":1061,"khcy":1093,"KJcy":1036,"kjcy":1116,"Kopf":"\ud835\udd42","kopf":"\ud835\udd5c","Kscr":"\ud835\udca6","kscr":"\ud835\udcc0","lAarr":8666,"Lacute":313,"lacute":314,"laemptyv":10676,"lagran":8466,"Lambda":923,"lambda":955,"Lang":10218,"lang":10216,"langd":10641,"langle":10216,"lap":10885,"Laplacetrf":8466,"laquo":171,"Larr":8606,"lArr":8656,"larr":8592,"larrb":8676,"larrbfs":10527,"larrfs":10525,"larrhk":8617,"larrlp":8619,"larrpl":10553,"larrsim":10611,"larrtl":8610,"lat":10923,"lAtail":10523,"latail":10521,"late":10925,"lates":"\u2aad\ufe00","lBarr":10510,"lbarr":10508,"lbbrk":10098,"lbrace":"{","lbrack":"[","lbrke":10635,"lbrksld":10639,"lbrkslu":10637,"Lcaron":317,"lcaron":318,"Lcedil":315,"lcedil":316,"lceil":8968,"lcub":"{","Lcy":1051,"lcy":1083,"ldca":10550,"ldquo":8220,"ldquor":8222,"ldrdhar":10599,"ldrushar":10571,"ldsh":8626,"lE":8806,"le":8804,"LeftAngleBracket":10216,"Leftarrow":8656,"leftarrow":8592,"LeftArrowBar":8676,"LeftArrowRightArrow":8646,"leftarrowtail":8610,"LeftCeiling":8968,"LeftDoubleBracket":10214,"LeftDownTeeVector":10593,"LeftDownVector":8643,"LeftDownVectorBar":10585,"LeftFloor":8970,"leftharpoondown":8637,"leftharpoonup":8636,"leftleftarrows":8647,"Leftrightarrow":8660,"leftrightarrow":8596,"leftrightarrows":8646,"leftrightharpoons":8651,"leftrightsquigarrow":8621,"LeftRightVector":10574,"LeftTee":8867,"LeftTeeArrow":8612,"LeftTeeVector":10586,"leftthreetimes":8907,"LeftTriangle":8882,"LeftTriangleBar":10703,"LeftTriangleEqual":8884,"LeftUpDownVector":10577,"LeftUpTeeVector":10592,"LeftUpVector":8639,"LeftUpVectorBar":10584,"LeftVector":8636,"LeftVectorBar":10578,"lEg":10891,"leg":8922,"leq":8804,"leqq":8806,"leqslant":10877,"les":10877,"lescc":10920,"lesdot":10879,"lesdoto":10881,"lesdotor":10883,"lesg":"\u22da\ufe00","lesges":10899,"lessapprox":10885,"lessdot":8918,"lesseqgtr":8922,"lesseqqgtr":10891,"LessEqualGreater":8922,"LessFullEqual":8806,"LessGreater":8822,"lessgtr":8822,"LessLess":10913,"lesssim":8818,"LessSlantEqual":10877,"LessTilde":8818,"lfisht":10620,"lfloor":8970,"Lfr":"\ud835\udd0f","lfr":"\ud835\udd29","lg":8822,"lgE":10897,"lHar":10594,"lhard":8637,"lharu":8636,"lharul":10602,"lhblk":9604,"LJcy":1033,"ljcy":1113,"Ll":8920,"ll":8810,"llarr":8647,"llcorner":8990,"Lleftarrow":8666,"llhard":10603,"lltri":9722,"Lmidot":319,"lmidot":320,"lmoust":9136,"lmoustache":9136,"lnap":10889,"lnapprox":10889,"lnE":8808,"lne":10887,"lneq":10887,"lneqq":8808,"lnsim":8934,"loang":10220,"loarr":8701,"lobrk":10214,"Longleftarrow":10232,"longleftarrow":10229,"Longleftrightarrow":10234,"longleftrightarrow":10231,"longmapsto":10236,"Longrightarrow":10233,"longrightarrow":10230,"looparrowleft":8619,"looparrowright":8620,"lopar":10629,"Lopf":"\ud835\udd43","lopf":"\ud835\udd5d","loplus":10797,"lotimes":10804,"lowast":8727,"lowbar":"_","LowerLeftArrow":8601,"LowerRightArrow":8600,"loz":9674,"lozenge":9674,"lozf":10731,"lpar":"(","lparlt":10643,"lrarr":8646,"lrcorner":8991,"lrhar":8651,"lrhard":10605,"lrm":8206,"lrtri":8895,"lsaquo":8249,"Lscr":8466,"lscr":"\ud835\udcc1","lsh":8624,"lsim":8818,"lsime":10893,"lsimg":10895,"lsqb":"[","lsquo":8216,"lsquor":8218,"Lstrok":321,"lstrok":322,"Lt":8810,"lt":"<","ltcc":10918,"ltcir":10873,"ltdot":8918,"lthree":8907,"ltimes":8905,"ltlarr":10614,"ltquest":10875,"ltri":9667,"ltrie":8884,"ltrif":9666,"ltrPar":10646,"lurdshar":10570,"luruhar":10598,"lvertneqq":"\u2268\ufe00","lvnE":"\u2268\ufe00","macr":175,"male":9794,"malt":10016,"maltese":10016,"Map":10501,"map":8614,"mapsto":8614,"mapstodown":8615,"mapstoleft":8612,"mapstoup":8613,"marker":9646,"mcomma":10793,"Mcy":1052,"mcy":1084,"mdash":8212,"mDDot":8762,"measuredangle":8737,"MediumSpace":8287,"Mellintrf":8499,"Mfr":"\ud835\udd10","mfr":"\ud835\udd2a","mho":8487,"micro":181,"mid":8739,"midast":"*","midcir":10992,"middot":183,"minus":8722,"minusb":8863,"minusd":8760,"minusdu":10794,"MinusPlus":8723,"mlcp":10971,"mldr":8230,"mnplus":8723,"models":8871,"Mopf":"\ud835\udd44","mopf":"\ud835\udd5e","mp":8723,"Mscr":8499,"mscr":"\ud835\udcc2","mstpos":8766,"Mu":924,"mu":956,"multimap":8888,"mumap":8888,"nabla":8711,"Nacute":323,"nacute":324,"nang":"\u2220\u20d2","nap":8777,"napE":"\u2a70\u0338","napid":"\u224b\u0338","napos":329,"napprox":8777,"natur":9838,"natural":9838,"naturals":8469,"nbsp":160,"nbump":"\u224e\u0338","nbumpe":"\u224f\u0338","ncap":10819,"Ncaron":327,"ncaron":328,"Ncedil":325,"ncedil":326,"ncong":8775,"ncongdot":"\u2a6d\u0338","ncup":10818,"Ncy":1053,"ncy":1085,"ndash":8211,"ne":8800,"nearhk":10532,"neArr":8663,"nearr":8599,"nearrow":8599,"nedot":"\u2250\u0338","NegativeMediumSpace":8203,"NegativeThickSpace":8203,"NegativeThinSpace":8203,"NegativeVeryThinSpace":8203,"nequiv":8802,"nesear":10536,"nesim":"\u2242\u0338","NestedGreaterGreater":8811,"NestedLessLess":8810,"NewLine":"\n","nexist":8708,"nexists":8708,"Nfr":"\ud835\udd11","nfr":"\ud835\udd2b","ngE":"\u2267\u0338","nge":8817,"ngeq":8817,"ngeqq":"\u2267\u0338","ngeqslant":"\u2a7e\u0338","nges":"\u2a7e\u0338","nGg":"\u22d9\u0338","ngsim":8821,"nGt":"\u226b\u20d2","ngt":8815,"ngtr":8815,"nGtv":"\u226b\u0338","nhArr":8654,"nharr":8622,"nhpar":10994,"ni":8715,"nis":8956,"nisd":8954,"niv":8715,"NJcy":1034,"njcy":1114,"nlArr":8653,"nlarr":8602,"nldr":8229,"nlE":"\u2266\u0338","nle":8816,"nLeftarrow":8653,"nleftarrow":8602,"nLeftrightarrow":8654,"nleftrightarrow":8622,"nleq":8816,"nleqq":"\u2266\u0338","nleqslant":"\u2a7d\u0338","nles":"\u2a7d\u0338","nless":8814,"nLl":"\u22d8\u0338","nlsim":8820,"nLt":"\u226a\u20d2","nlt":8814,"nltri":8938,"nltrie":8940,"nLtv":"\u226a\u0338","nmid":8740,"NoBreak":8288,"NonBreakingSpace":160,"Nopf":8469,"nopf":"\ud835\udd5f","not":172,"Not":10988,"NotCongruent":8802,"NotCupCap":8813,"NotDoubleVerticalBar":8742,"NotElement":8713,"NotEqual":8800,"NotEqualTilde":"\u2242\u0338","NotExists":8708,"NotGreater":8815,"NotGreaterEqual":8817,"NotGreaterFullEqual":"\u2267\u0338","NotGreaterGreater":"\u226b\u0338","NotGreaterLess":8825,"NotGreaterSlantEqual":"\u2a7e\u0338","NotGreaterTilde":8821,"NotHumpDownHump":"\u224e\u0338","NotHumpEqual":"\u224f\u0338","notin":8713,"notindot":"\u22f5\u0338","notinE":"\u22f9\u0338","notinva":8713,"notinvb":8951,"notinvc":8950,"NotLeftTriangle":8938,"NotLeftTriangleBar":"\u29cf\u0338","NotLeftTriangleEqual":8940,"NotLess":8814,"NotLessEqual":8816,"NotLessGreater":8824,"NotLessLess":"\u226a\u0338","NotLessSlantEqual":"\u2a7d\u0338","NotLessTilde":8820,"NotNestedGreaterGreater":"\u2aa2\u0338","NotNestedLessLess":"\u2aa1\u0338","notni":8716,"notniva":8716,"notnivb":8958,"notnivc":8957,"NotPrecedes":8832,"NotPrecedesEqual":"\u2aaf\u0338","NotPrecedesSlantEqual":8928,"NotReverseElement":8716,"NotRightTriangle":8939,"NotRightTriangleBar":"\u29d0\u0338","NotRightTriangleEqual":8941,"NotSquareSubset":"\u228f\u0338","NotSquareSubsetEqual":8930,"NotSquareSuperset":"\u2290\u0338","NotSquareSupersetEqual":8931,"NotSubset":"\u2282\u20d2","NotSubsetEqual":8840,"NotSucceeds":8833,"NotSucceedsEqual":"\u2ab0\u0338","NotSucceedsSlantEqual":8929,"NotSucceedsTilde":"\u227f\u0338","NotSuperset":"\u2283\u20d2","NotSupersetEqual":8841,"NotTilde":8769,"NotTildeEqual":8772,"NotTildeFullEqual":8775,"NotTildeTilde":8777,"NotVerticalBar":8740,"npar":8742,"nparallel":8742,"nparsl":"\u2afd\u20e5","npart":"\u2202\u0338","npolint":10772,"npr":8832,"nprcue":8928,"npre":"\u2aaf\u0338","nprec":8832,"npreceq":"\u2aaf\u0338","nrArr":8655,"nrarr":8603,"nrarrc":"\u2933\u0338","nrarrw":"\u219d\u0338","nRightarrow":8655,"nrightarrow":8603,"nrtri":8939,"nrtrie":8941,"nsc":8833,"nsccue":8929,"nsce":"\u2ab0\u0338","Nscr":"\ud835\udca9","nscr":"\ud835\udcc3","nshortmid":8740,"nshortparallel":8742,"nsim":8769,"nsime":8772,"nsimeq":8772,"nsmid":8740,"nspar":8742,"nsqsube":8930,"nsqsupe":8931,"nsub":8836,"nsubE":"\u2ac5\u0338","nsube":8840,"nsubset":"\u2282\u20d2","nsubseteq":8840,"nsubseteqq":"\u2ac5\u0338","nsucc":8833,"nsucceq":"\u2ab0\u0338","nsup":8837,"nsupE":"\u2ac6\u0338","nsupe":8841,"nsupset":"\u2283\u20d2","nsupseteq":8841,"nsupseteqq":"\u2ac6\u0338","ntgl":8825,"Ntilde":209,"ntilde":241,"ntlg":8824,"ntriangleleft":8938,"ntrianglelefteq":8940,"ntriangleright":8939,"ntrianglerighteq":8941,"Nu":925,"nu":957,"num":"#","numero":8470,"numsp":8199,"nvap":"\u224d\u20d2","nVDash":8879,"nVdash":8878,"nvDash":8877,"nvdash":8876,"nvge":"\u2265\u20d2","nvgt":">\u20d2","nvHarr":10500,"nvinfin":10718,"nvlArr":10498,"nvle":"\u2264\u20d2","nvlt":"<\u20d2","nvltrie":"\u22b4\u20d2","nvrArr":10499,"nvrtrie":"\u22b5\u20d2","nvsim":"\u223c\u20d2","nwarhk":10531,"nwArr":8662,"nwarr":8598,"nwarrow":8598,"nwnear":10535,"Oacute":211,"oacute":243,"oast":8859,"ocir":8858,"Ocirc":212,"ocirc":244,"Ocy":1054,"ocy":1086,"odash":8861,"Odblac":336,"odblac":337,"odiv":10808,"odot":8857,"odsold":10684,"OElig":338,"oelig":339,"ofcir":10687,"Ofr":"\ud835\udd12","ofr":"\ud835\udd2c","ogon":731,"Ograve":210,"ograve":242,"ogt":10689,"ohbar":10677,"ohm":937,"oint":8750,"olarr":8634,"olcir":10686,"olcross":10683,"oline":8254,"olt":10688,"Omacr":332,"omacr":333,"Omega":937,"omega":969,"Omicron":927,"omicron":959,"omid":10678,"ominus":8854,"Oopf":"\ud835\udd46","oopf":"\ud835\udd60","opar":10679,"OpenCurlyDoubleQuote":8220,"OpenCurlyQuote":8216,"operp":10681,"oplus":8853,"Or":10836,"or":8744,"orarr":8635,"ord":10845,"order":8500,"orderof":8500,"ordf":170,"ordm":186,"origof":8886,"oror":10838,"orslope":10839,"orv":10843,"oS":9416,"Oscr":"\ud835\udcaa","oscr":8500,"Oslash":216,"oslash":248,"osol":8856,"Otilde":213,"otilde":245,"Otimes":10807,"otimes":8855,"otimesas":10806,"Ouml":214,"ouml":246,"ovbar":9021,"OverBar":8254,"OverBrace":9182,"OverBracket":9140,"OverParenthesis":9180,"par":8741,"para":182,"parallel":8741,"parsim":10995,"parsl":11005,"part":8706,"PartialD":8706,"Pcy":1055,"pcy":1087,"percnt":"%","period":".","permil":8240,"perp":8869,"pertenk":8241,"Pfr":"\ud835\udd13","pfr":"\ud835\udd2d","Phi":934,"phi":966,"phiv":981,"phmmat":8499,"phone":9742,"Pi":928,"pi":960,"pitchfork":8916,"piv":982,"planck":8463,"planckh":8462,"plankv":8463,"plus":"+","plusacir":10787,"plusb":8862,"pluscir":10786,"plusdo":8724,"plusdu":10789,"pluse":10866,"PlusMinus":177,"plusmn":177,"plussim":10790,"plustwo":10791,"pm":177,"Poincareplane":8460,"pointint":10773,"Popf":8473,"popf":"\ud835\udd61","pound":163,"Pr":10939,"pr":8826,"prap":10935,"prcue":8828,"prE":10931,"pre":10927,"prec":8826,"precapprox":10935,"preccurlyeq":8828,"Precedes":8826,"PrecedesEqual":10927,"PrecedesSlantEqual":8828,"PrecedesTilde":8830,"preceq":10927,"precnapprox":10937,"precneqq":10933,"precnsim":8936,"precsim":8830,"Prime":8243,"prime":8242,"primes":8473,"prnap":10937,"prnE":10933,"prnsim":8936,"prod":8719,"Product":8719,"profalar":9006,"profline":8978,"profsurf":8979,"prop":8733,"Proportion":8759,"Proportional":8733,"propto":8733,"prsim":8830,"prurel":8880,"Pscr":"\ud835\udcab","pscr":"\ud835\udcc5","Psi":936,"psi":968,"puncsp":8200,"Qfr":"\ud835\udd14","qfr":"\ud835\udd2e","qint":10764,"Qopf":8474,"qopf":"\ud835\udd62","qprime":8279,"Qscr":"\ud835\udcac","qscr":"\ud835\udcc6","quaternions":8461,"quatint":10774,"quest":"?","questeq":8799,"quot":"\"","rAarr":8667,"race":"\u223d\u0331","Racute":340,"racute":341,"radic":8730,"raemptyv":10675,"Rang":10219,"rang":10217,"rangd":10642,"range":10661,"rangle":10217,"raquo":187,"Rarr":8608,"rArr":8658,"rarr":8594,"rarrap":10613,"rarrb":8677,"rarrbfs":10528,"rarrc":10547,"rarrfs":10526,"rarrhk":8618,"rarrlp":8620,"rarrpl":10565,"rarrsim":10612,"Rarrtl":10518,"rarrtl":8611,"rarrw":8605,"rAtail":10524,"ratail":10522,"ratio":8758,"rationals":8474,"RBarr":10512,"rBarr":10511,"rbarr":10509,"rbbrk":10099,"rbrace":"}","rbrack":"]","rbrke":10636,"rbrksld":10638,"rbrkslu":10640,"Rcaron":344,"rcaron":345,"Rcedil":342,"rcedil":343,"rceil":8969,"rcub":"}","Rcy":1056,"rcy":1088,"rdca":10551,"rdldhar":10601,"rdquo":8221,"rdquor":8221,"rdsh":8627,"Re":8476,"real":8476,"realine":8475,"realpart":8476,"reals":8477,"rect":9645,"reg":174,"ReverseElement":8715,"ReverseEquilibrium":8651,"ReverseUpEquilibrium":10607,"rfisht":10621,"rfloor":8971,"Rfr":8476,"rfr":"\ud835\udd2f","rHar":10596,"rhard":8641,"rharu":8640,"rharul":10604,"Rho":929,"rho":961,"rhov":1009,"RightAngleBracket":10217,"Rightarrow":8658,"rightarrow":8594,"RightArrowBar":8677,"RightArrowLeftArrow":8644,"rightarrowtail":8611,"RightCeiling":8969,"RightDoubleBracket":10215,"RightDownTeeVector":10589,"RightDownVector":8642,"RightDownVectorBar":10581,"RightFloor":8971,"rightharpoondown":8641,"rightharpoonup":8640,"rightleftarrows":8644,"rightleftharpoons":8652,"rightrightarrows":8649,"rightsquigarrow":8605,"RightTee":8866,"RightTeeArrow":8614,"RightTeeVector":10587,"rightthreetimes":8908,"RightTriangle":8883,"RightTriangleBar":10704,"RightTriangleEqual":8885,"RightUpDownVector":10575,"RightUpTeeVector":10588,"RightUpVector":8638,"RightUpVectorBar":10580,"RightVector":8640,"RightVectorBar":10579,"ring":730,"risingdotseq":8787,"rlarr":8644,"rlhar":8652,"rlm":8207,"rmoust":9137,"rmoustache":9137,"rnmid":10990,"roang":10221,"roarr":8702,"robrk":10215,"ropar":10630,"Ropf":8477,"ropf":"\ud835\udd63","roplus":10798,"rotimes":10805,"RoundImplies":10608,"rpar":")","rpargt":10644,"rppolint":10770,"rrarr":8649,"Rrightarrow":8667,"rsaquo":8250,"Rscr":8475,"rscr":"\ud835\udcc7","rsh":8625,"rsqb":"]","rsquo":8217,"rsquor":8217,"rthree":8908,"rtimes":8906,"rtri":9657,"rtrie":8885,"rtrif":9656,"rtriltri":10702,"RuleDelayed":10740,"ruluhar":10600,"rx":8478,"Sacute":346,"sacute":347,"sbquo":8218,"Sc":10940,"sc":8827,"scap":10936,"Scaron":352,"scaron":353,"sccue":8829,"scE":10932,"sce":10928,"Scedil":350,"scedil":351,"Scirc":348,"scirc":349,"scnap":10938,"scnE":10934,"scnsim":8937,"scpolint":10771,"scsim":8831,"Scy":1057,"scy":1089,"sdot":8901,"sdotb":8865,"sdote":10854,"searhk":10533,"seArr":8664,"searr":8600,"searrow":8600,"sect":167,"semi":";","seswar":10537,"setminus":8726,"setmn":8726,"sext":10038,"Sfr":"\ud835\udd16","sfr":"\ud835\udd30","sfrown":8994,"sharp":9839,"SHCHcy":1065,"shchcy":1097,"SHcy":1064,"shcy":1096,"ShortDownArrow":8595,"ShortLeftArrow":8592,"shortmid":8739,"shortparallel":8741,"ShortRightArrow":8594,"ShortUpArrow":8593,"shy":173,"Sigma":931,"sigma":963,"sigmaf":962,"sigmav":962,"sim":8764,"simdot":10858,"sime":8771,"simeq":8771,"simg":10910,"simgE":10912,"siml":10909,"simlE":10911,"simne":8774,"simplus":10788,"simrarr":10610,"slarr":8592,"SmallCircle":8728,"smallsetminus":8726,"smashp":10803,"smeparsl":10724,"smid":8739,"smile":8995,"smt":10922,"smte":10924,"smtes":"\u2aac\ufe00","SOFTcy":1068,"softcy":1100,"sol":"/","solb":10692,"solbar":9023,"Sopf":"\ud835\udd4a","sopf":"\ud835\udd64","spades":9824,"spadesuit":9824,"spar":8741,"sqcap":8851,"sqcaps":"\u2293\ufe00","sqcup":8852,"sqcups":"\u2294\ufe00","Sqrt":8730,"sqsub":8847,"sqsube":8849,"sqsubset":8847,"sqsubseteq":8849,"sqsup":8848,"sqsupe":8850,"sqsupset":8848,"sqsupseteq":8850,"squ":9633,"square":9633,"SquareIntersection":8851,"SquareSubset":8847,"SquareSubsetEqual":8849,"SquareSuperset":8848,"SquareSupersetEqual":8850,"SquareUnion":8852,"squarf":9642,"squf":9642,"srarr":8594,"Sscr":"\ud835\udcae","sscr":"\ud835\udcc8","ssetmn":8726,"ssmile":8995,"sstarf":8902,"Star":8902,"star":9734,"starf":9733,"straightepsilon":1013,"straightphi":981,"strns":175,"Sub":8912,"sub":8834,"subdot":10941,"subE":10949,"sube":8838,"subedot":10947,"submult":10945,"subnE":10955,"subne":8842,"subplus":10943,"subrarr":10617,"Subset":8912,"subset":8834,"subseteq":8838,"subseteqq":10949,"SubsetEqual":8838,"subsetneq":8842,"subsetneqq":10955,"subsim":10951,"subsub":10965,"subsup":10963,"succ":8827,"succapprox":10936,"succcurlyeq":8829,"Succeeds":8827,"SucceedsEqual":10928,"SucceedsSlantEqual":8829,"SucceedsTilde":8831,"succeq":10928,"succnapprox":10938,"succneqq":10934,"succnsim":8937,"succsim":8831,"SuchThat":8715,"sum":8721,"sung":9834,"Sup":8913,"sup":8835,"sup1":185,"sup2":178,"sup3":179,"supdot":10942,"supdsub":10968,"supE":10950,"supe":8839,"supedot":10948,"Superset":8835,"SupersetEqual":8839,"suphsol":10185,"suphsub":10967,"suplarr":10619,"supmult":10946,"supnE":10956,"supne":8843,"supplus":10944,"Supset":8913,"supset":8835,"supseteq":8839,"supseteqq":10950,"supsetneq":8843,"supsetneqq":10956,"supsim":10952,"supsub":10964,"supsup":10966,"swarhk":10534,"swArr":8665,"swarr":8601,"swarrow":8601,"swnwar":10538,"szlig":223,"Tab":"\t","target":8982,"Tau":932,"tau":964,"tbrk":9140,"Tcaron":356,"tcaron":357,"Tcedil":354,"tcedil":355,"Tcy":1058,"tcy":1090,"tdot":8411,"telrec":8981,"Tfr":"\ud835\udd17","tfr":"\ud835\udd31","there4":8756,"therefore":8756,"Theta":920,"theta":952,"thetasym":977,"thetav":977,"thickapprox":8776,"thicksim":8764,"ThickSpace":"\u205f\u200a","thinsp":8201,"ThinSpace":8201,"thkap":8776,"thksim":8764,"THORN":222,"thorn":254,"Tilde":8764,"tilde":732,"TildeEqual":8771,"TildeFullEqual":8773,"TildeTilde":8776,"times":215,"timesb":8864,"timesbar":10801,"timesd":10800,"tint":8749,"toea":10536,"top":8868,"topbot":9014,"topcir":10993,"Topf":"\ud835\udd4b","topf":"\ud835\udd65","topfork":10970,"tosa":10537,"tprime":8244,"trade":8482,"triangle":9653,"triangledown":9663,"triangleleft":9667,"trianglelefteq":8884,"triangleq":8796,"triangleright":9657,"trianglerighteq":8885,"tridot":9708,"trie":8796,"triminus":10810,"TripleDot":8411,"triplus":10809,"trisb":10701,"tritime":10811,"trpezium":9186,"Tscr":"\ud835\udcaf","tscr":"\ud835\udcc9","TScy":1062,"tscy":1094,"TSHcy":1035,"tshcy":1115,"Tstrok":358,"tstrok":359,"twixt":8812,"twoheadleftarrow":8606,"twoheadrightarrow":8608,"Uacute":218,"uacute":250,"Uarr":8607,"uArr":8657,"uarr":8593,"Uarrocir":10569,"Ubrcy":1038,"ubrcy":1118,"Ubreve":364,"ubreve":365,"Ucirc":219,"ucirc":251,"Ucy":1059,"ucy":1091,"udarr":8645,"Udblac":368,"udblac":369,"udhar":10606,"ufisht":10622,"Ufr":"\ud835\udd18","ufr":"\ud835\udd32","Ugrave":217,"ugrave":249,"uHar":10595,"uharl":8639,"uharr":8638,"uhblk":9600,"ulcorn":8988,"ulcorner":8988,"ulcrop":8975,"ultri":9720,"Umacr":362,"umacr":363,"uml":168,"UnderBar":"_","UnderBrace":9183,"UnderBracket":9141,"UnderParenthesis":9181,"Union":8899,"UnionPlus":8846,"Uogon":370,"uogon":371,"Uopf":"\ud835\udd4c","uopf":"\ud835\udd66","Uparrow":8657,"uparrow":8593,"UpArrowBar":10514,"UpArrowDownArrow":8645,"Updownarrow":8661,"updownarrow":8597,"UpEquilibrium":10606,"upharpoonleft":8639,"upharpoonright":8638,"uplus":8846,"UpperLeftArrow":8598,"UpperRightArrow":8599,"Upsi":978,"upsi":965,"upsih":978,"Upsilon":933,"upsilon":965,"UpTee":8869,"UpTeeArrow":8613,"upuparrows":8648,"urcorn":8989,"urcorner":8989,"urcrop":8974,"Uring":366,"uring":367,"urtri":9721,"Uscr":"\ud835\udcb0","uscr":"\ud835\udcca","utdot":8944,"Utilde":360,"utilde":361,"utri":9653,"utrif":9652,"uuarr":8648,"Uuml":220,"uuml":252,"uwangle":10663,"vangrt":10652,"varepsilon":1013,"varkappa":1008,"varnothing":8709,"varphi":981,"varpi":982,"varpropto":8733,"vArr":8661,"varr":8597,"varrho":1009,"varsigma":962,"varsubsetneq":"\u228a\ufe00","varsubsetneqq":"\u2acb\ufe00","varsupsetneq":"\u228b\ufe00","varsupsetneqq":"\u2acc\ufe00","vartheta":977,"vartriangleleft":8882,"vartriangleright":8883,"Vbar":10987,"vBar":10984,"vBarv":10985,"Vcy":1042,"vcy":1074,"VDash":8875,"Vdash":8873,"vDash":8872,"vdash":8866,"Vdashl":10982,"Vee":8897,"vee":8744,"veebar":8891,"veeeq":8794,"vellip":8942,"Verbar":8214,"verbar":"|","Vert":8214,"vert":"|","VerticalBar":8739,"VerticalLine":"|","VerticalSeparator":10072,"VerticalTilde":8768,"VeryThinSpace":8202,"Vfr":"\ud835\udd19","vfr":"\ud835\udd33","vltri":8882,"vnsub":"\u2282\u20d2","vnsup":"\u2283\u20d2","Vopf":"\ud835\udd4d","vopf":"\ud835\udd67","vprop":8733,"vrtri":8883,"Vscr":"\ud835\udcb1","vscr":"\ud835\udccb","vsubnE":"\u2acb\ufe00","vsubne":"\u228a\ufe00","vsupnE":"\u2acc\ufe00","vsupne":"\u228b\ufe00","Vvdash":8874,"vzigzag":10650,"Wcirc":372,"wcirc":373,"wedbar":10847,"Wedge":8896,"wedge":8743,"wedgeq":8793,"weierp":8472,"Wfr":"\ud835\udd1a","wfr":"\ud835\udd34","Wopf":"\ud835\udd4e","wopf":"\ud835\udd68","wp":8472,"wr":8768,"wreath":8768,"Wscr":"\ud835\udcb2","wscr":"\ud835\udccc","xcap":8898,"xcirc":9711,"xcup":8899,"xdtri":9661,"Xfr":"\ud835\udd1b","xfr":"\ud835\udd35","xhArr":10234,"xharr":10231,"Xi":926,"xi":958,"xlArr":10232,"xlarr":10229,"xmap":10236,"xnis":8955,"xodot":10752,"Xopf":"\ud835\udd4f","xopf":"\ud835\udd69","xoplus":10753,"xotime":10754,"xrArr":10233,"xrarr":10230,"Xscr":"\ud835\udcb3","xscr":"\ud835\udccd","xsqcup":10758,"xuplus":10756,"xutri":9651,"xvee":8897,"xwedge":8896,"Yacute":221,"yacute":253,"YAcy":1071,"yacy":1103,"Ycirc":374,"ycirc":375,"Ycy":1067,"ycy":1099,"yen":165,"Yfr":"\ud835\udd1c","yfr":"\ud835\udd36","YIcy":1031,"yicy":1111,"Yopf":"\ud835\udd50","yopf":"\ud835\udd6a","Yscr":"\ud835\udcb4","yscr":"\ud835\udcce","YUcy":1070,"yucy":1102,"yuml":255,"Yuml":376,"Zacute":377,"zacute":378,"Zcaron":381,"zcaron":382,"Zcy":1047,"zcy":1079,"Zdot":379,"zdot":380,"zeetrf":8488,"ZeroWidthSpace":8203,"Zeta":918,"zeta":950,"Zfr":8488,"zfr":"\ud835\udd37","ZHcy":1046,"zhcy":1078,"zigrarr":8669,"Zopf":8484,"zopf":"\ud835\udd6b","Zscr":"\ud835\udcb5","zscr":"\ud835\udccf","zwj":8205,"zwnj":8204} \ No newline at end of file diff --git a/lib/entities.mjs b/lib/entities.mjs deleted file mode 100644 index 64e35dc..0000000 --- a/lib/entities.mjs +++ /dev/null @@ -1 +0,0 @@ -export default JSON.parse('{"Aacute":193,"aacute":225,"Abreve":258,"abreve":259,"ac":8766,"acd":8767,"acE":"\\u223e\\u0333","Acirc":194,"acirc":226,"acute":180,"Acy":1040,"acy":1072,"AElig":198,"aelig":230,"af":8289,"Afr":"\\ud835\\udd04","afr":"\\ud835\\udd1e","Agrave":192,"agrave":224,"alefsym":8501,"aleph":8501,"Alpha":913,"alpha":945,"Amacr":256,"amacr":257,"amalg":10815,"amp":"&","And":10835,"and":8743,"andand":10837,"andd":10844,"andslope":10840,"andv":10842,"ang":8736,"ange":10660,"angle":8736,"angmsd":8737,"angmsdaa":10664,"angmsdab":10665,"angmsdac":10666,"angmsdad":10667,"angmsdae":10668,"angmsdaf":10669,"angmsdag":10670,"angmsdah":10671,"angrt":8735,"angrtvb":8894,"angrtvbd":10653,"angsph":8738,"angst":197,"angzarr":9084,"Aogon":260,"aogon":261,"Aopf":"\\ud835\\udd38","aopf":"\\ud835\\udd52","ap":8776,"apacir":10863,"apE":10864,"ape":8778,"apid":8779,"apos":"\'","ApplyFunction":8289,"approx":8776,"approxeq":8778,"Aring":197,"aring":229,"Ascr":"\\ud835\\udc9c","ascr":"\\ud835\\udcb6","Assign":8788,"ast":"*","asymp":8776,"asympeq":8781,"Atilde":195,"atilde":227,"Auml":196,"auml":228,"awconint":8755,"awint":10769,"backcong":8780,"backepsilon":1014,"backprime":8245,"backsim":8765,"backsimeq":8909,"Backslash":8726,"Barv":10983,"barvee":8893,"Barwed":8966,"barwed":8965,"barwedge":8965,"bbrk":9141,"bbrktbrk":9142,"bcong":8780,"Bcy":1041,"bcy":1073,"bdquo":8222,"becaus":8757,"because":8757,"bemptyv":10672,"bepsi":1014,"bernou":8492,"Bernoullis":8492,"Beta":914,"beta":946,"beth":8502,"between":8812,"Bfr":"\\ud835\\udd05","bfr":"\\ud835\\udd1f","bigcap":8898,"bigcirc":9711,"bigcup":8899,"bigodot":10752,"bigoplus":10753,"bigotimes":10754,"bigsqcup":10758,"bigstar":9733,"bigtriangledown":9661,"bigtriangleup":9651,"biguplus":10756,"bigvee":8897,"bigwedge":8896,"bkarow":10509,"blacklozenge":10731,"blacksquare":9642,"blacktriangle":9652,"blacktriangledown":9662,"blacktriangleleft":9666,"blacktriangleright":9656,"blank":9251,"blk12":9618,"blk14":9617,"blk34":9619,"block":9608,"bne":"=\\u20e5","bnequiv":"\\u2261\\u20e5","bNot":10989,"bnot":8976,"Bopf":"\\ud835\\udd39","bopf":"\\ud835\\udd53","bot":8869,"bottom":8869,"bowtie":8904,"boxbox":10697,"boxDL":9559,"boxDl":9558,"boxdL":9557,"boxdl":9488,"boxDR":9556,"boxDr":9555,"boxdR":9554,"boxdr":9484,"boxH":9552,"boxh":9472,"boxHD":9574,"boxHd":9572,"boxhD":9573,"boxhd":9516,"boxHU":9577,"boxHu":9575,"boxhU":9576,"boxhu":9524,"boxminus":8863,"boxplus":8862,"boxtimes":8864,"boxUL":9565,"boxUl":9564,"boxuL":9563,"boxul":9496,"boxUR":9562,"boxUr":9561,"boxuR":9560,"boxur":9492,"boxV":9553,"boxv":9474,"boxVH":9580,"boxVh":9579,"boxvH":9578,"boxvh":9532,"boxVL":9571,"boxVl":9570,"boxvL":9569,"boxvl":9508,"boxVR":9568,"boxVr":9567,"boxvR":9566,"boxvr":9500,"bprime":8245,"breve":728,"brvbar":166,"Bscr":8492,"bscr":"\\ud835\\udcb7","bsemi":8271,"bsim":8765,"bsime":8909,"bsol":"\\\\","bsolb":10693,"bsolhsub":10184,"bull":8226,"bullet":8226,"bump":8782,"bumpE":10926,"bumpe":8783,"Bumpeq":8782,"bumpeq":8783,"Cacute":262,"cacute":263,"Cap":8914,"cap":8745,"capand":10820,"capbrcup":10825,"capcap":10827,"capcup":10823,"capdot":10816,"CapitalDifferentialD":8517,"caps":"\\u2229\\ufe00","caret":8257,"caron":711,"Cayleys":8493,"ccaps":10829,"Ccaron":268,"ccaron":269,"Ccedil":199,"ccedil":231,"Ccirc":264,"ccirc":265,"Cconint":8752,"ccups":10828,"ccupssm":10832,"Cdot":266,"cdot":267,"cedil":184,"Cedilla":184,"cemptyv":10674,"cent":162,"centerdot":183,"Cfr":8493,"cfr":"\\ud835\\udd20","CHcy":1063,"chcy":1095,"check":10003,"checkmark":10003,"Chi":935,"chi":967,"cir":9675,"circ":710,"circeq":8791,"circlearrowleft":8634,"circlearrowright":8635,"circledast":8859,"circledcirc":8858,"circleddash":8861,"CircleDot":8857,"circledR":174,"circledS":9416,"CircleMinus":8854,"CirclePlus":8853,"CircleTimes":8855,"cirE":10691,"cire":8791,"cirfnint":10768,"cirmid":10991,"cirscir":10690,"ClockwiseContourIntegral":8754,"CloseCurlyDoubleQuote":8221,"CloseCurlyQuote":8217,"clubs":9827,"clubsuit":9827,"Colon":8759,"colon":":","Colone":10868,"colone":8788,"coloneq":8788,"comma":",","commat":"@","comp":8705,"compfn":8728,"complement":8705,"complexes":8450,"cong":8773,"congdot":10861,"Congruent":8801,"Conint":8751,"conint":8750,"ContourIntegral":8750,"Copf":8450,"copf":"\\ud835\\udd54","coprod":8720,"Coproduct":8720,"copy":169,"copysr":8471,"CounterClockwiseContourIntegral":8755,"crarr":8629,"Cross":10799,"cross":10007,"Cscr":"\\ud835\\udc9e","cscr":"\\ud835\\udcb8","csub":10959,"csube":10961,"csup":10960,"csupe":10962,"ctdot":8943,"cudarrl":10552,"cudarrr":10549,"cuepr":8926,"cuesc":8927,"cularr":8630,"cularrp":10557,"Cup":8915,"cup":8746,"cupbrcap":10824,"CupCap":8781,"cupcap":10822,"cupcup":10826,"cupdot":8845,"cupor":10821,"cups":"\\u222a\\ufe00","curarr":8631,"curarrm":10556,"curlyeqprec":8926,"curlyeqsucc":8927,"curlyvee":8910,"curlywedge":8911,"curren":164,"curvearrowleft":8630,"curvearrowright":8631,"cuvee":8910,"cuwed":8911,"cwconint":8754,"cwint":8753,"cylcty":9005,"Dagger":8225,"dagger":8224,"daleth":8504,"Darr":8609,"dArr":8659,"darr":8595,"dash":8208,"Dashv":10980,"dashv":8867,"dbkarow":10511,"dblac":733,"Dcaron":270,"dcaron":271,"Dcy":1044,"dcy":1076,"DD":8517,"dd":8518,"ddagger":8225,"ddarr":8650,"DDotrahd":10513,"ddotseq":10871,"deg":176,"Del":8711,"Delta":916,"delta":948,"demptyv":10673,"dfisht":10623,"Dfr":"\\ud835\\udd07","dfr":"\\ud835\\udd21","dHar":10597,"dharl":8643,"dharr":8642,"DiacriticalAcute":180,"DiacriticalDot":729,"DiacriticalDoubleAcute":733,"DiacriticalGrave":"`","DiacriticalTilde":732,"diam":8900,"diamond":8900,"diamondsuit":9830,"diams":9830,"die":168,"DifferentialD":8518,"digamma":989,"disin":8946,"div":247,"divide":247,"divideontimes":8903,"divonx":8903,"DJcy":1026,"djcy":1106,"dlcorn":8990,"dlcrop":8973,"dollar":"$","Dopf":"\\ud835\\udd3b","dopf":"\\ud835\\udd55","Dot":168,"dot":729,"DotDot":8412,"doteq":8784,"doteqdot":8785,"DotEqual":8784,"dotminus":8760,"dotplus":8724,"dotsquare":8865,"doublebarwedge":8966,"DoubleContourIntegral":8751,"DoubleDot":168,"DoubleDownArrow":8659,"DoubleLeftArrow":8656,"DoubleLeftRightArrow":8660,"DoubleLeftTee":10980,"DoubleLongLeftArrow":10232,"DoubleLongLeftRightArrow":10234,"DoubleLongRightArrow":10233,"DoubleRightArrow":8658,"DoubleRightTee":8872,"DoubleUpArrow":8657,"DoubleUpDownArrow":8661,"DoubleVerticalBar":8741,"Downarrow":8659,"downarrow":8595,"DownArrowBar":10515,"DownArrowUpArrow":8693,"DownBreve":785,"downdownarrows":8650,"downharpoonleft":8643,"downharpoonright":8642,"DownLeftRightVector":10576,"DownLeftTeeVector":10590,"DownLeftVector":8637,"DownLeftVectorBar":10582,"DownRightTeeVector":10591,"DownRightVector":8641,"DownRightVectorBar":10583,"DownTee":8868,"DownTeeArrow":8615,"drbkarow":10512,"drcorn":8991,"drcrop":8972,"Dscr":"\\ud835\\udc9f","dscr":"\\ud835\\udcb9","DScy":1029,"dscy":1109,"dsol":10742,"Dstrok":272,"dstrok":273,"dtdot":8945,"dtri":9663,"dtrif":9662,"duarr":8693,"duhar":10607,"dwangle":10662,"DZcy":1039,"dzcy":1119,"dzigrarr":10239,"Eacute":201,"eacute":233,"easter":10862,"Ecaron":282,"ecaron":283,"ecir":8790,"Ecirc":202,"ecirc":234,"ecolon":8789,"Ecy":1069,"ecy":1101,"eDDot":10871,"Edot":278,"eDot":8785,"edot":279,"ee":8519,"efDot":8786,"Efr":"\\ud835\\udd08","efr":"\\ud835\\udd22","eg":10906,"Egrave":200,"egrave":232,"egs":10902,"egsdot":10904,"el":10905,"Element":8712,"elinters":9191,"ell":8467,"els":10901,"elsdot":10903,"Emacr":274,"emacr":275,"empty":8709,"emptyset":8709,"EmptySmallSquare":9723,"emptyv":8709,"EmptyVerySmallSquare":9643,"emsp":8195,"emsp13":8196,"emsp14":8197,"ENG":330,"eng":331,"ensp":8194,"Eogon":280,"eogon":281,"Eopf":"\\ud835\\udd3c","eopf":"\\ud835\\udd56","epar":8917,"eparsl":10723,"eplus":10865,"epsi":949,"Epsilon":917,"epsilon":949,"epsiv":1013,"eqcirc":8790,"eqcolon":8789,"eqsim":8770,"eqslantgtr":10902,"eqslantless":10901,"Equal":10869,"equals":"=","EqualTilde":8770,"equest":8799,"Equilibrium":8652,"equiv":8801,"equivDD":10872,"eqvparsl":10725,"erarr":10609,"erDot":8787,"Escr":8496,"escr":8495,"esdot":8784,"Esim":10867,"esim":8770,"Eta":919,"eta":951,"ETH":208,"eth":240,"Euml":203,"euml":235,"euro":8364,"excl":"!","exist":8707,"Exists":8707,"expectation":8496,"exponentiale":8519,"fallingdotseq":8786,"Fcy":1060,"fcy":1092,"female":9792,"ffilig":64259,"fflig":64256,"ffllig":64260,"Ffr":"\\ud835\\udd09","ffr":"\\ud835\\udd23","filig":64257,"FilledSmallSquare":9724,"FilledVerySmallSquare":9642,"fjlig":"fj","flat":9837,"fllig":64258,"fltns":9649,"fnof":402,"Fopf":"\\ud835\\udd3d","fopf":"\\ud835\\udd57","forall":8704,"fork":8916,"forkv":10969,"Fouriertrf":8497,"fpartint":10765,"frac12":189,"frac13":8531,"frac14":188,"frac15":8533,"frac16":8537,"frac18":8539,"frac23":8532,"frac25":8534,"frac34":190,"frac35":8535,"frac38":8540,"frac45":8536,"frac56":8538,"frac58":8541,"frac78":8542,"frasl":8260,"frown":8994,"Fscr":8497,"fscr":"\\ud835\\udcbb","gacute":501,"Gamma":915,"gamma":947,"Gammad":988,"gammad":989,"gap":10886,"Gbreve":286,"gbreve":287,"Gcedil":290,"Gcirc":284,"gcirc":285,"Gcy":1043,"gcy":1075,"Gdot":288,"gdot":289,"gE":8807,"ge":8805,"gEl":10892,"gel":8923,"geq":8805,"geqq":8807,"geqslant":10878,"ges":10878,"gescc":10921,"gesdot":10880,"gesdoto":10882,"gesdotol":10884,"gesl":"\\u22db\\ufe00","gesles":10900,"Gfr":"\\ud835\\udd0a","gfr":"\\ud835\\udd24","Gg":8921,"gg":8811,"ggg":8921,"gimel":8503,"GJcy":1027,"gjcy":1107,"gl":8823,"gla":10917,"glE":10898,"glj":10916,"gnap":10890,"gnapprox":10890,"gnE":8809,"gne":10888,"gneq":10888,"gneqq":8809,"gnsim":8935,"Gopf":"\\ud835\\udd3e","gopf":"\\ud835\\udd58","grave":"`","GreaterEqual":8805,"GreaterEqualLess":8923,"GreaterFullEqual":8807,"GreaterGreater":10914,"GreaterLess":8823,"GreaterSlantEqual":10878,"GreaterTilde":8819,"Gscr":"\\ud835\\udca2","gscr":8458,"gsim":8819,"gsime":10894,"gsiml":10896,"Gt":8811,"gt":">","gtcc":10919,"gtcir":10874,"gtdot":8919,"gtlPar":10645,"gtquest":10876,"gtrapprox":10886,"gtrarr":10616,"gtrdot":8919,"gtreqless":8923,"gtreqqless":10892,"gtrless":8823,"gtrsim":8819,"gvertneqq":"\\u2269\\ufe00","gvnE":"\\u2269\\ufe00","Hacek":711,"hairsp":8202,"half":189,"hamilt":8459,"HARDcy":1066,"hardcy":1098,"hArr":8660,"harr":8596,"harrcir":10568,"harrw":8621,"Hat":"^","hbar":8463,"Hcirc":292,"hcirc":293,"hearts":9829,"heartsuit":9829,"hellip":8230,"hercon":8889,"Hfr":8460,"hfr":"\\ud835\\udd25","HilbertSpace":8459,"hksearow":10533,"hkswarow":10534,"hoarr":8703,"homtht":8763,"hookleftarrow":8617,"hookrightarrow":8618,"Hopf":8461,"hopf":"\\ud835\\udd59","horbar":8213,"HorizontalLine":9472,"Hscr":8459,"hscr":"\\ud835\\udcbd","hslash":8463,"Hstrok":294,"hstrok":295,"HumpDownHump":8782,"HumpEqual":8783,"hybull":8259,"hyphen":8208,"Iacute":205,"iacute":237,"ic":8291,"Icirc":206,"icirc":238,"Icy":1048,"icy":1080,"Idot":304,"IEcy":1045,"iecy":1077,"iexcl":161,"iff":8660,"Ifr":8465,"ifr":"\\ud835\\udd26","Igrave":204,"igrave":236,"ii":8520,"iiiint":10764,"iiint":8749,"iinfin":10716,"iiota":8489,"IJlig":306,"ijlig":307,"Im":8465,"Imacr":298,"imacr":299,"image":8465,"ImaginaryI":8520,"imagline":8464,"imagpart":8465,"imath":305,"imof":8887,"imped":437,"Implies":8658,"in":8712,"incare":8453,"infin":8734,"infintie":10717,"inodot":305,"Int":8748,"int":8747,"intcal":8890,"integers":8484,"Integral":8747,"intercal":8890,"Intersection":8898,"intlarhk":10775,"intprod":10812,"InvisibleComma":8291,"InvisibleTimes":8290,"IOcy":1025,"iocy":1105,"Iogon":302,"iogon":303,"Iopf":"\\ud835\\udd40","iopf":"\\ud835\\udd5a","Iota":921,"iota":953,"iprod":10812,"iquest":191,"Iscr":8464,"iscr":"\\ud835\\udcbe","isin":8712,"isindot":8949,"isinE":8953,"isins":8948,"isinsv":8947,"isinv":8712,"it":8290,"Itilde":296,"itilde":297,"Iukcy":1030,"iukcy":1110,"Iuml":207,"iuml":239,"Jcirc":308,"jcirc":309,"Jcy":1049,"jcy":1081,"Jfr":"\\ud835\\udd0d","jfr":"\\ud835\\udd27","jmath":567,"Jopf":"\\ud835\\udd41","jopf":"\\ud835\\udd5b","Jscr":"\\ud835\\udca5","jscr":"\\ud835\\udcbf","Jsercy":1032,"jsercy":1112,"Jukcy":1028,"jukcy":1108,"Kappa":922,"kappa":954,"kappav":1008,"Kcedil":310,"kcedil":311,"Kcy":1050,"kcy":1082,"Kfr":"\\ud835\\udd0e","kfr":"\\ud835\\udd28","kgreen":312,"KHcy":1061,"khcy":1093,"KJcy":1036,"kjcy":1116,"Kopf":"\\ud835\\udd42","kopf":"\\ud835\\udd5c","Kscr":"\\ud835\\udca6","kscr":"\\ud835\\udcc0","lAarr":8666,"Lacute":313,"lacute":314,"laemptyv":10676,"lagran":8466,"Lambda":923,"lambda":955,"Lang":10218,"lang":10216,"langd":10641,"langle":10216,"lap":10885,"Laplacetrf":8466,"laquo":171,"Larr":8606,"lArr":8656,"larr":8592,"larrb":8676,"larrbfs":10527,"larrfs":10525,"larrhk":8617,"larrlp":8619,"larrpl":10553,"larrsim":10611,"larrtl":8610,"lat":10923,"lAtail":10523,"latail":10521,"late":10925,"lates":"\\u2aad\\ufe00","lBarr":10510,"lbarr":10508,"lbbrk":10098,"lbrace":"{","lbrack":"[","lbrke":10635,"lbrksld":10639,"lbrkslu":10637,"Lcaron":317,"lcaron":318,"Lcedil":315,"lcedil":316,"lceil":8968,"lcub":"{","Lcy":1051,"lcy":1083,"ldca":10550,"ldquo":8220,"ldquor":8222,"ldrdhar":10599,"ldrushar":10571,"ldsh":8626,"lE":8806,"le":8804,"LeftAngleBracket":10216,"Leftarrow":8656,"leftarrow":8592,"LeftArrowBar":8676,"LeftArrowRightArrow":8646,"leftarrowtail":8610,"LeftCeiling":8968,"LeftDoubleBracket":10214,"LeftDownTeeVector":10593,"LeftDownVector":8643,"LeftDownVectorBar":10585,"LeftFloor":8970,"leftharpoondown":8637,"leftharpoonup":8636,"leftleftarrows":8647,"Leftrightarrow":8660,"leftrightarrow":8596,"leftrightarrows":8646,"leftrightharpoons":8651,"leftrightsquigarrow":8621,"LeftRightVector":10574,"LeftTee":8867,"LeftTeeArrow":8612,"LeftTeeVector":10586,"leftthreetimes":8907,"LeftTriangle":8882,"LeftTriangleBar":10703,"LeftTriangleEqual":8884,"LeftUpDownVector":10577,"LeftUpTeeVector":10592,"LeftUpVector":8639,"LeftUpVectorBar":10584,"LeftVector":8636,"LeftVectorBar":10578,"lEg":10891,"leg":8922,"leq":8804,"leqq":8806,"leqslant":10877,"les":10877,"lescc":10920,"lesdot":10879,"lesdoto":10881,"lesdotor":10883,"lesg":"\\u22da\\ufe00","lesges":10899,"lessapprox":10885,"lessdot":8918,"lesseqgtr":8922,"lesseqqgtr":10891,"LessEqualGreater":8922,"LessFullEqual":8806,"LessGreater":8822,"lessgtr":8822,"LessLess":10913,"lesssim":8818,"LessSlantEqual":10877,"LessTilde":8818,"lfisht":10620,"lfloor":8970,"Lfr":"\\ud835\\udd0f","lfr":"\\ud835\\udd29","lg":8822,"lgE":10897,"lHar":10594,"lhard":8637,"lharu":8636,"lharul":10602,"lhblk":9604,"LJcy":1033,"ljcy":1113,"Ll":8920,"ll":8810,"llarr":8647,"llcorner":8990,"Lleftarrow":8666,"llhard":10603,"lltri":9722,"Lmidot":319,"lmidot":320,"lmoust":9136,"lmoustache":9136,"lnap":10889,"lnapprox":10889,"lnE":8808,"lne":10887,"lneq":10887,"lneqq":8808,"lnsim":8934,"loang":10220,"loarr":8701,"lobrk":10214,"Longleftarrow":10232,"longleftarrow":10229,"Longleftrightarrow":10234,"longleftrightarrow":10231,"longmapsto":10236,"Longrightarrow":10233,"longrightarrow":10230,"looparrowleft":8619,"looparrowright":8620,"lopar":10629,"Lopf":"\\ud835\\udd43","lopf":"\\ud835\\udd5d","loplus":10797,"lotimes":10804,"lowast":8727,"lowbar":"_","LowerLeftArrow":8601,"LowerRightArrow":8600,"loz":9674,"lozenge":9674,"lozf":10731,"lpar":"(","lparlt":10643,"lrarr":8646,"lrcorner":8991,"lrhar":8651,"lrhard":10605,"lrm":8206,"lrtri":8895,"lsaquo":8249,"Lscr":8466,"lscr":"\\ud835\\udcc1","lsh":8624,"lsim":8818,"lsime":10893,"lsimg":10895,"lsqb":"[","lsquo":8216,"lsquor":8218,"Lstrok":321,"lstrok":322,"Lt":8810,"lt":"<","ltcc":10918,"ltcir":10873,"ltdot":8918,"lthree":8907,"ltimes":8905,"ltlarr":10614,"ltquest":10875,"ltri":9667,"ltrie":8884,"ltrif":9666,"ltrPar":10646,"lurdshar":10570,"luruhar":10598,"lvertneqq":"\\u2268\\ufe00","lvnE":"\\u2268\\ufe00","macr":175,"male":9794,"malt":10016,"maltese":10016,"Map":10501,"map":8614,"mapsto":8614,"mapstodown":8615,"mapstoleft":8612,"mapstoup":8613,"marker":9646,"mcomma":10793,"Mcy":1052,"mcy":1084,"mdash":8212,"mDDot":8762,"measuredangle":8737,"MediumSpace":8287,"Mellintrf":8499,"Mfr":"\\ud835\\udd10","mfr":"\\ud835\\udd2a","mho":8487,"micro":181,"mid":8739,"midast":"*","midcir":10992,"middot":183,"minus":8722,"minusb":8863,"minusd":8760,"minusdu":10794,"MinusPlus":8723,"mlcp":10971,"mldr":8230,"mnplus":8723,"models":8871,"Mopf":"\\ud835\\udd44","mopf":"\\ud835\\udd5e","mp":8723,"Mscr":8499,"mscr":"\\ud835\\udcc2","mstpos":8766,"Mu":924,"mu":956,"multimap":8888,"mumap":8888,"nabla":8711,"Nacute":323,"nacute":324,"nang":"\\u2220\\u20d2","nap":8777,"napE":"\\u2a70\\u0338","napid":"\\u224b\\u0338","napos":329,"napprox":8777,"natur":9838,"natural":9838,"naturals":8469,"nbsp":160,"nbump":"\\u224e\\u0338","nbumpe":"\\u224f\\u0338","ncap":10819,"Ncaron":327,"ncaron":328,"Ncedil":325,"ncedil":326,"ncong":8775,"ncongdot":"\\u2a6d\\u0338","ncup":10818,"Ncy":1053,"ncy":1085,"ndash":8211,"ne":8800,"nearhk":10532,"neArr":8663,"nearr":8599,"nearrow":8599,"nedot":"\\u2250\\u0338","NegativeMediumSpace":8203,"NegativeThickSpace":8203,"NegativeThinSpace":8203,"NegativeVeryThinSpace":8203,"nequiv":8802,"nesear":10536,"nesim":"\\u2242\\u0338","NestedGreaterGreater":8811,"NestedLessLess":8810,"NewLine":"\\n","nexist":8708,"nexists":8708,"Nfr":"\\ud835\\udd11","nfr":"\\ud835\\udd2b","ngE":"\\u2267\\u0338","nge":8817,"ngeq":8817,"ngeqq":"\\u2267\\u0338","ngeqslant":"\\u2a7e\\u0338","nges":"\\u2a7e\\u0338","nGg":"\\u22d9\\u0338","ngsim":8821,"nGt":"\\u226b\\u20d2","ngt":8815,"ngtr":8815,"nGtv":"\\u226b\\u0338","nhArr":8654,"nharr":8622,"nhpar":10994,"ni":8715,"nis":8956,"nisd":8954,"niv":8715,"NJcy":1034,"njcy":1114,"nlArr":8653,"nlarr":8602,"nldr":8229,"nlE":"\\u2266\\u0338","nle":8816,"nLeftarrow":8653,"nleftarrow":8602,"nLeftrightarrow":8654,"nleftrightarrow":8622,"nleq":8816,"nleqq":"\\u2266\\u0338","nleqslant":"\\u2a7d\\u0338","nles":"\\u2a7d\\u0338","nless":8814,"nLl":"\\u22d8\\u0338","nlsim":8820,"nLt":"\\u226a\\u20d2","nlt":8814,"nltri":8938,"nltrie":8940,"nLtv":"\\u226a\\u0338","nmid":8740,"NoBreak":8288,"NonBreakingSpace":160,"Nopf":8469,"nopf":"\\ud835\\udd5f","not":172,"Not":10988,"NotCongruent":8802,"NotCupCap":8813,"NotDoubleVerticalBar":8742,"NotElement":8713,"NotEqual":8800,"NotEqualTilde":"\\u2242\\u0338","NotExists":8708,"NotGreater":8815,"NotGreaterEqual":8817,"NotGreaterFullEqual":"\\u2267\\u0338","NotGreaterGreater":"\\u226b\\u0338","NotGreaterLess":8825,"NotGreaterSlantEqual":"\\u2a7e\\u0338","NotGreaterTilde":8821,"NotHumpDownHump":"\\u224e\\u0338","NotHumpEqual":"\\u224f\\u0338","notin":8713,"notindot":"\\u22f5\\u0338","notinE":"\\u22f9\\u0338","notinva":8713,"notinvb":8951,"notinvc":8950,"NotLeftTriangle":8938,"NotLeftTriangleBar":"\\u29cf\\u0338","NotLeftTriangleEqual":8940,"NotLess":8814,"NotLessEqual":8816,"NotLessGreater":8824,"NotLessLess":"\\u226a\\u0338","NotLessSlantEqual":"\\u2a7d\\u0338","NotLessTilde":8820,"NotNestedGreaterGreater":"\\u2aa2\\u0338","NotNestedLessLess":"\\u2aa1\\u0338","notni":8716,"notniva":8716,"notnivb":8958,"notnivc":8957,"NotPrecedes":8832,"NotPrecedesEqual":"\\u2aaf\\u0338","NotPrecedesSlantEqual":8928,"NotReverseElement":8716,"NotRightTriangle":8939,"NotRightTriangleBar":"\\u29d0\\u0338","NotRightTriangleEqual":8941,"NotSquareSubset":"\\u228f\\u0338","NotSquareSubsetEqual":8930,"NotSquareSuperset":"\\u2290\\u0338","NotSquareSupersetEqual":8931,"NotSubset":"\\u2282\\u20d2","NotSubsetEqual":8840,"NotSucceeds":8833,"NotSucceedsEqual":"\\u2ab0\\u0338","NotSucceedsSlantEqual":8929,"NotSucceedsTilde":"\\u227f\\u0338","NotSuperset":"\\u2283\\u20d2","NotSupersetEqual":8841,"NotTilde":8769,"NotTildeEqual":8772,"NotTildeFullEqual":8775,"NotTildeTilde":8777,"NotVerticalBar":8740,"npar":8742,"nparallel":8742,"nparsl":"\\u2afd\\u20e5","npart":"\\u2202\\u0338","npolint":10772,"npr":8832,"nprcue":8928,"npre":"\\u2aaf\\u0338","nprec":8832,"npreceq":"\\u2aaf\\u0338","nrArr":8655,"nrarr":8603,"nrarrc":"\\u2933\\u0338","nrarrw":"\\u219d\\u0338","nRightarrow":8655,"nrightarrow":8603,"nrtri":8939,"nrtrie":8941,"nsc":8833,"nsccue":8929,"nsce":"\\u2ab0\\u0338","Nscr":"\\ud835\\udca9","nscr":"\\ud835\\udcc3","nshortmid":8740,"nshortparallel":8742,"nsim":8769,"nsime":8772,"nsimeq":8772,"nsmid":8740,"nspar":8742,"nsqsube":8930,"nsqsupe":8931,"nsub":8836,"nsubE":"\\u2ac5\\u0338","nsube":8840,"nsubset":"\\u2282\\u20d2","nsubseteq":8840,"nsubseteqq":"\\u2ac5\\u0338","nsucc":8833,"nsucceq":"\\u2ab0\\u0338","nsup":8837,"nsupE":"\\u2ac6\\u0338","nsupe":8841,"nsupset":"\\u2283\\u20d2","nsupseteq":8841,"nsupseteqq":"\\u2ac6\\u0338","ntgl":8825,"Ntilde":209,"ntilde":241,"ntlg":8824,"ntriangleleft":8938,"ntrianglelefteq":8940,"ntriangleright":8939,"ntrianglerighteq":8941,"Nu":925,"nu":957,"num":"#","numero":8470,"numsp":8199,"nvap":"\\u224d\\u20d2","nVDash":8879,"nVdash":8878,"nvDash":8877,"nvdash":8876,"nvge":"\\u2265\\u20d2","nvgt":">\\u20d2","nvHarr":10500,"nvinfin":10718,"nvlArr":10498,"nvle":"\\u2264\\u20d2","nvlt":"<\\u20d2","nvltrie":"\\u22b4\\u20d2","nvrArr":10499,"nvrtrie":"\\u22b5\\u20d2","nvsim":"\\u223c\\u20d2","nwarhk":10531,"nwArr":8662,"nwarr":8598,"nwarrow":8598,"nwnear":10535,"Oacute":211,"oacute":243,"oast":8859,"ocir":8858,"Ocirc":212,"ocirc":244,"Ocy":1054,"ocy":1086,"odash":8861,"Odblac":336,"odblac":337,"odiv":10808,"odot":8857,"odsold":10684,"OElig":338,"oelig":339,"ofcir":10687,"Ofr":"\\ud835\\udd12","ofr":"\\ud835\\udd2c","ogon":731,"Ograve":210,"ograve":242,"ogt":10689,"ohbar":10677,"ohm":937,"oint":8750,"olarr":8634,"olcir":10686,"olcross":10683,"oline":8254,"olt":10688,"Omacr":332,"omacr":333,"Omega":937,"omega":969,"Omicron":927,"omicron":959,"omid":10678,"ominus":8854,"Oopf":"\\ud835\\udd46","oopf":"\\ud835\\udd60","opar":10679,"OpenCurlyDoubleQuote":8220,"OpenCurlyQuote":8216,"operp":10681,"oplus":8853,"Or":10836,"or":8744,"orarr":8635,"ord":10845,"order":8500,"orderof":8500,"ordf":170,"ordm":186,"origof":8886,"oror":10838,"orslope":10839,"orv":10843,"oS":9416,"Oscr":"\\ud835\\udcaa","oscr":8500,"Oslash":216,"oslash":248,"osol":8856,"Otilde":213,"otilde":245,"Otimes":10807,"otimes":8855,"otimesas":10806,"Ouml":214,"ouml":246,"ovbar":9021,"OverBar":8254,"OverBrace":9182,"OverBracket":9140,"OverParenthesis":9180,"par":8741,"para":182,"parallel":8741,"parsim":10995,"parsl":11005,"part":8706,"PartialD":8706,"Pcy":1055,"pcy":1087,"percnt":"%","period":".","permil":8240,"perp":8869,"pertenk":8241,"Pfr":"\\ud835\\udd13","pfr":"\\ud835\\udd2d","Phi":934,"phi":966,"phiv":981,"phmmat":8499,"phone":9742,"Pi":928,"pi":960,"pitchfork":8916,"piv":982,"planck":8463,"planckh":8462,"plankv":8463,"plus":"+","plusacir":10787,"plusb":8862,"pluscir":10786,"plusdo":8724,"plusdu":10789,"pluse":10866,"PlusMinus":177,"plusmn":177,"plussim":10790,"plustwo":10791,"pm":177,"Poincareplane":8460,"pointint":10773,"Popf":8473,"popf":"\\ud835\\udd61","pound":163,"Pr":10939,"pr":8826,"prap":10935,"prcue":8828,"prE":10931,"pre":10927,"prec":8826,"precapprox":10935,"preccurlyeq":8828,"Precedes":8826,"PrecedesEqual":10927,"PrecedesSlantEqual":8828,"PrecedesTilde":8830,"preceq":10927,"precnapprox":10937,"precneqq":10933,"precnsim":8936,"precsim":8830,"Prime":8243,"prime":8242,"primes":8473,"prnap":10937,"prnE":10933,"prnsim":8936,"prod":8719,"Product":8719,"profalar":9006,"profline":8978,"profsurf":8979,"prop":8733,"Proportion":8759,"Proportional":8733,"propto":8733,"prsim":8830,"prurel":8880,"Pscr":"\\ud835\\udcab","pscr":"\\ud835\\udcc5","Psi":936,"psi":968,"puncsp":8200,"Qfr":"\\ud835\\udd14","qfr":"\\ud835\\udd2e","qint":10764,"Qopf":8474,"qopf":"\\ud835\\udd62","qprime":8279,"Qscr":"\\ud835\\udcac","qscr":"\\ud835\\udcc6","quaternions":8461,"quatint":10774,"quest":"?","questeq":8799,"quot":"\\"","rAarr":8667,"race":"\\u223d\\u0331","Racute":340,"racute":341,"radic":8730,"raemptyv":10675,"Rang":10219,"rang":10217,"rangd":10642,"range":10661,"rangle":10217,"raquo":187,"Rarr":8608,"rArr":8658,"rarr":8594,"rarrap":10613,"rarrb":8677,"rarrbfs":10528,"rarrc":10547,"rarrfs":10526,"rarrhk":8618,"rarrlp":8620,"rarrpl":10565,"rarrsim":10612,"Rarrtl":10518,"rarrtl":8611,"rarrw":8605,"rAtail":10524,"ratail":10522,"ratio":8758,"rationals":8474,"RBarr":10512,"rBarr":10511,"rbarr":10509,"rbbrk":10099,"rbrace":"}","rbrack":"]","rbrke":10636,"rbrksld":10638,"rbrkslu":10640,"Rcaron":344,"rcaron":345,"Rcedil":342,"rcedil":343,"rceil":8969,"rcub":"}","Rcy":1056,"rcy":1088,"rdca":10551,"rdldhar":10601,"rdquo":8221,"rdquor":8221,"rdsh":8627,"Re":8476,"real":8476,"realine":8475,"realpart":8476,"reals":8477,"rect":9645,"reg":174,"ReverseElement":8715,"ReverseEquilibrium":8651,"ReverseUpEquilibrium":10607,"rfisht":10621,"rfloor":8971,"Rfr":8476,"rfr":"\\ud835\\udd2f","rHar":10596,"rhard":8641,"rharu":8640,"rharul":10604,"Rho":929,"rho":961,"rhov":1009,"RightAngleBracket":10217,"Rightarrow":8658,"rightarrow":8594,"RightArrowBar":8677,"RightArrowLeftArrow":8644,"rightarrowtail":8611,"RightCeiling":8969,"RightDoubleBracket":10215,"RightDownTeeVector":10589,"RightDownVector":8642,"RightDownVectorBar":10581,"RightFloor":8971,"rightharpoondown":8641,"rightharpoonup":8640,"rightleftarrows":8644,"rightleftharpoons":8652,"rightrightarrows":8649,"rightsquigarrow":8605,"RightTee":8866,"RightTeeArrow":8614,"RightTeeVector":10587,"rightthreetimes":8908,"RightTriangle":8883,"RightTriangleBar":10704,"RightTriangleEqual":8885,"RightUpDownVector":10575,"RightUpTeeVector":10588,"RightUpVector":8638,"RightUpVectorBar":10580,"RightVector":8640,"RightVectorBar":10579,"ring":730,"risingdotseq":8787,"rlarr":8644,"rlhar":8652,"rlm":8207,"rmoust":9137,"rmoustache":9137,"rnmid":10990,"roang":10221,"roarr":8702,"robrk":10215,"ropar":10630,"Ropf":8477,"ropf":"\\ud835\\udd63","roplus":10798,"rotimes":10805,"RoundImplies":10608,"rpar":")","rpargt":10644,"rppolint":10770,"rrarr":8649,"Rrightarrow":8667,"rsaquo":8250,"Rscr":8475,"rscr":"\\ud835\\udcc7","rsh":8625,"rsqb":"]","rsquo":8217,"rsquor":8217,"rthree":8908,"rtimes":8906,"rtri":9657,"rtrie":8885,"rtrif":9656,"rtriltri":10702,"RuleDelayed":10740,"ruluhar":10600,"rx":8478,"Sacute":346,"sacute":347,"sbquo":8218,"Sc":10940,"sc":8827,"scap":10936,"Scaron":352,"scaron":353,"sccue":8829,"scE":10932,"sce":10928,"Scedil":350,"scedil":351,"Scirc":348,"scirc":349,"scnap":10938,"scnE":10934,"scnsim":8937,"scpolint":10771,"scsim":8831,"Scy":1057,"scy":1089,"sdot":8901,"sdotb":8865,"sdote":10854,"searhk":10533,"seArr":8664,"searr":8600,"searrow":8600,"sect":167,"semi":";","seswar":10537,"setminus":8726,"setmn":8726,"sext":10038,"Sfr":"\\ud835\\udd16","sfr":"\\ud835\\udd30","sfrown":8994,"sharp":9839,"SHCHcy":1065,"shchcy":1097,"SHcy":1064,"shcy":1096,"ShortDownArrow":8595,"ShortLeftArrow":8592,"shortmid":8739,"shortparallel":8741,"ShortRightArrow":8594,"ShortUpArrow":8593,"shy":173,"Sigma":931,"sigma":963,"sigmaf":962,"sigmav":962,"sim":8764,"simdot":10858,"sime":8771,"simeq":8771,"simg":10910,"simgE":10912,"siml":10909,"simlE":10911,"simne":8774,"simplus":10788,"simrarr":10610,"slarr":8592,"SmallCircle":8728,"smallsetminus":8726,"smashp":10803,"smeparsl":10724,"smid":8739,"smile":8995,"smt":10922,"smte":10924,"smtes":"\\u2aac\\ufe00","SOFTcy":1068,"softcy":1100,"sol":"/","solb":10692,"solbar":9023,"Sopf":"\\ud835\\udd4a","sopf":"\\ud835\\udd64","spades":9824,"spadesuit":9824,"spar":8741,"sqcap":8851,"sqcaps":"\\u2293\\ufe00","sqcup":8852,"sqcups":"\\u2294\\ufe00","Sqrt":8730,"sqsub":8847,"sqsube":8849,"sqsubset":8847,"sqsubseteq":8849,"sqsup":8848,"sqsupe":8850,"sqsupset":8848,"sqsupseteq":8850,"squ":9633,"square":9633,"SquareIntersection":8851,"SquareSubset":8847,"SquareSubsetEqual":8849,"SquareSuperset":8848,"SquareSupersetEqual":8850,"SquareUnion":8852,"squarf":9642,"squf":9642,"srarr":8594,"Sscr":"\\ud835\\udcae","sscr":"\\ud835\\udcc8","ssetmn":8726,"ssmile":8995,"sstarf":8902,"Star":8902,"star":9734,"starf":9733,"straightepsilon":1013,"straightphi":981,"strns":175,"Sub":8912,"sub":8834,"subdot":10941,"subE":10949,"sube":8838,"subedot":10947,"submult":10945,"subnE":10955,"subne":8842,"subplus":10943,"subrarr":10617,"Subset":8912,"subset":8834,"subseteq":8838,"subseteqq":10949,"SubsetEqual":8838,"subsetneq":8842,"subsetneqq":10955,"subsim":10951,"subsub":10965,"subsup":10963,"succ":8827,"succapprox":10936,"succcurlyeq":8829,"Succeeds":8827,"SucceedsEqual":10928,"SucceedsSlantEqual":8829,"SucceedsTilde":8831,"succeq":10928,"succnapprox":10938,"succneqq":10934,"succnsim":8937,"succsim":8831,"SuchThat":8715,"sum":8721,"sung":9834,"Sup":8913,"sup":8835,"sup1":185,"sup2":178,"sup3":179,"supdot":10942,"supdsub":10968,"supE":10950,"supe":8839,"supedot":10948,"Superset":8835,"SupersetEqual":8839,"suphsol":10185,"suphsub":10967,"suplarr":10619,"supmult":10946,"supnE":10956,"supne":8843,"supplus":10944,"Supset":8913,"supset":8835,"supseteq":8839,"supseteqq":10950,"supsetneq":8843,"supsetneqq":10956,"supsim":10952,"supsub":10964,"supsup":10966,"swarhk":10534,"swArr":8665,"swarr":8601,"swarrow":8601,"swnwar":10538,"szlig":223,"Tab":"\\t","target":8982,"Tau":932,"tau":964,"tbrk":9140,"Tcaron":356,"tcaron":357,"Tcedil":354,"tcedil":355,"Tcy":1058,"tcy":1090,"tdot":8411,"telrec":8981,"Tfr":"\\ud835\\udd17","tfr":"\\ud835\\udd31","there4":8756,"therefore":8756,"Theta":920,"theta":952,"thetasym":977,"thetav":977,"thickapprox":8776,"thicksim":8764,"ThickSpace":"\\u205f\\u200a","thinsp":8201,"ThinSpace":8201,"thkap":8776,"thksim":8764,"THORN":222,"thorn":254,"Tilde":8764,"tilde":732,"TildeEqual":8771,"TildeFullEqual":8773,"TildeTilde":8776,"times":215,"timesb":8864,"timesbar":10801,"timesd":10800,"tint":8749,"toea":10536,"top":8868,"topbot":9014,"topcir":10993,"Topf":"\\ud835\\udd4b","topf":"\\ud835\\udd65","topfork":10970,"tosa":10537,"tprime":8244,"trade":8482,"triangle":9653,"triangledown":9663,"triangleleft":9667,"trianglelefteq":8884,"triangleq":8796,"triangleright":9657,"trianglerighteq":8885,"tridot":9708,"trie":8796,"triminus":10810,"TripleDot":8411,"triplus":10809,"trisb":10701,"tritime":10811,"trpezium":9186,"Tscr":"\\ud835\\udcaf","tscr":"\\ud835\\udcc9","TScy":1062,"tscy":1094,"TSHcy":1035,"tshcy":1115,"Tstrok":358,"tstrok":359,"twixt":8812,"twoheadleftarrow":8606,"twoheadrightarrow":8608,"Uacute":218,"uacute":250,"Uarr":8607,"uArr":8657,"uarr":8593,"Uarrocir":10569,"Ubrcy":1038,"ubrcy":1118,"Ubreve":364,"ubreve":365,"Ucirc":219,"ucirc":251,"Ucy":1059,"ucy":1091,"udarr":8645,"Udblac":368,"udblac":369,"udhar":10606,"ufisht":10622,"Ufr":"\\ud835\\udd18","ufr":"\\ud835\\udd32","Ugrave":217,"ugrave":249,"uHar":10595,"uharl":8639,"uharr":8638,"uhblk":9600,"ulcorn":8988,"ulcorner":8988,"ulcrop":8975,"ultri":9720,"Umacr":362,"umacr":363,"uml":168,"UnderBar":"_","UnderBrace":9183,"UnderBracket":9141,"UnderParenthesis":9181,"Union":8899,"UnionPlus":8846,"Uogon":370,"uogon":371,"Uopf":"\\ud835\\udd4c","uopf":"\\ud835\\udd66","Uparrow":8657,"uparrow":8593,"UpArrowBar":10514,"UpArrowDownArrow":8645,"Updownarrow":8661,"updownarrow":8597,"UpEquilibrium":10606,"upharpoonleft":8639,"upharpoonright":8638,"uplus":8846,"UpperLeftArrow":8598,"UpperRightArrow":8599,"Upsi":978,"upsi":965,"upsih":978,"Upsilon":933,"upsilon":965,"UpTee":8869,"UpTeeArrow":8613,"upuparrows":8648,"urcorn":8989,"urcorner":8989,"urcrop":8974,"Uring":366,"uring":367,"urtri":9721,"Uscr":"\\ud835\\udcb0","uscr":"\\ud835\\udcca","utdot":8944,"Utilde":360,"utilde":361,"utri":9653,"utrif":9652,"uuarr":8648,"Uuml":220,"uuml":252,"uwangle":10663,"vangrt":10652,"varepsilon":1013,"varkappa":1008,"varnothing":8709,"varphi":981,"varpi":982,"varpropto":8733,"vArr":8661,"varr":8597,"varrho":1009,"varsigma":962,"varsubsetneq":"\\u228a\\ufe00","varsubsetneqq":"\\u2acb\\ufe00","varsupsetneq":"\\u228b\\ufe00","varsupsetneqq":"\\u2acc\\ufe00","vartheta":977,"vartriangleleft":8882,"vartriangleright":8883,"Vbar":10987,"vBar":10984,"vBarv":10985,"Vcy":1042,"vcy":1074,"VDash":8875,"Vdash":8873,"vDash":8872,"vdash":8866,"Vdashl":10982,"Vee":8897,"vee":8744,"veebar":8891,"veeeq":8794,"vellip":8942,"Verbar":8214,"verbar":"|","Vert":8214,"vert":"|","VerticalBar":8739,"VerticalLine":"|","VerticalSeparator":10072,"VerticalTilde":8768,"VeryThinSpace":8202,"Vfr":"\\ud835\\udd19","vfr":"\\ud835\\udd33","vltri":8882,"vnsub":"\\u2282\\u20d2","vnsup":"\\u2283\\u20d2","Vopf":"\\ud835\\udd4d","vopf":"\\ud835\\udd67","vprop":8733,"vrtri":8883,"Vscr":"\\ud835\\udcb1","vscr":"\\ud835\\udccb","vsubnE":"\\u2acb\\ufe00","vsubne":"\\u228a\\ufe00","vsupnE":"\\u2acc\\ufe00","vsupne":"\\u228b\\ufe00","Vvdash":8874,"vzigzag":10650,"Wcirc":372,"wcirc":373,"wedbar":10847,"Wedge":8896,"wedge":8743,"wedgeq":8793,"weierp":8472,"Wfr":"\\ud835\\udd1a","wfr":"\\ud835\\udd34","Wopf":"\\ud835\\udd4e","wopf":"\\ud835\\udd68","wp":8472,"wr":8768,"wreath":8768,"Wscr":"\\ud835\\udcb2","wscr":"\\ud835\\udccc","xcap":8898,"xcirc":9711,"xcup":8899,"xdtri":9661,"Xfr":"\\ud835\\udd1b","xfr":"\\ud835\\udd35","xhArr":10234,"xharr":10231,"Xi":926,"xi":958,"xlArr":10232,"xlarr":10229,"xmap":10236,"xnis":8955,"xodot":10752,"Xopf":"\\ud835\\udd4f","xopf":"\\ud835\\udd69","xoplus":10753,"xotime":10754,"xrArr":10233,"xrarr":10230,"Xscr":"\\ud835\\udcb3","xscr":"\\ud835\\udccd","xsqcup":10758,"xuplus":10756,"xutri":9651,"xvee":8897,"xwedge":8896,"Yacute":221,"yacute":253,"YAcy":1071,"yacy":1103,"Ycirc":374,"ycirc":375,"Ycy":1067,"ycy":1099,"yen":165,"Yfr":"\\ud835\\udd1c","yfr":"\\ud835\\udd36","YIcy":1031,"yicy":1111,"Yopf":"\\ud835\\udd50","yopf":"\\ud835\\udd6a","Yscr":"\\ud835\\udcb4","yscr":"\\ud835\\udcce","YUcy":1070,"yucy":1102,"yuml":255,"Yuml":376,"Zacute":377,"zacute":378,"Zcaron":381,"zcaron":382,"Zcy":1047,"zcy":1079,"Zdot":379,"zdot":380,"zeetrf":8488,"ZeroWidthSpace":8203,"Zeta":918,"zeta":950,"Zfr":8488,"zfr":"\\ud835\\udd37","ZHcy":1046,"zhcy":1078,"zigrarr":8669,"Zopf":8484,"zopf":"\\ud835\\udd6b","Zscr":"\\ud835\\udcb5","zscr":"\\ud835\\udccf","zwj":8205,"zwnj":8204}') \ No newline at end of file diff --git a/lib/fauxdom-with-canvas.cjs b/lib/fauxdom-with-canvas.cjs deleted file mode 100644 index edd45e8..0000000 --- a/lib/fauxdom-with-canvas.cjs +++ /dev/null @@ -1,3 +0,0 @@ -const e={},t={},s=Object.prototype.hasOwnProperty.bind(t),i=null;class r{constructor(e){if(this.index=0,this.str=e,this.scanChar=this.str[this.index],!s(" ")){for(let e=0;e<=32;e++)t[String.fromCharCode(e)]=null;for(let e=128;e<=159;e++)t[String.fromCharCode(e)]=null}}isWhiteSpace(e){return e!==i&&s(e)}goToString(t,s){if(!1!==s)this.index=this.str.indexOf(t,this.index);else{e[t]||(e[t]=new RegExp(t,"ig")),e[t].lastIndex=this.index;const s=e[t].exec(this.str);this.index=s?s.index:-1}this.index>-1?this.scanChar=this.str[this.index]:(this.index=this.str.length,this.scanChar=i)}goToIndex(e){this.scanChar=this.str[this.index=e]}advance(e){return this.index+=e,this.index>this.str.length?(this.index=this.str.length,this.scanChar=i):this.scanChar=this.str[this.index]}match(e,t){var s=this.str.substr(this.index,e.length);return!1===t&&(e=e.toLowerCase(),s=s.toLowerCase()),s===e&&(this.index+=e.length-1,this.getNextChar(),!0)}peek(){return this.str[this.index+1]}getChar(){return this.scanChar}getNextChar(){return this.index+1e.callback===t&&e.capturing===r?s:void 0)).reverse().forEach((e=>{void 0!==e&&i.splice(e,1)}))}dispatchEvent(e){let t=!0;if(!this[n])return t;const s=this[n].get(e.type)??[];return s?.forEach((({callback:s})=>{s(e),e.defaultPrevented&&(t=!1)})),t}}const a=Symbol("doctype"),l=Symbol("head"),h=Symbol("body"),c=Symbol("documentElement"),d=Symbol("nodeType"),u=Symbol("parentNode"),p=Symbol("ownerDocument"),N=Symbol("tagName"),f=Symbol("parserOptions"),g=/\s+/g,E={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11},T={AREA:!0,BASE:!0,BR:!0,COL:!0,COMMAND:!0,EMBED:!0,HR:!0,IMG:!0,INPUT:!0,KEYGEN:!0,LINK:!0,META:!0,PARAM:!0,SOURCE:!0,TRACK:!0,WBR:!0};function m(e){var t=-1,s=-1,i="HTML";e[a]&&e[f].allowCustomRootElement&&(i=e[a].name.toUpperCase());for(let r=0,n=e.childNodes.length;r0)for(let t=0;t{e[p]=s}),null),e[u]=t,e[p]=s}function C(e){if(!e.global){let t=e.flags;e=new RegExp(e.source,t+"g")}return e}const b=Symbol("element"),D=Symbol("length"),w=/^\S+$/,S=Array.prototype.indexOf,_=Array.prototype.join,A=Array.prototype.splice;class I{constructor(){throw new Error("Cannot directly instantiate DOMTokenList.")}get length(){return this[D]}set length(e){}get value(){return _.call(this," ")}set value(e){if(this[D]>0)for(let e in this)this.hasOwnProperty(e)&&isFinite(e)&&delete this[e];this[D]=0,"string"==typeof e?this.add.apply(this,e.split(g)):delete this[b].attributes.class}add(){for(let e=0;e=0&&e=0&&this.supports(t))&&(-1===S.call(this,t)?this[s]=t:(A.call(this,s,1),this[D]--),this[b].attributes.class=this.value,!0)}supports(e){return!(!e||"string"!=typeof e)&&e.match(w)}}const M=Symbol("element");function v(e){return e.replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))}function R(e){return"string"==typeof e&&(!!e.match(/^\-?[a-z_-]*[a-z]$/)||(!!e.match(/^\-\-[A-Za-z_-]*[A-Za-z0-9]$/)||!!e.match(/^[a-zA-Z]+$/)))}function L(e=""){return new Map(e.split(/\s*;\s*/g).filter((e=>e.length)).map((e=>e.trim().match(/^([a-z-]+)\s*:\s*(.*)$/).slice(1))))}function U(e){return Array.from(e?.entries()??[]).map((e=>e.join(": "))).join("; ")}function k(e){return new Proxy({[M]:e},{get(t,s){if(s===M)return e;if(!R(s))return;const i=v(s);return L(e.attributes.style).get(i)},set(t,s,i){if(!R(s))return!0;const r=v(s),n=L(e.attributes.style);return e.attributes.style=U(n.set(r,i)),!0},deleteProperty(t,s){if(!R(s))return;const i=v(s),r=L(e.attributes.style);e.attributes.style=U(r.delete(i))}})}const P=/\r\n|\r|\f/g,$=/\(\s*(even|odd|(?:(?:([+-]?\d*)n)\s*(?:([+-])\s*(\d+))?|([+-]?\d+)))\s*/g,W={Selectors:0,Identifier:1,Iterator:2,IteratorOf:3},G={is:W.Selectors,not:W.Selectors,where:W.Selectors,has:W.Selectors,lang:W.Identifier,dir:W.Identifier,"nth-child":W.IteratorOf,"nth-last-child":W.IteratorOf,"nth-of-type":W.Iterator,"nth-last-of-type":W.Iterator,"nth-col":W.Iterator,"nth-last-col":W.Iterator};function j(e){return B(new r(e.replace(P,"\n")))}function B(e,t=i,s=!1){for(var r=e.skipWhiteSpace(),n={},o=[],a=[o],l=[a];r!==i&&r!==t;){switch(r){case"*":if(o.length>0)throw H("Universal selectors must come before all other simple selectors.",e);n.type="universal",o.push(n),n={};break;case"#":case".":{e.getNextChar();const t=F(e);if(!t)throw H("Expected an identifier.",e);n.type="#"===r?"id":"class",n.name=t,o.push(n),n={};break}case"[":{e.getNextAfterWhiteSpace();const t=F(e);if(!t)throw H("Expected an identifier.",e);if(n.type="attr",n.name=t,n.comparison="=",n.value=!0,n.ignoreCase=!1,"]"!==(r=e.getNextAfterWhiteSpace())){switch(r){case"=":break;case"~":case"|":case"^":case"$":case"*":if("="!==e.peek())throw H("Expected '='.",e,1);n.comparison=r+n.comparison,e.getNextChar();break;default:throw H("Unexpected character '"+(r===i?"END_OF_INPUT":r)+"'.",e)}if("'"===(r=e.getNextAfterWhiteSpace())||'"'===r){const t=r;for(n.value="",r=e.getNextChar();r!==i&&r!==t&&"\n"!==r;)"\\"===r?(n.value+=Y(e),r=e.getChar()):(n.value+=r,r=e.getNextChar())}else{const t=F(e);if(!t)throw H("Expected an identifier.",e);n.value=t}if("]"!==e.getNextAfterWhiteSpace()){const t=F(e);if("i"===t||"I"===t)n.ignoreCase=!0;else if("s"===t||"S"===t)n.ignoreCase=!1;else if(t)throw H("Unexpected identifier '"+t+"'.",e,1-t.length);if("]"!==e.getNextAfterWhiteSpace())throw H("Expected ']'.",e,-1+t.length)}}o.push(n),n={};break}case":":if(e.getNextChar(),e.match(":")){const t=F(e);if(!t)throw H("Expected a pseudo-element name.",e);n.type="pseudo-element",n.name=t}else{const t=F(e);if(!t)throw H("Expected a pseudo-class name.",e);n.type="pseudo-class",n.name=t;const s=G[t];if(null!=s){if(n.type="pseudo-fn","("!==e.getNextChar())throw H("Expected '('.",e);switch(s){case W.IteratorOf:case W.Iterator:let t,i=0,r=0;$.lastIndex=e.index;const o=$.exec(e.str);if(!o)throw H("Invalid parameter.",e,1);if(e.advance(o[0].length),s===W.IteratorOf){e.skipWhiteSpace();const s=e.index;if("of"===F(e).toLowerCase()){const s=e.getNextChar();if(")"!==s&&!e.isWhiteSpace(s))throw H("Expected whitespace.",e);if(t=B(e,")"),!(t instanceof Array)||0===t.length)throw H("Expected at least one selector.",e)}else e.goToIndex(s)}if(")"!==e.skipWhiteSpace())throw H("Expected ')'.",e);"even"===o[1]||"odd"===o[1]?(i=2,"odd"===o[1]&&(r=1)):o[5]?r=parseInt(o[5],10):(i="-"===o[2]?-1:o[2]&&"+"!==o[2]?parseInt(o[2],10):1,o[3]&&(r=parseInt(o[3]+o[4],10))),n.params=[i,r],t&&n.params.push(t);break;case W.Selectors:if(e.getNextChar(),n.params=B(e,")",!0),0===n.params.length)throw H("Expected at least one selector.",e);break;case W.Identifier:if(!X(e.getNextAfterWhiteSpace()))throw H("Expected an identifier.",e);n.params=[F(e)],e.getNextChar()}if(")"!==e.skipWhiteSpace())throw H("Expected ')'.",e)}else"before"!==t&&"after"!==t&&"first-line"!==t&&"first-letter"!==t||(n.type="pseudo-element")}o.push(n),n={};break;case"+":case">":case"~":if(0===o.length){if(1===a.length){if(!s)throw H("Absolute selectors cannot start with a combinator.",e);a.unshift([{type:"pseudo-class",name:"scope"}])}else if("string"==typeof a[a.length-2])throw H("Cannot have multiple combinators in a row.",e);a.splice(a.length-1,0,r)}else a.push(r,o=[]);break;case",":if(0===o.length){if(a.length>1){if(a.pop(),"string"==typeof a[a.length-1])throw H("Complex selectors are not allowed to end with a combinator.",e,-1);l.push(a=[o])}}else l.push(a=[o=[]]);e.skipWhiteSpace();break;default:if(e.isWhiteSpace(r))o.length>0&&a.push(o=[]),e.skipWhiteSpace(),e.advance(-1);else{if(!X(r))throw H("Unexpected character '"+r+"'.",e);if(o.length>0)throw H("Type (tag name) selectors must come before all other simple selectors.",e);n.type="type",n.name=F(e).toUpperCase(),o.push(n),n={}}}r=e.getNextChar()}if(0===o.length&&(1===a.length?(l.pop(),a=l[l.length-1]):a.pop()),a&&"string"==typeof a[a.length-1])throw H("Complex selectors are not allowed to end with a combinator.",e,-1);return l}function H(e,t,s=0){var i=new SyntaxError(e),r=t.index+s;return i.stack="SyntaxError: "+e+"\n\n"+t.str+"\n"+" ".repeat(r)+"^\n at index "+r,i}function F(e){var t="",s=e.getChar();if(X(s)){do{"\\"===s?(t+=Y(e),s=e.getChar()):(t+=s,s=e.getNextChar())}while(s!==i&&(X(s)||s>="0"&&s<="9"||"-"===s));e.advance(-1)}return t}function Y(e){var t=e.getNextChar();if(V(t)){let s="";for(let i=5;i>=0&&V(t);i--)s+=t,t=e.getNextChar();return e.isWhiteSpace(t)&&e.getNextChar(),s=0|parseInt(s,16),0===s||s>=55296&&s<=57343||s>1114111?"�":String.fromCodePoint(s)}return t===i?"�":(e.getNextChar(),t)}function V(e){return e!==i&&(e>="0"&&e<="9"||e>="A"&&e<="F"||e>="a"&&e<="f")}function X(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"||"_"===e||e>="€"||"\\"===e}const z=0,q=1,Z=2,K=3,J=4,Q={">":Z,"+":K,"~":J},ee={is:(e,t,s)=>ie(e,t,s),not:(e,t,s)=>!ie(e,t,s),has(e,t,s){var i=!1;for(let e=0;e0&&t.forEach((e=>{if(ie(t,e,s))return i=!0,!1})),i},"nth-child"(e,t,s){const i=t[u],r=i.childNodes,n=new oe(s[0],s[1]);for(let e=0;e=0;e--)if(r[e][d]===pe.ELEMENT_NODE&&(!s[2]||ie(i,r[e],s[2]))){const s=n.next();if(r[e]===t)return s}return!1},"nth-of-type"(e,t,s){const i=t[u].childNodes,r=new oe(s[0],s[1]),n=t[N];for(let e=0;e=0;e--)if(i[e][N]===n){const s=r.next();if(i[e]===t)return s}}},te={scope:(e,t)=>t===e,enabled(e,t){switch(t[N]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return!t.hasAttribute("disabled")}return!1},disabled(e,t){switch(t[N]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return t.hasAttribute("disabled")}return!1},checked(e,t){if("INPUT"===t[N]){const e=t.getAttribute("type");if("checkbox"===e||"radio"===e)return t.hasAttribute("checked")}else if("OPTION"===t[N])return t.hasAttribute("selected");return!1},required(e,t){switch(t[N]){case"INPUT":case"SELECT":case"TEXTAREA":return t.hasAttribute("required")}return!1},optional(e,t){switch(t[N]){case"INPUT":case"SELECT":case"TEXTAREA":return!t.hasAttribute("required")}return!1},root(e,t){const s=O(e);return!!s&&s.documentElement===t},empty:(e,t)=>0===t.childNodes.length,"first-child"(e,t){const s=t[u].childNodes;for(let e=0;e=0;e--)if(s[e][d]===pe.ELEMENT_NODE)return s[e]===t},"only-child"(e,t){const s=t[u].childNodes;let i,r;for(let e=0,t=s.length-1;t>=0&&(!i||!r);e++,t--)i||s[e][d]!==pe.ELEMENT_NODE||(i=s[e]),r||s[t][d]!==pe.ELEMENT_NODE||(r=s[t]);return i===r&&i===t},"first-of-type"(e,t){const s=t[u].childNodes,i=t[N];for(let e=0;e=0;e--)if(s[e][N]===i)return s[e]===t},"only-of-type"(e,t){const s=t[u].childNodes,i=t[N];let r,n;for(let e=0,t=s.length-1;t>=0&&(!r||!n);e++,t--)r||s[e][N]!==i||(r=s[e]),n||s[t][N]!==i||(n=s[t]);return r===n&&r===t}};function se(e,t,s){const i=j(t),r=[];return e.forEach((t=>{if(ie(e,t,i)&&(r.push(t),!s))return!1})),s?r:r[0]||null}function ie(e,t,s,i=!1){var r;e:for(let n=0;n=0;i?t++:t--)if(Q.hasOwnProperty(o[t]))a=Q[o[t]];else switch(a){case z:if(!re(e,r,o[t]))continue e;a=q;break;case q:for(;r=r[u];)if(re(e,r,o[t]))continue t;continue e;case Z:if(!re(e,r=r[u],o[t]))continue e;break;case K:{const s=r[u].childNodes;if(!re(e,r=s[s.indexOf(r)+(i?1:-1)],o[t]))continue e;break}case J:{const s=r[u].childNodes;for(let n=s.indexOf(r)+(i?1:-1);i?n=0;i?n++:n--)if(re(e,s[n],o[t])){r=s[n];continue t}continue e}}return!0}}return!1}function re(e,t,s){if(!t||t[d]!==pe.ELEMENT_NODE)return!1;for(let i=0;i=this.current||this.A>0&&this.current>=this.B)&&(e=(this.current+this.B)%this.A==0),e}}function ae(e){var t=e.tagName,s=O(e),i=s?s.entityEncoder:null,r="";switch(e.nodeType){case E.ELEMENT_NODE:r+="<"+(t=t.toLowerCase());for(let t in e.attributes)if(e.attributes.hasOwnProperty(t)){let n=e.attributes[t];!0===n?n="":i&&s[f]&&(n=le(n,i,s[f])),r+=" "+t,""!==n&&(r+='="'+n+'"')}r+=">";for(let t=0;t");break;case E.TEXT_NODE:i&&s[f]&&(!e.parentNode||"SCRIPT"!==e.parentNode.tagName&&"STYLE"!==e.parentNode.tagName)?r+=le(e.nodeValue,i,s[f]):r+=e.nodeValue;break;case E.CDATA_SECTION_NODE:r+="";break;case E.PROCESSING_INSTRUCTION_NODE:r+="";break;case E.COMMENT_NODE:r+="\x3c!--"+e.nodeValue+"--\x3e";break;case E.DOCUMENT_TYPE_NODE:r+=""}return r}function le(e,t,s){return!1===s.encodeEntities?e:!0!==s.encodeEntities&&s.encodeEntities instanceof RegExp?t.encode(e,s.encodeEntities):t.encode(e)}const he=Symbol("classList"),ce=Symbol("style"),de=Symbol("extendNode");function ue(e,t=pe){const s=Object.create(t.prototype);switch(s[d]=e,s.nodeValue=null,s[u]=null,s[p]=null,e){case pe.ELEMENT_NODE:s[N]=null,s.attributes={};case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:s.childNodes=[]}return s}class pe extends o{constructor(){if(super(),arguments[0]!==de)throw new Error("Cannot directly instantiate Node.")}get nodeType(){return this[d]}get nodeName(){switch(this.nodeType){case pe.ELEMENT_NODE:return this.tagName;case pe.TEXT_NODE:return"#text";case pe.CDATA_SECTION_NODE:return"#cdata-section";case pe.PROCESSING_INSTRUCTION_NODE:return this.target;case pe.COMMENT_NODE:return"#comment";case pe.DOCUMENT_NODE:return"#document";case pe.DOCUMENT_TYPE_NODE:return this.name;case pe.DOCUMENT_FRAGMENT_NODE:return"#document-fragment"}}get parentNode(){return this[u]}get ownerDocument(){return this[p]}get tagName(){return this[N]||null}get firstChild(){return this.childNodes&&this.childNodes[0]||null}get lastChild(){return this.childNodes&&this.childNodes[this.childNodes.length-1]||null}get previousSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>0)return e.childNodes[t-1]}return null}get nextSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>-1&&t=pe.TEXT_NODE&&this.nodeType<=pe.COMMENT_NODE&&(this.nodeValue=e)}getRootNode(){let e=this;for(;e.parentNode;)e=e.parentNode;return e}hasAttributes(){if(this.attributes)for(let e in this.attributes)if(this.attributes.hasOwnProperty(e))return!0;return!1}getAttributeNames(){return this.attributes?Object.keys(this.attributes):[]}getAttribute(e){var t;return this.attributes&&e&&"string"==typeof e&&(t=this.attributes[Ee(this,e)]),void 0===t?null:t}setAttribute(e,t){this.attributes&&e&&"string"==typeof e&&("class"===(e=Ee(this,e))?!0!==t?this.className=""+t:(this.classList.value="",this.attributes[e]=!0):this.attributes[e]="string"==typeof t||!0===t?t:""+t)}toggleAttribute(e,t){if(this.attributes&&e&&"string"==typeof e)return e=Ee(this,e),this.attributes.hasOwnProperty(e)?1!==arguments.length&&!1!==t||(delete this.attributes[e],!1):(1===arguments.length||!0===t)&&(this.attributes[e]=!0)}removeAttribute(e){this.attributes&&e&&"string"==typeof e&&("class"===(e=Ee(this,e))&&this[he]&&(this[he].value=null),delete this.attributes[e])}hasAttribute(e){return!(!this.attributes||!e||"string"!=typeof e)&&this.attributes.hasOwnProperty(Ee(this,e))}hasChildNodes(){return!!this.childNodes&&this.childNodes.length>0}appendChild(e){return this.insertBefore(e,null)}insertBefore(e,t){if(this.childNodes&&e instanceof pe&&arguments.length>1){let s=-1;if(null==t?s=this.childNodes.length:t instanceof pe&&t.parentNode===this&&(s=this.childNodes.indexOf(t)),-1!==s)return fe(this,e,s)}return null}replaceChild(e,t){return this.childNodes&&t instanceof pe&&e instanceof pe&&t.parentNode===this&&t!==e?(fe(this,e,this.childNodes.indexOf(t),1),t):null}removeChild(e){if(this.childNodes&&e instanceof pe&&e.parentNode===this){const t=this.childNodes.indexOf(e),s=O(this);return s&&e.parentNode===s.documentElement&&Ne.hasOwnProperty(e.tagName)&&(s[Ne[e.tagName]]=null),x(this.childNodes.splice(t,1)),e}return null}cloneNode(e){var t;switch(t=this.nodeType===pe.DOCUMENT_NODE||this.nodeType===pe.DOCUMENT_FRAGMENT_NODE?new Xe(null,this[f]):ue(this.nodeType),this.nodeType){case pe.ELEMENT_NODE:t[N]=this.tagName,t.attributes=Object.assign(t.attributes,this.attributes);break;case pe.TEXT_NODE:case pe.CDATA_SECTION_NODE:case pe.PROCESSING_INSTRUCTION_NODE:case pe.COMMENT_NODE:t.nodeValue=this.nodeValue;break;case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:t[d]=this.nodeType,t.entityEncoder.entities=this.entityEncoder;break;case pe.DOCUMENT_TYPE_NODE:t.name=this.name,t.publicId=this.publicId,t.systemId=this.systemId}if(!0===e&&this.childNodes&&this.childNodes.length>0){for(let e=0;e{if(s.id===e)return t=s,!1})),t}getElementsByClassName(e){var t=[];if(e&&"string"==typeof e){const s=e.trim().split(g);(s.length>1||""!==s[0])&&this.forEach((e=>{for(let t=0;t{"*"!==e&&s.tagName!==e||t.push(s)}))),t}closest(e){return e&&"string"==typeof e?function(e,t){const s=j(t);let i=e;for(;null!=i&&i[d]===pe.ELEMENT_NODE;){if(ie(e,i,s))return i;i=i[u]}return null}(this,e):null}matches(e){return!(!e||"string"!=typeof e)&&function(e,t){return ie(e,e,j(t))}(this,e)}querySelector(e){return e&&"string"==typeof e?se(this,e,!1):null}querySelectorAll(e){return e&&"string"==typeof e?se(this,e,!0):[]}forEach(e,t=E.ELEMENT_NODE){let s,i,r=this.childNodes,n=this.firstChild,o=[],a=0;for(;n;){if(s=n[u],i=r[a+1],(null===t||n.nodeType===t)&&!1===e(n,s))return;if(n[u]===s&&n.childNodes&&n.childNodes.length>0)o.push(a),r=n.childNodes,n=r[a=0];else{for(i?(a+=1,i!==r[a]&&(a=s.childNodes.indexOf(i))):a=r.length;null==r[a];){if(n=s,s=n[u],!n||n===this)return;r=s.childNodes,a=o.pop()+1}n=r[a]}}}}Object.defineProperties(pe,{ELEMENT_NODE:{value:E.ELEMENT_NODE},TEXT_NODE:{value:E.TEXT_NODE},CDATA_SECTION_NODE:{value:E.CDATA_SECTION_NODE},PROCESSING_INSTRUCTION_NODE:{value:E.PROCESSING_INSTRUCTION_NODE},COMMENT_NODE:{value:E.COMMENT_NODE},DOCUMENT_NODE:{value:E.DOCUMENT_NODE},DOCUMENT_TYPE_NODE:{value:E.DOCUMENT_TYPE_NODE},DOCUMENT_FRAGMENT_NODE:{value:E.DOCUMENT_FRAGMENT_NODE}});const Ne={HEAD:l,BODY:h,FRAMESET:h};function fe(e,t,s,i=0){if(!e||e.nodeType!==pe.ELEMENT_NODE&&e.nodeType!==pe.DOCUMENT_NODE&&e.nodeType!==pe.DOCUMENT_FRAGMENT_NODE||e.nodeType===pe.ELEMENT_NODE&&!0===T[e.tagName])return t;if(t.nodeType<=pe.COMMENT_NODE){if(e.parentNode&&e.parentNode.nodeType===pe.DOCUMENT_NODE&&Ne.hasOwnProperty(t.tagName)){const s=Ne[t.tagName];if(e.parentNode[s]&&0===i)return t;e.parentNode[s]=t}t.parentNode&&t.parentNode.removeChild(t),y(t,e),x(e.childNodes.splice(s,i,t))}else if(t.nodeType!==pe.DOCUMENT_TYPE_NODE||e.nodeType!==pe.DOCUMENT_NODE&&e.nodeType!==pe.DOCUMENT_FRAGMENT_NODE){if(t.nodeType===pe.DOCUMENT_FRAGMENT_NODE)if(e.parentNode&&e.parentNode.nodeType===pe.DOCUMENT_NODE){i>0&&x(e.childNodes.splice(s,i));for(let r=t.childNodes.length-1;r>=0;r--){const n=t.childNodes[r];if(Ne.hasOwnProperty(n.tagName)){const t=Ne[n.tagName];if(e.parentNode[t]&&0===i)continue;e.parentNode[t]=n}y(n,e),e.childNodes.splice(s,0,n),t.childNodes.splice(r,1)}}else if(t!==O(e)){for(let s=0;s":!0,"/":!0,"=":!0},ye={P:!0},Ce={DT:!0,DD:!0},be={TBODY:!0,THEAD:!0,TFOOT:!0},De={TD:!0,TH:!0},we={BUTTON:!0,DATALIST:!0,OPTGROUP:!0,OPTION:!0,PROGRESS:!0,SELECT:!0,TEXTAREA:!0},Se={ADDRESS:ye,ARTICLE:ye,ASIDE:ye,BLOCKQUOTE:ye,DIV:ye,FIELDSET:ye,FOOTER:ye,H1:ye,H2:ye,H3:ye,H4:ye,H5:ye,H6:ye,HEADER:ye,HGROUP:ye,HR:ye,MAIN:ye,NAV:ye,P:ye,PRE:ye,SECTION:ye,BODY:{HEAD:!0,TITLE:!0},DL:ye,DD:Ce,DT:Ce,TABLE:ye,TBODY:be,THEAD:be,TD:De,TFOOT:be,TH:De,TR:{TR:!0},LI:{LI:!0},OL:ye,UL:ye,BUTTON:we,DATALIST:we,FORM:ye,INPUT:we,OPTGROUP:{OPTGROUP:!0,OPTION:!0},OPTION:{OPTION:!0},OUTPUT:we,PROGRESS:we,SELECT:we,TEXTAREA:we};class _e{constructor(e,t,s){this.options=_e.setupOptions(t),this.lexer=new r(e),this.entityEncoder=s}static setupOptions(e){return(e=Object.assign({},Oe,e)).encodeEntities instanceof RegExp&&(e.encodeEntities=C(e.encodeEntities)),Object.freeze(e)}static isNameCharStart(e){return":"===e||"_"===e||e>="A"&&e<="Z"||e>="a"&&e<="z"||e>="À"&&e<="Ö"||e>="Ø"&&e<="ö"||e>="ø"&&e<="˿"||e>="Ͱ"&&e<="ͽ"||e>="Ϳ"&&e<="῿"||"‌"===e||"‍"===e||e>="⁰"&&e<="↏"||e>="Ⰰ"&&e<="⿯"||e>="、"&&e<="퟿"||e>="豈"&&e<="﷏"||e>="ﷰ"&&e<="�"||e>="က0"&&e<="F"}static isNameChar(e){return _e.isNameCharStart(e)||e>="0"&&e<="9"||"-"===e||"."===e||"·"===e||e>="̀"&&e<="ͯ"||"‿"===e||"⁀"===e}parseHTML(){var e,t=ue(pe.DOCUMENT_FRAGMENT_NODE),s=[t];for(t[f]=this.options,e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();e!==i&&s.length>0;)"<"===e?this.parseTag(s):this.parseText(s),e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();return t}parseTag(e){var t,s,r,n,o=0,a=this.lexer.index,l=this.lexer.getNextChar();if(l!==i)e:for(;">"!==l&&l!==i;){if(r=this.lexer.index,0===o){if("!"===l||"?"===l){if(this.options.allowProcessingInstructions&&this.lexer.match("?")){r=this.lexer.index,l=this.lexer.getChar();t:if(_e.isNameCharStart(l)){for(t=ue(pe.PROCESSING_INSTRUCTION_NODE);l!==i&&_e.isNameChar(l);)l=this.lexer.getNextChar();if(!this.lexer.isWhiteSpace(l)&&l!==i&&("?"!==l||">"!==this.lexer.peek()))break t;t.target=this.lexer.str.slice(r,this.lexer.index),this.lexer.skipWhiteSpace(),r=this.lexer.index,this.lexer.goToString("?>"),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(1),e[0].childNodes.push(t),y(t,e[0]);break}this.lexer.advance(r-this.lexer.index-1)}if(this.options.allowCDATA&&this.lexer.match("![CDATA[")){t=ue(pe.CDATA_SECTION_NODE),r=this.lexer.index,this.lexer.goToString("]]>"),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(2),e[0].childNodes.push(t),y(t,e[0]);break}if(this.lexer.match("!DOCTYPE",!1)){this.lexer.skipWhiteSpace(),r=this.lexer.index,this.lexer.goToString(">");let s=e[e.length-1];if(s.doctype)break;if(s.childNodes.length>0)for(let e=s.childNodes.length-1;e>=0;e--)if(s.childNodes[e].nodeTypepe.COMMENT_NODE)break e;let i=this.lexer.str.slice(r,this.lexer.index).split(g);if((t=ue(pe.DOCUMENT_TYPE_NODE)).name=Te.call(i.shift()),i.length>1){let e=Te.call(i.shift());if(i=i.join(" ").split('"'),""===i[0])switch(e){case"public":i.shift(),t.publicId=i.shift();case"system":i.shift(),t.systemId=i.shift()}}t.publicId||(t.publicId=""),t.systemId||(t.systemId=""),s.childNodes.push(t),s.doctype=t,y(t,s);break}{let s;this.lexer.match("!--")?this.lexer.match(">")||this.lexer.match("->")||(s="--\x3e"):("!"===l&&this.lexer.getNextChar(),s=">"),t=ue(pe.COMMENT_NODE),r=this.lexer.index,s&&this.lexer.goToString(s),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(s?s.length-1:-1),e[0].childNodes.push(t),y(t,e[0]);break}}"/"===l&&(l=this.lexer.getNextChar(),o=2,r+=1)}if(1===o){for(;this.lexer.index===r&&"="===l||!this.lexer.isWhiteSpace(l)&&!xe[l]&&l!==i;)l=this.lexer.getNextChar();n=this.lexer.index}else{for(;(l>="a"&&l<="z"||l>="A"&&l<="Z"||this.lexer.index>r&&(l>="0"&&l<="9"||"-"===l||"_"===l||":"===l))&&l!==i;)l=this.lexer.getNextChar();if(n=this.lexer.index,l===i)return void this.addTextNode(e,a,n,!1);l=this.lexer.skipWhiteSpace(),2===o&&(l=this.lexer.goToString(">"))}if(r===n){if(!this.options.allowSelfClosingSyntax||"/"!==l||">"!==this.lexer.peek()){if(0===o){this.lexer.goToString("<"),this.addTextNode(e,a,this.lexer.index,!1),a=this.lexer.index,l=this.lexer.getNextChar();continue}if(2===o){if(r===this.lexer.index)break;(t=this.addTextNode(e,r,this.lexer.index))[d]=pe.COMMENT_NODE;break}this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();continue}l=this.lexer.getNextChar(),o=2,s=e[0][N]}else s=this.lexer.str.slice(r,n),1!==o&&(s=me.call(s)),l=this.lexer.skipWhiteSpace();switch(o){case 0:for((t=ue(pe.ELEMENT_NODE))[N]=s;Se.hasOwnProperty(t[N])&&Se[t[N]][e[0][N]];)e.splice(0,1);e[0].childNodes.push(t),y(t,e[0]),o=1,!0!==T[t[N]]&&e.unshift(t);break;case 1:let a=!0;if(this.options.lowerAttributeCase&&(s=Te.call(s)),"="===l){if(this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace(),r=this.lexer.index,'"'===l||"'"===l)this.lexer.getNextChar(),this.lexer.goToString(l),n=this.lexer.index,r+=1,this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();else{for(;!(this.lexer.isWhiteSpace(l)|| -//!unquotedAttributeExclusions[theChar] && -">"===l||this.options.allowSelfClosingSyntax&&"/"===l&&">"===this.lexer.peek()||l===i);)l=this.lexer.getNextChar();n=this.lexer.index,l=this.lexer.skipWhiteSpace()}if(t.attributes.hasOwnProperty(s))break;a=this.lexer.str.slice(r,n),""===a?a=!0:this.options.decodeEntities&&(a=this.entityEncoder.decode(a))}else if(t.attributes.hasOwnProperty(s))break;t.attributes[s]=a;break;case 2:for(let i=0;i0&&e[0]!==t;)e.shift();e.shift();break}}}else this.addTextNode(e,a,this.lexer.index,!1);this.lexer.getNextChar()}parseText(e){var t=this.lexer.index,s=!1;"SCRIPT"===e[0][N]||"STYLE"===e[0][N]?(this.lexer.goToString(" ${Array.from(arguments).join(", ")} )`);const h=e.getContext("2d").getImageData(t,s,i,r),c=h.data,d=this.canvas[$e],u=r,p=i;for(let e=0;e ${Array.from(arguments).join(", ")} )`)}else console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${e.constructor.name}> ${Array.from(arguments).join(", ")} )`)}createImageData(e,t,s){return e instanceof Ae?new Ae(e.data,e.width,e.height):new Ae(e,t,s)}getImageData(e,t,s,i,r){if(0===e&&0===t&&s===this.canvas.width&&i===this.canvas.height&&!r)return console.log(`${this}→getImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`),new Ae(this.canvas[$e],this.canvas.width,this.canvas.height);console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(", ")} )`);return new Ae(s,i,r)}putImageData(e,t,s,i,r,n,o){let a,l;const h=this.canvas[$e];if(void 0!==i)console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(", ")} )`);else{if(0===t&&0===s&&e.width===this.canvas.width&&e.height===this.canvas.height){console.log(`${this}→putImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);for(let t=0;t[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/))||void 0===t?void 0:t.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(n=parseInt(i.r,16),o=parseInt(i.g,16),a=parseInt(i.b,16),l=i.a?parseInt(i.a,10):1,r=!0),i=null===(s=e.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/))||void 0===s?void 0:s.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(n=parseInt(i.r,16),o=parseInt(i.g,16),a=parseInt(i.b,16),l=i.a?parseInt(i.a,10):1,r=!0),r?{r:n,g:o,b:a,a:l}:(console.log(`Not a HTML color string: ${e}`),null)}const Le=Symbol("canvas-width"),Ue=Symbol("canvas-height"),ke=Symbol("canvas-context"),Pe=Symbol("element-id"),$e=Symbol("accesscanvas-data");class We extends pe{get width(){return console.debug(`${this}→width? (${this[Le]})`),this[Le]}get height(){return console.debug(`${this}→height? (${this[Ue]})`),this[Ue]}set width(e){console.debug(`${this}→width = ${e}`),this[Le]=e,this.resize(this[Le],this[Ue])}set height(e){console.debug(`${this}→height = ${e}`),this[Ue]=e,this.resize(this[Le],this[Ue])}getContext(e,t){if("2d"!=e)throw new Error(`Not implemented: ${e}`);if(this[ke]=this[ke]||new Me(this),!(this[ke]instanceof Me))throw new Error("Context invalid");return this[ke]}toDataURL(e="image/png",t){throw new Error("Not implemented")}toBlob(e,t="image/png",s){throw new Error("Not implemented")}get clientWidth(){return this.width}get clientHeight(){return this.height}constructor(){super(de),this[Pe]=(Math.random()*Math.pow(36,6)|0).toString(36),this.resize(300,150)}get[Symbol.toStringTag](){return`HTMLCanvasElement#${this[Pe]}`}resize(e,t){this[Le]=e,this[Ue]=t,this[$e]=new Uint8ClampedArray(this[Le]*this[Ue]*4),console.debug(`${this}→reset, new size: ${this[Le]}x${this[Ue]} (${this[$e].length}b)`)}}globalThis&&"object"!=typeof globalThis.HTMLCanvasElement&&(globalThis.HTMLCanvasElement=We);const Ge=/&(#\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,je=/[\^$\\.*+?()[\]{}|]/g,Be=Ye({amp:"&",apos:"'",copy:169,gt:">",lt:"<",nbsp:160,quot:'"'});let He=Be;class Fe{constructor(e){this.entities=e||"default"}encode(e,t){return this.encodingReplacements?e.replace(t instanceof RegExp?C(t):this.encodingRE,(e=>this.encodingReplacements[e]||e)):e}decode(e){return this.decodingReplacements?e.replace(Ge,((e,t)=>"#"===t[0]?(t="x"===t[1]||"X"===t[1]?0|parseInt(t.slice(2),16):0|t.slice(1),String.fromCodePoint(t)):this.decodingReplacements[t]||this.decodingReplacements[t.toLowerCase()]||e)):e}set entities(e){"default"===e?e=He:e&&e.encodingRE instanceof RegExp||(e=Ye(e)),this.encodingRE=e.encodingRE,this.encodingReplacements=e.encodingReplacements,this.decodingReplacements=e.decodingReplacements}static set defaultEntities(e){He=e&&"object"==typeof e?Ye(Object.assign({},e)):Be}}function Ye(e){var t={encodingRE:null,encodingReplacements:null,decodingReplacements:null};if(e&&"object"==typeof e){const s={},i={},r=[];for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];if(Number.isFinite(n))n=String.fromCodePoint(n);else if("string"!=typeof n||""===n)continue;r.push(n.replace(je,"\\$&")),(!s.hasOwnProperty(n)||t.length+20&&(t.encodingRE=new RegExp(r.join("|"),"g"),t.encodingReplacements=s,t.decodingReplacements=i)}return t.encodingRE||(t.encodingRE=new RegExp("(?:)","g")),t}const Ve=Symbol("entityEncoder");class Xe extends pe{constructor(e,t){const s=ue(pe.DOCUMENT_FRAGMENT_NODE,Xe);return s[f]=_e.setupOptions(t),s[Ve]=new Fe(s[f].entities),s.innerHTML=e,s}get documentElement(){return this[c]||null}get innerHTML(){let e="";for(let t=0;t0)return t[0].textContent}return""}set title(e){const t=this.head;if(t){let s=t.getElementsByTagName("title");s=s.length<=0?t.appendChild(this.createElement("title")):s[0],s.textContent=e}}get body(){return this[h]||null}set body(e){e instanceof pe&&e.nodeType===pe.ELEMENT_NODE&&("BODY"===e.tagName||"FRAMESET"===e.tagName)&&e!==this[h]&&this[c]&&(this[h]?this[h].parentNode.replaceChild(e,this[h]):this[c].appendChild(e))}get entityEncoder(){return this[Ve]}createElement(e){if(e&&"string"==typeof e){const t=function(e){if("canvas"===e.toLowerCase())return function(e){const t=new We;switch(t[d]=e,t.nodeValue=null,t[u]=null,t[p]=null,e){case pe.ELEMENT_NODE:t[N]=null,t.attributes={};case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:t.childNodes=[]}return t}(pe.ELEMENT_NODE);return ue(pe.ELEMENT_NODE)}(e);return t[N]=e.toUpperCase(),t}}createTextNode(e){return ze(pe.TEXT_NODE,e)}createComment(e){return ze(pe.COMMENT_NODE,e)}createCDATASection(e){return ze(pe.CDATA_SECTION_NODE,e,"]]>")}createProcessingInstruction(e,t){e:if(e&&"string"==typeof e){if(!_e.isNameCharStart(e[0]))break e;for(let t=1;t");return s.target=e,s}throw new Error("Invalid target name "+JSON.stringify(e)+".")}createDocumentType(e,t,s){return qe(ue(pe.DOCUMENT_TYPE_NODE),e,t,s)}getElementsByName(e){const t=[];return e&&"string"==typeof e&&this.forEach((s=>{s.attributes&&s.attributes.name===e&&t.push(s)})),t}}function ze(e,t,s=!1){const i=ue(e);if(i.nodeValue="",t&&"string"==typeof t){if(s&&"string"==typeof s&&-1!==t.indexOf(s))throw new Error("The data provided ('"+t+"') contains '"+s+"'.");i.nodeValue+=t}return i}function qe(e,t,s,i){return t&&"string"==typeof t?(e.name=t.toLowerCase(),e.publicId=s&&"string"==typeof s?s:"",e.systemId=i&&"string"==typeof i?i:""):e.name=e.publicId=e.systemId="",e}Xe.Node=pe,Xe.EntityEncoder=Fe,module.exports=Xe; diff --git a/lib/fauxdom-with-canvas.cjs.map b/lib/fauxdom-with-canvas.cjs.map deleted file mode 100644 index b72730f..0000000 --- a/lib/fauxdom-with-canvas.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fauxdom-with-canvas.cjs","sources":["../src/lexer.js","../src/event-target.js","../src/utils.js","../src/token-list.js","../src/css-style-declaration.js","../src/selector-parser.js","../src/selectors.js","../src/serializer.js","../src/node.js","../src/html-parser.js","../src/js-canvas/ImageData.js","../src/js-canvas/RenderingContext.js","../src/js-canvas/HTMLCanvasElement.js","../src/canvas-node.js","../src/entity-encoder.js","../src/document.js"],"sourcesContent":["const reCache = {},\n\twhitespaces = {},\n\tisWhiteSpace = Object.prototype.hasOwnProperty.bind( whitespaces ),\n\tEOF = null;\n\nexport {whitespaces, EOF};\n\nexport class Lexer\n{\n\tconstructor( str )\n\t{\n\t\tthis.index = 0;\n\t\tthis.str = str;\n\t\tthis.scanChar = this.str[this.index];\n\t\t\n\t\tif ( !isWhiteSpace( \"\\x20\" ) )\n\t\t{\n\t\t\t// Unicode C0 & C1 control characters are treated as whitespace, along with the ASCII space character.\n\t\t\tfor ( let i = 0; i <= 0x20; i++ )\n\t\t\t\twhitespaces[String.fromCharCode( i )] = null;\n\t\t\tfor ( let i = 0x80; i <= 0x9f; i++ )\n\t\t\t\twhitespaces[String.fromCharCode( i )] = null;\n\t\t}\n\t}\n\t\n\tisWhiteSpace( theChar )\n\t{\n\t\treturn (theChar !== EOF && isWhiteSpace( theChar ));\n\t}\n\t\n\tgoToString( toChar, caseSensitive )\n\t{\n\t\tif ( caseSensitive !== false )\n\t\t\tthis.index = this.str.indexOf( toChar, this.index );\n\t\telse\n\t\t{\n\t\t\tif ( !reCache[toChar] )\n\t\t\t\treCache[toChar] = new RegExp( toChar, \"ig\" );\n\t\t\t\n\t\t\treCache[toChar].lastIndex = this.index;\n\t\t\t\n\t\t\tconst match = reCache[toChar].exec( this.str );\n\t\t\tif ( match ) this.index = match.index;\n\t\t\telse this.index = -1;\n\t\t}\n\t\t\n\t\tif ( this.index > -1 )\n\t\t\tthis.scanChar = this.str[this.index];\n\t\telse\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\tthis.scanChar = EOF;\n\t\t}\n\t}\n\t\n\tgoToIndex( index )\n\t{\n\t\tthis.scanChar = this.str[this.index = index];\n\t}\n\t\n\tadvance( amount )\n\t{\n\t\tthis.index += amount;\n\t\tif ( this.index > this.str.length )\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\treturn (this.scanChar = EOF);\n\t\t}\n\t\treturn (this.scanChar = this.str[this.index]);\n\t}\n\t\n\tmatch( str, caseSensitive )\n\t{\n\t\tvar chunk = this.str.substr( this.index, str.length );\n\t\tif ( caseSensitive === false )\n\t\t{\n\t\t\tstr = str.toLowerCase();\n\t\t\tchunk = chunk.toLowerCase();\n\t\t}\n\t\tif ( chunk === str )\n\t\t{\n\t\t\tthis.index += str.length-1;\n\t\t\tthis.getNextChar();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tpeek()\n\t{\n\t\treturn this.str[this.index + 1];\n\t}\n\t\n\tgetChar()\n\t{\n\t\treturn this.scanChar;\n\t}\n\t\n\tgetNextChar()\n\t{\n\t\tif ( this.index + 1 < this.str.length )\n\t\t\treturn (this.scanChar = this.str[++this.index]);\n\t\telse\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\treturn (this.scanChar = EOF);\n\t\t}\n\t}\n\t\n\tgetNextAfterWhiteSpace()\n\t{\n\t\tvar theChar;\n\t\tdo theChar = this.getNextChar();\n\t\twhile ( theChar !== EOF && isWhiteSpace( theChar ) )\n\t\treturn theChar;\n\t}\n\t\n\tskipWhiteSpace()\n\t{\n\t\tvar theChar = this.scanChar;\n\t\t\n\t\twhile ( theChar !== EOF && isWhiteSpace( theChar ) )\n\t\t\ttheChar = this.getNextChar();\n\t\t\n\t\treturn this.scanChar;\n\t}\n}","// Implementation of the HTML EventTarget API\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\nconst EVENT_LISTENERS = Symbol(\"event-listeners\");\n\nexport default class EventTarget {\n\taddEventListener( eventType, callback, useCaptureOrOptions )\n\t{\n\t\t// Lazily create the event listener map on the node\n\t\tthis[EVENT_LISTENERS] = this[EVENT_LISTENERS] ?? new Map();\n\n\t\t// Registered listeners for this eventType\n\t\tlet listeners = this[EVENT_LISTENERS].get(eventType);\n\t\tif (!listeners) {\n\t\t\tlisteners = [];\n\t\t\tthis[EVENT_LISTENERS].set(eventType, listeners);\n\t\t}\n\n\t\t// Capturing and non-capturing listeners need to be removed separately\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#sect1\n\t\t// TODO: handle other options? (once, passive, signal)\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#options\n\t\tlisteners.push({\n\t\t\tcallback,\n\t\t\tcapturing: useCaptureOrOptions === true || !!useCaptureOrOptions?.capture,\n\t\t\toptions: typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions : { capture: !!useCaptureOrOptions }\n\t\t});\n\t}\n\n\tremoveEventListener( eventType, callback, useCaptureOrOptions )\n\t{\n\t\t// There aren't any listeners registered\n\t\tif (!this[EVENT_LISTENERS]) return;\n\n\t\t// Registered listeners for this eventType\n\t\tlet listeners = this[EVENT_LISTENERS].get(eventType);\n\t\tif (!listeners) return;\n\n\t\t// Extract the boolean capture value from the different possible argument formats\n\t\tconst captureSetting = !!(typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions.capture : useCaptureOrOptions);\n\n\t\t// Find the indexes of listeners we want to remove, then remove them from the listeners array\n\t\t// A listener must match the callback object (function) and capture setting (true/false)\n\t\t// We remove the elements in reverse index order to avoid the indexes changing\n\t\tlisteners.map((listener, i) => {\n\t\t\treturn listener.callback === callback && listener.capturing === captureSetting ? i : undefined\n\t\t})\n\t\t\t.reverse()\n\t\t\t.forEach(i => {\n\t\t\t\tif (i !== undefined) listeners.splice(i, 1)\n\t\t\t});\n\t}\n\n\tdispatchEvent( event )\n\t{\n\t\tlet notCancelled = true;\n\n\t\t// There aren't any listeners registered\n\t\tif (!this[EVENT_LISTENERS]) return notCancelled;\n\n\t\t// List active listeners\n\t\tconst listeners = this[EVENT_LISTENERS].get(event.type) ?? [];\n\n\t\t// Dispatch the event for every listener\n\t\t// TODO: handle 'once', 'passive' options, bubbling & capture\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\n\t\tlisteners?.forEach(({ callback }) => {\n\t\t\tcallback(event);\n\n\t\t\t// The event has been canceled through preventDefault()\n\t\t\tif (event.defaultPrevented) notCancelled = false;\n\t\t});\n\n\t\treturn notCancelled;\n\t}\n\n}\n","const DOCTYPE = Symbol( \"doctype\" ),\n\tHEAD = Symbol( \"head\" ),\n\tBODY = Symbol( \"body\" ),\n\tDOCUMENT_ELEMENT = Symbol( \"documentElement\" ),\n\tNODE_TYPE = Symbol( \"nodeType\" ),\n\tPARENT_NODE = Symbol( \"parentNode\" ),\n\tOWNER = Symbol( \"ownerDocument\" ),\n\tTAG_NAME = Symbol( \"tagName\" ),\n\tPARSER_OPTIONS = Symbol( \"parserOptions\" ),\n\t\n\tspacesRE = /\\s+/g,\n/* @START_BROWSER_ONLY */\n\treFlagsRE = /[gimsuy]*$/,\n/* @END_BROWSER_ONLY */\n\t\n\tnodeTypes = {\n\t\tELEMENT_NODE: 1,\n\t\t//ATTRIBUTE_NODE: 2, // Unused\n\t\tTEXT_NODE: 3,\n\t\tCDATA_SECTION_NODE: 4,\n\t\t//ENTITY_REFERENCE_NODE: 5, // Unused, historical\n\t\t//ENTITY_NODE: 6, // Unused, historical\n\t\tPROCESSING_INSTRUCTION_NODE: 7,\n\t\tCOMMENT_NODE: 8,\n\t\tDOCUMENT_NODE: 9,\n\t\tDOCUMENT_TYPE_NODE: 10,\n\t\tDOCUMENT_FRAGMENT_NODE: 11,\n\t\t//NOTATION_NODE: 12 // Unused, historical\n\t},\n\t\n\tselfClosingTags = {\n\t\t\"AREA\": true,\n\t\t\"BASE\": true,\n\t\t\"BR\": true,\n\t\t\"COL\": true,\n\t\t\"COMMAND\": true,\n\t\t\"EMBED\": true,\n\t\t\"HR\": true,\n\t\t\"IMG\": true,\n\t\t\"INPUT\": true,\n\t\t\"KEYGEN\": true,\n\t\t\"LINK\": true,\n\t\t\"META\": true,\n\t\t\"PARAM\": true,\n\t\t\"SOURCE\": true,\n\t\t\"TRACK\": true,\n\t\t\"WBR\": true\n\t};\n\nexport {DOCTYPE, HEAD, BODY, DOCUMENT_ELEMENT, NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME, PARSER_OPTIONS, spacesRE, nodeTypes, selfClosingTags};\n\nexport function setupDocument( document )\n{\n\tvar firstElementPosition = -1,\n\t\tdocumentElementPosition = -1,\n\t\tdocumentTagName = \"HTML\";\n\t\n\tif ( document[DOCTYPE] && document[PARSER_OPTIONS].allowCustomRootElement )\n\t\tdocumentTagName = document[DOCTYPE].name.toUpperCase();\n\t\n\tfor ( let i = 0, l = document.childNodes.length; i < l; i++ )\n\t\tif ( document.childNodes[i].tagName === documentTagName )\n\t\t{\n\t\t\tdocumentElementPosition = i;\n\t\t\t\n\t\t\tdocument[NODE_TYPE] = nodeTypes.DOCUMENT_NODE;\n\t\t\tdocument[DOCUMENT_ELEMENT] = document.childNodes[i];\n\t\t\tdocument[HEAD] = document[BODY] = null;\n\t\t\tfor ( let k = 0; k < document[DOCUMENT_ELEMENT].childNodes.length; k++ )\n\t\t\t{\n\t\t\t\tconst node = document[DOCUMENT_ELEMENT].childNodes[k];\n\t\t\t\t\n\t\t\t\tswitch ( node.tagName )\n\t\t\t\t{\n\t\t\t\t\tcase \"HEAD\": document[HEAD] = node; break;\n\t\t\t\t\t\n\t\t\t\t\tcase \"BODY\":\n\t\t\t\t\tcase \"FRAMESET\":\n\t\t\t\t\t\tdocument[BODY] = node; break;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( document[HEAD] && document[BODY] ) break;\n\t\t\t}\n\t\t\t\n\t\t\tif ( firstElementPosition !== -1 )\n\t\t\t{\n\t\t\t\tconst newParent = document[HEAD] || document[BODY] || document[DOCUMENT_ELEMENT],\n\t\t\t\t\tcount = documentElementPosition - firstElementPosition;\n\t\t\t\tfor ( let k = firstElementPosition; k < documentElementPosition; k++ )\n\t\t\t\t\tsetNodeParent( document.childNodes[k], newParent );\n\t\t\t\tnewParent.childNodes.splice( 0, 0, ...document.childNodes.splice( firstElementPosition, count ) );\n\t\t\t\tdocumentElementPosition -= count;\n\t\t\t\tl -= count;\n\t\t\t}\n\t\t\t\n\t\t\tif ( documentElementPosition < l - 1 )\n\t\t\t{\n\t\t\t\tconst newParent = document[BODY] || document[HEAD] || document[DOCUMENT_ELEMENT];\n\t\t\t\tfor ( let k = documentElementPosition + 1; k < l; k++ )\n\t\t\t\t\tsetNodeParent( document.childNodes[k], newParent );\n\t\t\t\tnewParent.childNodes.splice( newParent.childNodes.length, 0, ...document.childNodes.splice( documentElementPosition + 1 ) );\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\t}\n\t\telse if ( firstElementPosition === -1 && document.childNodes[i].nodeType === nodeTypes.ELEMENT_NODE )\n\t\t\tfirstElementPosition = i;\n}\n\nexport function getDocument( node )\n{\n\tconst owner = node[OWNER] || node.getRootNode();\n\tif ( owner[NODE_TYPE] === nodeTypes.DOCUMENT_NODE || owner[NODE_TYPE] === nodeTypes.DOCUMENT_FRAGMENT_NODE )\n\t\treturn owner;\n\treturn null;\n}\n\nexport function detachNodes( nodes )\n{\n\tif ( nodes && nodes.length > 0 ) for ( let i = 0; i < nodes.length; i++ )\n\t\tsetNodeParent( nodes[i], null );\n}\n\nexport function setNodeParent( node, parent )\n{\n\tconst owner = (parent !== null ? getDocument( parent ) : null);\n\t\n\tif ( node[OWNER] !== owner && node.hasChildNodes() )\n\t\tnode.forEach( node => {node[OWNER] = owner}, null );\n\t\n\tnode[PARENT_NODE] = parent;\n\tnode[OWNER] = owner;\n}\n\nexport function globalizeRegExp( re )\n{\n\tif ( !re.global )\n\t{\n\t\tlet flags = re.flags;\n\t/* @START_BROWSER_ONLY */\n\t\tif ( flags === undefined )\n\t\t\tflags = re.toString().match( reFlagsRE )[0];\n\t/* @END_BROWSER_ONLY */\n\t\tre = new RegExp( re.source, flags +\"g\" );\n\t}\n\treturn re;\n}","import {spacesRE} from \"./utils.js\";\n\nconst ELEMENT = Symbol( \"element\" ),\n\tLENGTH = Symbol( \"length\" ),\n\t\n\tvalidClassTokenRE = /^\\S+$/,\n\t\n\tindexOf = Array.prototype.indexOf,\n\tjoin = Array.prototype.join,\n\tsplice = Array.prototype.splice;\n\nexport function createTokenList( elem )\n{\n\tconst list = Object.create( DOMTokenList.prototype );\n\t\n\tlist[LENGTH] = 0;\n\tlist[ELEMENT] = elem;\n\tconst className = elem.className;\n\tif ( className ) list.value = className;\n\t\n\treturn list;\n}\n\nexport default class DOMTokenList\n{\n\tconstructor()\n\t{\n\t\tthrow new Error( \"Cannot directly instantiate DOMTokenList.\" );\n\t}\n\t\n\tget length() {return this[LENGTH]}\n\tset length( val ) {}\n\t\n\tget value()\n\t{\n\t\treturn join.call( this, \" \" );\n\t}\n\tset value( val )\n\t{\n\t\tif ( this[LENGTH] > 0 )\n\t\t\tfor ( let k in this ) if ( this.hasOwnProperty( k ) && isFinite( k ) )\n\t\t\t\tdelete this[k];\n\t\tthis[LENGTH] = 0;\n\t\t\n\t\tif ( typeof val === \"string\" )\n\t\t\tthis.add.apply( this, val.split( spacesRE ) );\n\t\telse delete this[ELEMENT].attributes.class;\n\t}\n\t\n\tadd()\n\t{\n\t\tfor ( let i = 0; i < arguments.length; i++ )\n\t\t\tif ( indexOf.call( this, arguments[i] ) === -1 && this.supports( arguments[i] ) )\n\t\t\t\tthis[this[LENGTH]++] = arguments[i];\n\t\tthis[ELEMENT].attributes.class = this.value;\n\t}\n\t\n\tremove()\n\t{\n\t\tfor ( let i = 0, idx; i < arguments.length; i++ )\n\t\t{\n\t\t\tidx = indexOf.call( this, arguments[i] );\n\t\t\tif ( idx !== -1 )\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t}\n\t\tthis[ELEMENT].attributes.class = this.value;\n\t}\n\t\n\titem( v )\n\t{\n\t\tif ( typeof v === \"number\" && v >= 0 && v < this[LENGTH] )\n\t\t\treturn this[v];\n\t}\n\t\n\ttoggle( token, force )\n\t{\n\t\tvar exists = false;\n\t\tif ( this.supports( token ) )\n\t\t{\n\t\t\tlet idx = indexOf.call( this, token );\n\t\t\tif ( idx !== -1 && force !== true )\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t\telse if ( force !== false )\n\t\t\t{\n\t\t\t\texists = true;\n\t\t\t\tif ( idx === -1 )\n\t\t\t\t\tthis[this[LENGTH]++] = token;\n\t\t\t}\n\t\t\tthis[ELEMENT].attributes.class = this.value;\n\t\t}\n\t\treturn exists;\n\t}\n\t\n\tcontains( token )\n\t{\n\t\treturn (indexOf.call( this, token ) !== -1);\n\t}\n\t\n\treplace( token, newToken )\n\t{\n\t\tvar idx = indexOf.call( this, token );\n\t\tif ( idx >= 0 && this.supports( newToken ) )\n\t\t{\n\t\t\tif ( indexOf.call( this, newToken ) === -1 )\n\t\t\t\tthis[idx] = newToken;\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t\tthis[ELEMENT].attributes.class = this.value;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tsupports( token )\n\t{\n\t\tif ( token && typeof token === \"string\" )\n\t\t\treturn token.match( validClassTokenRE );\n\t\treturn false;\n\t}\n}","// HTML \"style\" inline CSS property handling\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\n\n// style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; border-bottom-color: hotpink; -moz-animation-iteration-count: 1\"\nconst ELEMENT = Symbol( \"element\" );\n\n// Conversions between kebab-case and camelCase forms of the CSS property name\n// The rules are as described in https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\nfunction prop2dom(cssPropertyName) {\n\treturn cssPropertyName.replace(/-[a-z]/g, (r) => r.toUpperCase().substr(1));\n}\n// Note: dom2prop(dom2prop('camelCaseProp')) will work as expected so it's always safe\n// to use dom2prop to canonicalize property names in their kebab case (dashed) form\nfunction dom2prop(cssStyleDeclarationPropertyName) {\n\treturn cssStyleDeclarationPropertyName.replace(/[A-Z]/g, (r) => '-'+r.toLowerCase());\n}\n// In theory a valid CSS property (identifier) is more permissive, but in practice this covers all property names in use\nfunction valid(propertyName) {\n\tif (typeof propertyName !== 'string') return false;\n\t// Valid css property name\n\tif (propertyName.match(/^\\-?[a-z_-]*[a-z]$/)) return true;\n\t// Valid custom property\n\tif (propertyName.match(/^\\-\\-[A-Za-z_-]*[A-Za-z0-9]$/)) return true;\n\t// Valid DOM-style (camel case) property\n\tif (propertyName.match(/^[a-zA-Z]+$/)) return true;\n\n\treturn false;\n}\n\n// Parses a style=\"\" attribute into a map of property-value pairs for easier alterations\nfunction styleToMap(styleString = \"\") {\n\treturn new Map(styleString.split(/\\s*;\\s*/g).filter(s => s.length).map(sd => sd.trim().match(/^([a-z-]+)\\s*:\\s*(.*)$/).slice(1)));\n}\n\n// Stringifies a map of property-value pairs back into a style=\"\" inline style attribute value\nfunction mapToStyle(styleMap) {\n\treturn Array.from(styleMap?.entries() ?? []).map(e => e.join(': ')).join('; ');\n}\n\nexport function createInlineStyle( elem )\n{\n\tconst styleObject = {\n\t\t[ELEMENT]: elem\n\t};\n\n\tconst styleProxy = new Proxy(styleObject, {\n\t\tget(target, name) {\n\t\t\tif (name === ELEMENT) return elem;\n\t\t\tif (!valid(name)) return undefined;\n\n\t\t\tconst prop = dom2prop(name);\n\n\t\t\treturn styleToMap(elem.attributes.style).get(prop);\n\t\t},\n\t\tset(target, name, value) {\n\t\t\t// Fail silently (return truthy value to avoid showing an TypeError)\n\t\t\tif (!valid(name)) return true;\n\n\t\t\tconst prop = dom2prop(name);\n\t\t\tconst map = styleToMap(elem.attributes.style);\n\n\t\t\telem.attributes.style = mapToStyle(map.set(prop, value));\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(target, name) {\n\t\t\tif (!valid(name)) return;\n\n\t\t\tconst prop = dom2prop(name);\n\t\t\tconst map = styleToMap(elem.attributes.style);\n\n\t\t\telem.attributes.style = mapToStyle(map.delete(prop));\n\t\t},\n\t});\n\n\treturn styleProxy;\n}\n\nexport function updateInlineStyle( style, value )\n{\n\t// Parse and re-stringify value to validate format\n\tconst styleValue = mapToStyle(styleToMap(value));\n\n\tstyle[ELEMENT].attributes.style = styleValue;\n}\n\nexport default class CSSStyleDeclaration {\n\tconstructor()\n\t{\n\t\tthrow new Error( \"Cannot directly instantiate CSSStyleDeclaration.\" );\n\t}\n}\n","import {Lexer, EOF} from \"./lexer.js\";\n\nconst newLinesRE = /\\r\\n|\\r|\\f/g,\n\tanbSyntaxRE = /\\(\\s*(even|odd|(?:(?:([+-]?\\d*)n)\\s*(?:([+-])\\s*(\\d+))?|([+-]?\\d+)))\\s*/g;\n\nconst ParamTypes = {\n\tSelectors: 0,\n\tIdentifier: 1,\n\tIterator: 2,\n\tIteratorOf: 3\n};\n\nconst paramExpectations = {\n\t\"is\": ParamTypes.Selectors,\n\t\"not\": ParamTypes.Selectors,\n\t\"where\": ParamTypes.Selectors, // Alias of :is()\n\t\"has\": ParamTypes.Selectors,\n\t\n\t\"lang\": ParamTypes.Identifier, // Not implementing\n\t\"dir\": ParamTypes.Identifier, // Not implementing\n\t\n\t\"nth-child\": ParamTypes.IteratorOf,\n\t\"nth-last-child\": ParamTypes.IteratorOf,\n\t\n\t\"nth-of-type\": ParamTypes.Iterator,\n\t\"nth-last-of-type\": ParamTypes.Iterator,\n\t\"nth-col\": ParamTypes.Iterator, // Not implementing\n\t\"nth-last-col\": ParamTypes.Iterator, // Not implementing\n};\n\n// https://drafts.csswg.org/selectors-4/\n\nexport function parseSelector( selector )\n{\n\treturn parseSelectorList( new Lexer( selector.replace( newLinesRE, \"\\n\" ) ) );\n}\n\nfunction parseSelectorList( lexer, terminator = EOF, relative = false )\n{\n\tvar theChar = lexer.skipWhiteSpace(),\n\t\tselector = {},\n\t\tcompound = [],\n\t\tcomplex = [compound],\n\t\tast = [complex];\n\t\n\twhile ( theChar !== EOF && theChar !== terminator )\n\t{\n\t\tswitch ( theChar )\n\t\t{\n\t\t\tcase \"*\": // https://drafts.csswg.org/selectors-4/#universal-selector\n\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\tthrow syntaxError( \"Universal selectors must come before all other simple selectors.\", lexer );\n\t\t\t\tselector.type = \"universal\";\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"#\":\n\t\t\tcase \".\":\n\t\t\t{\n\t\t\t\tlexer.getNextChar();\n\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\n\t\t\t\tselector.type = (theChar === \"#\" ? \"id\" : \"class\");\n\t\t\t\tselector.name = name;\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"[\": // https://drafts.csswg.org/selectors-4/#attribute-selectors\n\t\t\t{\n\t\t\t\tlexer.getNextAfterWhiteSpace();\n\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\n\t\t\t\tselector.type = \"attr\";\n\t\t\t\tselector.name = name;\n\t\t\t\tselector.comparison = \"=\";\n\t\t\t\tselector.value = true;\n\t\t\t\tselector.ignoreCase = false;\n\t\t\t\t\n\t\t\t\tif ( (theChar = lexer.getNextAfterWhiteSpace()) !== \"]\" )\n\t\t\t\t{\n\t\t\t\t\tswitch ( theChar )\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"=\": break;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"~\":\n\t\t\t\t\t\tcase \"|\":\n\t\t\t\t\t\tcase \"^\":\n\t\t\t\t\t\tcase \"$\":\n\t\t\t\t\t\tcase \"*\":\n\t\t\t\t\t\t\tif ( lexer.peek() !== \"=\" ) throw syntaxError( \"Expected '='.\", lexer, 1 );\n\t\t\t\t\t\t\tselector.comparison = theChar + selector.comparison;\n\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tdefault: throw syntaxError( \"Unexpected character '\"+ (theChar === EOF ? \"END_OF_INPUT\" : theChar) +\"'.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttheChar = lexer.getNextAfterWhiteSpace();\n\t\t\t\t\tif ( theChar === \"'\" || theChar === '\"' )\n\t\t\t\t\t{\n\t\t\t\t\t\t// https://drafts.csswg.org/css-syntax-3/#consume-string-token\n\t\t\t\t\t\tconst quote = theChar;\n\t\t\t\t\t\t\n\t\t\t\t\t\tselector.value = \"\";\n\t\t\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t\t\t\t\n\t\t\t\t\t\twhile ( theChar !== EOF && theChar !== quote && theChar !== \"\\n\" )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( theChar === \"\\\\\" )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tselector.value += parseEscapedCodePoint( lexer );\n\t\t\t\t\t\t\t\ttheChar = lexer.getChar();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tselector.value += theChar;\n\t\t\t\t\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\t\tselector.value = name;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( lexer.getNextAfterWhiteSpace() !== \"]\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst ident = parseIdentifier( lexer );\n\t\t\t\t\t\tif ( ident === \"i\" || ident === \"I\" )\n\t\t\t\t\t\t\tselector.ignoreCase = true;\n\t\t\t\t\t\telse if ( ident === \"s\" || ident === \"S\" )\n\t\t\t\t\t\t\tselector.ignoreCase = false;\n\t\t\t\t\t\telse if ( ident )\n\t\t\t\t\t\t\tthrow syntaxError( \"Unexpected identifier '\"+ ident +\"'.\", lexer, -ident.length + 1 );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( lexer.getNextAfterWhiteSpace() !== \"]\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Expected ']'.\", lexer, -1 + ident.length );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \":\":\n\t\t\t{\n\t\t\t\tlexer.getNextChar();\n\t\t\t\tif ( lexer.match( \":\" ) ) // https://drafts.csswg.org/selectors-4/#pseudo-elements\n\t\t\t\t{\n\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected a pseudo-element name.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"pseudo-element\";\n\t\t\t\t\tselector.name = name;\n\t\t\t\t}\n\t\t\t\telse // https://drafts.csswg.org/selectors-4/#pseudo-classes\n\t\t\t\t{\n\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected a pseudo-class name.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"pseudo-class\";\n\t\t\t\t\tselector.name = name;\n\t\t\t\t\t\n\t\t\t\t\tconst paramType = paramExpectations[name];\n\t\t\t\t\tif ( paramType != null )\n\t\t\t\t\t{\n\t\t\t\t\t\tselector.type = \"pseudo-fn\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( lexer.getNextChar() !== \"(\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Expected '('.\", lexer );\n\t\t\t\t\t\t\n\t\t\t\t\t\tswitch ( paramType )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase ParamTypes.IteratorOf: // https://drafts.csswg.org/selectors-4/#nth-child-pseudo\n\t\t\t\t\t\t\tcase ParamTypes.Iterator: // https://drafts.csswg.org/css-syntax-3/#anb-microsyntax\n\t\t\t\t\t\t\t\tlet A = 0, B = 0, ofSelector;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tanbSyntaxRE.lastIndex = lexer.index;\n\t\t\t\t\t\t\t\tconst match = anbSyntaxRE.exec( lexer.str );\n\t\t\t\t\t\t\t\tif ( !match ) throw syntaxError( \"Invalid parameter.\", lexer, 1 );\n\t\t\t\t\t\t\t\tlexer.advance( match[0].length );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( paramType === ParamTypes.IteratorOf )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\t\t\t\t\t\tconst savedIdx = lexer.index;\n\t\t\t\t\t\t\t\t\tif ( parseIdentifier( lexer ).toLowerCase() === \"of\" )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tconst chr = lexer.getNextChar();\n\t\t\t\t\t\t\t\t\t\tif ( chr !== \")\" && !lexer.isWhiteSpace( chr ) )\n\t\t\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected whitespace.\", lexer );\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tofSelector = parseSelectorList( lexer, \")\" );\n\t\t\t\t\t\t\t\t\t\tif ( !(ofSelector instanceof Array) || ofSelector.length === 0 )\n\t\t\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected at least one selector.\", lexer );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse lexer.goToIndex( savedIdx );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( lexer.skipWhiteSpace() !== \")\" )\n\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected ')'.\", lexer );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( match[1] === \"even\" || match[1] === \"odd\" )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tA = 2;\n\t\t\t\t\t\t\t\t\tif ( match[1] === \"odd\" ) B = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if ( match[5] ) // We found just an integer.\n\t\t\t\t\t\t\t\t\tB = parseInt( match[5], 10 );\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif ( match[2] === \"-\" ) A = -1;\n\t\t\t\t\t\t\t\t\telse if ( !match[2] || match[2] === \"+\" ) A = 1;\n\t\t\t\t\t\t\t\t\telse A = parseInt( match[2], 10 );\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif ( match[3] )\n\t\t\t\t\t\t\t\t\t\tB = parseInt( match[3] + match[4], 10 );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tselector.params = [A, B];\n\t\t\t\t\t\t\t\tif ( ofSelector ) selector.params.push( ofSelector );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase ParamTypes.Selectors:\n\t\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\t\tselector.params = parseSelectorList( lexer, \")\", true );\n\t\t\t\t\t\t\t\tif ( selector.params.length === 0 )\n\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected at least one selector.\", lexer );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase ParamTypes.Identifier:\n\t\t\t\t\t\t\t\tif ( isIdentifierStart( lexer.getNextAfterWhiteSpace() ) )\n\t\t\t\t\t\t\t\t\tselector.params = [parseIdentifier( lexer )];\n\t\t\t\t\t\t\t\telse throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( lexer.skipWhiteSpace() !== \")\" ) throw syntaxError( \"Expected ')'.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\t// Having this branch here allows custom functional pseudo-classes with\n\t\t\t\t\t// these names to be defined by the user.\n\t\t\t\t\telse if ( name === \"before\" || name === \"after\" || name === \"first-line\" || name === \"first-letter\" )\n\t\t\t\t\t\tselector.type = \"pseudo-element\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// https://drafts.csswg.org/selectors-4/#combinators\n\t\t\tcase \"+\":\n\t\t\tcase \">\":\n\t\t\tcase \"~\":\n\t\t\t\tif ( compound.length === 0 )\n\t\t\t\t{\n\t\t\t\t\tif ( complex.length === 1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tif ( relative )\n\t\t\t\t\t\t\tcomplex.unshift( [{type: \"pseudo-class\", name: \"scope\"}] );\n\t\t\t\t\t\telse throw syntaxError( \"Absolute selectors cannot start with a combinator.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof complex[complex.length - 2] === \"string\" )\n\t\t\t\t\t\tthrow syntaxError( \"Cannot have multiple combinators in a row.\", lexer );\n\t\t\t\t\tcomplex.splice( complex.length - 1, 0, theChar );\n\t\t\t\t}\n\t\t\t\telse complex.push( theChar, compound = [] );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \",\":\n\t\t\t\tif ( compound.length === 0 )\n\t\t\t\t{\n\t\t\t\t\tif ( complex.length > 1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tcomplex.pop();\n\t\t\t\t\t\tif ( typeof complex[complex.length - 1] === \"string\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Complex selectors are not allowed to end with a combinator.\", lexer, -1 );\n\t\t\t\t\t\tast.push( complex = [compound] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse ast.push( complex = [compound = []] );\n\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tdefault:\n\t\t\t\tif ( lexer.isWhiteSpace( theChar ) )\n\t\t\t\t{\n\t\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\t\tcomplex.push( compound = [] );\n\t\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\t\tlexer.advance( -1 );\n\t\t\t\t}\n\t\t\t\telse if ( isIdentifierStart( theChar ) )\n\t\t\t\t{\n\t\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\t\tthrow syntaxError( \"Type (tag name) selectors must come before all other simple selectors.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"type\";\n\t\t\t\t\t// We'll always have a valid identifier here, thanks to\n\t\t\t\t\t// the isIdentifierStart() above.\n\t\t\t\t\tselector.name = parseIdentifier( lexer ).toUpperCase();\n\t\t\t\t\t\n\t\t\t\t\tcompound.push( selector );\n\t\t\t\t\tselector = {};\n\t\t\t\t}\n\t\t\t\telse throw syntaxError( \"Unexpected character '\"+ theChar +\"'.\", lexer );\n\t\t}\n\t\ttheChar = lexer.getNextChar();\n\t}\n\t\n\tif ( compound.length === 0 )\n\t{\n\t\tif ( complex.length === 1 )\n\t\t{\n\t\t\tast.pop();\n\t\t\tcomplex = ast[ast.length - 1];\n\t\t}\n\t\telse complex.pop();\n\t}\n\t\n\tif ( complex && typeof complex[complex.length - 1] === \"string\" )\n\t\tthrow syntaxError( \"Complex selectors are not allowed to end with a combinator.\", lexer, -1 );\n\t\n\treturn ast;\n}\n\nfunction syntaxError( message, lexer, offset = 0 )\n{\n\tvar error = new SyntaxError( message ),\n\t\tcolumn = lexer.index + offset;\n\terror.stack = \"SyntaxError: \"+ message +\"\\n\\n\"+ lexer.str +\"\\n\"+ \" \".repeat( column ) +\"^\\n at index \"+ column;\n\treturn error;\n}\n\n// https://drafts.csswg.org/css-syntax-3/#consume-name\nfunction parseIdentifier( lexer )\n{\n\tvar name = \"\",\n\t\ttheChar = lexer.getChar();\n\t\n\tif ( isIdentifierStart( theChar ) )\n\t{\n\t\tdo\n\t\t{\n\t\t\tif ( theChar === \"\\\\\" )\n\t\t\t{\n\t\t\t\tname += parseEscapedCodePoint( lexer );\n\t\t\t\ttheChar = lexer.getChar();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tname += theChar;\n\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t}\n\t\t}\n\t\twhile ( theChar !== EOF && (isIdentifierStart( theChar ) || (theChar >= \"0\" && theChar <= \"9\") || theChar === \"-\") )\n\t\tlexer.advance( -1 );\n\t}\n\t\n\treturn name;\n}\n\n// https://drafts.csswg.org/css-syntax-3/#consume-escaped-code-point\nfunction parseEscapedCodePoint( lexer )\n{\n\tvar theChar = lexer.getNextChar();\n\t\n\tif ( isHexDigit( theChar ) )\n\t{\n\t\tlet codePoint = \"\";\n\t\t\n\t\tfor ( let i = 5; i >= 0 && isHexDigit( theChar ); i-- )\n\t\t{\n\t\t\tcodePoint += theChar;\n\t\t\ttheChar = lexer.getNextChar();\n\t\t}\n\t\t\n\t\tif ( lexer.isWhiteSpace( theChar ) )\n\t\t\tlexer.getNextChar();\n\t\t\n\t\tcodePoint = parseInt( codePoint, 16 ) | 0;\n\t\tif ( codePoint === 0 ||\n\t\t\t(codePoint >= 0xD800 && codePoint <= 0xDFFF) || // Surrogate\n\t\t\tcodePoint > 0x10FFFF ) // Maximum allowed code point\n\t\t\t\treturn \"\\uFFFD\";\n\t\treturn String.fromCodePoint( codePoint );\n\t}\n\telse if ( theChar === EOF ) return \"\\uFFFD\";\n\t\n\tlexer.getNextChar();\n\treturn theChar;\n}\n\nfunction isHexDigit( theChar )\n{\n\treturn (theChar !== EOF && ((theChar >= \"0\" && theChar <= \"9\") || (theChar >= \"A\" && theChar <= \"F\") || (theChar >= \"a\" && theChar <= \"f\")));\n}\n\nfunction isIdentifierStart( theChar )\n{\n\treturn ((theChar >= \"A\" && theChar <= \"Z\") || (theChar >= \"a\" && theChar <= \"z\") || theChar === \"_\" || theChar >= \"\\u0080\" || theChar === \"\\\\\");\n}","import {parseSelector} from \"./selector-parser.js\";\nimport Node from \"./node.js\";\nimport {NODE_TYPE, PARENT_NODE, TAG_NAME, spacesRE, getDocument} from \"./utils.js\";\n\nconst STATE_INITIAL = 0,\n\tSTATE_DESCENDANT_COMBINATOR = 1,\n\tSTATE_CHILD_COMBINATOR = 2,\n\tSTATE_NEXT_SIBLING_COMBINATOR = 3,\n\tSTATE_SUBSEQUENT_SIBLING_COMBINATOR = 4,\n\t\n\tstateTransitions = {\n\t\t\">\": STATE_CHILD_COMBINATOR,\n\t\t\"+\": STATE_NEXT_SIBLING_COMBINATOR,\n\t\t\"~\": STATE_SUBSEQUENT_SIBLING_COMBINATOR\n\t},\n\t\n\tpseudoProcs = {\n\t\tis( scope, node, selectors )\n\t\t{\n\t\t\treturn matchesSelectorList( scope, node, selectors );\n\t\t},\n\t\tnot( scope, node, selectors )\n\t\t{\n\t\t\treturn !matchesSelectorList( scope, node, selectors );\n\t\t},\n\t\thas( scope, node, selectors )\n\t\t{\n\t\t\tvar has = false;\n\t\t\t\n\t\t\tfor ( let i = 0; i < selectors.length; i++ )\n\t\t\t\tif ( selectors[i][0] instanceof Array && isRelativeSimpleSelector( selectors[i][0][0] ) )\n\t\t\t\t{\n\t\t\t\t\thas = matchesSelectorList( node, node, selectors, true );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tif ( !has && node.childNodes.length > 0 ) node.forEach( elem =>\n\t\t\t{\n\t\t\t\tif ( matchesSelectorList( node, elem, selectors ) )\n\t\t\t\t{\n\t\t\t\t\thas = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t\t\n\t\t\treturn has;\n\t\t},\n\t\t\n\t\t[\"nth-child\"]( scope, node, args )\n\t\t{\n\t\t\tconst parent = node[PARENT_NODE],\n\t\t\t\tnodes = parent.childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] );\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t{\n\t\t\t\t\tif ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t[\"nth-last-child\"]( scope, node, args )\n\t\t{\n\t\t\tconst parent = node[PARENT_NODE],\n\t\t\t\tnodes = parent.childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] );\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t{\n\t\t\t\t\tif ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\t[\"nth-of-type\"]( scope, node, args )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] ),\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t{\n\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t}\n\t\t\t\n\t\t\t// For code here to be reachable, 'node' would have to not be inside\n\t\t\t// its own parent, or the above test of 'nodes[i] === node' would\n\t\t\t// have to be skippable. Since neither of these scenarios is\n\t\t\t// possible (for now), an explicit 'return false' here never\n\t\t\t// executes and isn't needed.\n\t\t},\n\t\t[\"nth-last-of-type\"]( scope, node, args )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] ),\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t{\n\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t}\n\t\t\t\n\t\t\t// For code here to be reachable, 'node' would have to not be inside\n\t\t\t// its own parent, or the above test of 'nodes[i] === node' would\n\t\t\t// have to be skippable. Since neither of these scenarios is\n\t\t\t// possible (for now), an explicit 'return false' here never\n\t\t\t// executes and isn't needed.\n\t\t}\n\t},\n\tpseudoClasses = {\n\t\tscope( scope, node )\n\t\t{\n\t\t\treturn (node === scope);\n\t\t},\n\t\t\n\t\tenabled( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"BUTTON\":\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\tcase \"OPTGROUP\":\n\t\t\t\tcase \"OPTION\":\n\t\t\t\tcase \"FIELDSET\":\n\t\t\t\t\treturn !node.hasAttribute( \"disabled\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tdisabled( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"BUTTON\":\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\tcase \"OPTGROUP\":\n\t\t\t\tcase \"OPTION\":\n\t\t\t\tcase \"FIELDSET\":\n\t\t\t\t\treturn node.hasAttribute( \"disabled\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\tchecked( scope, node )\n\t\t{\n\t\t\tif ( node[TAG_NAME] === \"INPUT\" )\n\t\t\t{\n\t\t\t\tconst type = node.getAttribute( \"type\" );\n\t\t\t\tif ( type === \"checkbox\" || type === \"radio\" )\n\t\t\t\t\treturn node.hasAttribute( \"checked\" );\n\t\t\t}\n\t\t\telse if ( node[TAG_NAME] === \"OPTION\" )\n\t\t\t\treturn node.hasAttribute( \"selected\" );\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\trequired( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\t\treturn node.hasAttribute( \"required\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\toptional( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\t\treturn !node.hasAttribute( \"required\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\troot( scope, node )\n\t\t{\n\t\t\tconst document = getDocument( scope );\n\t\t\treturn (!!document && document.documentElement === node);\n\t\t},\n\t\tempty( scope, node )\n\t\t{\n\t\t\treturn (node.childNodes.length === 0);\n\t\t},\n\t\t\n\t\t[\"first-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"last-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"only-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tlet first, last;\n\t\t\tfor ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- )\n\t\t\t{\n\t\t\t\tif ( !first && nodes[s][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\tfirst = nodes[s];\n\t\t\t\tif ( !last && nodes[e][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\tlast = nodes[e];\n\t\t\t}\n\t\t\treturn (first === last && first === node);\n\t\t},\n\t\t\n\t\t[\"first-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"last-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"only-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tlet first, last;\n\t\t\tfor ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- )\n\t\t\t{\n\t\t\t\tif ( !first && nodes[s][TAG_NAME] === tagName )\n\t\t\t\t\tfirst = nodes[s];\n\t\t\t\tif ( !last && nodes[e][TAG_NAME] === tagName )\n\t\t\t\t\tlast = nodes[e];\n\t\t\t}\n\t\t\treturn (first === last && first === node);\n\t\t}\n\t};\n\npseudoProcs.where = pseudoProcs.is;\n\nexport function querySelector( scope, selector, all )\n{\n\tconst selectors = parseSelector( selector ),\n\t\tresult = [];\n\t\n\tscope.forEach( node =>\n\t{\n\t\tif ( matchesSelectorList( scope, node, selectors ) )\n\t\t{\n\t\t\tresult.push( node );\n\t\t\tif ( !all ) return false;\n\t\t}\n\t} );\n\t\n\treturn (all ? result : (result[0] || null));\n}\n\nexport function closest( scope, selector )\n{\n\tconst selectors = parseSelector( selector );\n\tlet node = scope;\n\t\n\twhile ( node != null && node[NODE_TYPE] === Node.ELEMENT_NODE )\n\t{\n\t\tif ( matchesSelectorList( scope, node, selectors ) )\n\t\t\treturn node;\n\t\tnode = node[PARENT_NODE];\n\t}\n\t\n\treturn null;\n}\n\nexport function matches( scope, selector )\n{\n\treturn matchesSelectorList( scope, scope, parseSelector( selector ) );\n}\n\nfunction matchesSelectorList( scope, node, selectors, relative = false )\n{\n\tvar currentNode;\n\t\nList:\n\tfor ( let i = 0; i < selectors.length; i++ )\n\t{\n\t\tconst complex = selectors[i];\n\t\tlet state = STATE_INITIAL;\n\t\t\n\t\tif ( relative && complex[0] instanceof Array && !isRelativeSimpleSelector( complex[0][0] ) )\n\t\t\tcontinue;\n\t\t\n\t\tcurrentNode = node;\n\t\t\n\tComplex:\n\t\tfor ( let x = (relative ? 0 : complex.length - 1);\n\t\t\t(relative ? x < complex.length : x >= 0);\n\t\t\t(relative ? x++ : x--) )\n\t\t{\n\t\t\tif ( stateTransitions.hasOwnProperty( complex[x] ) )\n\t\t\t\tstate = stateTransitions[complex[x]];\n\t\t\telse switch ( state )\n\t\t\t{\n\t\t\t\tcase STATE_INITIAL:\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tstate = STATE_DESCENDANT_COMBINATOR;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_DESCENDANT_COMBINATOR:\n\t\t\t\t\twhile ( currentNode = currentNode[PARENT_NODE] )\n\t\t\t\t\t\tif ( matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\t\tcontinue Complex;\n\t\t\t\t\tcontinue List;\n\t\t\t\t\t\n\t\t\t\tcase STATE_CHILD_COMBINATOR:\n\t\t\t\t\tcurrentNode = currentNode[PARENT_NODE];\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_NEXT_SIBLING_COMBINATOR:\n\t\t\t\t{\n\t\t\t\t\tconst nodes = currentNode[PARENT_NODE].childNodes;\n\t\t\t\t\tcurrentNode = nodes[nodes.indexOf( currentNode ) + (relative ? 1 : -1)];\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase STATE_SUBSEQUENT_SIBLING_COMBINATOR:\n\t\t\t\t{\n\t\t\t\t\tconst nodes = currentNode[PARENT_NODE].childNodes;\n\t\t\t\t\tfor ( let k = nodes.indexOf( currentNode ) + (relative ? 1 : -1);\n\t\t\t\t\t\t\t(relative ? k < nodes.length : k >= 0);\n\t\t\t\t\t\t\t(relative ? k++ : k--) )\n\t\t\t\t\t\tif ( matchesCompoundSelector( scope, nodes[k], complex[x] ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrentNode = nodes[k];\n\t\t\t\t\t\t\tcontinue Complex;\n\t\t\t\t\t\t}\n\t\t\t\t\tcontinue List;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction matchesCompoundSelector( scope, node, compound )\n{\n\tif ( !node || node[NODE_TYPE] !== Node.ELEMENT_NODE )\n\t\treturn false;\n\tfor ( let i = 0; i < compound.length; i++ )\n\t{\n\t\tconst simple = compound[i];\n\t\tlet matched;\n\t\t\n\t\tmatched = false;\n\t\tswitch ( simple.type )\n\t\t{\n\t\t\tcase \"universal\": return true;\n\t\t\t\n\t\t\tcase \"type\": matched = (node[TAG_NAME] === simple.name); break;\n\t\t\tcase \"id\": matched = (node.id === simple.name); break;\n\t\t\tcase \"class\": matched = node.classList.contains( simple.name ); break;\n\t\t\t\n\t\t\tcase \"attr\":\n\t\t\t\tif ( simple.comparison === \"=\" && (simple.value === true || simple.value === \"\") )\n\t\t\t\t\tmatched = node.hasAttribute( simple.name );\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet attr = node.getAttribute( simple.name );\n\t\t\t\t\tif ( typeof attr === \"string\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tlet value = (simple.ignoreCase ? simple.value.toLowerCase() : simple.value);\n\t\t\t\t\t\tif ( simple.ignoreCase ) attr = attr.toLowerCase();\n\t\t\t\t\t\tif ( value !== \"\" ) switch ( simple.comparison )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase \"=\": matched = (attr === value); break;\n\t\t\t\t\t\t\tcase \"~=\": matched = attr.split( spacesRE ).indexOf( value ) !== -1; break;\n\t\t\t\t\t\t\tcase \"|=\": matched = (attr === value || attr.startsWith( value +\"-\" )); break;\n\t\t\t\t\t\t\tcase \"^=\": matched = attr.startsWith( value ); break;\n\t\t\t\t\t\t\tcase \"$=\": matched = attr.endsWith( value ); break;\n\t\t\t\t\t\t\tcase \"*=\": matched = attr.indexOf( value ) !== -1; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"pseudo-element\": break;\n\t\t\t\n\t\t\tcase \"pseudo-class\":\n\t\t\t\tif ( pseudoClasses.hasOwnProperty( simple.name ) )\n\t\t\t\t\tmatched = !!pseudoClasses[simple.name].call( null, scope, node );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"pseudo-fn\":\n\t\t\t\tif ( pseudoProcs.hasOwnProperty( simple.name ) )\n\t\t\t\t\tmatched = !!pseudoProcs[simple.name].call( null, scope, node, simple.params );\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( !matched ) return false;\n\t}\n\treturn true;\n}\n\nfunction isRelativeSimpleSelector( simple )\n{\n\treturn (!!simple && simple.type === \"pseudo-class\" && simple.name === \"scope\");\n}\n\nclass ChildIterator\n{\n\tconstructor( A, B )\n\t{\n\t\tthis.A = parseInt( A, 10 ) | 0;\n\t\tthis.B = parseInt( B, 10 ) | 0;\n\t\tthis.current = 0;\n\t}\n\t\n\tnext()\n\t{\n\t\tif ( this.A === 0 && this.B === 0 )\n\t\t\treturn false;\n\t\t\n\t\tthis.current += 1;\n\t\t\n\t\tlet match = false;\n\t\tif ( this.A === 0 )\n\t\t\tmatch = (this.current === this.B);\n\t\telse if ( (this.A < 0 && this.B >= this.current) || (this.A > 0 && this.current >= this.B) )\n\t\t\tmatch = (((this.current + this.B) % this.A) === 0);\n\t\t\n\t\treturn match;\n\t}\n}","import {PARSER_OPTIONS, nodeTypes, selfClosingTags, getDocument} from \"./utils.js\";\n\nexport function serializeNode( elem )\n{\n\tvar tagName = elem.tagName,\n\t\towner = getDocument( elem ),\n\t\tentities = owner ? owner.entityEncoder : null,\n\t\thtml = \"\";\n\tswitch ( elem.nodeType )\n\t{\n\t\tcase nodeTypes.ELEMENT_NODE:\n\t\t\ttagName = tagName.toLowerCase();\n\t\t\thtml += \"<\"+ tagName;\n\t\t\tfor ( let k in elem.attributes )\n\t\t\t\tif ( elem.attributes.hasOwnProperty( k ) )\n\t\t\t\t{\n\t\t\t\t\tlet attr = elem.attributes[k];\n\t\t\t\t\tif ( attr === true )\n\t\t\t\t\t\tattr = \"\";\n\t\t\t\t\telse if ( entities && owner[PARSER_OPTIONS] )\n\t\t\t\t\t\tattr = encodeEntities( attr, entities, owner[PARSER_OPTIONS] );\n\t\t\t\t\t\n\t\t\t\t\thtml += \" \"+ k;\n\t\t\t\t\tif ( attr !== \"\" )\n\t\t\t\t\t\thtml += '=\"'+ attr +'\"';\n\t\t\t\t}\n\t\t\thtml += \">\";\n\t\t\t\n\t\t\tfor ( let i = 0; i < elem.childNodes.length; i++ )\n\t\t\t\thtml += serializeNode( elem.childNodes[i] );\n\t\t\t\n\t\t\tif ( selfClosingTags[elem.tagName] !== true )\n\t\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.TEXT_NODE:\n\t\t\tif ( entities && owner[PARSER_OPTIONS] &&\n\t\t\t\t(!elem.parentNode || (elem.parentNode.tagName !== \"SCRIPT\" && elem.parentNode.tagName !== \"STYLE\")) )\n\t\t\t\t\thtml += encodeEntities( elem.nodeValue, entities, owner[PARSER_OPTIONS] );\n\t\t\telse html += elem.nodeValue;\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.CDATA_SECTION_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.PROCESSING_INSTRUCTION_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.COMMENT_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.DOCUMENT_TYPE_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t}\n\treturn html;\n}\n\nfunction encodeEntities( text, entities, options )\n{\n\tif ( options.encodeEntities === false )\n\t\treturn text;\n\telse if ( options.encodeEntities === true || !(options.encodeEntities instanceof RegExp) )\n\t\treturn entities.encode( text );\n\treturn entities.encode( text, options.encodeEntities );\n}","import DOM from \"./document.js\";\nimport Parser from \"./html-parser.js\";\nimport EventTarget from \"./event-target.js\";\nimport {createTokenList} from \"./token-list.js\";\nimport {createInlineStyle, updateInlineStyle} from \"./css-style-declaration.js\";\nimport {querySelector, closest, matches} from \"./selectors.js\";\nimport {serializeNode} from \"./serializer.js\";\nimport {DOCTYPE, HEAD, BODY, NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME, PARSER_OPTIONS,\n\tspacesRE, nodeTypes, selfClosingTags, setupDocument, getDocument, detachNodes, setNodeParent} from \"./utils.js\";\n\nconst CLASS_LIST = Symbol( \"classList\" );\nconst INLINE_STYLE = Symbol( \"style\" );\n\nexport const EXTEND_NODE = Symbol( \"extendNode\" );\n\nexport function createNode( nodeType, baseClass = Node )\n{\n\tconst node = Object.create( baseClass.prototype );\n\t\n\tnode[NODE_TYPE] = nodeType;\n\tnode.nodeValue = null;\n\tnode[PARENT_NODE] = null;\n\tnode[OWNER] = null;\n\t\n\tswitch ( nodeType )\n\t{\n\t\tcase Node.ELEMENT_NODE:\n\t\t\tnode[TAG_NAME] = null;\n\t\t\tnode.attributes = {};\n\t\t\t// fallthrough\n\t\t\t\n\t\tcase Node.DOCUMENT_NODE:\n\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\tnode.childNodes = [];\n\t}\n\t\n\treturn node;\n}\n\nexport default class Node extends EventTarget\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\t// We allow `extend`-ing `class`-es to call super(EXTEND_NODE)\n\t\tif (arguments[0] === EXTEND_NODE) return;\n\n\t\tthrow new Error( \"Cannot directly instantiate Node.\" );\n\t}\n\t\n\tget nodeType() {return this[NODE_TYPE]}\n\t\n\tget nodeName()\n\t{\n\t\tswitch ( this.nodeType )\n\t\t{\n\t\t\tcase Node.ELEMENT_NODE: return this.tagName;\n\t\t\tcase Node.TEXT_NODE: return \"#text\";\n\t\t\tcase Node.CDATA_SECTION_NODE: return \"#cdata-section\";\n\t\t\tcase Node.PROCESSING_INSTRUCTION_NODE: return this.target;\n\t\t\tcase Node.COMMENT_NODE: return \"#comment\";\n\t\t\tcase Node.DOCUMENT_NODE: return \"#document\";\n\t\t\tcase Node.DOCUMENT_TYPE_NODE: return this.name;\n\t\t\tcase Node.DOCUMENT_FRAGMENT_NODE: return \"#document-fragment\";\n\t\t}\n\t}\n\t\n\tget parentNode() {return this[PARENT_NODE]}\n\tget ownerDocument() {return this[OWNER]}\n\tget tagName() {return this[TAG_NAME] || null}\n\t\n\tget firstChild()\n\t{\n\t\tif ( this.childNodes ) return this.childNodes[0] || null;\n\t\treturn null;\n\t}\n\t\n\tget lastChild()\n\t{\n\t\tif ( this.childNodes ) return this.childNodes[this.childNodes.length - 1] || null;\n\t\treturn null;\n\t}\n\t\n\tget previousSibling()\n\t{\n\t\tconst parent = this.parentNode;\n\t\tif ( parent )\n\t\t{\n\t\t\tconst idx = parent.childNodes.indexOf( this );\n\t\t\tif ( idx > 0 ) return parent.childNodes[idx - 1];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget nextSibling()\n\t{\n\t\tconst parent = this.parentNode;\n\t\tif ( parent )\n\t\t{\n\t\t\tconst idx = parent.childNodes.indexOf( this );\n\t\t\tif ( idx > -1 && idx < parent.childNodes.length - 1 ) return parent.childNodes[idx + 1];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget id()\n\t{\n\t\treturn (this.attributes && this.attributes.id) || \"\";\n\t}\n\tset id( id )\n\t{\n\t\tif ( this.attributes )\n\t\t\tthis.attributes.id = id;\n\t}\n\t\n\tget className()\n\t{\n\t\treturn (this.attributes && this.attributes.class) || \"\";\n\t}\n\tset className( val )\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tthis.classList.value = val;\n\t\t\tthis.attributes.class = this[CLASS_LIST].value;\n\t\t}\n\t}\n\t\n\tget classList()\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[CLASS_LIST] )\n\t\t\t\tthis[CLASS_LIST] = createTokenList( this );\n\t\t\treturn this[CLASS_LIST];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget innerHTML()\n\t{\n\t\tif ( this.nodeType === Node.ELEMENT_NODE )\n\t\t{\n\t\t\tlet html = \"\";\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\thtml += serializeNode( this.childNodes[i] );\n\t\t\treturn html;\n\t\t}\n\t\treturn null;\n\t}\n\tset innerHTML( html )\n\t{\n\t\tif ( this.nodeType === Node.ELEMENT_NODE && selfClosingTags[this.tagName] !== true )\n\t\t{\n\t\t\tconst nodes = parseHTML( this, html );\n\t\t\tif ( nodes )\n\t\t\t\taddChildNode( this, nodes, 0, this.childNodes.length );\n\t\t\telse\n\t\t\t{\n\t\t\t\tdetachNodes( this.childNodes );\n\t\t\t\tthis.childNodes.length = 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tget outerHTML()\n\t{\n\t\treturn serializeNode( this );\n\t}\n\tset outerHTML( html )\n\t{\n\t\tif ( this.parentNode )\n\t\t{\n\t\t\tconst idx = this.parentNode.childNodes.indexOf( this ),\n\t\t\t\tnodes = parseHTML( this, html );\n\t\t\tif ( nodes )\n\t\t\t\taddChildNode( this.parentNode, nodes, idx, 1 );\n\t\t\telse detachNodes( this.parentNode.childNodes.splice( idx, 1 ) );\n\t\t}\n\t}\n\n\tget style()\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[INLINE_STYLE] )\n\t\t\t\tthis[INLINE_STYLE] = createInlineStyle( this );\n\t\t\treturn this[INLINE_STYLE];\n\t\t}\n\t\treturn null;\n\t}\n\tset style( value )\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[INLINE_STYLE] )\n\t\t\t\tthis[INLINE_STYLE] = createInlineStyle( this );\n\n\t\t\tupdateInlineStyle( this[INLINE_STYLE], value );\n\t\t}\n\t}\n\t\n\tget textContent()\n\t{\n\t\tif ( this.childNodes )\n\t\t{\n\t\t\tlet text = \"\";\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t{\n\t\t\t\tif ( this.childNodes[i].nodeType !== Node.COMMENT_NODE &&\n\t\t\t\t\t\tthis.childNodes[i].nodeType !== Node.CDATA_SECTION_NODE &&\n\t\t\t\t\t\tthis.childNodes[i].nodeType !== Node.PROCESSING_INSTRUCTION_NODE )\n\t\t\t\t\ttext += this.childNodes[i].textContent;\n\t\t\t}\n\t\t\treturn text;\n\t\t}\n\t\treturn this.nodeValue;\n\t}\n\tset textContent( text )\n\t{\n\t\tif ( text == null )\n\t\t\ttext = \"\";\n\t\telse if ( typeof text !== \"string\" )\n\t\t\ttext += \"\";\n\t\t\n\t\tif ( this.childNodes )\n\t\t{\n\t\t\tlet node = createNode( Node.TEXT_NODE );\n\t\t\tnode.nodeValue = text;\n\t\t\tsetNodeParent( node, this );\n\t\t\t\n\t\t\tdetachNodes( this.childNodes );\n\t\t\tthis.childNodes.length = 1;\n\t\t\tthis.childNodes[0] = node;\n\t\t}\n\t\telse if ( this.nodeType >= Node.TEXT_NODE && this.nodeType <= Node.COMMENT_NODE )\n\t\t\tthis.nodeValue = text;\n\t}\n\t\n\tgetRootNode()\n\t{\n\t\tlet rootNode = this;\n\t\twhile ( rootNode.parentNode )\n\t\t\trootNode = rootNode.parentNode;\n\t\treturn rootNode;\n\t}\n\t\n\thasAttributes()\n\t{\n\t\tif ( this.attributes ) for ( let k in this.attributes )\n\t\t\tif ( this.attributes.hasOwnProperty( k ) ) return true;\n\t\treturn false;\n\t}\n\t\n\tgetAttributeNames()\n\t{\n\t\tif ( this.attributes )\n\t\t\treturn Object.keys( this.attributes );\n\t\treturn [];\n\t}\n\t\n\tgetAttribute( name )\n\t{\n\t\tvar result;\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t\tresult = this.attributes[lowerAttributeCase( this, name )];\n\t\tif ( result === undefined )\n\t\t\treturn null;\n\t\treturn result;\n\t}\n\t\n\tsetAttribute( name, value )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( name === \"class\" )\n\t\t\t{\n\t\t\t\tif ( value !== true )\n\t\t\t\t\tthis.className = \"\"+ value;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.classList.value = \"\";\n\t\t\t\t\tthis.attributes[name] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( typeof value === \"string\" || value === true )\n\t\t\t\tthis.attributes[name] = value;\n\t\t\telse this.attributes[name] = \"\"+ value;\n\t\t}\n\t}\n\t\n\ttoggleAttribute( name, force )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( !this.attributes.hasOwnProperty( name ) )\n\t\t\t{\n\t\t\t\tif ( arguments.length === 1 || force === true )\n\t\t\t\t\treturn (this.attributes[name] = true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 || force === false )\n\t\t\t{\n\t\t\t\tdelete this.attributes[name];\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tremoveAttribute( name )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( name === \"class\" && this[CLASS_LIST] )\n\t\t\t\tthis[CLASS_LIST].value = null;\n\t\t\tdelete this.attributes[name];\n\t\t}\n\t}\n\t\n\thasAttribute( name )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t\treturn this.attributes.hasOwnProperty( lowerAttributeCase( this, name ) );\n\t\treturn false;\n\t}\n\t\n\thasChildNodes()\n\t{\n\t\treturn (!!this.childNodes && this.childNodes.length > 0);\n\t}\n\t\n\tappendChild( child )\n\t{\n\t\treturn this.insertBefore( child, null );\n\t}\n\t\n\tinsertBefore( newChild, refChild )\n\t{\n\t\tif ( this.childNodes && newChild instanceof Node && arguments.length > 1 )\n\t\t{\n\t\t\tlet idx = -1;\n\t\t\t\n\t\t\tif ( refChild == null )\n\t\t\t\tidx = this.childNodes.length;\n\t\t\telse if ( refChild instanceof Node && refChild.parentNode === this )\n\t\t\t\tidx = this.childNodes.indexOf( refChild );\n\t\t\t\n\t\t\tif ( idx !== -1 )\n\t\t\t\treturn addChildNode( this, newChild, idx );\n\t\t}\n\t\treturn null;\n\t}\n\t\n\treplaceChild( newChild, oldChild )\n\t{\n\t\tif ( this.childNodes && oldChild instanceof Node && newChild instanceof Node &&\n\t\t\toldChild.parentNode === this && oldChild !== newChild )\n\t\t{\n\t\t\taddChildNode( this, newChild, this.childNodes.indexOf( oldChild ), 1 );\n\t\t\treturn oldChild;\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tremoveChild( child )\n\t{\n\t\tif ( this.childNodes && child instanceof Node && child.parentNode === this )\n\t\t{\n\t\t\tconst idx = this.childNodes.indexOf( child ),\n\t\t\t\towner = getDocument( this );\n\t\t\t\n\t\t\tif ( owner && child.parentNode === owner.documentElement && tagNameProp.hasOwnProperty( child.tagName ) )\n\t\t\t\towner[tagNameProp[child.tagName]] = null;\n\t\t\t\n\t\t\tdetachNodes( this.childNodes.splice( idx, 1 ) );\n\t\t\treturn child;\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tcloneNode( deep )\n\t{\n\t\tvar clone;\n\t\t\n\t\tif ( this.nodeType === Node.DOCUMENT_NODE || this.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t\t\tclone = new DOM( null, this[PARSER_OPTIONS] );\n\t\telse clone = createNode( this.nodeType );\n\t\t\n\t\tswitch ( this.nodeType )\n\t\t{\n\t\t\tcase Node.ELEMENT_NODE:\n\t\t\t\tclone[TAG_NAME] = this.tagName;\n\t\t\t\tclone.attributes = Object.assign( clone.attributes, this.attributes );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.TEXT_NODE:\n\t\t\tcase Node.CDATA_SECTION_NODE:\n\t\t\tcase Node.PROCESSING_INSTRUCTION_NODE:\n\t\t\tcase Node.COMMENT_NODE:\n\t\t\t\tclone.nodeValue = this.nodeValue;\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.DOCUMENT_NODE:\n\t\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tclone[NODE_TYPE] = this.nodeType;\n\t\t\t\tclone.entityEncoder.entities = this.entityEncoder;\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.DOCUMENT_TYPE_NODE:\n\t\t\t\tclone.name = this.name;\n\t\t\t\tclone.publicId = this.publicId;\n\t\t\t\tclone.systemId = this.systemId;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( deep === true && this.childNodes && this.childNodes.length > 0 )\n\t\t{\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\tclone.appendChild( this.childNodes[i].cloneNode( true ) );\n\t\t\t\n\t\t\tif ( clone.nodeType === Node.DOCUMENT_NODE || clone.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t\t\t\tsetupDocument( clone );\n\t\t}\n\t\t\n\t\treturn clone;\n\t}\n\t\n\tgetElementById( id )\n\t{\n\t\tvar elem = null;\n\t\tif ( id && typeof id === \"string\" && this.childNodes )\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( node.id === id )\n\t\t\t\t{\n\t\t\t\t\telem = node;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\treturn elem;\n\t}\n\t\n\tgetElementsByClassName( className )\n\t{\n\t\tvar nodeList = [];\n\t\tif ( className && typeof className === \"string\" )\n\t\t{\n\t\t\tconst classList = className.trim().split( spacesRE );\n\t\t\tif ( classList.length > 1 || classList[0] !== \"\" ) this.forEach( node =>\n\t\t\t{\n\t\t\t\tfor ( let i = 0; i < classList.length; i++ )\n\t\t\t\t\tif ( !node.classList.contains( classList[i] ) )\n\t\t\t\t\t\treturn;\n\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\t}\n\t\treturn nodeList;\n\t}\n\t\n\tgetElementsByTagName( tagName )\n\t{\n\t\tvar nodeList = [];\n\t\tif ( tagName && typeof tagName === \"string\" )\n\t\t{\n\t\t\ttagName = tagName.toUpperCase();\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( tagName === \"*\" || node.tagName === tagName )\n\t\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\t}\n\t\treturn nodeList;\n\t}\n\t\n\tclosest( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn closest( this, selector );\n\t\telse return null;\n\t}\n\t\n\tmatches( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn matches( this, selector );\n\t\telse return false;\n\t}\n\t\n\tquerySelector( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn querySelector( this, selector, false );\n\t\telse return null;\n\t}\n\t\n\tquerySelectorAll( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn querySelector( this, selector, true );\n\t\telse return [];\n\t}\n\t\n\t// Non-standard\n\t\n\tforEach( callback, type = nodeTypes.ELEMENT_NODE )\n\t{\n\t\t// This unrolled recursive function is about 1.45x faster in Node than its\n\t\t// equivalent recursive form.\n\t\t\n\t\tlet childNodes = this.childNodes,\n\t\t\tcurrent = this.firstChild,\n\t\t\tidxStack = [],\n\t\t\tidx = 0,\n\t\t\tparent, nextSibling;\n\t\t\n\t\twhile ( current )\n\t\t{\n\t\t\t// 'parent' and 'nextSibling' are stored here so that if callback() changes\n\t\t\t// the document, we can maintain our place in the overall list of nodes by\n\t\t\t// looking for insertions, deletions, or replacements within the 'current'\n\t\t\t// node's list of siblings.\n\t\t\tparent = current[PARENT_NODE];\n\t\t\tnextSibling = childNodes[idx + 1];\n\t\t\t\n\t\t\tif ( (type === null || current.nodeType === type) &&\n\t\t\t\tcallback( current, parent ) === false )\n\t\t\t\t\treturn;\n\t\t\t\n\t\t\t// If the parent of 'current' changes during callback(), we no longer want to\n\t\t\t// look at the children of 'current' here as it was either moved or removed.\n\t\t\tif ( current[PARENT_NODE] === parent && current.childNodes && current.childNodes.length > 0 )\n\t\t\t{\n\t\t\t\tidxStack.push( idx );\n\t\t\t\tchildNodes = current.childNodes;\n\t\t\t\tcurrent = childNodes[idx = 0];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ( nextSibling )\n\t\t\t\t{\n\t\t\t\t\tidx += 1;\n\t\t\t\t\t// If callback() changed the number of nodes that come before the\n\t\t\t\t\t// previously found 'nextSibling', 'idx' needs to be updated so we\n\t\t\t\t\t// don't skip over or repeat visits to any nodes.\n\t\t\t\t\tif ( nextSibling !== childNodes[idx] )\n\t\t\t\t\t\tidx = parent.childNodes.indexOf( nextSibling );\n\t\t\t\t}\n\t\t\t\telse idx = childNodes.length;\n\t\t\t\t\n\t\t\t\twhile ( childNodes[idx] == null )\n\t\t\t\t{\n\t\t\t\t\tcurrent = parent;\n\t\t\t\t\tparent = current[PARENT_NODE];\n\t\t\t\t\tif ( current && current !== this )\n\t\t\t\t\t{\n\t\t\t\t\t\tchildNodes = parent.childNodes;\n\t\t\t\t\t\tidx = idxStack.pop() + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse return;\n\t\t\t\t}\n\t\t\t\tcurrent = childNodes[idx];\n\t\t\t}\n\t\t}\n\t}\n}\n\nObject.defineProperties( Node,\n{\n\tELEMENT_NODE: {value: nodeTypes.ELEMENT_NODE},\n\t//ATTRIBUTE_NODE: {value: nodeTypes.ATTRIBUTE_NODE},\n\tTEXT_NODE: {value: nodeTypes.TEXT_NODE},\n\tCDATA_SECTION_NODE: {value: nodeTypes.CDATA_SECTION_NODE},\n\t//ENTITY_REFERENCE_NODE: {value: nodeTypes.ENTITY_REFERENCE_NODE},\n\t//ENTITY_NODE: {value: nodeTypes.ENTITY_NODE},\n\tPROCESSING_INSTRUCTION_NODE: {value: nodeTypes.PROCESSING_INSTRUCTION_NODE},\n\tCOMMENT_NODE: {value: nodeTypes.COMMENT_NODE},\n\tDOCUMENT_NODE: {value: nodeTypes.DOCUMENT_NODE},\n\tDOCUMENT_TYPE_NODE: {value: nodeTypes.DOCUMENT_TYPE_NODE},\n\tDOCUMENT_FRAGMENT_NODE: {value: nodeTypes.DOCUMENT_FRAGMENT_NODE},\n\t//NOTATION_NODE: {value: nodeTypes.NOTATION_NODE},\n} );\n\nconst tagNameProp = {\n\tHEAD,\n\tBODY,\n\tFRAMESET: BODY\n};\n\nfunction addChildNode( parent, node, index, removalCount = 0 )\n{\n\tif ( !parent ||\n\t\t(parent.nodeType !== Node.ELEMENT_NODE &&\n\t \t\tparent.nodeType !== Node.DOCUMENT_NODE &&\n\t \t\tparent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) ||\n\t\t(parent.nodeType === Node.ELEMENT_NODE && selfClosingTags[parent.tagName] === true) )\n\t\t\treturn node;\n\t\n\tif ( node.nodeType <= Node.COMMENT_NODE )\n\t{\n\t\tif ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE )\n\t\t{\n\t\t\tif ( tagNameProp.hasOwnProperty( node.tagName ) )\n\t\t\t{\n\t\t\t\tconst prop = tagNameProp[node.tagName];\n\t\t\t\tif ( parent.parentNode[prop] && removalCount === 0 )\n\t\t\t\t\treturn node;\n\t\t\t\tparent.parentNode[prop] = node;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( node.parentNode )\n\t\t\tnode.parentNode.removeChild( node );\n\t\tsetNodeParent( node, parent );\n\t\tdetachNodes( parent.childNodes.splice( index, removalCount, node ) );\n\t}\n\telse if ( node.nodeType === Node.DOCUMENT_TYPE_NODE &&\n\t\t(parent.nodeType === Node.DOCUMENT_NODE || parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) )\n\t{\n\t\tconst owner = node.parentNode;\n\t\tif ( owner && (owner.nodeType === Node.DOCUMENT_NODE || owner.nodeType === Node.DOCUMENT_FRAGMENT_NODE) )\n\t\t{\n\t\t\towner.removeChild( node );\n\t\t\towner[DOCTYPE] = null;\n\t\t}\n\t\tsetNodeParent( node, parent );\n\t\tdetachNodes( parent.childNodes.splice( index, removalCount, node ) );\n\t\tparent[DOCTYPE] = node;\n\t}\n\telse if ( node.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t{\n\t\tif ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE )\n\t\t{\n\t\t\tif ( removalCount > 0 )\n\t\t\t\tdetachNodes( parent.childNodes.splice( index, removalCount ) );\n\t\t\tfor ( let i = node.childNodes.length - 1; i >= 0; i-- )\n\t\t\t{\n\t\t\t\tconst child = node.childNodes[i];\n\t\t\t\tif ( tagNameProp.hasOwnProperty( child.tagName ) )\n\t\t\t\t{\n\t\t\t\t\tconst prop = tagNameProp[child.tagName];\n\t\t\t\t\tif ( parent.parentNode[prop] && removalCount === 0 )\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tparent.parentNode[prop] = child;\n\t\t\t\t}\n\t\t\t\tsetNodeParent( child, parent );\n\t\t\t\tparent.childNodes.splice( index, 0, child );\n\t\t\t\tnode.childNodes.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t\telse if ( node !== getDocument( parent ) )\n\t\t{\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i++ )\n\t\t\t\tsetNodeParent( node.childNodes[i], parent );\n\t\t\tdetachNodes( parent.childNodes.splice( index, removalCount, ...node.childNodes ) );\n\t\t\tnode.childNodes.length = 0;\n\t\t}\n\t}\n\t\n\treturn node;\n}\n\nfunction parseHTML( parent, html )\n{\n\tif ( html && typeof html === \"string\" )\n\t{\n\t\tconst owner = getDocument( parent );\n\t\treturn new Parser( html, owner ? owner[PARSER_OPTIONS] : null, owner ? owner.entityEncoder : null ).parseHTML();\n\t}\n}\n\nfunction lowerAttributeCase( node, name )\n{\n\tconst owner = getDocument( node );\n\tif ( owner && owner[PARSER_OPTIONS].lowerAttributeCase )\n\t\treturn name.toLowerCase();\n\treturn name;\n}","import {Lexer, EOF} from \"./lexer.js\";\nimport Node, {createNode} from \"./node.js\";\nimport {NODE_TYPE, TAG_NAME, PARSER_OPTIONS, spacesRE, selfClosingTags, setNodeParent, globalizeRegExp} from \"./utils.js\";\n\nconst toLowerCase = String.prototype.toLowerCase,\n\ttoUpperCase = String.prototype.toUpperCase,\n\t\n\tdefaultOptions = {\n\t\tallowCustomRootElement: false,\n\t\tallowSelfClosingSyntax: false,\n\t\tallowCDATA: false,\n\t\tallowProcessingInstructions: false,\n\t\tdecodeEntities: false,\n\t\tencodeEntities: false,\n\t\tcollapseWhitespace: false,\n\t\ttrimWhitespace: false,\n\t\tlowerAttributeCase: false\n\t},\n\t\n\tSTATE_START_TAG = 0,\n\tSTATE_ATTRIBUTE = 1,\n\tSTATE_END_TAG = 2,\n\t\n\t// '12.1.2.3 Attributes' from HTML5 spec.\n\tattributeNameExclusions = {\n\t\t//\"\\0\": true, // This is caught by the lexer in isWhiteSpace().\n\t\t//'\"': true, // Disabled to better match browser behaviour.\n\t\t//\"'\": true, // Disabled to better match browser behaviour.\n\t\t\">\": true,\n\t\t\"/\": true,\n\t\t\"=\": true\n\t},\n\t\n\tpTagBoundary = {P: true},\n\tdefinitionTagBoundary = {DT: true, DD: true},\n\ttableStructureTagBoundary = {TBODY: true, THEAD: true, TFOOT: true},\n\ttableCellTagBoundary = {TD: true, TH: true},\n\tformElementTagBoundary = {BUTTON: true, DATALIST: true, OPTGROUP: true, OPTION: true, PROGRESS: true, SELECT: true, TEXTAREA: true},\n\t\n\t// Largely based on '8.1.2.4 Optional tags' from the HTML5 spec.\n\t// https://www.w3.org/TR/html50/syntax.html#syntax-tag-omission\n\ttagBoundaries = {\n\t\tADDRESS: pTagBoundary,\n\t\tARTICLE: pTagBoundary,\n\t\tASIDE: pTagBoundary,\n\t\tBLOCKQUOTE: pTagBoundary,\n\t\tDIV: pTagBoundary,\n\t\tFIELDSET: pTagBoundary,\n\t\tFOOTER: pTagBoundary,\n\t\tH1: pTagBoundary,\n\t\tH2: pTagBoundary,\n\t\tH3: pTagBoundary,\n\t\tH4: pTagBoundary,\n\t\tH5: pTagBoundary,\n\t\tH6: pTagBoundary,\n\t\tHEADER: pTagBoundary,\n\t\tHGROUP: pTagBoundary,\n\t\tHR: pTagBoundary,\n\t\tMAIN: pTagBoundary,\n\t\tNAV: pTagBoundary,\n\t\tP: pTagBoundary,\n\t\tPRE: pTagBoundary,\n\t\tSECTION: pTagBoundary,\n\t\t\n\t\tBODY: {HEAD: true, TITLE: true},\n\t\t\n\t\t// Definitions\n\t\tDL: pTagBoundary,\n\t\tDD: definitionTagBoundary,\n\t\tDT: definitionTagBoundary,\n\t\t\n\t\t// Tables\n\t\tTABLE: pTagBoundary,\n\t\tTBODY: tableStructureTagBoundary,\n\t\tTHEAD: tableStructureTagBoundary,\n\t\tTD: tableCellTagBoundary,\n\t\tTFOOT: tableStructureTagBoundary,\n\t\tTH: tableCellTagBoundary,\n\t\tTR: {TR: true},\n\t\t\n\t\t// Lists\n\t\tLI: {LI: true},\n\t\tOL: pTagBoundary,\n\t\tUL: pTagBoundary,\n\t\t\n\t\t// Forms\n\t\tBUTTON: formElementTagBoundary,\n\t\tDATALIST: formElementTagBoundary,\n\t\tFORM: pTagBoundary,\n\t\tINPUT: formElementTagBoundary,\n\t\tOPTGROUP: {OPTGROUP: true, OPTION: true},\n\t\tOPTION: {OPTION: true},\n\t\tOUTPUT: formElementTagBoundary,\n\t\tPROGRESS: formElementTagBoundary,\n\t\tSELECT: formElementTagBoundary,\n\t\tTEXTAREA: formElementTagBoundary,\n\t};\n\nexport default class Parser\n{\n\tconstructor( html, options, entityEncoder )\n\t{\n\t\tthis.options = Parser.setupOptions( options );\n\t\tthis.lexer = new Lexer( html );\n\t\tthis.entityEncoder = entityEncoder;\n\t}\n\t\n\tstatic setupOptions( options )\n\t{\n\t\toptions = Object.assign( {}, defaultOptions, options );\n\t\tif ( options.encodeEntities instanceof RegExp )\n\t\t\toptions.encodeEntities = globalizeRegExp( options.encodeEntities );\n\t\treturn Object.freeze( options );\n\t}\n\t\n\tstatic isNameCharStart( chr )\n\t{\n\t\treturn chr === \":\" || chr === \"_\" || (chr >= \"A\" && chr <= \"Z\") || (chr >= \"a\" && chr <= \"z\") ||\n\t\t\t(chr >= \"\\xC0\" && chr <= \"\\xD6\") || (chr >= \"\\xD8\" && chr <= \"\\xF6\") ||\n\t\t\t(chr >= \"\\xF8\" && chr <= \"\\u02FF\") || (chr >= \"\\u0370\" && chr <= \"\\u037D\") ||\n\t\t\t(chr >= \"\\u037F\" && chr <= \"\\u1FFF\") || chr === \"\\u200C\" || chr === \"\\u200D\" ||\n\t\t\t(chr >= \"\\u2070\" && chr <= \"\\u218F\") || (chr >= \"\\u2C00\" && chr <= \"\\u2FEF\") ||\n\t\t\t(chr >= \"\\u3001\" && chr <= \"\\uD7FF\") || (chr >= \"\\uF900\" && chr <= \"\\uFDCF\") ||\n\t\t\t(chr >= \"\\uFDF0\" && chr <= \"\\uFFFD\") || (chr >= \"\\u10000\" && chr <= \"\\uEFFFF\");\n\t}\n\t\n\tstatic isNameChar( chr )\n\t{\n\t\treturn Parser.isNameCharStart( chr ) ||\n\t\t\t(chr >= \"0\" && chr <= \"9\") || chr === \"-\" || chr === \".\" || chr === \"\\xB7\" ||\n\t\t\t(chr >= \"\\u0300\" && chr <= \"\\u036F\") || chr === \"\\u203F\" || chr === \"\\u2040\";\n\t}\n\t\n\tparseHTML()\n\t{\n\t\tvar rootNode = createNode( Node.DOCUMENT_FRAGMENT_NODE ),\n\t\t\tscopeChain = [rootNode], theChar;\n\t\t\n\t\trootNode[PARSER_OPTIONS] = this.options;\n\t\t\n\t\tif ( this.options.trimWhitespace )\n\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\telse theChar = this.lexer.getChar();\n\t\t\n\t\twhile ( theChar !== EOF && scopeChain.length > 0 )\n\t\t{\n\t\t\tif ( theChar === \"<\" )\n\t\t\t\tthis.parseTag( scopeChain );\n\t\t\telse this.parseText( scopeChain );\n\t\t\t\n\t\t\tif ( this.options.trimWhitespace )\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\telse theChar = this.lexer.getChar();\n\t\t}\n\t\t\n\t\treturn rootNode;\n\t}\n\t\n\tparseTag( scopeChain )\n\t{\n\t\tvar node, name, selfClosing, state = STATE_START_TAG,\n\t\t\ttagStartIdx = this.lexer.index,\n\t\t\ttheChar = this.lexer.getNextChar(),\n\t\t\tstartIdx, endIdx;\n\t\t\n\t\tif ( theChar !== EOF )\n\tMain:\n\t\twhile ( theChar !== \">\" && theChar !== EOF )\n\t\t{\n\t\t\tstartIdx = this.lexer.index;\n\t\t\t\n\t\t\tif ( state === STATE_START_TAG )\n\t\t\t{\n\t\t\t\tif ( theChar === \"!\" || theChar === \"?\" )\n\t\t\t\t{\n\t\t\t\t\tif ( this.options.allowProcessingInstructions && this.lexer.match( \"?\" ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\ttheChar = this.lexer.getChar();\n\t\t\t\t\tPINode:\n\t\t\t\t\t\tif ( Parser.isNameCharStart( theChar ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode = createNode( Node.PROCESSING_INSTRUCTION_NODE );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Find target's name.\n\t\t\t\t\t\t\twhile ( theChar !== EOF && Parser.isNameChar( theChar ) )\n\t\t\t\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// If we have a non-whitespace character here that isn't EOF or\n\t\t\t\t\t\t\t// the end '?>', then we've come across an invalid name character\n\t\t\t\t\t\t\t// in the target name and this tag should be treated as a comment.\n\t\t\t\t\t\t\tif ( !this.lexer.isWhiteSpace( theChar ) && theChar !== EOF &&\n\t\t\t\t\t\t\t\t\t!(theChar === \"?\" && this.lexer.peek() === \">\") )\n\t\t\t\t\t\t\t\tbreak PINode;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnode.target = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.lexer.skipWhiteSpace();\n\t\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\t\tthis.lexer.goToString( \"?>\" );\n\t\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\t\tthis.lexer.advance( 1 );\n\t\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Go back to before the first '?' to include everything between the\n\t\t\t\t\t\t// angle brackets in the comment we're going to create from this tag.\n\t\t\t\t\t\tthis.lexer.advance( startIdx - this.lexer.index - 1 );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.allowCDATA && this.lexer.match( \"![CDATA[\" ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tnode = createNode( Node.CDATA_SECTION_NODE );\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tthis.lexer.goToString( \"]]>\" );\n\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\tthis.lexer.advance( 2 );\n\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( this.lexer.match( \"!DOCTYPE\", false ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.lexer.skipWhiteSpace();\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tthis.lexer.goToString( \">\" );\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet rootNode = scopeChain[scopeChain.length - 1];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( rootNode.doctype )\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\telse if ( rootNode.childNodes.length > 0 )\n\t\t\t\t\t\t\tfor ( let i = rootNode.childNodes.length - 1; i >= 0; i-- )\n\t\t\t\t\t\t\t\tif ( rootNode.childNodes[i].nodeType < Node.TEXT_NODE || rootNode.childNodes[i].nodeType > Node.COMMENT_NODE )\n\t\t\t\t\t\t\t\t\tbreak Main;\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet params = this.lexer.str.slice( startIdx, this.lexer.index ).split( spacesRE );\n\t\t\t\t\t\tnode = createNode( Node.DOCUMENT_TYPE_NODE );\n\t\t\t\t\t\tnode.name = toLowerCase.call( params.shift() );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( params.length > 1 )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet idType = toLowerCase.call( params.shift() );\n\t\t\t\t\t\t\tparams = params.join( \" \" ).split( '\"' );\n\t\t\t\t\t\t\tif ( params[0] === \"\" ) switch ( idType )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase \"public\":\n\t\t\t\t\t\t\t\t\tparams.shift();\n\t\t\t\t\t\t\t\t\tnode.publicId = params.shift();\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcase \"system\":\n\t\t\t\t\t\t\t\t\tparams.shift();\n\t\t\t\t\t\t\t\t\tnode.systemId = params.shift();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( !node.publicId ) node.publicId = \"\";\n\t\t\t\t\t\tif ( !node.systemId ) node.systemId = \"\";\n\t\t\t\t\t\t\n\t\t\t\t\t\trootNode.childNodes.push( node );\n\t\t\t\t\t\trootNode.doctype = node;\n\t\t\t\t\t\tsetNodeParent( node, rootNode );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tlet endTag;\n\t\t\t\t\t\tif ( this.lexer.match( \"!--\" ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( !this.lexer.match( \">\" ) && !this.lexer.match( \"->\" ) )\n\t\t\t\t\t\t\t\tendTag = \"-->\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( theChar === \"!\" ) // Don't skip question marks that show up here.\n\t\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\tendTag = \">\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnode = createNode( Node.COMMENT_NODE );\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tif ( endTag ) this.lexer.goToString( endTag );\n\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\tthis.lexer.advance( endTag ? endTag.length - 1 : -1 );\n\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( theChar === \"/\" )\n\t\t\t\t{\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tstate = STATE_END_TAG;\n\t\t\t\t\tstartIdx += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif ( state === STATE_ATTRIBUTE )\n\t\t\t{\n\t\t\t\t// Find an attribute name.\n\t\t\t\twhile ( (this.lexer.index === startIdx && theChar === \"=\") ||\n\t\t\t\t\t\t(!this.lexer.isWhiteSpace( theChar ) &&\n \t\t\t\t\t\t!attributeNameExclusions[theChar] &&\n \t\t\t\t\t\ttheChar !== EOF) )\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\tendIdx = this.lexer.index;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Find a tag name.\n\t\t\t\twhile ( ((theChar >= \"a\" && theChar <= \"z\") || (theChar >= \"A\" && theChar <= \"Z\") ||\n\t\t\t\t\t\t(this.lexer.index > startIdx && ((theChar >= \"0\" && theChar <= \"9\") || theChar === \"-\" || theChar === \"_\" || theChar === \":\"))) &&\n\t\t\t\t\t\ttheChar !== EOF )\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\tif ( theChar === EOF )\n\t\t\t\t{\n\t\t\t\t\tthis.addTextNode( scopeChain, tagStartIdx, endIdx, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\n\t\t\t\tif ( state === STATE_END_TAG )\n\t\t\t\t\ttheChar = this.lexer.goToString( \">\" );\n\t\t\t}\n\t\t\t\n\t\t\tif ( startIdx === endIdx )\n\t\t\t{\n\t\t\t\t// Found an illegal character while searching for an attribute or tag name.\n\t\t\t\tif ( this.options.allowSelfClosingSyntax && theChar === \"/\" && this.lexer.peek() === \">\" )\n\t\t\t\t{\n\t\t\t\t\t// If self-closing tag syntax is allowed, and we've found \"/>\", then we\n\t\t\t\t\t// need to close the tag at the top of the scope chain.\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tstate = STATE_END_TAG;\n\t\t\t\t\tname = scopeChain[0][TAG_NAME];\n\t\t\t\t}\n\t\t\t\telse if ( state === STATE_START_TAG )\n\t\t\t\t{\n\t\t\t\t\tthis.lexer.goToString( \"<\" );\n\t\t\t\t\tthis.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false );\n\t\t\t\t\ttagStartIdx = this.lexer.index;\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if ( state === STATE_END_TAG )\n\t\t\t\t{\n\t\t\t\t\tif ( startIdx === this.lexer.index ) break; // This throws \"\" away.\n\t\t\t\t\tnode = this.addTextNode( scopeChain, startIdx, this.lexer.index );\n\t\t\t\t\tnode[NODE_TYPE] = Node.COMMENT_NODE;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// All other illegal characters are simply skipped over, along with any\n\t\t\t\t\t// following whitespace.\n\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tname = this.lexer.str.slice( startIdx, endIdx );\n\t\t\t\tif ( state !== STATE_ATTRIBUTE )\n\t\t\t\t\tname = toUpperCase.call( name );\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t}\n\t\t\t\n\t\t\tswitch ( state )\n\t\t\t{\n\t\t\t\tcase STATE_START_TAG:\n\t\t\t\t\tnode = createNode( Node.ELEMENT_NODE );\n\t\t\t\t\tnode[TAG_NAME] = name;\n\t\t\t\t\twhile ( tagBoundaries.hasOwnProperty( node[TAG_NAME] ) && tagBoundaries[node[TAG_NAME]][scopeChain[0][TAG_NAME]] )\n\t\t\t\t\t\tscopeChain.splice( 0, 1 );\n\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\tstate = STATE_ATTRIBUTE;\n\t\t\t\t\tselfClosing = selfClosingTags[node[TAG_NAME]];\n\t\t\t\t\tif ( selfClosing !== true ) scopeChain.unshift( node );\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_ATTRIBUTE:\n\t\t\t\t\tlet value = true;\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.lowerAttributeCase )\n\t\t\t\t\t\tname = toLowerCase.call( name );\n\t\t\t\t\t\n\t\t\t\t\tif ( theChar === \"=\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( theChar === '\"' || theChar === \"'\" )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\tthis.lexer.goToString( theChar );\n\t\t\t\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\t\t\t\tstartIdx += 1;\n\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse // Unquoted attribute value\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twhile ( !this.lexer.isWhiteSpace( theChar ) &&\n\t\t\t\t\t\t\t\t\t//!unquotedAttributeExclusions[theChar] &&\n\t\t\t\t\t\t\t\t\ttheChar !== \">\" &&\n\t\t\t\t\t\t\t\t\t(!this.options.allowSelfClosingSyntax || !(theChar === \"/\" && this.lexer.peek() === \">\")) &&\n\t\t\t\t\t\t\t\t\ttheChar !== EOF )\n\t\t\t\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( node.attributes.hasOwnProperty( name ) ) break;\n\t\t\t\t\t\tvalue = this.lexer.str.slice( startIdx, endIdx );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( value === \"\" )\n\t\t\t\t\t\t\tvalue = true;\n\t\t\t\t\t\telse if ( this.options.decodeEntities )\n\t\t\t\t\t\t\tvalue = this.entityEncoder.decode( value );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( node.attributes.hasOwnProperty( name ) ) break;\n\t\t\t\t\t\n\t\t\t\t\tnode.attributes[name] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_END_TAG:\n\t\t\t\t\tfor ( let i = 0; i < scopeChain.length; i++ )\n\t\t\t\t\t\tif ( scopeChain[i][TAG_NAME] === name )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode = scopeChain[i];\n\t\t\t\t\t\t\twhile ( scopeChain.length > 0 && scopeChain[0] !== node )\n\t\t\t\t\t\t\t\tscopeChain.shift();\n\t\t\t\t\t\t\tscopeChain.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse this.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false );\n\t\t\n\t\tthis.lexer.getNextChar();\n\t}\n\t\n\tparseText( scopeChain )\n\t{\n\t\tvar startIdx = this.lexer.index,\n\t\t\tpreserveContent = false;\n\t\t\n\t\tif ( scopeChain[0][TAG_NAME] === \"SCRIPT\" || scopeChain[0][TAG_NAME] === \"STYLE\" )\n\t\t{\n\t\t\tthis.lexer.goToString( \"<\\/\"+ scopeChain[0][TAG_NAME], false );\n\t\t\tpreserveContent = true;\n\t\t}\n\t\telse this.lexer.goToString( \"<\" );\n\t\t\n\t\tthis.addTextNode( scopeChain, startIdx, this.lexer.index, preserveContent );\n\t}\n\t\n\taddTextNode( scopeChain, startIdx, endIdx, preserveContent )\n\t{\n\t\tvar node = createNode( Node.TEXT_NODE ),\n\t\t\tvalue = this.lexer.str.slice( startIdx, endIdx );\n\t\t\n\t\tif ( preserveContent != null )\n\t\t{\n\t\t\tif ( this.options.trimWhitespace )\n\t\t\t\tvalue = value.trim();\n\t\t\telse if ( this.options.collapseWhitespace && !preserveContent )\n\t\t\t\tvalue = value.replace( spacesRE, \" \" );\n\t\t\t\n\t\t\tif ( this.options.decodeEntities && !preserveContent )\n\t\t\t\tvalue = this.entityEncoder.decode( value );\n\t\t}\n\t\t\n\t\tnode.nodeValue = value;\n\t\tscopeChain[0].childNodes.push( node );\n\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\n\t\treturn node;\n\t}\n}","export class ImageData {\n constructor(widthOrData, heightOrWidth, settingsOrHeight, settings) {\n var _a, _b;\n const rgbaArray = (widthOrData instanceof Uint8ClampedArray) ? widthOrData : null;\n let colorSpace = \"srgb\";\n if (rgbaArray) {\n console.log(`[ImageData] Warning: Array initializer support is experimental! ( new ImageData([${rgbaArray.length}b ${(_b = (_a = rgbaArray === null || rgbaArray === void 0 ? void 0 : rgbaArray.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"Array\"}], ${Array.from(arguments).slice(1).join(',')}) )`);\n this.width = heightOrWidth;\n this.height = typeof settingsOrHeight === \"number\" ? settingsOrHeight : undefined;\n colorSpace = (typeof settingsOrHeight === \"object\" ? settingsOrHeight : (typeof settings === \"object\" ? settings : { colorSpace: \"srgb\" })).colorSpace;\n }\n else {\n this.width = widthOrData;\n this.height = heightOrWidth;\n colorSpace = (typeof settingsOrHeight === \"object\" ? settingsOrHeight : { colorSpace: \"srgb\" }).colorSpace;\n }\n if (colorSpace !== \"srgb\") {\n console.log(`[ImageData] Warning: Only the 'srgb' color space is supported! ( new ImageData(${Array.from(arguments).join(',')}) )`);\n throw new Error(`Unsupported colorSpace: ${colorSpace}`);\n }\n // We need to calculate the height based on the array data and width\n if (this.height === undefined) {\n this.height = rgbaArray.length / this.width / 4;\n }\n if (rgbaArray) {\n if (this.width * this.height * 4 !== rgbaArray.length) {\n // TODO: this should be a \"DOMException\"\n throw new Error(`The array dimensions do not match the supplied width or height`);\n }\n this.data = new Uint8ClampedArray(rgbaArray);\n }\n else {\n this.data = new Uint8ClampedArray(this.width * this.height * 4);\n }\n }\n}\n;\n// Export onto the global scope\nif (globalThis && typeof globalThis.ImageData !== \"object\") {\n // @ts-ignore\n globalThis.ImageData = ImageData;\n}\n","// https://html.spec.whatwg.org/multipage/canvas.html#canvasrenderingcontext2d\nimport { CANVAS_DATA } from \"./HTMLCanvasElement.js\";\nimport { ImageData } from \"./ImageData.js\";\nconst FILL_STYLE = Symbol(\"fill-style\");\nexport class CanvasRenderingContext2D {\n get fillStyle() {\n return this[FILL_STYLE];\n }\n set fillStyle(newStyle) {\n console.log(`${this}→fillStyle = ${newStyle}`);\n this[FILL_STYLE] = newStyle;\n }\n // CanvasRect\n clearRect(x, y, w, h) {\n throw new Error(\"Not implemented\");\n }\n fillRect(x, y, w, h) {\n const { r, g, b, a } = this.fillStyleRGBA;\n const alpha = a * 255 | 0;\n const data = this.canvas[CANVAS_DATA];\n // Optimization: full-canvas fill\n if (x === 0 && y === 0 && data.length === w * h * 4) {\n for (let i = 0; i < data.length; i += 4) {\n if (i < 100)\n console.log(`→ fill #${i} rgba(${data[i]},${data[i + 1]},${data[i + 2]} @ ${data[i + 3]}) => rgba(${r},${g},${b} @ ${alpha})`);\n data[i + 0] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = alpha;\n }\n console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) whole canvas with ${r},${g},${b} @ ${alpha}`);\n console.log(data);\n return;\n }\n for (let row = y; row < y + h; ++row) {\n const startIdx = row * 4 + x;\n const endIdx = row * 4 + x + w;\n for (let i = startIdx; i < endIdx; ++i) {\n data[i + 0] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = alpha;\n }\n }\n console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) with ${r},${g},${b} @ ${alpha}`);\n }\n strokeRect(x, y, w, h) {\n throw new Error(\"Not implemented\");\n }\n constructor(parentCanvas) {\n this.canvas = parentCanvas;\n // defaults\n this.fillStyle = \"#000\";\n }\n drawImage(image, x1, y1, w1, h1, x2, y2, w2, h2) {\n if (image instanceof globalThis.HTMLCanvasElement) {\n w1 = w1 !== null && w1 !== void 0 ? w1 : image.width;\n h1 = h1 !== null && h1 !== void 0 ? h1 : image.height;\n if (w1 !== w2 || h1 !== h2) {\n console.log(`${this} Not implemented: image scaling in drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n return;\n }\n const srcImage = image.getContext(\"2d\").getImageData(x1, y1, w1, h1);\n const srcPixels = srcImage.data;\n const dstPixels = this.canvas[CANVAS_DATA];\n const rows = h1;\n const cols = w1;\n for (let row = 0; row < rows; ++row) {\n for (let col = 0; col < cols; ++col) {\n // source pixel\n const si = ((y1 + row) * srcImage.width + x1 + col) * 4;\n const sr = srcPixels[si];\n const sg = srcPixels[si + 1];\n const sb = srcPixels[si + 2];\n const sa = srcPixels[si + 3];\n // destination pixel\n const di = ((y2 + row) * srcImage.width + x2 + col) * 4;\n const dr = dstPixels[di];\n const dg = dstPixels[di + 1];\n const db = dstPixels[di + 2];\n const da = dstPixels[di + 3];\n // blend pixels using premultiplied alpha and the default 'source-over' composition\n // https://drafts.fxtf.org/compositing/#porterduffcompositingoperators_srcover\n const dstcontrib = (1 - sa / 255);\n dstPixels[di + 0] = sr * (sa / 255) + dr * (da / 255) * dstcontrib | 0;\n dstPixels[di + 1] = sg * (sa / 255) + dg * (da / 255) * dstcontrib | 0;\n dstPixels[di + 2] = sb * (sa / 255) + db * (da / 255) * dstcontrib | 0;\n dstPixels[di + 3] = sa + da * dstcontrib | 0;\n if (row === col) {\n console.log(`→ [${row},${col}]: imgdata#${si} rgba(${sr},${sg},${sb} @ ${sa}) + canvas#${di} rgba(${dr},${dg},${db} @ ${da}) => rgba(${dstPixels[di]},${dstPixels[di + 1]},${dstPixels[di + 2]} @ ${dstPixels[di + 3]})`);\n }\n }\n }\n console.log(`${this}→drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n return;\n }\n //let dx,dy,dw,dh;\n //let sx,sy,sw,sh;\n console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n }\n createImageData(widthOrImagedata, height, settings) {\n if (widthOrImagedata instanceof ImageData) {\n return new ImageData(widthOrImagedata.data, widthOrImagedata.width, widthOrImagedata.height);\n }\n return new ImageData(widthOrImagedata, height, settings);\n }\n getImageData(sx, sy, sw, sh, settings) {\n if (sx === 0 && sy === 0 && sw === this.canvas.width && sh === this.canvas.height && !settings) {\n console.log(`${this}→getImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);\n return new ImageData(this.canvas[CANVAS_DATA], this.canvas.width, this.canvas.height);\n }\n console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(', ')} )`);\n const id = new ImageData(sw, sh, settings);\n return id;\n }\n putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {\n let premultWarnLow, premultWarnZero;\n const canvas = this.canvas[CANVAS_DATA];\n if (dirtyX === undefined) {\n if (dx === 0 && dy === 0 && imagedata.width === this.canvas.width && imagedata.height === this.canvas.height) {\n console.log(`${this}→putImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);\n for (let col = 0; col < imagedata.height; ++col) {\n for (let row = 0; row < imagedata.width; ++row) {\n const idx = (col * imagedata.width + row) * 4;\n const alpha = imagedata.data[idx + 3], r = imagedata.data[idx + 0], g = imagedata.data[idx + 1], b = imagedata.data[idx + 2];\n // Transparent pixels that are not fully black/white have browser inconsistencies\n // Context for these warnings:\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData#data_loss_due_to_browser_optimization\n if (alpha === 0 && (r | g | b) !== 0 && (r & g & b) !== 255) {\n premultWarnZero = true;\n }\n else if (alpha < 255 && (r | g | b) !== 0 && (r & g & b) !== 255) {\n premultWarnLow = true;\n }\n canvas[idx + 0] = r;\n canvas[idx + 1] = g;\n canvas[idx + 2] = b;\n canvas[idx + 3] = alpha; //a\n }\n }\n if (premultWarnLow) {\n console.log(`${this} Compat warning: image contained colored non-opaque pixels (alpha<255), the result be inconsistent with observed browser behavior.`);\n }\n if (premultWarnZero) {\n console.log(`${this} Compat warning: image contained fully transparent colored pixels (alpha=0), the result of this operation may differ from browser behavior.`);\n }\n return;\n }\n console.log(`${this} Not implemented: non-whole-canvas putImageData( ${Array.from(arguments).join(', ')} )`);\n return;\n }\n console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(', ')} )`);\n }\n setTransform(matrixOrA, b, c, d, e, f) {\n console.log(`${this} Not implemented: context2d.setTransform( ${Array.from(arguments).join(', ')} )`);\n }\n // Stringifies the context object with its canvas & unique ID to ease debugging\n get [Symbol.toStringTag]() {\n return `${this.canvas[Symbol.toStringTag]}::context2d`;\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/color_value\n get fillStyleRGBA() {\n let c;\n let r = 0, g = 0, b = 0, a = 1;\n // Named color ('white', 'black', etc)\n if (CSS_NAMED_COLORS.has(this.fillStyle)) {\n c = HTMLColorToRGBA(CSS_NAMED_COLORS.get(this.fillStyle));\n if (c)\n return c;\n }\n // HTML color (#aaa, #bbccdd, #rrggbbaa)\n c = HTMLColorToRGBA(this.fillStyle);\n if (c)\n return c;\n // rgb() color definition\n c = HTMLColorToRGBA(this.fillStyle);\n if (c)\n return c;\n return { r, g, b, a };\n }\n}\nexport class ImageBitmapRenderingContext {\n}\n// TODO: these are only the basic colors\nconst CSS_NAMED_COLORS = new Map([\n [\"black\", \"#000000\"],\n [\"silver\", \"#c0c0c0\"],\n [\"gray\", \"#808080\"],\n [\"white\", \"#ffffff\"],\n [\"maroon\", \"#800000\"],\n [\"red\", \"#ff0000\"],\n [\"purple\", \"#800080\"],\n [\"fuchsia\", \"#ff00ff\"],\n [\"green\", \"#008000\"],\n [\"lime\", \"#00ff00\"],\n [\"olive\", \"#808000\"],\n [\"yellow\", \"#ffff00\"],\n [\"navy\", \"#000080\"],\n [\"blue\", \"#0000ff\"],\n [\"teal\", \"#008080\"],\n [\"aqua\", \"#00ffff\"],\n]);\nfunction HTMLColorToRGBA(color) {\n var _a, _b;\n let r = 0, g = 0, b = 0, a = 0;\n let matched, wasMatched;\n // Match longform\n matched = (_a = color.match(/^#(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/)) === null || _a === void 0 ? void 0 : _a.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n r = parseInt(matched.r, 16);\n g = parseInt(matched.g, 16);\n b = parseInt(matched.b, 16);\n a = matched.a ? parseInt(matched.a, 10) : 1.0;\n wasMatched = true;\n }\n // Match short form\n matched = (_b = color.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/)) === null || _b === void 0 ? void 0 : _b.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n r = parseInt(matched.r, 16);\n g = parseInt(matched.g, 16);\n b = parseInt(matched.b, 16);\n a = matched.a ? parseInt(matched.a, 10) : 1.0;\n wasMatched = true;\n }\n if (!wasMatched) {\n console.log(`Not a HTML color string: ${color}`);\n return null;\n }\n return { r, g, b, a };\n}\nfunction CSSRGBColorToRGBA(color) {\n var _a;\n let matched = (_a = color.match(/rgb\\((?\\d{1,3})\\s+(?\\d{1,3})\\s+(?\\d{1,3})(\\s*\\/\\s*(?\\d{1,3})%)?/)) === null || _a === void 0 ? void 0 : _a.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n let r = parseInt(matched.r, 10);\n let g = parseInt(matched.g, 10);\n let b = parseInt(matched.b, 10);\n let a = matched.a ? parseInt(matched.a, 10) / 100 : 1.0;\n return { r, g, b, a };\n }\n console.log(`Not a CSS color definition': ${color}`);\n return null;\n}\n","// https://html.spec.whatwg.org/multipage/canvas.html#the-canvas-element\nimport Node, { EXTEND_NODE } from '../node.js';\nimport { CanvasRenderingContext2D,\n// ImageBitmaps currently unsupported\n// https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n//ImageBitmapRenderingContext, ImageBitmapRenderingContextSettings,\n } from './RenderingContext.js';\n// Implementation\nconst WIDTH = Symbol(\"canvas-width\");\nconst HEIGHT = Symbol(\"canvas-height\");\nconst CONTEXT = Symbol(\"canvas-context\");\nconst EID = Symbol(\"element-id\");\n// Access canvas data (for the Context or testing/debugging)\nexport const CANVAS_DATA = Symbol(\"accesscanvas-data\");\nexport class HTMLCanvasElement extends Node {\n get width() {\n console.debug(`${this}→width? (${this[WIDTH]})`);\n return this[WIDTH];\n }\n get height() {\n console.debug(`${this}→height? (${this[HEIGHT]})`);\n return this[HEIGHT];\n }\n set width(width) {\n console.debug(`${this}→width = ${width}`);\n this[WIDTH] = width;\n this.resize(this[WIDTH], this[HEIGHT]);\n }\n set height(height) {\n console.debug(`${this}→height = ${height}`);\n this[HEIGHT] = height;\n this.resize(this[WIDTH], this[HEIGHT]);\n }\n //getContext(contextId: \"bitmaprenderer\", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null;\n //getContext(contextId: string, options?: any): RenderingContext | null;\n getContext(contextId, _options) {\n if (contextId != \"2d\")\n throw new Error(`Not implemented: ${contextId}`);\n this[CONTEXT] = this[CONTEXT] || new CanvasRenderingContext2D(this);\n if (!(this[CONTEXT] instanceof CanvasRenderingContext2D))\n throw new Error(`Context invalid`);\n return this[CONTEXT];\n }\n toDataURL(_type = \"image/png\", _quality) {\n throw new Error(\"Not implemented\");\n }\n toBlob(_callback, _type = \"image/png\", _quality) {\n throw new Error(\"Not implemented\");\n }\n get clientWidth() {\n return this.width;\n }\n get clientHeight() {\n return this.height;\n }\n constructor() {\n super(EXTEND_NODE);\n // Assign a new pseudo-random element ID\n this[EID] = (Math.random() * (Math.pow(36, 6)) | 0).toString(36);\n // The default size of a new canvas in most implementations\n this.resize(300, 150);\n }\n // Stringifies the object including its unique element tag\n get [Symbol.toStringTag]() {\n return `HTMLCanvasElement#${this[EID]}`;\n }\n resize(width, height) {\n this[WIDTH] = width;\n this[HEIGHT] = height;\n this[CANVAS_DATA] = new Uint8ClampedArray(this[WIDTH] * this[HEIGHT] * 4);\n console.debug(`${this}→reset, new size: ${this[WIDTH]}x${this[HEIGHT]} (${this[CANVAS_DATA].length}b)`);\n }\n}\n;\n// Export onto the global scope\nif (globalThis && typeof globalThis.HTMLCanvasElement !== \"object\") {\n // @ts-ignore\n globalThis.HTMLCanvasElement = HTMLCanvasElement;\n}\n","import Node, {createNode} from \"./node.js\";\nimport {HTMLCanvasElement} from \"./js-canvas/HTMLCanvasElement.js\";\nimport {NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME} from \"./utils.js\";\n\nexport function createCanvasNode( nodeType )\n{\n\tconst node = new HTMLCanvasElement()\n\n\tnode[NODE_TYPE] = nodeType;\n\tnode.nodeValue = null;\n\tnode[PARENT_NODE] = null;\n\tnode[OWNER] = null;\n\t\n\tswitch ( nodeType )\n\t{\n\t\tcase Node.ELEMENT_NODE:\n\t\t\tnode[TAG_NAME] = null;\n\t\t\tnode.attributes = {};\n\t\t\t// fallthrough\n\t\t\t\n\t\tcase Node.DOCUMENT_NODE:\n\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\tnode.childNodes = [];\n\t}\n\t\n\treturn node;\n}\n","import {globalizeRegExp} from \"./utils.js\";\n\nconst decodingRE = /&(#\\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,\n\t\n\t// From 'SyntaxCharacter' in section 21.2.1 (Patterns) of the ECMAScript 6.0 spec.\n\tregExpEscapeRE = /[\\^$\\\\.*+?()[\\]{}|]/g,\n\t\n\t_defaultEntities = processEntities( {\n\t\t\"amp\": \"&\",\n\t\t\"apos\": \"'\",\n\t\t\"copy\": 169,\n\t\t\"gt\": \">\",\n\t\t\"lt\": \"<\",\n\t\t\"nbsp\": 160,\n\t\t\"quot\": '\"'\n\t} );\n\nlet defaultEntities = _defaultEntities;\n\nexport default class EntityEncoder\n{\n\tconstructor( entities )\n\t{\n\t\tthis.entities = entities || \"default\";\n\t}\n\t\n\tencode( string, what )\n\t{\n\t\tif ( !this.encodingReplacements ) return string;\n\t\treturn string.replace( what instanceof RegExp ? globalizeRegExp( what ) : this.encodingRE, chr => this.encodingReplacements[chr] || chr );\n\t}\n\t\n\tdecode( string )\n\t{\n\t\tif ( !this.decodingReplacements ) return string;\n\t\treturn string.replace( decodingRE, ( _, m ) =>\n\t\t{\n\t\t\tif ( m[0] === \"#\" )\n\t\t\t{\n\t\t\t\tif ( m[1] === \"x\" || m[1] === \"X\" )\n\t\t\t\t\tm = parseInt( m.slice( 2 ), 16 ) | 0;\n\t\t\t\telse m = m.slice( 1 ) | 0;\n\t\t\t\treturn String.fromCodePoint( m );\n\t\t\t}\n\t\t\treturn this.decodingReplacements[m] || this.decodingReplacements[m.toLowerCase()] || _;\n\t\t} );\n\t}\n\t\n\tset entities( entities )\n\t{\n\t\tif ( entities === \"default\" )\n\t\t\tentities = defaultEntities;\n\t\telse if ( !entities || !(entities.encodingRE instanceof RegExp) )\n\t\t\tentities = processEntities( entities );\n\t\t\n\t\tthis.encodingRE = entities.encodingRE;\n\t\tthis.encodingReplacements = entities.encodingReplacements;\n\t\tthis.decodingReplacements = entities.decodingReplacements;\n\t}\n\t\n\tstatic set defaultEntities( entities )\n\t{\n\t\tif ( entities && typeof entities === \"object\" )\n\t\t\tdefaultEntities = processEntities( Object.assign( {}, entities ) );\n\t\telse defaultEntities = _defaultEntities;\n\t}\n}\n\nfunction processEntities( entities )\n{\n\tvar result = {\n\t\t\tencodingRE: null,\n\t\t\tencodingReplacements: null,\n\t\t\tdecodingReplacements: null\n\t\t};\n\t\n\tif ( entities && typeof entities === \"object\" )\n\t{\n\t\tconst escapes = {},\n\t\t\tunescapes = {},\n\t\t\tentityList = [];\n\t\t\n\t\tfor ( let k in entities )\n\t\t\tif ( entities.hasOwnProperty( k ) )\n\t\t\t{\n\t\t\t\tlet entity = entities[k];\n\t\t\t\t\n\t\t\t\tif ( Number.isFinite( entity ) )\n\t\t\t\t\tentity = String.fromCodePoint( entity );\n\t\t\t\telse if ( typeof entity !== \"string\" || entity === \"\" )\n\t\t\t\t\tcontinue;\n\t\t\t\t\n\t\t\t\tentityList.push( entity.replace( regExpEscapeRE, \"\\\\$&\" ) );\n\t\t\t\tif ( !escapes.hasOwnProperty( entity ) || (k.length + 2) < escapes[entity].length )\n\t\t\t\t\tescapes[entity] = \"&\"+ k +\";\";\n\t\t\t\tunescapes[k] = entity;\n\t\t\t}\n\t\t\n\t\tif ( entityList.length > 0 )\n\t\t{\n\t\t\tresult.encodingRE = new RegExp( entityList.join( \"|\" ), \"g\" );\n\t\t\tresult.encodingReplacements = escapes;\n\t\t\tresult.decodingReplacements = unescapes;\n\t\t}\n\t}\n\t\n\tif ( !result.encodingRE )\n\t\tresult.encodingRE = new RegExp( \"(?:)\", \"g\" );\n\t\n\treturn result;\n}","import \"./polyfills.js\";\n\nimport Parser from \"./html-parser.js\";\nimport Node, {createNode} from \"./node.js\";\nimport {createCanvasNode} from \"./canvas-node.js\";\nimport {serializeNode} from \"./serializer.js\";\nimport EntityEncoder from \"./entity-encoder.js\";\nimport {DOCTYPE, HEAD, BODY, DOCUMENT_ELEMENT, NODE_TYPE, TAG_NAME, PARSER_OPTIONS,\n\tsetupDocument, detachNodes, setNodeParent} from \"./utils.js\";\n\n/* @START_UNIT_TESTS */\nimport {parseSelector} from \"./selector-parser.js\";\n/* @END_UNIT_TESTS */\n\nconst ENTITY_ENCODER = Symbol( \"entityEncoder\" );\n\nexport default class DOM extends Node\n{\n\tconstructor( html, options )\n\t{\n\t\tconst node = createNode( Node.DOCUMENT_FRAGMENT_NODE, DOM );\n\t\tnode[PARSER_OPTIONS] = Parser.setupOptions( options );\n\t\tnode[ENTITY_ENCODER] = new EntityEncoder( node[PARSER_OPTIONS].entities );\n\t\tnode.innerHTML = html;\n\t\treturn node;\n\t}\n\t\n\tget documentElement() {return this[DOCUMENT_ELEMENT] || null}\n\t\n\tget innerHTML()\n\t{\n\t\tlet html = \"\";\n\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\thtml += serializeNode( this.childNodes[i] );\n\t\treturn html;\n\t}\n\tset innerHTML( html )\n\t{\n\t\tthis[NODE_TYPE] = Node.DOCUMENT_FRAGMENT_NODE;\n\t\tif ( html && typeof html === \"string\" )\n\t\t{\n\t\t\tconst rootNode = new Parser( html, this[PARSER_OPTIONS], this[ENTITY_ENCODER] ).parseHTML();\n\t\t\t\n\t\t\tdetachNodes( this.childNodes );\n\t\t\t\n\t\t\tif ( rootNode.doctype )\n\t\t\t\tthis[DOCTYPE] = rootNode.doctype;\n\t\t\telse this[DOCTYPE] = null;\n\t\t\t\n\t\t\tthis.childNodes = rootNode.childNodes;\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\tsetNodeParent( this.childNodes[i], this );\n\t\t\t\n\t\t\tsetupDocument( this );\n\t\t}\n\t\telse this.childNodes.length = 0;\n\t}\n\t\n\tget outerHTML() {return null}\n\tset outerHTML( v ) {}\n\t\n\tget doctype()\n\t{\n\t\treturn this[DOCTYPE] || null;\n\t}\n\tset doctype( val )\n\t{\n\t\tif ( val )\n\t\t{\n\t\t\tlet doctype = this[DOCTYPE];\n\t\t\tif ( val instanceof Node )\n\t\t\t{\n\t\t\t\tif ( val.nodeType === Node.DOCUMENT_TYPE_NODE && val !== doctype )\n\t\t\t\t{\n\t\t\t\t\tthis[DOCTYPE] = val;\n\t\t\t\t\tif ( doctype ) this.replaceChild( val, doctype );\n\t\t\t\t\telse this.insertBefore( val, this.firstChild );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( typeof val === \"object\" )\n\t\t\t{\n\t\t\t\tif ( !doctype )\n\t\t\t\t\tthis[DOCTYPE] = this.insertBefore( this.createDocumentType( val.name, val.publicId, val.systemId ), this.firstChild );\n\t\t\t\telse setupDocumentType( doctype, val.name, val.publicId, val.systemId );\n\t\t\t}\n\t\t}\n\t\telse if ( val === null && this[DOCTYPE] )\n\t\t{\n\t\t\tthis.removeChild( this[DOCTYPE] );\n\t\t\tthis[DOCTYPE] = null;\n\t\t}\n\t}\n\t\n\tget head()\n\t{\n\t\treturn this[HEAD] || null;\n\t}\n\t\n\tget title()\n\t{\n\t\tconst head = this.head;\n\t\tif ( head )\n\t\t{\n\t\t\tconst title = head.getElementsByTagName( \"title\" );\n\t\t\tif ( title.length > 0 )\n\t\t\t\treturn title[0].textContent;\n\t\t}\n\t\treturn \"\";\n\t}\n\tset title( val )\n\t{\n\t\tconst head = this.head;\n\t\tif ( head )\n\t\t{\n\t\t\tlet title = head.getElementsByTagName( \"title\" );\n\t\t\tif ( title.length <= 0 )\n\t\t\t\ttitle = head.appendChild( this.createElement( \"title\" ) );\n\t\t\telse title = title[0];\n\t\t\ttitle.textContent = val;\n\t\t}\n\t}\n\t\n\tget body()\n\t{\n\t\treturn this[BODY] || null;\n\t}\n\tset body( val )\n\t{\n\t\tif ( val instanceof Node && val.nodeType === Node.ELEMENT_NODE &&\n\t\t\t(val.tagName === \"BODY\" || val.tagName === \"FRAMESET\") &&\n\t\t\tval !== this[BODY] && this[DOCUMENT_ELEMENT] )\n\t\t{\n\t\t\tif ( this[BODY] ) this[BODY].parentNode.replaceChild( val, this[BODY] );\n\t\t\telse this[DOCUMENT_ELEMENT].appendChild( val );\n\t\t}\n\t}\n\n\tget entityEncoder()\n\t{\n\t\treturn this[ENTITY_ENCODER];\n\t}\n\n\tcreateElement( tagName )\n\t{\n\t\tif ( tagName && typeof tagName === \"string\" )\n\t\t{\n\t\t\tconst node = createNodeForTagName( tagName );\n\t\t\tnode[TAG_NAME] = tagName.toUpperCase();\n\t\t\treturn node;\n\t\t}\n\t}\n\n\tcreateTextNode( text )\n\t{\n\t\treturn createTextBasedNode( Node.TEXT_NODE, text );\n\t}\n\n\tcreateComment( data )\n\t{\n\t\treturn createTextBasedNode( Node.COMMENT_NODE, data );\n\t}\n\n\tcreateCDATASection( data )\n\t{\n\t\treturn createTextBasedNode( Node.CDATA_SECTION_NODE, data, \"]]>\" );\n\t}\n\n\tcreateProcessingInstruction( target, data )\n\t{\n\tNewNode:\n\t\tif ( target && typeof target === \"string\" )\n\t\t{\n\t\t\tif ( Parser.isNameCharStart( target[0] ) )\n\t\t\t\tfor ( let i = 1; i < target.length; i++ )\n\t\t\t\t{\n\t\t\t\t\tif ( !Parser.isNameChar( target[i] ) )\n\t\t\t\t\t\tbreak NewNode;\n\t\t\t\t}\n\t\t\telse break NewNode;\n\t\t\t\n\t\t\tconst node = createTextBasedNode( Node.PROCESSING_INSTRUCTION_NODE, data, \"?>\" );\n\t\t\tnode.target = target;\n\t\t\treturn node;\n\t\t}\n\t\tthrow new Error( \"Invalid target name \"+ JSON.stringify( target ) +\".\" );\n\t}\n\n\tcreateDocumentType( name, publicId, systemId )\n\t{\n\t\treturn setupDocumentType( createNode( Node.DOCUMENT_TYPE_NODE ), name, publicId, systemId );\n\t}\n\n\tgetElementsByName( name )\n\t{\n\t\tconst nodeList = [];\n\t\tif ( name && typeof name === \"string\" )\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( node.attributes && node.attributes.name === name )\n\t\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\treturn nodeList;\n\t}\n}\n\nfunction createTextBasedNode( type, text, disallowed = false )\n{\n\tconst node = createNode( type );\n\tnode.nodeValue = \"\";\n\tif ( text && typeof text === \"string\" )\n\t{\n\t\tif ( disallowed && typeof disallowed === \"string\" && text.indexOf( disallowed ) !== -1 )\n\t\t\tthrow new Error( \"The data provided ('\"+ text +\"') contains '\"+ disallowed +\"'.\" );\n\t\tnode.nodeValue += text;\n\t}\n\treturn node;\n}\n\nfunction setupDocumentType( doctype, name, publicId, systemId )\n{\n\tif ( name && typeof name === \"string\" )\n\t{\n\t\tdoctype.name = name.toLowerCase();\n\t\t\n\t\tif ( publicId && typeof publicId === \"string\" )\n\t\t\tdoctype.publicId = publicId;\n\t\telse doctype.publicId = \"\";\n\t\t\n\t\tif ( systemId && typeof systemId === \"string\" )\n\t\t\tdoctype.systemId = systemId;\n\t\telse doctype.systemId = \"\";\n\t}\n\telse doctype.name = doctype.publicId = doctype.systemId = \"\";\n\t\n\treturn doctype;\n}\n\nfunction createNodeForTagName( tagName )\n{\n\tswitch ( tagName.toLowerCase() )\n\t{\n\t\tcase 'canvas':\n\t\t\treturn createCanvasNode( Node.ELEMENT_NODE );\n\t\tdefault:\n\t\t\treturn createNode( Node.ELEMENT_NODE );\n\t}\n}\n\n/* @START_UNIT_TESTS */\nDOM.parseSelector = parseSelector;\n/* @END_UNIT_TESTS */\n\nDOM.Node = Node;\nDOM.EntityEncoder = EntityEncoder;\n"],"names":["ELEMENT"],"mappings":"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"} \ No newline at end of file diff --git a/lib/fauxdom-with-canvas.js b/lib/fauxdom-with-canvas.js deleted file mode 100644 index d856083..0000000 --- a/lib/fauxdom-with-canvas.js +++ /dev/null @@ -1,3 +0,0 @@ -var DOM=function(){"use strict";const e=Object.prototype.hasOwnProperty,t=Array.prototype.slice;window.Symbol||(window.Symbol=function(e){return"@@"+e+"_"+Math.floor(4294967295*Math.random()).toString(16)}),Object.assign||(Object.assign=function(t){if(null==t)return t;t=Object(t);for(let s=1;s1114111?t.push(65533):e<65535?t.push(e):(e-=65536,t.push(e>>10|55296,1023&e|56320));return String.fromCharCode.apply(null,t)}),Function.prototype.bind||(Function.prototype.bind=function(e){var i=this,s=t.call(arguments,1);if("function"!=typeof i)throw new TypeError("Bind must be called on a function");return function(){return i.apply(e,s.concat(t.call(arguments)))}});const i={},s={},r=Object.prototype.hasOwnProperty.bind(s),n=null;class o{constructor(e){if(this.index=0,this.str=e,this.scanChar=this.str[this.index],!r(" ")){for(let e=0;e<=32;e++)s[String.fromCharCode(e)]=null;for(let e=128;e<=159;e++)s[String.fromCharCode(e)]=null}}isWhiteSpace(e){return e!==n&&r(e)}goToString(e,t){if(!1!==t)this.index=this.str.indexOf(e,this.index);else{i[e]||(i[e]=new RegExp(e,"ig")),i[e].lastIndex=this.index;const t=i[e].exec(this.str);this.index=t?t.index:-1}this.index>-1?this.scanChar=this.str[this.index]:(this.index=this.str.length,this.scanChar=n)}goToIndex(e){this.scanChar=this.str[this.index=e]}advance(e){return this.index+=e,this.index>this.str.length?(this.index=this.str.length,this.scanChar=n):this.scanChar=this.str[this.index]}match(e,t){var i=this.str.substr(this.index,e.length);return!1===t&&(e=e.toLowerCase(),i=i.toLowerCase()),i===e&&(this.index+=e.length-1,this.getNextChar(),!0)}peek(){return this.str[this.index+1]}getChar(){return this.scanChar}getNextChar(){return this.index+1e.callback===t&&e.capturing===r?i:void 0)).reverse().forEach((e=>{void 0!==e&&s.splice(e,1)}))}dispatchEvent(e){let t=!0;if(!this[a])return t;const i=this[a].get(e.type)??[];return i?.forEach((({callback:i})=>{i(e),e.defaultPrevented&&(t=!1)})),t}}const h=Symbol("doctype"),c=Symbol("head"),d=Symbol("body"),u=Symbol("documentElement"),p=Symbol("nodeType"),f=Symbol("parentNode"),N=Symbol("ownerDocument"),g=Symbol("tagName"),E=Symbol("parserOptions"),T=/\s+/g,m=/[gimsuy]*$/,O={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11},y={AREA:!0,BASE:!0,BR:!0,COL:!0,COMMAND:!0,EMBED:!0,HR:!0,IMG:!0,INPUT:!0,KEYGEN:!0,LINK:!0,META:!0,PARAM:!0,SOURCE:!0,TRACK:!0,WBR:!0};function x(e){var t=-1,i=-1,s="HTML";e[h]&&e[E].allowCustomRootElement&&(s=e[h].name.toUpperCase());for(let r=0,n=e.childNodes.length;r0)for(let t=0;t{e[N]=i}),null),e[f]=t,e[N]=i}function w(e){if(!e.global){let t=e.flags;void 0===t&&(t=e.toString().match(m)[0]),e=new RegExp(e.source,t+"g")}return e}const S=Symbol("element"),_=Symbol("length"),A=/^\S+$/,I=Array.prototype.indexOf,M=Array.prototype.join,v=Array.prototype.splice;class R{constructor(){throw new Error("Cannot directly instantiate DOMTokenList.")}get length(){return this[_]}set length(e){}get value(){return M.call(this," ")}set value(e){if(this[_]>0)for(let t in this)this.hasOwnProperty(t)&&isFinite(t)&&delete this[t];this[_]=0,"string"==typeof e?this.add.apply(this,e.split(T)):delete this[S].attributes.class}add(){for(let e=0;e=0&&e=0&&this.supports(t))&&(-1===I.call(this,t)?this[i]=t:(v.call(this,i,1),this[_]--),this[S].attributes.class=this.value,!0)}supports(e){return!(!e||"string"!=typeof e)&&e.match(A)}}const L=Symbol("element");function U(e){return e.replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))}function P(e){return"string"==typeof e&&(!!e.match(/^\-?[a-z_-]*[a-z]$/)||(!!e.match(/^\-\-[A-Za-z_-]*[A-Za-z0-9]$/)||!!e.match(/^[a-zA-Z]+$/)))}function k(e=""){return new Map(e.split(/\s*;\s*/g).filter((e=>e.length)).map((e=>e.trim().match(/^([a-z-]+)\s*:\s*(.*)$/).slice(1))))}function $(e){return Array.from(e?.entries()??[]).map((e=>e.join(": "))).join("; ")}function j(e){return new Proxy({[L]:e},{get(t,i){if(i===L)return e;if(!P(i))return;const s=U(i);return k(e.attributes.style).get(s)},set(t,i,s){if(!P(i))return!0;const r=U(i),n=k(e.attributes.style);return e.attributes.style=$(n.set(r,s)),!0},deleteProperty(t,i){if(!P(i))return;const s=U(i),r=k(e.attributes.style);e.attributes.style=$(r.delete(s))}})}const W=/\r\n|\r|\f/g,G=/\(\s*(even|odd|(?:(?:([+-]?\d*)n)\s*(?:([+-])\s*(\d+))?|([+-]?\d+)))\s*/g,B={Selectors:0,Identifier:1,Iterator:2,IteratorOf:3},H={is:B.Selectors,not:B.Selectors,where:B.Selectors,has:B.Selectors,lang:B.Identifier,dir:B.Identifier,"nth-child":B.IteratorOf,"nth-last-child":B.IteratorOf,"nth-of-type":B.Iterator,"nth-last-of-type":B.Iterator,"nth-col":B.Iterator,"nth-last-col":B.Iterator};function F(e){return Y(new o(e.replace(W,"\n")))}function Y(e,t=n,i=!1){for(var s=e.skipWhiteSpace(),r={},o=[],a=[o],l=[a];s!==n&&s!==t;){switch(s){case"*":if(o.length>0)throw V("Universal selectors must come before all other simple selectors.",e);r.type="universal",o.push(r),r={};break;case"#":case".":{e.getNextChar();const t=z(e);if(!t)throw V("Expected an identifier.",e);r.type="#"===s?"id":"class",r.name=t,o.push(r),r={};break}case"[":{e.getNextAfterWhiteSpace();const t=z(e);if(!t)throw V("Expected an identifier.",e);if(r.type="attr",r.name=t,r.comparison="=",r.value=!0,r.ignoreCase=!1,"]"!==(s=e.getNextAfterWhiteSpace())){switch(s){case"=":break;case"~":case"|":case"^":case"$":case"*":if("="!==e.peek())throw V("Expected '='.",e,1);r.comparison=s+r.comparison,e.getNextChar();break;default:throw V("Unexpected character '"+(s===n?"END_OF_INPUT":s)+"'.",e)}if("'"===(s=e.getNextAfterWhiteSpace())||'"'===s){const t=s;for(r.value="",s=e.getNextChar();s!==n&&s!==t&&"\n"!==s;)"\\"===s?(r.value+=X(e),s=e.getChar()):(r.value+=s,s=e.getNextChar())}else{const t=z(e);if(!t)throw V("Expected an identifier.",e);r.value=t}if("]"!==e.getNextAfterWhiteSpace()){const t=z(e);if("i"===t||"I"===t)r.ignoreCase=!0;else if("s"===t||"S"===t)r.ignoreCase=!1;else if(t)throw V("Unexpected identifier '"+t+"'.",e,1-t.length);if("]"!==e.getNextAfterWhiteSpace())throw V("Expected ']'.",e,-1+t.length)}}o.push(r),r={};break}case":":if(e.getNextChar(),e.match(":")){const t=z(e);if(!t)throw V("Expected a pseudo-element name.",e);r.type="pseudo-element",r.name=t}else{const t=z(e);if(!t)throw V("Expected a pseudo-class name.",e);r.type="pseudo-class",r.name=t;const i=H[t];if(null!=i){if(r.type="pseudo-fn","("!==e.getNextChar())throw V("Expected '('.",e);switch(i){case B.IteratorOf:case B.Iterator:let t,s=0,n=0;G.lastIndex=e.index;const o=G.exec(e.str);if(!o)throw V("Invalid parameter.",e,1);if(e.advance(o[0].length),i===B.IteratorOf){e.skipWhiteSpace();const i=e.index;if("of"===z(e).toLowerCase()){const i=e.getNextChar();if(")"!==i&&!e.isWhiteSpace(i))throw V("Expected whitespace.",e);if(t=Y(e,")"),!(t instanceof Array)||0===t.length)throw V("Expected at least one selector.",e)}else e.goToIndex(i)}if(")"!==e.skipWhiteSpace())throw V("Expected ')'.",e);"even"===o[1]||"odd"===o[1]?(s=2,"odd"===o[1]&&(n=1)):o[5]?n=parseInt(o[5],10):(s="-"===o[2]?-1:o[2]&&"+"!==o[2]?parseInt(o[2],10):1,o[3]&&(n=parseInt(o[3]+o[4],10))),r.params=[s,n],t&&r.params.push(t);break;case B.Selectors:if(e.getNextChar(),r.params=Y(e,")",!0),0===r.params.length)throw V("Expected at least one selector.",e);break;case B.Identifier:if(!Z(e.getNextAfterWhiteSpace()))throw V("Expected an identifier.",e);r.params=[z(e)],e.getNextChar()}if(")"!==e.skipWhiteSpace())throw V("Expected ')'.",e)}else"before"!==t&&"after"!==t&&"first-line"!==t&&"first-letter"!==t||(r.type="pseudo-element")}o.push(r),r={};break;case"+":case">":case"~":if(0===o.length){if(1===a.length){if(!i)throw V("Absolute selectors cannot start with a combinator.",e);a.unshift([{type:"pseudo-class",name:"scope"}])}else if("string"==typeof a[a.length-2])throw V("Cannot have multiple combinators in a row.",e);a.splice(a.length-1,0,s)}else a.push(s,o=[]);break;case",":if(0===o.length){if(a.length>1){if(a.pop(),"string"==typeof a[a.length-1])throw V("Complex selectors are not allowed to end with a combinator.",e,-1);l.push(a=[o])}}else l.push(a=[o=[]]);e.skipWhiteSpace();break;default:if(e.isWhiteSpace(s))o.length>0&&a.push(o=[]),e.skipWhiteSpace(),e.advance(-1);else{if(!Z(s))throw V("Unexpected character '"+s+"'.",e);if(o.length>0)throw V("Type (tag name) selectors must come before all other simple selectors.",e);r.type="type",r.name=z(e).toUpperCase(),o.push(r),r={}}}s=e.getNextChar()}if(0===o.length&&(1===a.length?(l.pop(),a=l[l.length-1]):a.pop()),a&&"string"==typeof a[a.length-1])throw V("Complex selectors are not allowed to end with a combinator.",e,-1);return l}function V(e,t,i=0){var s=new SyntaxError(e),r=t.index+i;return s.stack="SyntaxError: "+e+"\n\n"+t.str+"\n"+" ".repeat(r)+"^\n at index "+r,s}function z(e){var t="",i=e.getChar();if(Z(i)){do{"\\"===i?(t+=X(e),i=e.getChar()):(t+=i,i=e.getNextChar())}while(i!==n&&(Z(i)||i>="0"&&i<="9"||"-"===i));e.advance(-1)}return t}function X(e){var t=e.getNextChar();if(q(t)){let i="";for(let s=5;s>=0&&q(t);s--)i+=t,t=e.getNextChar();return e.isWhiteSpace(t)&&e.getNextChar(),i=0|parseInt(i,16),0===i||i>=55296&&i<=57343||i>1114111?"�":String.fromCodePoint(i)}return t===n?"�":(e.getNextChar(),t)}function q(e){return e!==n&&(e>="0"&&e<="9"||e>="A"&&e<="F"||e>="a"&&e<="f")}function Z(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"||"_"===e||e>="€"||"\\"===e}const K=0,J=1,Q=2,ee=3,te=4,ie={">":Q,"+":ee,"~":te},se={is:(e,t,i)=>oe(e,t,i),not:(e,t,i)=>!oe(e,t,i),has(e,t,i){var s=!1;for(let r=0;r0&&t.forEach((e=>{if(oe(t,e,i))return s=!0,!1})),s},"nth-child"(e,t,i){const s=t[f],r=s.childNodes,n=new he(i[0],i[1]);for(let o=0;o=0;o--)if(r[o][p]===ge.ELEMENT_NODE&&(!i[2]||oe(s,r[o],i[2]))){const e=n.next();if(r[o]===t)return e}return!1},"nth-of-type"(e,t,i){const s=t[f].childNodes,r=new he(i[0],i[1]),n=t[g];for(let o=0;o=0;o--)if(s[o][g]===n){const e=r.next();if(s[o]===t)return e}}},re={scope:(e,t)=>t===e,enabled(e,t){switch(t[g]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return!t.hasAttribute("disabled")}return!1},disabled(e,t){switch(t[g]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return t.hasAttribute("disabled")}return!1},checked(e,t){if("INPUT"===t[g]){const e=t.getAttribute("type");if("checkbox"===e||"radio"===e)return t.hasAttribute("checked")}else if("OPTION"===t[g])return t.hasAttribute("selected");return!1},required(e,t){switch(t[g]){case"INPUT":case"SELECT":case"TEXTAREA":return t.hasAttribute("required")}return!1},optional(e,t){switch(t[g]){case"INPUT":case"SELECT":case"TEXTAREA":return!t.hasAttribute("required")}return!1},root(e,t){const i=b(e);return!!i&&i.documentElement===t},empty:(e,t)=>0===t.childNodes.length,"first-child"(e,t){const i=t[f].childNodes;for(let s=0;s=0;s--)if(i[s][p]===ge.ELEMENT_NODE)return i[s]===t},"only-child"(e,t){const i=t[f].childNodes;let s,r;for(let n=0,o=i.length-1;o>=0&&(!s||!r);n++,o--)s||i[n][p]!==ge.ELEMENT_NODE||(s=i[n]),r||i[o][p]!==ge.ELEMENT_NODE||(r=i[o]);return s===r&&s===t},"first-of-type"(e,t){const i=t[f].childNodes,s=t[g];for(let r=0;r=0;r--)if(i[r][g]===s)return i[r]===t},"only-of-type"(e,t){const i=t[f].childNodes,s=t[g];let r,n;for(let o=0,a=i.length-1;a>=0&&(!r||!n);o++,a--)r||i[o][g]!==s||(r=i[o]),n||i[a][g]!==s||(n=i[a]);return r===n&&r===t}};function ne(e,t,i){const s=F(t),r=[];return e.forEach((t=>{if(oe(e,t,s)&&(r.push(t),!i))return!1})),i?r:r[0]||null}function oe(e,t,i,s=!1){var r;e:for(let n=0;n=0;s?t++:t--)if(ie.hasOwnProperty(o[t]))a=ie[o[t]];else switch(a){case K:if(!ae(e,r,o[t]))continue e;a=J;break;case J:for(;r=r[f];)if(ae(e,r,o[t]))continue t;continue e;case Q:if(!ae(e,r=r[f],o[t]))continue e;break;case ee:{const i=r[f].childNodes;if(!ae(e,r=i[i.indexOf(r)+(s?1:-1)],o[t]))continue e;break}case te:{const i=r[f].childNodes;for(let n=i.indexOf(r)+(s?1:-1);s?n=0;s?n++:n--)if(ae(e,i[n],o[t])){r=i[n];continue t}continue e}}return!0}}return!1}function ae(e,t,i){if(!t||t[p]!==ge.ELEMENT_NODE)return!1;for(let s=0;s=this.current||this.A>0&&this.current>=this.B)&&(e=(this.current+this.B)%this.A==0),e}}function ce(e){var t=e.tagName,i=b(e),s=i?i.entityEncoder:null,r="";switch(e.nodeType){case O.ELEMENT_NODE:r+="<"+(t=t.toLowerCase());for(let t in e.attributes)if(e.attributes.hasOwnProperty(t)){let n=e.attributes[t];!0===n?n="":s&&i[E]&&(n=de(n,s,i[E])),r+=" "+t,""!==n&&(r+='="'+n+'"')}r+=">";for(let t=0;t");break;case O.TEXT_NODE:s&&i[E]&&(!e.parentNode||"SCRIPT"!==e.parentNode.tagName&&"STYLE"!==e.parentNode.tagName)?r+=de(e.nodeValue,s,i[E]):r+=e.nodeValue;break;case O.CDATA_SECTION_NODE:r+="";break;case O.PROCESSING_INSTRUCTION_NODE:r+="";break;case O.COMMENT_NODE:r+="\x3c!--"+e.nodeValue+"--\x3e";break;case O.DOCUMENT_TYPE_NODE:r+=""}return r}function de(e,t,i){return!1===i.encodeEntities?e:!0!==i.encodeEntities&&i.encodeEntities instanceof RegExp?t.encode(e,i.encodeEntities):t.encode(e)}const ue=Symbol("classList"),pe=Symbol("style"),fe=Symbol("extendNode");function Ne(e,t=ge){const i=Object.create(t.prototype);switch(i[p]=e,i.nodeValue=null,i[f]=null,i[N]=null,e){case ge.ELEMENT_NODE:i[g]=null,i.attributes={};case ge.DOCUMENT_NODE:case ge.DOCUMENT_FRAGMENT_NODE:i.childNodes=[]}return i}class ge extends l{constructor(){if(super(),arguments[0]!==fe)throw new Error("Cannot directly instantiate Node.")}get nodeType(){return this[p]}get nodeName(){switch(this.nodeType){case ge.ELEMENT_NODE:return this.tagName;case ge.TEXT_NODE:return"#text";case ge.CDATA_SECTION_NODE:return"#cdata-section";case ge.PROCESSING_INSTRUCTION_NODE:return this.target;case ge.COMMENT_NODE:return"#comment";case ge.DOCUMENT_NODE:return"#document";case ge.DOCUMENT_TYPE_NODE:return this.name;case ge.DOCUMENT_FRAGMENT_NODE:return"#document-fragment"}}get parentNode(){return this[f]}get ownerDocument(){return this[N]}get tagName(){return this[g]||null}get firstChild(){return this.childNodes&&this.childNodes[0]||null}get lastChild(){return this.childNodes&&this.childNodes[this.childNodes.length-1]||null}get previousSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>0)return e.childNodes[t-1]}return null}get nextSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>-1&&t=ge.TEXT_NODE&&this.nodeType<=ge.COMMENT_NODE&&(this.nodeValue=e)}getRootNode(){let e=this;for(;e.parentNode;)e=e.parentNode;return e}hasAttributes(){if(this.attributes)for(let e in this.attributes)if(this.attributes.hasOwnProperty(e))return!0;return!1}getAttributeNames(){return this.attributes?Object.keys(this.attributes):[]}getAttribute(e){var t;return this.attributes&&e&&"string"==typeof e&&(t=this.attributes[Oe(this,e)]),void 0===t?null:t}setAttribute(e,t){this.attributes&&e&&"string"==typeof e&&("class"===(e=Oe(this,e))?!0!==t?this.className=""+t:(this.classList.value="",this.attributes[e]=!0):this.attributes[e]="string"==typeof t||!0===t?t:""+t)}toggleAttribute(e,t){if(this.attributes&&e&&"string"==typeof e)return e=Oe(this,e),this.attributes.hasOwnProperty(e)?1!==arguments.length&&!1!==t||(delete this.attributes[e],!1):(1===arguments.length||!0===t)&&(this.attributes[e]=!0)}removeAttribute(e){this.attributes&&e&&"string"==typeof e&&("class"===(e=Oe(this,e))&&this[ue]&&(this[ue].value=null),delete this.attributes[e])}hasAttribute(e){return!(!this.attributes||!e||"string"!=typeof e)&&this.attributes.hasOwnProperty(Oe(this,e))}hasChildNodes(){return!!this.childNodes&&this.childNodes.length>0}appendChild(e){return this.insertBefore(e,null)}insertBefore(e,t){if(this.childNodes&&e instanceof ge&&arguments.length>1){let i=-1;if(null==t?i=this.childNodes.length:t instanceof ge&&t.parentNode===this&&(i=this.childNodes.indexOf(t)),-1!==i)return Te(this,e,i)}return null}replaceChild(e,t){return this.childNodes&&t instanceof ge&&e instanceof ge&&t.parentNode===this&&t!==e?(Te(this,e,this.childNodes.indexOf(t),1),t):null}removeChild(e){if(this.childNodes&&e instanceof ge&&e.parentNode===this){const t=this.childNodes.indexOf(e),i=b(this);return i&&e.parentNode===i.documentElement&&Ee.hasOwnProperty(e.tagName)&&(i[Ee[e.tagName]]=null),C(this.childNodes.splice(t,1)),e}return null}cloneNode(e){var t;switch(t=this.nodeType===ge.DOCUMENT_NODE||this.nodeType===ge.DOCUMENT_FRAGMENT_NODE?new Ze(null,this[E]):Ne(this.nodeType),this.nodeType){case ge.ELEMENT_NODE:t[g]=this.tagName,t.attributes=Object.assign(t.attributes,this.attributes);break;case ge.TEXT_NODE:case ge.CDATA_SECTION_NODE:case ge.PROCESSING_INSTRUCTION_NODE:case ge.COMMENT_NODE:t.nodeValue=this.nodeValue;break;case ge.DOCUMENT_NODE:case ge.DOCUMENT_FRAGMENT_NODE:t[p]=this.nodeType,t.entityEncoder.entities=this.entityEncoder;break;case ge.DOCUMENT_TYPE_NODE:t.name=this.name,t.publicId=this.publicId,t.systemId=this.systemId}if(!0===e&&this.childNodes&&this.childNodes.length>0){for(let e=0;e{if(i.id===e)return t=i,!1})),t}getElementsByClassName(e){var t=[];if(e&&"string"==typeof e){const i=e.trim().split(T);(i.length>1||""!==i[0])&&this.forEach((e=>{for(let t=0;t{"*"!==e&&i.tagName!==e||t.push(i)}))),t}closest(e){return e&&"string"==typeof e?function(e,t){const i=F(t);let s=e;for(;null!=s&&s[p]===ge.ELEMENT_NODE;){if(oe(e,s,i))return s;s=s[f]}return null}(this,e):null}matches(e){return!(!e||"string"!=typeof e)&&function(e,t){return oe(e,e,F(t))}(this,e)}querySelector(e){return e&&"string"==typeof e?ne(this,e,!1):null}querySelectorAll(e){return e&&"string"==typeof e?ne(this,e,!0):[]}forEach(e,t=O.ELEMENT_NODE){let i,s,r=this.childNodes,n=this.firstChild,o=[],a=0;for(;n;){if(i=n[f],s=r[a+1],(null===t||n.nodeType===t)&&!1===e(n,i))return;if(n[f]===i&&n.childNodes&&n.childNodes.length>0)o.push(a),r=n.childNodes,n=r[a=0];else{for(s?(a+=1,s!==r[a]&&(a=i.childNodes.indexOf(s))):a=r.length;null==r[a];){if(n=i,i=n[f],!n||n===this)return;r=i.childNodes,a=o.pop()+1}n=r[a]}}}}Object.defineProperties(ge,{ELEMENT_NODE:{value:O.ELEMENT_NODE},TEXT_NODE:{value:O.TEXT_NODE},CDATA_SECTION_NODE:{value:O.CDATA_SECTION_NODE},PROCESSING_INSTRUCTION_NODE:{value:O.PROCESSING_INSTRUCTION_NODE},COMMENT_NODE:{value:O.COMMENT_NODE},DOCUMENT_NODE:{value:O.DOCUMENT_NODE},DOCUMENT_TYPE_NODE:{value:O.DOCUMENT_TYPE_NODE},DOCUMENT_FRAGMENT_NODE:{value:O.DOCUMENT_FRAGMENT_NODE}});const Ee={HEAD:c,BODY:d,FRAMESET:d};function Te(e,t,i,s=0){if(!e||e.nodeType!==ge.ELEMENT_NODE&&e.nodeType!==ge.DOCUMENT_NODE&&e.nodeType!==ge.DOCUMENT_FRAGMENT_NODE||e.nodeType===ge.ELEMENT_NODE&&!0===y[e.tagName])return t;if(t.nodeType<=ge.COMMENT_NODE){if(e.parentNode&&e.parentNode.nodeType===ge.DOCUMENT_NODE&&Ee.hasOwnProperty(t.tagName)){const i=Ee[t.tagName];if(e.parentNode[i]&&0===s)return t;e.parentNode[i]=t}t.parentNode&&t.parentNode.removeChild(t),D(t,e),C(e.childNodes.splice(i,s,t))}else if(t.nodeType!==ge.DOCUMENT_TYPE_NODE||e.nodeType!==ge.DOCUMENT_NODE&&e.nodeType!==ge.DOCUMENT_FRAGMENT_NODE){if(t.nodeType===ge.DOCUMENT_FRAGMENT_NODE)if(e.parentNode&&e.parentNode.nodeType===ge.DOCUMENT_NODE){s>0&&C(e.childNodes.splice(i,s));for(let r=t.childNodes.length-1;r>=0;r--){const n=t.childNodes[r];if(Ee.hasOwnProperty(n.tagName)){const t=Ee[n.tagName];if(e.parentNode[t]&&0===s)continue;e.parentNode[t]=n}D(n,e),e.childNodes.splice(i,0,n),t.childNodes.splice(r,1)}}else if(t!==b(e)){for(let i=0;i":!0,"/":!0,"=":!0},De={P:!0},we={DT:!0,DD:!0},Se={TBODY:!0,THEAD:!0,TFOOT:!0},_e={TD:!0,TH:!0},Ae={BUTTON:!0,DATALIST:!0,OPTGROUP:!0,OPTION:!0,PROGRESS:!0,SELECT:!0,TEXTAREA:!0},Ie={ADDRESS:De,ARTICLE:De,ASIDE:De,BLOCKQUOTE:De,DIV:De,FIELDSET:De,FOOTER:De,H1:De,H2:De,H3:De,H4:De,H5:De,H6:De,HEADER:De,HGROUP:De,HR:De,MAIN:De,NAV:De,P:De,PRE:De,SECTION:De,BODY:{HEAD:!0,TITLE:!0},DL:De,DD:we,DT:we,TABLE:De,TBODY:Se,THEAD:Se,TD:_e,TFOOT:Se,TH:_e,TR:{TR:!0},LI:{LI:!0},OL:De,UL:De,BUTTON:Ae,DATALIST:Ae,FORM:De,INPUT:Ae,OPTGROUP:{OPTGROUP:!0,OPTION:!0},OPTION:{OPTION:!0},OUTPUT:Ae,PROGRESS:Ae,SELECT:Ae,TEXTAREA:Ae};class Me{constructor(e,t,i){this.options=Me.setupOptions(t),this.lexer=new o(e),this.entityEncoder=i}static setupOptions(e){return(e=Object.assign({},be,e)).encodeEntities instanceof RegExp&&(e.encodeEntities=w(e.encodeEntities)),Object.freeze(e)}static isNameCharStart(e){return":"===e||"_"===e||e>="A"&&e<="Z"||e>="a"&&e<="z"||e>="À"&&e<="Ö"||e>="Ø"&&e<="ö"||e>="ø"&&e<="˿"||e>="Ͱ"&&e<="ͽ"||e>="Ϳ"&&e<="῿"||"‌"===e||"‍"===e||e>="⁰"&&e<="↏"||e>="Ⰰ"&&e<="⿯"||e>="、"&&e<="퟿"||e>="豈"&&e<="﷏"||e>="ﷰ"&&e<="�"||e>="က0"&&e<="F"}static isNameChar(e){return Me.isNameCharStart(e)||e>="0"&&e<="9"||"-"===e||"."===e||"·"===e||e>="̀"&&e<="ͯ"||"‿"===e||"⁀"===e}parseHTML(){var e,t=Ne(ge.DOCUMENT_FRAGMENT_NODE),i=[t];for(t[E]=this.options,e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();e!==n&&i.length>0;)"<"===e?this.parseTag(i):this.parseText(i),e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();return t}parseTag(e){var t,i,s,r,o=0,a=this.lexer.index,l=this.lexer.getNextChar();if(l!==n)e:for(;">"!==l&&l!==n;){if(s=this.lexer.index,0===o){if("!"===l||"?"===l){if(this.options.allowProcessingInstructions&&this.lexer.match("?")){s=this.lexer.index,l=this.lexer.getChar();t:if(Me.isNameCharStart(l)){for(t=Ne(ge.PROCESSING_INSTRUCTION_NODE);l!==n&&Me.isNameChar(l);)l=this.lexer.getNextChar();if(!this.lexer.isWhiteSpace(l)&&l!==n&&("?"!==l||">"!==this.lexer.peek()))break t;t.target=this.lexer.str.slice(s,this.lexer.index),this.lexer.skipWhiteSpace(),s=this.lexer.index,this.lexer.goToString("?>"),t.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(1),e[0].childNodes.push(t),D(t,e[0]);break}this.lexer.advance(s-this.lexer.index-1)}if(this.options.allowCDATA&&this.lexer.match("![CDATA[")){t=Ne(ge.CDATA_SECTION_NODE),s=this.lexer.index,this.lexer.goToString("]]>"),t.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(2),e[0].childNodes.push(t),D(t,e[0]);break}if(this.lexer.match("!DOCTYPE",!1)){this.lexer.skipWhiteSpace(),s=this.lexer.index,this.lexer.goToString(">");let i=e[e.length-1];if(i.doctype)break;if(i.childNodes.length>0)for(let e=i.childNodes.length-1;e>=0;e--)if(i.childNodes[e].nodeTypege.COMMENT_NODE)break e;let r=this.lexer.str.slice(s,this.lexer.index).split(T);if((t=Ne(ge.DOCUMENT_TYPE_NODE)).name=ye.call(r.shift()),r.length>1){let e=ye.call(r.shift());if(r=r.join(" ").split('"'),""===r[0])switch(e){case"public":r.shift(),t.publicId=r.shift();case"system":r.shift(),t.systemId=r.shift()}}t.publicId||(t.publicId=""),t.systemId||(t.systemId=""),i.childNodes.push(t),i.doctype=t,D(t,i);break}{let i;this.lexer.match("!--")?this.lexer.match(">")||this.lexer.match("->")||(i="--\x3e"):("!"===l&&this.lexer.getNextChar(),i=">"),t=Ne(ge.COMMENT_NODE),s=this.lexer.index,i&&this.lexer.goToString(i),t.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(i?i.length-1:-1),e[0].childNodes.push(t),D(t,e[0]);break}}"/"===l&&(l=this.lexer.getNextChar(),o=2,s+=1)}if(1===o){for(;this.lexer.index===s&&"="===l||!this.lexer.isWhiteSpace(l)&&!Ce[l]&&l!==n;)l=this.lexer.getNextChar();r=this.lexer.index}else{for(;(l>="a"&&l<="z"||l>="A"&&l<="Z"||this.lexer.index>s&&(l>="0"&&l<="9"||"-"===l||"_"===l||":"===l))&&l!==n;)l=this.lexer.getNextChar();if(r=this.lexer.index,l===n)return void this.addTextNode(e,a,r,!1);l=this.lexer.skipWhiteSpace(),2===o&&(l=this.lexer.goToString(">"))}if(s===r){if(!this.options.allowSelfClosingSyntax||"/"!==l||">"!==this.lexer.peek()){if(0===o){this.lexer.goToString("<"),this.addTextNode(e,a,this.lexer.index,!1),a=this.lexer.index,l=this.lexer.getNextChar();continue}if(2===o){if(s===this.lexer.index)break;(t=this.addTextNode(e,s,this.lexer.index))[p]=ge.COMMENT_NODE;break}this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();continue}l=this.lexer.getNextChar(),o=2,i=e[0][g]}else i=this.lexer.str.slice(s,r),1!==o&&(i=xe.call(i)),l=this.lexer.skipWhiteSpace();switch(o){case 0:for((t=Ne(ge.ELEMENT_NODE))[g]=i;Ie.hasOwnProperty(t[g])&&Ie[t[g]][e[0][g]];)e.splice(0,1);e[0].childNodes.push(t),D(t,e[0]),o=1,!0!==y[t[g]]&&e.unshift(t);break;case 1:let a=!0;if(this.options.lowerAttributeCase&&(i=ye.call(i)),"="===l){if(this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace(),s=this.lexer.index,'"'===l||"'"===l)this.lexer.getNextChar(),this.lexer.goToString(l),r=this.lexer.index,s+=1,this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();else{for(;!(this.lexer.isWhiteSpace(l)|| -//!unquotedAttributeExclusions[theChar] && -">"===l||this.options.allowSelfClosingSyntax&&"/"===l&&">"===this.lexer.peek()||l===n);)l=this.lexer.getNextChar();r=this.lexer.index,l=this.lexer.skipWhiteSpace()}if(t.attributes.hasOwnProperty(i))break;a=this.lexer.str.slice(s,r),""===a?a=!0:this.options.decodeEntities&&(a=this.entityEncoder.decode(a))}else if(t.attributes.hasOwnProperty(i))break;t.attributes[i]=a;break;case 2:for(let s=0;s0&&e[0]!==t;)e.shift();e.shift();break}}}else this.addTextNode(e,a,this.lexer.index,!1);this.lexer.getNextChar()}parseText(e){var t=this.lexer.index,i=!1;"SCRIPT"===e[0][g]||"STYLE"===e[0][g]?(this.lexer.goToString(" ${Array.from(arguments).join(", ")} )`);const h=e.getContext("2d").getImageData(t,i,s,r),c=h.data,d=this.canvas[Ge],u=r,p=s;for(let e=0;e ${Array.from(arguments).join(", ")} )`)}else console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${e.constructor.name}> ${Array.from(arguments).join(", ")} )`)}createImageData(e,t,i){return e instanceof ve?new ve(e.data,e.width,e.height):new ve(e,t,i)}getImageData(e,t,i,s,r){if(0===e&&0===t&&i===this.canvas.width&&s===this.canvas.height&&!r)return console.log(`${this}→getImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`),new ve(this.canvas[Ge],this.canvas.width,this.canvas.height);console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(", ")} )`);return new ve(i,s,r)}putImageData(e,t,i,s,r,n,o){let a,l;const h=this.canvas[Ge];if(void 0!==s)console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(", ")} )`);else{if(0===t&&0===i&&e.width===this.canvas.width&&e.height===this.canvas.height){console.log(`${this}→putImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);for(let t=0;t[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/))||void 0===t?void 0:t.groups,(null==s?void 0:s.r)&&(null==s?void 0:s.g)&&(null==s?void 0:s.b)&&(n=parseInt(s.r,16),o=parseInt(s.g,16),a=parseInt(s.b,16),l=s.a?parseInt(s.a,10):1,r=!0),s=null===(i=e.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/))||void 0===i?void 0:i.groups,(null==s?void 0:s.r)&&(null==s?void 0:s.g)&&(null==s?void 0:s.b)&&(n=parseInt(s.r,16),o=parseInt(s.g,16),a=parseInt(s.b,16),l=s.a?parseInt(s.a,10):1,r=!0),r?{r:n,g:o,b:a,a:l}:(console.log(`Not a HTML color string: ${e}`),null)}const ke=Symbol("canvas-width"),$e=Symbol("canvas-height"),je=Symbol("canvas-context"),We=Symbol("element-id"),Ge=Symbol("accesscanvas-data");class Be extends ge{get width(){return console.debug(`${this}→width? (${this[ke]})`),this[ke]}get height(){return console.debug(`${this}→height? (${this[$e]})`),this[$e]}set width(e){console.debug(`${this}→width = ${e}`),this[ke]=e,this.resize(this[ke],this[$e])}set height(e){console.debug(`${this}→height = ${e}`),this[$e]=e,this.resize(this[ke],this[$e])}getContext(e,t){if("2d"!=e)throw new Error(`Not implemented: ${e}`);if(this[je]=this[je]||new Le(this),!(this[je]instanceof Le))throw new Error("Context invalid");return this[je]}toDataURL(e="image/png",t){throw new Error("Not implemented")}toBlob(e,t="image/png",i){throw new Error("Not implemented")}get clientWidth(){return this.width}get clientHeight(){return this.height}constructor(){super(fe),this[We]=(Math.random()*Math.pow(36,6)|0).toString(36),this.resize(300,150)}get[Symbol.toStringTag](){return`HTMLCanvasElement#${this[We]}`}resize(e,t){this[ke]=e,this[$e]=t,this[Ge]=new Uint8ClampedArray(this[ke]*this[$e]*4),console.debug(`${this}→reset, new size: ${this[ke]}x${this[$e]} (${this[Ge].length}b)`)}}globalThis&&"object"!=typeof globalThis.HTMLCanvasElement&&(globalThis.HTMLCanvasElement=Be);const He=/&(#\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,Fe=/[\^$\\.*+?()[\]{}|]/g,Ye=Xe({amp:"&",apos:"'",copy:169,gt:">",lt:"<",nbsp:160,quot:'"'});let Ve=Ye;class ze{constructor(e){this.entities=e||"default"}encode(e,t){return this.encodingReplacements?e.replace(t instanceof RegExp?w(t):this.encodingRE,(e=>this.encodingReplacements[e]||e)):e}decode(e){return this.decodingReplacements?e.replace(He,((e,t)=>"#"===t[0]?(t="x"===t[1]||"X"===t[1]?0|parseInt(t.slice(2),16):0|t.slice(1),String.fromCodePoint(t)):this.decodingReplacements[t]||this.decodingReplacements[t.toLowerCase()]||e)):e}set entities(e){"default"===e?e=Ve:e&&e.encodingRE instanceof RegExp||(e=Xe(e)),this.encodingRE=e.encodingRE,this.encodingReplacements=e.encodingReplacements,this.decodingReplacements=e.decodingReplacements}static set defaultEntities(e){Ve=e&&"object"==typeof e?Xe(Object.assign({},e)):Ye}}function Xe(e){var t={encodingRE:null,encodingReplacements:null,decodingReplacements:null};if(e&&"object"==typeof e){const i={},s={},r=[];for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];if(Number.isFinite(n))n=String.fromCodePoint(n);else if("string"!=typeof n||""===n)continue;r.push(n.replace(Fe,"\\$&")),(!i.hasOwnProperty(n)||t.length+20&&(t.encodingRE=new RegExp(r.join("|"),"g"),t.encodingReplacements=i,t.decodingReplacements=s)}return t.encodingRE||(t.encodingRE=new RegExp("(?:)","g")),t}const qe=Symbol("entityEncoder");class Ze extends ge{constructor(e,t){const i=Ne(ge.DOCUMENT_FRAGMENT_NODE,Ze);return i[E]=Me.setupOptions(t),i[qe]=new ze(i[E].entities),i.innerHTML=e,i}get documentElement(){return this[u]||null}get innerHTML(){let e="";for(let t=0;t0)return t[0].textContent}return""}set title(e){const t=this.head;if(t){let i=t.getElementsByTagName("title");i=i.length<=0?t.appendChild(this.createElement("title")):i[0],i.textContent=e}}get body(){return this[d]||null}set body(e){e instanceof ge&&e.nodeType===ge.ELEMENT_NODE&&("BODY"===e.tagName||"FRAMESET"===e.tagName)&&e!==this[d]&&this[u]&&(this[d]?this[d].parentNode.replaceChild(e,this[d]):this[u].appendChild(e))}get entityEncoder(){return this[qe]}createElement(e){if(e&&"string"==typeof e){const t=function(e){if("canvas"===e.toLowerCase())return function(e){const t=new Be;switch(t[p]=e,t.nodeValue=null,t[f]=null,t[N]=null,e){case ge.ELEMENT_NODE:t[g]=null,t.attributes={};case ge.DOCUMENT_NODE:case ge.DOCUMENT_FRAGMENT_NODE:t.childNodes=[]}return t}(ge.ELEMENT_NODE);return Ne(ge.ELEMENT_NODE)}(e);return t[g]=e.toUpperCase(),t}}createTextNode(e){return Ke(ge.TEXT_NODE,e)}createComment(e){return Ke(ge.COMMENT_NODE,e)}createCDATASection(e){return Ke(ge.CDATA_SECTION_NODE,e,"]]>")}createProcessingInstruction(e,t){e:if(e&&"string"==typeof e){if(!Me.isNameCharStart(e[0]))break e;for(let t=1;t");return i.target=e,i}throw new Error("Invalid target name "+JSON.stringify(e)+".")}createDocumentType(e,t,i){return Je(Ne(ge.DOCUMENT_TYPE_NODE),e,t,i)}getElementsByName(e){const t=[];return e&&"string"==typeof e&&this.forEach((i=>{i.attributes&&i.attributes.name===e&&t.push(i)})),t}}function Ke(e,t,i=!1){const s=Ne(e);if(s.nodeValue="",t&&"string"==typeof t){if(i&&"string"==typeof i&&-1!==t.indexOf(i))throw new Error("The data provided ('"+t+"') contains '"+i+"'.");s.nodeValue+=t}return s}function Je(e,t,i,s){return t&&"string"==typeof t?(e.name=t.toLowerCase(),e.publicId=i&&"string"==typeof i?i:"",e.systemId=s&&"string"==typeof s?s:""):e.name=e.publicId=e.systemId="",e}return Ze.Node=ge,Ze.EntityEncoder=ze,Ze}(); diff --git a/lib/fauxdom-with-canvas.mjs b/lib/fauxdom-with-canvas.mjs index f6924a3..18f03a0 100644 --- a/lib/fauxdom-with-canvas.mjs +++ b/lib/fauxdom-with-canvas.mjs @@ -1,3 +1,3 @@ -const e={},t={},s=Object.prototype.hasOwnProperty.bind(t),i=null;class r{constructor(e){if(this.index=0,this.str=e,this.scanChar=this.str[this.index],!s(" ")){for(let e=0;e<=32;e++)t[String.fromCharCode(e)]=null;for(let e=128;e<=159;e++)t[String.fromCharCode(e)]=null}}isWhiteSpace(e){return e!==i&&s(e)}goToString(t,s){if(!1!==s)this.index=this.str.indexOf(t,this.index);else{e[t]||(e[t]=new RegExp(t,"ig")),e[t].lastIndex=this.index;const s=e[t].exec(this.str);this.index=s?s.index:-1}this.index>-1?this.scanChar=this.str[this.index]:(this.index=this.str.length,this.scanChar=i)}goToIndex(e){this.scanChar=this.str[this.index=e]}advance(e){return this.index+=e,this.index>this.str.length?(this.index=this.str.length,this.scanChar=i):this.scanChar=this.str[this.index]}match(e,t){var s=this.str.substr(this.index,e.length);return!1===t&&(e=e.toLowerCase(),s=s.toLowerCase()),s===e&&(this.index+=e.length-1,this.getNextChar(),!0)}peek(){return this.str[this.index+1]}getChar(){return this.scanChar}getNextChar(){return this.index+1e.callback===t&&e.capturing===r?s:void 0)).reverse().forEach((e=>{void 0!==e&&i.splice(e,1)}))}dispatchEvent(e){let t=!0;if(!this[n])return t;const s=this[n].get(e.type)??[];return s?.forEach((({callback:s})=>{s(e),e.defaultPrevented&&(t=!1)})),t}}const a=Symbol("doctype"),l=Symbol("head"),h=Symbol("body"),c=Symbol("documentElement"),d=Symbol("nodeType"),u=Symbol("parentNode"),p=Symbol("ownerDocument"),N=Symbol("tagName"),f=Symbol("parserOptions"),g=/\s+/g,E={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11},T={AREA:!0,BASE:!0,BR:!0,COL:!0,COMMAND:!0,EMBED:!0,HR:!0,IMG:!0,INPUT:!0,KEYGEN:!0,LINK:!0,META:!0,PARAM:!0,SOURCE:!0,TRACK:!0,WBR:!0};function m(e){var t=-1,s=-1,i="HTML";e[a]&&e[f].allowCustomRootElement&&(i=e[a].name.toUpperCase());for(let r=0,n=e.childNodes.length;r0)for(let t=0;t{e[p]=s}),null),e[u]=t,e[p]=s}function C(e){if(!e.global){let t=e.flags;e=new RegExp(e.source,t+"g")}return e}const b=Symbol("element"),D=Symbol("length"),w=/^\S+$/,S=Array.prototype.indexOf,_=Array.prototype.join,A=Array.prototype.splice;class I{constructor(){throw new Error("Cannot directly instantiate DOMTokenList.")}get length(){return this[D]}set length(e){}get value(){return _.call(this," ")}set value(e){if(this[D]>0)for(let e in this)this.hasOwnProperty(e)&&isFinite(e)&&delete this[e];this[D]=0,"string"==typeof e?this.add.apply(this,e.split(g)):delete this[b].attributes.class}add(){for(let e=0;e=0&&e=0&&this.supports(t))&&(-1===S.call(this,t)?this[s]=t:(A.call(this,s,1),this[D]--),this[b].attributes.class=this.value,!0)}supports(e){return!(!e||"string"!=typeof e)&&e.match(w)}}const M=Symbol("element");function v(e){return e.replace(/[A-Z]/g,(e=>"-"+e.toLowerCase()))}function R(e){return"string"==typeof e&&(!!e.match(/^\-?[a-z_-]*[a-z]$/)||(!!e.match(/^\-\-[A-Za-z_-]*[A-Za-z0-9]$/)||!!e.match(/^[a-zA-Z]+$/)))}function L(e=""){return new Map(e.split(/\s*;\s*/g).filter((e=>e.length)).map((e=>e.trim().match(/^([a-z-]+)\s*:\s*(.*)$/).slice(1))))}function U(e){return Array.from(e?.entries()??[]).map((e=>e.join(": "))).join("; ")}function k(e){return new Proxy({[M]:e},{get(t,s){if(s===M)return e;if(!R(s))return;const i=v(s);return L(e.attributes.style).get(i)},set(t,s,i){if(!R(s))return!0;const r=v(s),n=L(e.attributes.style);return e.attributes.style=U(n.set(r,i)),!0},deleteProperty(t,s){if(!R(s))return;const i=v(s),r=L(e.attributes.style);e.attributes.style=U(r.delete(i))}})}const P=/\r\n|\r|\f/g,$=/\(\s*(even|odd|(?:(?:([+-]?\d*)n)\s*(?:([+-])\s*(\d+))?|([+-]?\d+)))\s*/g,W={Selectors:0,Identifier:1,Iterator:2,IteratorOf:3},G={is:W.Selectors,not:W.Selectors,where:W.Selectors,has:W.Selectors,lang:W.Identifier,dir:W.Identifier,"nth-child":W.IteratorOf,"nth-last-child":W.IteratorOf,"nth-of-type":W.Iterator,"nth-last-of-type":W.Iterator,"nth-col":W.Iterator,"nth-last-col":W.Iterator};function j(e){return B(new r(e.replace(P,"\n")))}function B(e,t=i,s=!1){for(var r=e.skipWhiteSpace(),n={},o=[],a=[o],l=[a];r!==i&&r!==t;){switch(r){case"*":if(o.length>0)throw H("Universal selectors must come before all other simple selectors.",e);n.type="universal",o.push(n),n={};break;case"#":case".":{e.getNextChar();const t=F(e);if(!t)throw H("Expected an identifier.",e);n.type="#"===r?"id":"class",n.name=t,o.push(n),n={};break}case"[":{e.getNextAfterWhiteSpace();const t=F(e);if(!t)throw H("Expected an identifier.",e);if(n.type="attr",n.name=t,n.comparison="=",n.value=!0,n.ignoreCase=!1,"]"!==(r=e.getNextAfterWhiteSpace())){switch(r){case"=":break;case"~":case"|":case"^":case"$":case"*":if("="!==e.peek())throw H("Expected '='.",e,1);n.comparison=r+n.comparison,e.getNextChar();break;default:throw H("Unexpected character '"+(r===i?"END_OF_INPUT":r)+"'.",e)}if("'"===(r=e.getNextAfterWhiteSpace())||'"'===r){const t=r;for(n.value="",r=e.getNextChar();r!==i&&r!==t&&"\n"!==r;)"\\"===r?(n.value+=Y(e),r=e.getChar()):(n.value+=r,r=e.getNextChar())}else{const t=F(e);if(!t)throw H("Expected an identifier.",e);n.value=t}if("]"!==e.getNextAfterWhiteSpace()){const t=F(e);if("i"===t||"I"===t)n.ignoreCase=!0;else if("s"===t||"S"===t)n.ignoreCase=!1;else if(t)throw H("Unexpected identifier '"+t+"'.",e,1-t.length);if("]"!==e.getNextAfterWhiteSpace())throw H("Expected ']'.",e,-1+t.length)}}o.push(n),n={};break}case":":if(e.getNextChar(),e.match(":")){const t=F(e);if(!t)throw H("Expected a pseudo-element name.",e);n.type="pseudo-element",n.name=t}else{const t=F(e);if(!t)throw H("Expected a pseudo-class name.",e);n.type="pseudo-class",n.name=t;const s=G[t];if(null!=s){if(n.type="pseudo-fn","("!==e.getNextChar())throw H("Expected '('.",e);switch(s){case W.IteratorOf:case W.Iterator:let t,i=0,r=0;$.lastIndex=e.index;const o=$.exec(e.str);if(!o)throw H("Invalid parameter.",e,1);if(e.advance(o[0].length),s===W.IteratorOf){e.skipWhiteSpace();const s=e.index;if("of"===F(e).toLowerCase()){const s=e.getNextChar();if(")"!==s&&!e.isWhiteSpace(s))throw H("Expected whitespace.",e);if(t=B(e,")"),!(t instanceof Array)||0===t.length)throw H("Expected at least one selector.",e)}else e.goToIndex(s)}if(")"!==e.skipWhiteSpace())throw H("Expected ')'.",e);"even"===o[1]||"odd"===o[1]?(i=2,"odd"===o[1]&&(r=1)):o[5]?r=parseInt(o[5],10):(i="-"===o[2]?-1:o[2]&&"+"!==o[2]?parseInt(o[2],10):1,o[3]&&(r=parseInt(o[3]+o[4],10))),n.params=[i,r],t&&n.params.push(t);break;case W.Selectors:if(e.getNextChar(),n.params=B(e,")",!0),0===n.params.length)throw H("Expected at least one selector.",e);break;case W.Identifier:if(!X(e.getNextAfterWhiteSpace()))throw H("Expected an identifier.",e);n.params=[F(e)],e.getNextChar()}if(")"!==e.skipWhiteSpace())throw H("Expected ')'.",e)}else"before"!==t&&"after"!==t&&"first-line"!==t&&"first-letter"!==t||(n.type="pseudo-element")}o.push(n),n={};break;case"+":case">":case"~":if(0===o.length){if(1===a.length){if(!s)throw H("Absolute selectors cannot start with a combinator.",e);a.unshift([{type:"pseudo-class",name:"scope"}])}else if("string"==typeof a[a.length-2])throw H("Cannot have multiple combinators in a row.",e);a.splice(a.length-1,0,r)}else a.push(r,o=[]);break;case",":if(0===o.length){if(a.length>1){if(a.pop(),"string"==typeof a[a.length-1])throw H("Complex selectors are not allowed to end with a combinator.",e,-1);l.push(a=[o])}}else l.push(a=[o=[]]);e.skipWhiteSpace();break;default:if(e.isWhiteSpace(r))o.length>0&&a.push(o=[]),e.skipWhiteSpace(),e.advance(-1);else{if(!X(r))throw H("Unexpected character '"+r+"'.",e);if(o.length>0)throw H("Type (tag name) selectors must come before all other simple selectors.",e);n.type="type",n.name=F(e).toUpperCase(),o.push(n),n={}}}r=e.getNextChar()}if(0===o.length&&(1===a.length?(l.pop(),a=l[l.length-1]):a.pop()),a&&"string"==typeof a[a.length-1])throw H("Complex selectors are not allowed to end with a combinator.",e,-1);return l}function H(e,t,s=0){var i=new SyntaxError(e),r=t.index+s;return i.stack="SyntaxError: "+e+"\n\n"+t.str+"\n"+" ".repeat(r)+"^\n at index "+r,i}function F(e){var t="",s=e.getChar();if(X(s)){do{"\\"===s?(t+=Y(e),s=e.getChar()):(t+=s,s=e.getNextChar())}while(s!==i&&(X(s)||s>="0"&&s<="9"||"-"===s));e.advance(-1)}return t}function Y(e){var t=e.getNextChar();if(V(t)){let s="";for(let i=5;i>=0&&V(t);i--)s+=t,t=e.getNextChar();return e.isWhiteSpace(t)&&e.getNextChar(),s=0|parseInt(s,16),0===s||s>=55296&&s<=57343||s>1114111?"�":String.fromCodePoint(s)}return t===i?"�":(e.getNextChar(),t)}function V(e){return e!==i&&(e>="0"&&e<="9"||e>="A"&&e<="F"||e>="a"&&e<="f")}function X(e){return e>="A"&&e<="Z"||e>="a"&&e<="z"||"_"===e||e>="€"||"\\"===e}const z=0,q=1,Z=2,K=3,J=4,Q={">":Z,"+":K,"~":J},ee={is:(e,t,s)=>ie(e,t,s),not:(e,t,s)=>!ie(e,t,s),has(e,t,s){var i=!1;for(let e=0;e0&&t.forEach((e=>{if(ie(t,e,s))return i=!0,!1})),i},"nth-child"(e,t,s){const i=t[u],r=i.childNodes,n=new oe(s[0],s[1]);for(let e=0;e=0;e--)if(r[e][d]===pe.ELEMENT_NODE&&(!s[2]||ie(i,r[e],s[2]))){const s=n.next();if(r[e]===t)return s}return!1},"nth-of-type"(e,t,s){const i=t[u].childNodes,r=new oe(s[0],s[1]),n=t[N];for(let e=0;e=0;e--)if(i[e][N]===n){const s=r.next();if(i[e]===t)return s}}},te={scope:(e,t)=>t===e,enabled(e,t){switch(t[N]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return!t.hasAttribute("disabled")}return!1},disabled(e,t){switch(t[N]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return t.hasAttribute("disabled")}return!1},checked(e,t){if("INPUT"===t[N]){const e=t.getAttribute("type");if("checkbox"===e||"radio"===e)return t.hasAttribute("checked")}else if("OPTION"===t[N])return t.hasAttribute("selected");return!1},required(e,t){switch(t[N]){case"INPUT":case"SELECT":case"TEXTAREA":return t.hasAttribute("required")}return!1},optional(e,t){switch(t[N]){case"INPUT":case"SELECT":case"TEXTAREA":return!t.hasAttribute("required")}return!1},root(e,t){const s=O(e);return!!s&&s.documentElement===t},empty:(e,t)=>0===t.childNodes.length,"first-child"(e,t){const s=t[u].childNodes;for(let e=0;e=0;e--)if(s[e][d]===pe.ELEMENT_NODE)return s[e]===t},"only-child"(e,t){const s=t[u].childNodes;let i,r;for(let e=0,t=s.length-1;t>=0&&(!i||!r);e++,t--)i||s[e][d]!==pe.ELEMENT_NODE||(i=s[e]),r||s[t][d]!==pe.ELEMENT_NODE||(r=s[t]);return i===r&&i===t},"first-of-type"(e,t){const s=t[u].childNodes,i=t[N];for(let e=0;e=0;e--)if(s[e][N]===i)return s[e]===t},"only-of-type"(e,t){const s=t[u].childNodes,i=t[N];let r,n;for(let e=0,t=s.length-1;t>=0&&(!r||!n);e++,t--)r||s[e][N]!==i||(r=s[e]),n||s[t][N]!==i||(n=s[t]);return r===n&&r===t}};function se(e,t,s){const i=j(t),r=[];return e.forEach((t=>{if(ie(e,t,i)&&(r.push(t),!s))return!1})),s?r:r[0]||null}function ie(e,t,s,i=!1){var r;e:for(let n=0;n=0;i?t++:t--)if(Q.hasOwnProperty(o[t]))a=Q[o[t]];else switch(a){case z:if(!re(e,r,o[t]))continue e;a=q;break;case q:for(;r=r[u];)if(re(e,r,o[t]))continue t;continue e;case Z:if(!re(e,r=r[u],o[t]))continue e;break;case K:{const s=r[u].childNodes;if(!re(e,r=s[s.indexOf(r)+(i?1:-1)],o[t]))continue e;break}case J:{const s=r[u].childNodes;for(let n=s.indexOf(r)+(i?1:-1);i?n=0;i?n++:n--)if(re(e,s[n],o[t])){r=s[n];continue t}continue e}}return!0}}return!1}function re(e,t,s){if(!t||t[d]!==pe.ELEMENT_NODE)return!1;for(let i=0;i=this.current||this.A>0&&this.current>=this.B)&&(e=(this.current+this.B)%this.A==0),e}}function ae(e){var t=e.tagName,s=O(e),i=s?s.entityEncoder:null,r="";switch(e.nodeType){case E.ELEMENT_NODE:r+="<"+(t=t.toLowerCase());for(let t in e.attributes)if(e.attributes.hasOwnProperty(t)){let n=e.attributes[t];!0===n?n="":i&&s[f]&&(n=le(n,i,s[f])),r+=" "+t,""!==n&&(r+='="'+n+'"')}r+=">";for(let t=0;t");break;case E.TEXT_NODE:i&&s[f]&&(!e.parentNode||"SCRIPT"!==e.parentNode.tagName&&"STYLE"!==e.parentNode.tagName)?r+=le(e.nodeValue,i,s[f]):r+=e.nodeValue;break;case E.CDATA_SECTION_NODE:r+="";break;case E.PROCESSING_INSTRUCTION_NODE:r+="";break;case E.COMMENT_NODE:r+="\x3c!--"+e.nodeValue+"--\x3e";break;case E.DOCUMENT_TYPE_NODE:r+=""}return r}function le(e,t,s){return!1===s.encodeEntities?e:!0!==s.encodeEntities&&s.encodeEntities instanceof RegExp?t.encode(e,s.encodeEntities):t.encode(e)}const he=Symbol("classList"),ce=Symbol("style"),de=Symbol("extendNode");function ue(e,t=pe){const s=Object.create(t.prototype);switch(s[d]=e,s.nodeValue=null,s[u]=null,s[p]=null,e){case pe.ELEMENT_NODE:s[N]=null,s.attributes={};case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:s.childNodes=[]}return s}class pe extends o{constructor(){if(super(),arguments[0]!==de)throw new Error("Cannot directly instantiate Node.")}get nodeType(){return this[d]}get nodeName(){switch(this.nodeType){case pe.ELEMENT_NODE:return this.tagName;case pe.TEXT_NODE:return"#text";case pe.CDATA_SECTION_NODE:return"#cdata-section";case pe.PROCESSING_INSTRUCTION_NODE:return this.target;case pe.COMMENT_NODE:return"#comment";case pe.DOCUMENT_NODE:return"#document";case pe.DOCUMENT_TYPE_NODE:return this.name;case pe.DOCUMENT_FRAGMENT_NODE:return"#document-fragment"}}get parentNode(){return this[u]}get ownerDocument(){return this[p]}get tagName(){return this[N]||null}get firstChild(){return this.childNodes&&this.childNodes[0]||null}get lastChild(){return this.childNodes&&this.childNodes[this.childNodes.length-1]||null}get previousSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>0)return e.childNodes[t-1]}return null}get nextSibling(){const e=this.parentNode;if(e){const t=e.childNodes.indexOf(this);if(t>-1&&t=pe.TEXT_NODE&&this.nodeType<=pe.COMMENT_NODE&&(this.nodeValue=e)}getRootNode(){let e=this;for(;e.parentNode;)e=e.parentNode;return e}hasAttributes(){if(this.attributes)for(let e in this.attributes)if(this.attributes.hasOwnProperty(e))return!0;return!1}getAttributeNames(){return this.attributes?Object.keys(this.attributes):[]}getAttribute(e){var t;return this.attributes&&e&&"string"==typeof e&&(t=this.attributes[Ee(this,e)]),void 0===t?null:t}setAttribute(e,t){this.attributes&&e&&"string"==typeof e&&("class"===(e=Ee(this,e))?!0!==t?this.className=""+t:(this.classList.value="",this.attributes[e]=!0):this.attributes[e]="string"==typeof t||!0===t?t:""+t)}toggleAttribute(e,t){if(this.attributes&&e&&"string"==typeof e)return e=Ee(this,e),this.attributes.hasOwnProperty(e)?1!==arguments.length&&!1!==t||(delete this.attributes[e],!1):(1===arguments.length||!0===t)&&(this.attributes[e]=!0)}removeAttribute(e){this.attributes&&e&&"string"==typeof e&&("class"===(e=Ee(this,e))&&this[he]&&(this[he].value=null),delete this.attributes[e])}hasAttribute(e){return!(!this.attributes||!e||"string"!=typeof e)&&this.attributes.hasOwnProperty(Ee(this,e))}hasChildNodes(){return!!this.childNodes&&this.childNodes.length>0}appendChild(e){return this.insertBefore(e,null)}insertBefore(e,t){if(this.childNodes&&e instanceof pe&&arguments.length>1){let s=-1;if(null==t?s=this.childNodes.length:t instanceof pe&&t.parentNode===this&&(s=this.childNodes.indexOf(t)),-1!==s)return fe(this,e,s)}return null}replaceChild(e,t){return this.childNodes&&t instanceof pe&&e instanceof pe&&t.parentNode===this&&t!==e?(fe(this,e,this.childNodes.indexOf(t),1),t):null}removeChild(e){if(this.childNodes&&e instanceof pe&&e.parentNode===this){const t=this.childNodes.indexOf(e),s=O(this);return s&&e.parentNode===s.documentElement&&Ne.hasOwnProperty(e.tagName)&&(s[Ne[e.tagName]]=null),x(this.childNodes.splice(t,1)),e}return null}cloneNode(e){var t;switch(t=this.nodeType===pe.DOCUMENT_NODE||this.nodeType===pe.DOCUMENT_FRAGMENT_NODE?new Xe(null,this[f]):ue(this.nodeType),this.nodeType){case pe.ELEMENT_NODE:t[N]=this.tagName,t.attributes=Object.assign(t.attributes,this.attributes);break;case pe.TEXT_NODE:case pe.CDATA_SECTION_NODE:case pe.PROCESSING_INSTRUCTION_NODE:case pe.COMMENT_NODE:t.nodeValue=this.nodeValue;break;case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:t[d]=this.nodeType,t.entityEncoder.entities=this.entityEncoder;break;case pe.DOCUMENT_TYPE_NODE:t.name=this.name,t.publicId=this.publicId,t.systemId=this.systemId}if(!0===e&&this.childNodes&&this.childNodes.length>0){for(let e=0;e{if(s.id===e)return t=s,!1})),t}getElementsByClassName(e){var t=[];if(e&&"string"==typeof e){const s=e.trim().split(g);(s.length>1||""!==s[0])&&this.forEach((e=>{for(let t=0;t{"*"!==e&&s.tagName!==e||t.push(s)}))),t}closest(e){return e&&"string"==typeof e?function(e,t){const s=j(t);let i=e;for(;null!=i&&i[d]===pe.ELEMENT_NODE;){if(ie(e,i,s))return i;i=i[u]}return null}(this,e):null}matches(e){return!(!e||"string"!=typeof e)&&function(e,t){return ie(e,e,j(t))}(this,e)}querySelector(e){return e&&"string"==typeof e?se(this,e,!1):null}querySelectorAll(e){return e&&"string"==typeof e?se(this,e,!0):[]}forEach(e,t=E.ELEMENT_NODE){let s,i,r=this.childNodes,n=this.firstChild,o=[],a=0;for(;n;){if(s=n[u],i=r[a+1],(null===t||n.nodeType===t)&&!1===e(n,s))return;if(n[u]===s&&n.childNodes&&n.childNodes.length>0)o.push(a),r=n.childNodes,n=r[a=0];else{for(i?(a+=1,i!==r[a]&&(a=s.childNodes.indexOf(i))):a=r.length;null==r[a];){if(n=s,s=n[u],!n||n===this)return;r=s.childNodes,a=o.pop()+1}n=r[a]}}}}Object.defineProperties(pe,{ELEMENT_NODE:{value:E.ELEMENT_NODE},TEXT_NODE:{value:E.TEXT_NODE},CDATA_SECTION_NODE:{value:E.CDATA_SECTION_NODE},PROCESSING_INSTRUCTION_NODE:{value:E.PROCESSING_INSTRUCTION_NODE},COMMENT_NODE:{value:E.COMMENT_NODE},DOCUMENT_NODE:{value:E.DOCUMENT_NODE},DOCUMENT_TYPE_NODE:{value:E.DOCUMENT_TYPE_NODE},DOCUMENT_FRAGMENT_NODE:{value:E.DOCUMENT_FRAGMENT_NODE}});const Ne={HEAD:l,BODY:h,FRAMESET:h};function fe(e,t,s,i=0){if(!e||e.nodeType!==pe.ELEMENT_NODE&&e.nodeType!==pe.DOCUMENT_NODE&&e.nodeType!==pe.DOCUMENT_FRAGMENT_NODE||e.nodeType===pe.ELEMENT_NODE&&!0===T[e.tagName])return t;if(t.nodeType<=pe.COMMENT_NODE){if(e.parentNode&&e.parentNode.nodeType===pe.DOCUMENT_NODE&&Ne.hasOwnProperty(t.tagName)){const s=Ne[t.tagName];if(e.parentNode[s]&&0===i)return t;e.parentNode[s]=t}t.parentNode&&t.parentNode.removeChild(t),y(t,e),x(e.childNodes.splice(s,i,t))}else if(t.nodeType!==pe.DOCUMENT_TYPE_NODE||e.nodeType!==pe.DOCUMENT_NODE&&e.nodeType!==pe.DOCUMENT_FRAGMENT_NODE){if(t.nodeType===pe.DOCUMENT_FRAGMENT_NODE)if(e.parentNode&&e.parentNode.nodeType===pe.DOCUMENT_NODE){i>0&&x(e.childNodes.splice(s,i));for(let r=t.childNodes.length-1;r>=0;r--){const n=t.childNodes[r];if(Ne.hasOwnProperty(n.tagName)){const t=Ne[n.tagName];if(e.parentNode[t]&&0===i)continue;e.parentNode[t]=n}y(n,e),e.childNodes.splice(s,0,n),t.childNodes.splice(r,1)}}else if(t!==O(e)){for(let s=0;s":!0,"/":!0,"=":!0},ye={P:!0},Ce={DT:!0,DD:!0},be={TBODY:!0,THEAD:!0,TFOOT:!0},De={TD:!0,TH:!0},we={BUTTON:!0,DATALIST:!0,OPTGROUP:!0,OPTION:!0,PROGRESS:!0,SELECT:!0,TEXTAREA:!0},Se={ADDRESS:ye,ARTICLE:ye,ASIDE:ye,BLOCKQUOTE:ye,DIV:ye,FIELDSET:ye,FOOTER:ye,H1:ye,H2:ye,H3:ye,H4:ye,H5:ye,H6:ye,HEADER:ye,HGROUP:ye,HR:ye,MAIN:ye,NAV:ye,P:ye,PRE:ye,SECTION:ye,BODY:{HEAD:!0,TITLE:!0},DL:ye,DD:Ce,DT:Ce,TABLE:ye,TBODY:be,THEAD:be,TD:De,TFOOT:be,TH:De,TR:{TR:!0},LI:{LI:!0},OL:ye,UL:ye,BUTTON:we,DATALIST:we,FORM:ye,INPUT:we,OPTGROUP:{OPTGROUP:!0,OPTION:!0},OPTION:{OPTION:!0},OUTPUT:we,PROGRESS:we,SELECT:we,TEXTAREA:we};class _e{constructor(e,t,s){this.options=_e.setupOptions(t),this.lexer=new r(e),this.entityEncoder=s}static setupOptions(e){return(e=Object.assign({},Oe,e)).encodeEntities instanceof RegExp&&(e.encodeEntities=C(e.encodeEntities)),Object.freeze(e)}static isNameCharStart(e){return":"===e||"_"===e||e>="A"&&e<="Z"||e>="a"&&e<="z"||e>="À"&&e<="Ö"||e>="Ø"&&e<="ö"||e>="ø"&&e<="˿"||e>="Ͱ"&&e<="ͽ"||e>="Ϳ"&&e<="῿"||"‌"===e||"‍"===e||e>="⁰"&&e<="↏"||e>="Ⰰ"&&e<="⿯"||e>="、"&&e<="퟿"||e>="豈"&&e<="﷏"||e>="ﷰ"&&e<="�"||e>="က0"&&e<="F"}static isNameChar(e){return _e.isNameCharStart(e)||e>="0"&&e<="9"||"-"===e||"."===e||"·"===e||e>="̀"&&e<="ͯ"||"‿"===e||"⁀"===e}parseHTML(){var e,t=ue(pe.DOCUMENT_FRAGMENT_NODE),s=[t];for(t[f]=this.options,e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();e!==i&&s.length>0;)"<"===e?this.parseTag(s):this.parseText(s),e=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();return t}parseTag(e){var t,s,r,n,o=0,a=this.lexer.index,l=this.lexer.getNextChar();if(l!==i)e:for(;">"!==l&&l!==i;){if(r=this.lexer.index,0===o){if("!"===l||"?"===l){if(this.options.allowProcessingInstructions&&this.lexer.match("?")){r=this.lexer.index,l=this.lexer.getChar();t:if(_e.isNameCharStart(l)){for(t=ue(pe.PROCESSING_INSTRUCTION_NODE);l!==i&&_e.isNameChar(l);)l=this.lexer.getNextChar();if(!this.lexer.isWhiteSpace(l)&&l!==i&&("?"!==l||">"!==this.lexer.peek()))break t;t.target=this.lexer.str.slice(r,this.lexer.index),this.lexer.skipWhiteSpace(),r=this.lexer.index,this.lexer.goToString("?>"),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(1),e[0].childNodes.push(t),y(t,e[0]);break}this.lexer.advance(r-this.lexer.index-1)}if(this.options.allowCDATA&&this.lexer.match("![CDATA[")){t=ue(pe.CDATA_SECTION_NODE),r=this.lexer.index,this.lexer.goToString("]]>"),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(2),e[0].childNodes.push(t),y(t,e[0]);break}if(this.lexer.match("!DOCTYPE",!1)){this.lexer.skipWhiteSpace(),r=this.lexer.index,this.lexer.goToString(">");let s=e[e.length-1];if(s.doctype)break;if(s.childNodes.length>0)for(let e=s.childNodes.length-1;e>=0;e--)if(s.childNodes[e].nodeTypepe.COMMENT_NODE)break e;let i=this.lexer.str.slice(r,this.lexer.index).split(g);if((t=ue(pe.DOCUMENT_TYPE_NODE)).name=Te.call(i.shift()),i.length>1){let e=Te.call(i.shift());if(i=i.join(" ").split('"'),""===i[0])switch(e){case"public":i.shift(),t.publicId=i.shift();case"system":i.shift(),t.systemId=i.shift()}}t.publicId||(t.publicId=""),t.systemId||(t.systemId=""),s.childNodes.push(t),s.doctype=t,y(t,s);break}{let s;this.lexer.match("!--")?this.lexer.match(">")||this.lexer.match("->")||(s="--\x3e"):("!"===l&&this.lexer.getNextChar(),s=">"),t=ue(pe.COMMENT_NODE),r=this.lexer.index,s&&this.lexer.goToString(s),t.nodeValue=this.lexer.str.slice(r,this.lexer.index),this.lexer.advance(s?s.length-1:-1),e[0].childNodes.push(t),y(t,e[0]);break}}"/"===l&&(l=this.lexer.getNextChar(),o=2,r+=1)}if(1===o){for(;this.lexer.index===r&&"="===l||!this.lexer.isWhiteSpace(l)&&!xe[l]&&l!==i;)l=this.lexer.getNextChar();n=this.lexer.index}else{for(;(l>="a"&&l<="z"||l>="A"&&l<="Z"||this.lexer.index>r&&(l>="0"&&l<="9"||"-"===l||"_"===l||":"===l))&&l!==i;)l=this.lexer.getNextChar();if(n=this.lexer.index,l===i)return void this.addTextNode(e,a,n,!1);l=this.lexer.skipWhiteSpace(),2===o&&(l=this.lexer.goToString(">"))}if(r===n){if(!this.options.allowSelfClosingSyntax||"/"!==l||">"!==this.lexer.peek()){if(0===o){this.lexer.goToString("<"),this.addTextNode(e,a,this.lexer.index,!1),a=this.lexer.index,l=this.lexer.getNextChar();continue}if(2===o){if(r===this.lexer.index)break;(t=this.addTextNode(e,r,this.lexer.index))[d]=pe.COMMENT_NODE;break}this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();continue}l=this.lexer.getNextChar(),o=2,s=e[0][N]}else s=this.lexer.str.slice(r,n),1!==o&&(s=me.call(s)),l=this.lexer.skipWhiteSpace();switch(o){case 0:for((t=ue(pe.ELEMENT_NODE))[N]=s;Se.hasOwnProperty(t[N])&&Se[t[N]][e[0][N]];)e.splice(0,1);e[0].childNodes.push(t),y(t,e[0]),o=1,!0!==T[t[N]]&&e.unshift(t);break;case 1:let a=!0;if(this.options.lowerAttributeCase&&(s=Te.call(s)),"="===l){if(this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace(),r=this.lexer.index,'"'===l||"'"===l)this.lexer.getNextChar(),this.lexer.goToString(l),n=this.lexer.index,r+=1,this.lexer.getNextChar(),l=this.lexer.skipWhiteSpace();else{for(;!(this.lexer.isWhiteSpace(l)|| +const A={},e={},t=Object.prototype.hasOwnProperty.bind(e),i=null;class s{constructor(A){if(this.index=0,this.str=A,this.scanChar=this.str[this.index],!t(" ")){for(let A=0;A<=32;A++)e[String.fromCharCode(A)]=null;for(let A=128;A<=159;A++)e[String.fromCharCode(A)]=null}}isWhiteSpace(A){return A!==i&&t(A)}goToString(e,t){if(!1!==t)this.index=this.str.indexOf(e,this.index);else{A[e]||(A[e]=new RegExp(e,"ig")),A[e].lastIndex=this.index;const t=A[e].exec(this.str);this.index=t?t.index:-1}this.index>-1?this.scanChar=this.str[this.index]:(this.index=this.str.length,this.scanChar=i)}goToIndex(A){this.scanChar=this.str[this.index=A]}advance(A){return this.index+=A,this.index>this.str.length?(this.index=this.str.length,this.scanChar=i):this.scanChar=this.str[this.index]}match(A,e){var t=this.str.substr(this.index,A.length);return!1===e&&(A=A.toLowerCase(),t=t.toLowerCase()),t===A&&(this.index+=A.length-1,this.getNextChar(),!0)}peek(){return this.str[this.index+1]}getChar(){return this.scanChar}getNextChar(){return this.index+1A.callback===e&&A.capturing===s?t:void 0)).reverse().forEach((A=>{void 0!==A&&i.splice(A,1)}))}dispatchEvent(A){let e=!0;if(!this[g])return e;const t=this[g].get(A.type)??[];return t?.forEach((({callback:t})=>{t(A),A.defaultPrevented&&(e=!1)})),e}}const r=Symbol("doctype"),o=Symbol("head"),a=Symbol("body"),E=Symbol("documentElement"),I=Symbol("nodeType"),h=Symbol("parentNode"),l=Symbol("ownerDocument"),C=Symbol("tagName"),c=Symbol("parserOptions"),Q=/\s+/g,B={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11},d={AREA:!0,BASE:!0,BR:!0,COL:!0,COMMAND:!0,EMBED:!0,HR:!0,IMG:!0,INPUT:!0,KEYGEN:!0,LINK:!0,META:!0,PARAM:!0,SOURCE:!0,TRACK:!0,WBR:!0};function N(A){var e=-1,t=-1,i="HTML";A[r]&&A[c].allowCustomRootElement&&(i=A[r].name.toUpperCase());for(let s=0,g=A.childNodes.length;s0)for(let e=0;e{A[l]=t}),null),A[h]=e,A[l]=t}function p(A){if(!A.global){let e=A.flags;A=new RegExp(A.source,e+"g")}return A}const w=Symbol("element"),y=Symbol("length"),T=/^\S+$/,m=Array.prototype.indexOf,M=Array.prototype.join,x=Array.prototype.splice;class O{constructor(){throw new Error("Cannot directly instantiate DOMTokenList.")}get length(){return this[y]}set length(A){}get value(){return M.call(this," ")}set value(A){if(this[y]>0)for(let A in this)this.hasOwnProperty(A)&&isFinite(A)&&delete this[A];this[y]=0,"string"==typeof A?this.add.apply(this,A.split(Q)):delete this[w].attributes.class}add(){for(let A=0;A=0&&A=0&&this.supports(e))&&(-1===m.call(this,e)?this[t]=e:(x.call(this,t,1),this[y]--),this[w].attributes.class=this.value,!0)}supports(A){return!(!A||"string"!=typeof A)&&A.match(T)}}const S=Symbol("element");function R(A){return A.replace(/[A-Z]/g,(A=>"-"+A.toLowerCase()))}function b(A){return"string"==typeof A&&(!!A.match(/^\-?[a-z_-]*[a-z]$/)||(!!A.match(/^\-\-[A-Za-z_-]*[A-Za-z0-9]$/)||!!A.match(/^[a-zA-Z]+$/)))}function k(A=""){return new Map(A.split(/\s*;\s*/g).filter((A=>A.length)).map((A=>A.trim().match(/^([a-z-]+)\s*:\s*(.*)$/).slice(1))))}function L(A){return Array.from(A?.entries()??[]).map((A=>A.join(": "))).join("; ")}function F(A){return new Proxy({[S]:A},{get(e,t){if(t===S)return A;if(!b(t))return;const i=R(t);return k(A.attributes.style).get(i)},set(e,t,i){if(!b(t))return!0;const s=R(t),g=k(A.attributes.style);return A.attributes.style=L(g.set(s,i)),!0},deleteProperty(e,t){if(!b(t))return;const i=R(t),s=k(A.attributes.style);A.attributes.style=L(s.delete(i))}})}const U=/\r\n|\r|\f/g,P=/\(\s*(even|odd|(?:(?:([+-]?\d*)n)\s*(?:([+-])\s*(\d+))?|([+-]?\d+)))\s*/g,G={Selectors:0,Identifier:1,Iterator:2,IteratorOf:3},J={is:G.Selectors,not:G.Selectors,where:G.Selectors,has:G.Selectors,lang:G.Identifier,dir:G.Identifier,"nth-child":G.IteratorOf,"nth-last-child":G.IteratorOf,"nth-of-type":G.Iterator,"nth-last-of-type":G.Iterator,"nth-col":G.Iterator,"nth-last-col":G.Iterator};function Y(A){return H(new s(A.replace(U,"\n")))}function H(A,e=i,t=!1){for(var s=A.skipWhiteSpace(),g={},n=[],r=[n],o=[r];s!==i&&s!==e;){switch(s){case"*":if(n.length>0)throw v("Universal selectors must come before all other simple selectors.",A);g.type="universal",n.push(g),g={};break;case"#":case".":{A.getNextChar();const e=j(A);if(!e)throw v("Expected an identifier.",A);g.type="#"===s?"id":"class",g.name=e,n.push(g),g={};break}case"[":{A.getNextAfterWhiteSpace();const e=j(A);if(!e)throw v("Expected an identifier.",A);if(g.type="attr",g.name=e,g.comparison="=",g.value=!0,g.ignoreCase=!1,"]"!==(s=A.getNextAfterWhiteSpace())){switch(s){case"=":break;case"~":case"|":case"^":case"$":case"*":if("="!==A.peek())throw v("Expected '='.",A,1);g.comparison=s+g.comparison,A.getNextChar();break;default:throw v("Unexpected character '"+(s===i?"END_OF_INPUT":s)+"'.",A)}if("'"===(s=A.getNextAfterWhiteSpace())||'"'===s){const e=s;for(g.value="",s=A.getNextChar();s!==i&&s!==e&&"\n"!==s;)"\\"===s?(g.value+=K(A),s=A.getChar()):(g.value+=s,s=A.getNextChar())}else{const e=j(A);if(!e)throw v("Expected an identifier.",A);g.value=e}if("]"!==A.getNextAfterWhiteSpace()){const e=j(A);if("i"===e||"I"===e)g.ignoreCase=!0;else if("s"===e||"S"===e)g.ignoreCase=!1;else if(e)throw v("Unexpected identifier '"+e+"'.",A,1-e.length);if("]"!==A.getNextAfterWhiteSpace())throw v("Expected ']'.",A,-1+e.length)}}n.push(g),g={};break}case":":if(A.getNextChar(),A.match(":")){const e=j(A);if(!e)throw v("Expected a pseudo-element name.",A);g.type="pseudo-element",g.name=e}else{const e=j(A);if(!e)throw v("Expected a pseudo-class name.",A);g.type="pseudo-class",g.name=e;const t=J[e];if(null!=t){if(g.type="pseudo-fn","("!==A.getNextChar())throw v("Expected '('.",A);switch(t){case G.IteratorOf:case G.Iterator:let e,i=0,s=0;P.lastIndex=A.index;const n=P.exec(A.str);if(!n)throw v("Invalid parameter.",A,1);if(A.advance(n[0].length),t===G.IteratorOf){A.skipWhiteSpace();const t=A.index;if("of"===j(A).toLowerCase()){const t=A.getNextChar();if(")"!==t&&!A.isWhiteSpace(t))throw v("Expected whitespace.",A);if(e=H(A,")"),!(e instanceof Array)||0===e.length)throw v("Expected at least one selector.",A)}else A.goToIndex(t)}if(")"!==A.skipWhiteSpace())throw v("Expected ')'.",A);"even"===n[1]||"odd"===n[1]?(i=2,"odd"===n[1]&&(s=1)):n[5]?s=parseInt(n[5],10):(i="-"===n[2]?-1:n[2]&&"+"!==n[2]?parseInt(n[2],10):1,n[3]&&(s=parseInt(n[3]+n[4],10))),g.params=[i,s],e&&g.params.push(e);break;case G.Selectors:if(A.getNextChar(),g.params=H(A,")",!0),0===g.params.length)throw v("Expected at least one selector.",A);break;case G.Identifier:if(!W(A.getNextAfterWhiteSpace()))throw v("Expected an identifier.",A);g.params=[j(A)],A.getNextChar()}if(")"!==A.skipWhiteSpace())throw v("Expected ')'.",A)}else"before"!==e&&"after"!==e&&"first-line"!==e&&"first-letter"!==e||(g.type="pseudo-element")}n.push(g),g={};break;case"+":case">":case"~":if(0===n.length){if(1===r.length){if(!t)throw v("Absolute selectors cannot start with a combinator.",A);r.unshift([{type:"pseudo-class",name:"scope"}])}else if("string"==typeof r[r.length-2])throw v("Cannot have multiple combinators in a row.",A);r.splice(r.length-1,0,s)}else r.push(s,n=[]);break;case",":if(0===n.length){if(r.length>1){if(r.pop(),"string"==typeof r[r.length-1])throw v("Complex selectors are not allowed to end with a combinator.",A,-1);o.push(r=[n])}}else o.push(r=[n=[]]);A.skipWhiteSpace();break;default:if(A.isWhiteSpace(s))n.length>0&&r.push(n=[]),A.skipWhiteSpace(),A.advance(-1);else{if(!W(s))throw v("Unexpected character '"+s+"'.",A);if(n.length>0)throw v("Type (tag name) selectors must come before all other simple selectors.",A);g.type="type",g.name=j(A).toUpperCase(),n.push(g),g={}}}s=A.getNextChar()}if(0===n.length&&(1===r.length?(o.pop(),r=o[o.length-1]):r.pop()),r&&"string"==typeof r[r.length-1])throw v("Complex selectors are not allowed to end with a combinator.",A,-1);return o}function v(A,e,t=0){var i=new SyntaxError(A),s=e.index+t;return i.stack="SyntaxError: "+A+"\n\n"+e.str+"\n"+" ".repeat(s)+"^\n at index "+s,i}function j(A){var e="",t=A.getChar();if(W(t)){do{"\\"===t?(e+=K(A),t=A.getChar()):(e+=t,t=A.getNextChar())}while(t!==i&&(W(t)||t>="0"&&t<="9"||"-"===t));A.advance(-1)}return e}function K(A){var e=A.getNextChar();if(q(e)){let t="";for(let i=5;i>=0&&q(e);i--)t+=e,e=A.getNextChar();return A.isWhiteSpace(e)&&A.getNextChar(),t=0|parseInt(t,16),0===t||t>=55296&&t<=57343||t>1114111?"�":String.fromCodePoint(t)}return e===i?"�":(A.getNextChar(),e)}function q(A){return A!==i&&(A>="0"&&A<="9"||A>="A"&&A<="F"||A>="a"&&A<="f")}function W(A){return A>="A"&&A<="Z"||A>="a"&&A<="z"||"_"===A||A>="€"||"\\"===A}const _=0,X=1,z=2,Z=3,V=4,$={">":z,"+":Z,"~":V},AA={is:(A,e,t)=>iA(A,e,t),not:(A,e,t)=>!iA(A,e,t),has(A,e,t){var i=!1;for(let A=0;A0&&e.forEach((A=>{if(iA(e,A,t))return i=!0,!1})),i},"nth-child"(A,e,t){const i=e[h],s=i.childNodes,g=new nA(t[0],t[1]);for(let A=0;A=0;A--)if(s[A][I]===lA.ELEMENT_NODE&&(!t[2]||iA(i,s[A],t[2]))){const t=g.next();if(s[A]===e)return t}return!1},"nth-of-type"(A,e,t){const i=e[h].childNodes,s=new nA(t[0],t[1]),g=e[C];for(let A=0;A=0;A--)if(i[A][C]===g){const t=s.next();if(i[A]===e)return t}}},eA={scope:(A,e)=>e===A,enabled(A,e){switch(e[C]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return!e.hasAttribute("disabled")}return!1},disabled(A,e){switch(e[C]){case"BUTTON":case"INPUT":case"SELECT":case"TEXTAREA":case"OPTGROUP":case"OPTION":case"FIELDSET":return e.hasAttribute("disabled")}return!1},checked(A,e){if("INPUT"===e[C]){const A=e.getAttribute("type");if("checkbox"===A||"radio"===A)return e.hasAttribute("checked")}else if("OPTION"===e[C])return e.hasAttribute("selected");return!1},required(A,e){switch(e[C]){case"INPUT":case"SELECT":case"TEXTAREA":return e.hasAttribute("required")}return!1},optional(A,e){switch(e[C]){case"INPUT":case"SELECT":case"TEXTAREA":return!e.hasAttribute("required")}return!1},root(A,e){const t=D(A);return!!t&&t.documentElement===e},empty:(A,e)=>0===e.childNodes.length,"first-child"(A,e){const t=e[h].childNodes;for(let A=0;A=0;A--)if(t[A][I]===lA.ELEMENT_NODE)return t[A]===e},"only-child"(A,e){const t=e[h].childNodes;let i,s;for(let A=0,e=t.length-1;e>=0&&(!i||!s);A++,e--)i||t[A][I]!==lA.ELEMENT_NODE||(i=t[A]),s||t[e][I]!==lA.ELEMENT_NODE||(s=t[e]);return i===s&&i===e},"first-of-type"(A,e){const t=e[h].childNodes,i=e[C];for(let A=0;A=0;A--)if(t[A][C]===i)return t[A]===e},"only-of-type"(A,e){const t=e[h].childNodes,i=e[C];let s,g;for(let A=0,e=t.length-1;e>=0&&(!s||!g);A++,e--)s||t[A][C]!==i||(s=t[A]),g||t[e][C]!==i||(g=t[e]);return s===g&&s===e}};function tA(A,e,t){const i=Y(e),s=[];return A.forEach((e=>{if(iA(A,e,i)&&(s.push(e),!t))return!1})),t?s:s[0]||null}function iA(A,e,t,i=!1){var s;A:for(let g=0;g=0;i?e++:e--)if($.hasOwnProperty(n[e]))r=$[n[e]];else switch(r){case _:if(!sA(A,s,n[e]))continue A;r=X;break;case X:for(;s=s[h];)if(sA(A,s,n[e]))continue e;continue A;case z:if(!sA(A,s=s[h],n[e]))continue A;break;case Z:{const t=s[h].childNodes;if(!sA(A,s=t[t.indexOf(s)+(i?1:-1)],n[e]))continue A;break}case V:{const t=s[h].childNodes;for(let g=t.indexOf(s)+(i?1:-1);i?g=0;i?g++:g--)if(sA(A,t[g],n[e])){s=t[g];continue e}continue A}}return!0}}return!1}function sA(A,e,t){if(!e||e[I]!==lA.ELEMENT_NODE)return!1;for(let i=0;i=this.current||this.A>0&&this.current>=this.B)&&(A=(this.current+this.B)%this.A==0),A}}function rA(A){var e=A.tagName,t=D(A),i=t?t.entityEncoder:null,s="";switch(A.nodeType){case B.ELEMENT_NODE:s+="<"+(e=e.toLowerCase());for(let e in A.attributes)if(A.attributes.hasOwnProperty(e)){let g=A.attributes[e];!0===g?g="":i&&t[c]&&(g=oA(g,i,t[c])),s+=" "+e,""!==g&&(s+='="'+g+'"')}s+=">";for(let e=0;e");break;case B.TEXT_NODE:i&&t[c]&&(!A.parentNode||"SCRIPT"!==A.parentNode.tagName&&"STYLE"!==A.parentNode.tagName)?s+=oA(A.nodeValue,i,t[c]):s+=A.nodeValue;break;case B.CDATA_SECTION_NODE:s+="";break;case B.PROCESSING_INSTRUCTION_NODE:s+="";break;case B.COMMENT_NODE:s+="\x3c!--"+A.nodeValue+"--\x3e";break;case B.DOCUMENT_TYPE_NODE:s+=""}return s}function oA(A,e,t){return!1===t.encodeEntities?A:!0!==t.encodeEntities&&t.encodeEntities instanceof RegExp?e.encode(A,t.encodeEntities):e.encode(A)}const aA=Symbol("classList"),EA=Symbol("style"),IA=Symbol("extendNode");function hA(A,e=lA){const t=Object.create(e.prototype);switch(t[I]=A,t.nodeValue=null,t[h]=null,t[l]=null,A){case lA.ELEMENT_NODE:t[C]=null,t.attributes={};case lA.DOCUMENT_NODE:case lA.DOCUMENT_FRAGMENT_NODE:t.childNodes=[]}return t}class lA extends n{constructor(){if(super(),arguments[0]!==IA)throw new Error("Cannot directly instantiate Node.")}get nodeType(){return this[I]}get nodeName(){switch(this.nodeType){case lA.ELEMENT_NODE:return this.tagName;case lA.TEXT_NODE:return"#text";case lA.CDATA_SECTION_NODE:return"#cdata-section";case lA.PROCESSING_INSTRUCTION_NODE:return this.target;case lA.COMMENT_NODE:return"#comment";case lA.DOCUMENT_NODE:return"#document";case lA.DOCUMENT_TYPE_NODE:return this.name;case lA.DOCUMENT_FRAGMENT_NODE:return"#document-fragment"}}get parentNode(){return this[h]}get ownerDocument(){return this[l]}get tagName(){return this[C]||null}get firstChild(){return this.childNodes&&this.childNodes[0]||null}get lastChild(){return this.childNodes&&this.childNodes[this.childNodes.length-1]||null}get previousSibling(){const A=this.parentNode;if(A){const e=A.childNodes.indexOf(this);if(e>0)return A.childNodes[e-1]}return null}get nextSibling(){const A=this.parentNode;if(A){const e=A.childNodes.indexOf(this);if(e>-1&&e=lA.TEXT_NODE&&this.nodeType<=lA.COMMENT_NODE&&(this.nodeValue=A)}getRootNode(){let A=this;for(;A.parentNode;)A=A.parentNode;return A}hasAttributes(){if(this.attributes)for(let A in this.attributes)if(this.attributes.hasOwnProperty(A))return!0;return!1}getAttributeNames(){return this.attributes?Object.keys(this.attributes):[]}getAttribute(A){var e;return this.attributes&&A&&"string"==typeof A&&(e=this.attributes[BA(this,A)]),void 0===e?null:e}setAttribute(A,e){this.attributes&&A&&"string"==typeof A&&("class"===(A=BA(this,A))?!0!==e?this.className=""+e:(this.classList.value="",this.attributes[A]=!0):this.attributes[A]="string"==typeof e||!0===e?e:""+e)}toggleAttribute(A,e){if(this.attributes&&A&&"string"==typeof A)return A=BA(this,A),this.attributes.hasOwnProperty(A)?1!==arguments.length&&!1!==e||(delete this.attributes[A],!1):(1===arguments.length||!0===e)&&(this.attributes[A]=!0)}removeAttribute(A){this.attributes&&A&&"string"==typeof A&&("class"===(A=BA(this,A))&&this[aA]&&(this[aA].value=null),delete this.attributes[A])}hasAttribute(A){return!(!this.attributes||!A||"string"!=typeof A)&&this.attributes.hasOwnProperty(BA(this,A))}hasChildNodes(){return!!this.childNodes&&this.childNodes.length>0}appendChild(A){return this.insertBefore(A,null)}insertBefore(A,e){if(this.childNodes&&A instanceof lA&&arguments.length>1){let t=-1;if(null==e?t=this.childNodes.length:e instanceof lA&&e.parentNode===this&&(t=this.childNodes.indexOf(e)),-1!==t)return cA(this,A,t)}return null}replaceChild(A,e){return this.childNodes&&e instanceof lA&&A instanceof lA&&e.parentNode===this&&e!==A?(cA(this,A,this.childNodes.indexOf(e),1),e):null}removeChild(A){if(this.childNodes&&A instanceof lA&&A.parentNode===this){const e=this.childNodes.indexOf(A),t=D(this);return t&&A.parentNode===t.documentElement&&CA.hasOwnProperty(A.tagName)&&(t[CA[A.tagName]]=null),u(this.childNodes.splice(e,1)),A}return null}cloneNode(A){var e;switch(e=this.nodeType===lA.DOCUMENT_NODE||this.nodeType===lA.DOCUMENT_FRAGMENT_NODE?new ee(null,this[c]):hA(this.nodeType),this.nodeType){case lA.ELEMENT_NODE:e[C]=this.tagName,e.attributes=Object.assign(e.attributes,this.attributes);break;case lA.TEXT_NODE:case lA.CDATA_SECTION_NODE:case lA.PROCESSING_INSTRUCTION_NODE:case lA.COMMENT_NODE:e.nodeValue=this.nodeValue;break;case lA.DOCUMENT_NODE:case lA.DOCUMENT_FRAGMENT_NODE:e[I]=this.nodeType,e.entityEncoder.entities=this.entityEncoder;break;case lA.DOCUMENT_TYPE_NODE:e.name=this.name,e.publicId=this.publicId,e.systemId=this.systemId}if(!0===A&&this.childNodes&&this.childNodes.length>0){for(let A=0;A{if(t.id===A)return e=t,!1})),e}getElementsByClassName(A){var e=[];if(A&&"string"==typeof A){const t=A.trim().split(Q);(t.length>1||""!==t[0])&&this.forEach((A=>{for(let e=0;e{"*"!==A&&t.tagName!==A||e.push(t)}))),e}closest(A){return A&&"string"==typeof A?function(A,e){const t=Y(e);let i=A;for(;null!=i&&i[I]===lA.ELEMENT_NODE;){if(iA(A,i,t))return i;i=i[h]}return null}(this,A):null}matches(A){return!(!A||"string"!=typeof A)&&function(A,e){return iA(A,A,Y(e))}(this,A)}querySelector(A){return A&&"string"==typeof A?tA(this,A,!1):null}querySelectorAll(A){return A&&"string"==typeof A?tA(this,A,!0):[]}forEach(A,e=B.ELEMENT_NODE){let t,i,s=this.childNodes,g=this.firstChild,n=[],r=0;for(;g;){if(t=g[h],i=s[r+1],(null===e||g.nodeType===e)&&!1===A(g,t))return;if(g[h]===t&&g.childNodes&&g.childNodes.length>0)n.push(r),s=g.childNodes,g=s[r=0];else{for(i?(r+=1,i!==s[r]&&(r=t.childNodes.indexOf(i))):r=s.length;null==s[r];){if(g=t,t=g[h],!g||g===this)return;s=t.childNodes,r=n.pop()+1}g=s[r]}}}}Object.defineProperties(lA,{ELEMENT_NODE:{value:B.ELEMENT_NODE},TEXT_NODE:{value:B.TEXT_NODE},CDATA_SECTION_NODE:{value:B.CDATA_SECTION_NODE},PROCESSING_INSTRUCTION_NODE:{value:B.PROCESSING_INSTRUCTION_NODE},COMMENT_NODE:{value:B.COMMENT_NODE},DOCUMENT_NODE:{value:B.DOCUMENT_NODE},DOCUMENT_TYPE_NODE:{value:B.DOCUMENT_TYPE_NODE},DOCUMENT_FRAGMENT_NODE:{value:B.DOCUMENT_FRAGMENT_NODE}});const CA={HEAD:o,BODY:a,FRAMESET:a};function cA(A,e,t,i=0){if(!A||A.nodeType!==lA.ELEMENT_NODE&&A.nodeType!==lA.DOCUMENT_NODE&&A.nodeType!==lA.DOCUMENT_FRAGMENT_NODE||A.nodeType===lA.ELEMENT_NODE&&!0===d[A.tagName])return e;if(e.nodeType<=lA.COMMENT_NODE){if(A.parentNode&&A.parentNode.nodeType===lA.DOCUMENT_NODE&&CA.hasOwnProperty(e.tagName)){const t=CA[e.tagName];if(A.parentNode[t]&&0===i)return e;A.parentNode[t]=e}e.parentNode&&e.parentNode.removeChild(e),f(e,A),u(A.childNodes.splice(t,i,e))}else if(e.nodeType!==lA.DOCUMENT_TYPE_NODE||A.nodeType!==lA.DOCUMENT_NODE&&A.nodeType!==lA.DOCUMENT_FRAGMENT_NODE){if(e.nodeType===lA.DOCUMENT_FRAGMENT_NODE)if(A.parentNode&&A.parentNode.nodeType===lA.DOCUMENT_NODE){i>0&&u(A.childNodes.splice(t,i));for(let s=e.childNodes.length-1;s>=0;s--){const g=e.childNodes[s];if(CA.hasOwnProperty(g.tagName)){const e=CA[g.tagName];if(A.parentNode[e]&&0===i)continue;A.parentNode[e]=g}f(g,A),A.childNodes.splice(t,0,g),e.childNodes.splice(s,1)}}else if(e!==D(A)){for(let t=0;t":!0,"/":!0,"=":!0},fA={P:!0},pA={DT:!0,DD:!0},wA={TBODY:!0,THEAD:!0,TFOOT:!0},yA={TD:!0,TH:!0},TA={BUTTON:!0,DATALIST:!0,OPTGROUP:!0,OPTION:!0,PROGRESS:!0,SELECT:!0,TEXTAREA:!0},mA={ADDRESS:fA,ARTICLE:fA,ASIDE:fA,BLOCKQUOTE:fA,DIV:fA,FIELDSET:fA,FOOTER:fA,H1:fA,H2:fA,H3:fA,H4:fA,H5:fA,H6:fA,HEADER:fA,HGROUP:fA,HR:fA,MAIN:fA,NAV:fA,P:fA,PRE:fA,SECTION:fA,BODY:{HEAD:!0,TITLE:!0},DL:fA,DD:pA,DT:pA,TABLE:fA,TBODY:wA,THEAD:wA,TD:yA,TFOOT:wA,TH:yA,TR:{TR:!0},LI:{LI:!0},OL:fA,UL:fA,BUTTON:TA,DATALIST:TA,FORM:fA,INPUT:TA,OPTGROUP:{OPTGROUP:!0,OPTION:!0},OPTION:{OPTION:!0},OUTPUT:TA,PROGRESS:TA,SELECT:TA,TEXTAREA:TA};class MA{constructor(A,e,t){this.options=MA.setupOptions(e),this.lexer=new s(A),this.entityEncoder=t}static setupOptions(A){return(A=Object.assign({},DA,A)).encodeEntities instanceof RegExp&&(A.encodeEntities=p(A.encodeEntities)),Object.freeze(A)}static isNameCharStart(A){return":"===A||"_"===A||A>="A"&&A<="Z"||A>="a"&&A<="z"||A>="À"&&A<="Ö"||A>="Ø"&&A<="ö"||A>="ø"&&A<="˿"||A>="Ͱ"&&A<="ͽ"||A>="Ϳ"&&A<="῿"||"‌"===A||"‍"===A||A>="⁰"&&A<="↏"||A>="Ⰰ"&&A<="⿯"||A>="、"&&A<="퟿"||A>="豈"&&A<="﷏"||A>="ﷰ"&&A<="�"||A>="က0"&&A<="F"}static isNameChar(A){return MA.isNameCharStart(A)||A>="0"&&A<="9"||"-"===A||"."===A||"·"===A||A>="̀"&&A<="ͯ"||"‿"===A||"⁀"===A}parseHTML(){var A,e=hA(lA.DOCUMENT_FRAGMENT_NODE),t=[e];for(e[c]=this.options,A=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();A!==i&&t.length>0;)"<"===A?this.parseTag(t):this.parseText(t),A=this.options.trimWhitespace?this.lexer.skipWhiteSpace():this.lexer.getChar();return e}parseTag(A){var e,t,s,g,n=0,r=this.lexer.index,o=this.lexer.getNextChar();if(o!==i)A:for(;">"!==o&&o!==i;){if(s=this.lexer.index,0===n){if("!"===o||"?"===o){if(this.options.allowProcessingInstructions&&this.lexer.match("?")){s=this.lexer.index,o=this.lexer.getChar();e:if(MA.isNameCharStart(o)){for(e=hA(lA.PROCESSING_INSTRUCTION_NODE);o!==i&&MA.isNameChar(o);)o=this.lexer.getNextChar();if(!this.lexer.isWhiteSpace(o)&&o!==i&&("?"!==o||">"!==this.lexer.peek()))break e;e.target=this.lexer.str.slice(s,this.lexer.index),this.lexer.skipWhiteSpace(),s=this.lexer.index,this.lexer.goToString("?>"),e.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(1),A[0].childNodes.push(e),f(e,A[0]);break}this.lexer.advance(s-this.lexer.index-1)}if(this.options.allowCDATA&&this.lexer.match("![CDATA[")){e=hA(lA.CDATA_SECTION_NODE),s=this.lexer.index,this.lexer.goToString("]]>"),e.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(2),A[0].childNodes.push(e),f(e,A[0]);break}if(this.lexer.match("!DOCTYPE",!1)){this.lexer.skipWhiteSpace(),s=this.lexer.index,this.lexer.goToString(">");let t=A[A.length-1];if(t.doctype)break;if(t.childNodes.length>0)for(let A=t.childNodes.length-1;A>=0;A--)if(t.childNodes[A].nodeTypelA.COMMENT_NODE)break A;let i=this.lexer.str.slice(s,this.lexer.index).split(Q);if((e=hA(lA.DOCUMENT_TYPE_NODE)).name=dA.call(i.shift()),i.length>1){let A=dA.call(i.shift());if(i=i.join(" ").split('"'),""===i[0])switch(A){case"public":i.shift(),e.publicId=i.shift();case"system":i.shift(),e.systemId=i.shift()}}e.publicId||(e.publicId=""),e.systemId||(e.systemId=""),t.childNodes.push(e),t.doctype=e,f(e,t);break}{let t;this.lexer.match("!--")?this.lexer.match(">")||this.lexer.match("->")||(t="--\x3e"):("!"===o&&this.lexer.getNextChar(),t=">"),e=hA(lA.COMMENT_NODE),s=this.lexer.index,t&&this.lexer.goToString(t),e.nodeValue=this.lexer.str.slice(s,this.lexer.index),this.lexer.advance(t?t.length-1:-1),A[0].childNodes.push(e),f(e,A[0]);break}}"/"===o&&(o=this.lexer.getNextChar(),n=2,s+=1)}if(1===n){for(;this.lexer.index===s&&"="===o||!this.lexer.isWhiteSpace(o)&&!uA[o]&&o!==i;)o=this.lexer.getNextChar();g=this.lexer.index}else{for(;(o>="a"&&o<="z"||o>="A"&&o<="Z"||this.lexer.index>s&&(o>="0"&&o<="9"||"-"===o||"_"===o||":"===o))&&o!==i;)o=this.lexer.getNextChar();if(g=this.lexer.index,o===i)return void this.addTextNode(A,r,g,!1);o=this.lexer.skipWhiteSpace(),2===n&&(o=this.lexer.goToString(">"))}if(s===g){if(!this.options.allowSelfClosingSyntax||"/"!==o||">"!==this.lexer.peek()){if(0===n){this.lexer.goToString("<"),this.addTextNode(A,r,this.lexer.index,!1),r=this.lexer.index,o=this.lexer.getNextChar();continue}if(2===n){if(s===this.lexer.index)break;(e=this.addTextNode(A,s,this.lexer.index))[I]=lA.COMMENT_NODE;break}this.lexer.getNextChar(),o=this.lexer.skipWhiteSpace();continue}o=this.lexer.getNextChar(),n=2,t=A[0][C]}else t=this.lexer.str.slice(s,g),1!==n&&(t=NA.call(t)),o=this.lexer.skipWhiteSpace();switch(n){case 0:for((e=hA(lA.ELEMENT_NODE))[C]=t;mA.hasOwnProperty(e[C])&&mA[e[C]][A[0][C]];)A.splice(0,1);A[0].childNodes.push(e),f(e,A[0]),n=1,!0!==d[e[C]]&&A.unshift(e);break;case 1:let r=!0;if(this.options.lowerAttributeCase&&(t=dA.call(t)),"="===o){if(this.lexer.getNextChar(),o=this.lexer.skipWhiteSpace(),s=this.lexer.index,'"'===o||"'"===o)this.lexer.getNextChar(),this.lexer.goToString(o),g=this.lexer.index,s+=1,this.lexer.getNextChar(),o=this.lexer.skipWhiteSpace();else{for(;!(this.lexer.isWhiteSpace(o)|| //!unquotedAttributeExclusions[theChar] && -">"===l||this.options.allowSelfClosingSyntax&&"/"===l&&">"===this.lexer.peek()||l===i);)l=this.lexer.getNextChar();n=this.lexer.index,l=this.lexer.skipWhiteSpace()}if(t.attributes.hasOwnProperty(s))break;a=this.lexer.str.slice(r,n),""===a?a=!0:this.options.decodeEntities&&(a=this.entityEncoder.decode(a))}else if(t.attributes.hasOwnProperty(s))break;t.attributes[s]=a;break;case 2:for(let i=0;i0&&e[0]!==t;)e.shift();e.shift();break}}}else this.addTextNode(e,a,this.lexer.index,!1);this.lexer.getNextChar()}parseText(e){var t=this.lexer.index,s=!1;"SCRIPT"===e[0][N]||"STYLE"===e[0][N]?(this.lexer.goToString(" ${Array.from(arguments).join(", ")} )`);const h=e.getContext("2d").getImageData(t,s,i,r),c=h.data,d=this.canvas[$e],u=r,p=i;for(let e=0;e ${Array.from(arguments).join(", ")} )`)}else console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${e.constructor.name}> ${Array.from(arguments).join(", ")} )`)}createImageData(e,t,s){return e instanceof Ae?new Ae(e.data,e.width,e.height):new Ae(e,t,s)}getImageData(e,t,s,i,r){if(0===e&&0===t&&s===this.canvas.width&&i===this.canvas.height&&!r)return console.log(`${this}→getImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`),new Ae(this.canvas[$e],this.canvas.width,this.canvas.height);console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(", ")} )`);return new Ae(s,i,r)}putImageData(e,t,s,i,r,n,o){let a,l;const h=this.canvas[$e];if(void 0!==i)console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(", ")} )`);else{if(0===t&&0===s&&e.width===this.canvas.width&&e.height===this.canvas.height){console.log(`${this}→putImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);for(let t=0;t[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/))||void 0===t?void 0:t.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(n=parseInt(i.r,16),o=parseInt(i.g,16),a=parseInt(i.b,16),l=i.a?parseInt(i.a,10):1,r=!0),i=null===(s=e.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/))||void 0===s?void 0:s.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(n=parseInt(i.r,16),o=parseInt(i.g,16),a=parseInt(i.b,16),l=i.a?parseInt(i.a,10):1,r=!0),r?{r:n,g:o,b:a,a:l}:(console.log(`Not a HTML color string: ${e}`),null)}const Le=Symbol("canvas-width"),Ue=Symbol("canvas-height"),ke=Symbol("canvas-context"),Pe=Symbol("element-id"),$e=Symbol("accesscanvas-data");class We extends pe{get width(){return console.debug(`${this}→width? (${this[Le]})`),this[Le]}get height(){return console.debug(`${this}→height? (${this[Ue]})`),this[Ue]}set width(e){console.debug(`${this}→width = ${e}`),this[Le]=e,this.resize(this[Le],this[Ue])}set height(e){console.debug(`${this}→height = ${e}`),this[Ue]=e,this.resize(this[Le],this[Ue])}getContext(e,t){if("2d"!=e)throw new Error(`Not implemented: ${e}`);if(this[ke]=this[ke]||new Me(this),!(this[ke]instanceof Me))throw new Error("Context invalid");return this[ke]}toDataURL(e="image/png",t){throw new Error("Not implemented")}toBlob(e,t="image/png",s){throw new Error("Not implemented")}get clientWidth(){return this.width}get clientHeight(){return this.height}constructor(){super(de),this[Pe]=(Math.random()*Math.pow(36,6)|0).toString(36),this.resize(300,150)}get[Symbol.toStringTag](){return`HTMLCanvasElement#${this[Pe]}`}resize(e,t){this[Le]=e,this[Ue]=t,this[$e]=new Uint8ClampedArray(this[Le]*this[Ue]*4),console.debug(`${this}→reset, new size: ${this[Le]}x${this[Ue]} (${this[$e].length}b)`)}}globalThis&&"object"!=typeof globalThis.HTMLCanvasElement&&(globalThis.HTMLCanvasElement=We);const Ge=/&(#\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,je=/[\^$\\.*+?()[\]{}|]/g,Be=Ye({amp:"&",apos:"'",copy:169,gt:">",lt:"<",nbsp:160,quot:'"'});let He=Be;class Fe{constructor(e){this.entities=e||"default"}encode(e,t){return this.encodingReplacements?e.replace(t instanceof RegExp?C(t):this.encodingRE,(e=>this.encodingReplacements[e]||e)):e}decode(e){return this.decodingReplacements?e.replace(Ge,((e,t)=>"#"===t[0]?(t="x"===t[1]||"X"===t[1]?0|parseInt(t.slice(2),16):0|t.slice(1),String.fromCodePoint(t)):this.decodingReplacements[t]||this.decodingReplacements[t.toLowerCase()]||e)):e}set entities(e){"default"===e?e=He:e&&e.encodingRE instanceof RegExp||(e=Ye(e)),this.encodingRE=e.encodingRE,this.encodingReplacements=e.encodingReplacements,this.decodingReplacements=e.decodingReplacements}static set defaultEntities(e){He=e&&"object"==typeof e?Ye(Object.assign({},e)):Be}}function Ye(e){var t={encodingRE:null,encodingReplacements:null,decodingReplacements:null};if(e&&"object"==typeof e){const s={},i={},r=[];for(let t in e)if(e.hasOwnProperty(t)){let n=e[t];if(Number.isFinite(n))n=String.fromCodePoint(n);else if("string"!=typeof n||""===n)continue;r.push(n.replace(je,"\\$&")),(!s.hasOwnProperty(n)||t.length+20&&(t.encodingRE=new RegExp(r.join("|"),"g"),t.encodingReplacements=s,t.decodingReplacements=i)}return t.encodingRE||(t.encodingRE=new RegExp("(?:)","g")),t}const Ve=Symbol("entityEncoder");class Xe extends pe{constructor(e,t){const s=ue(pe.DOCUMENT_FRAGMENT_NODE,Xe);return s[f]=_e.setupOptions(t),s[Ve]=new Fe(s[f].entities),s.innerHTML=e,s}get documentElement(){return this[c]||null}get innerHTML(){let e="";for(let t=0;t0)return t[0].textContent}return""}set title(e){const t=this.head;if(t){let s=t.getElementsByTagName("title");s=s.length<=0?t.appendChild(this.createElement("title")):s[0],s.textContent=e}}get body(){return this[h]||null}set body(e){e instanceof pe&&e.nodeType===pe.ELEMENT_NODE&&("BODY"===e.tagName||"FRAMESET"===e.tagName)&&e!==this[h]&&this[c]&&(this[h]?this[h].parentNode.replaceChild(e,this[h]):this[c].appendChild(e))}get entityEncoder(){return this[Ve]}createElement(e){if(e&&"string"==typeof e){const t=function(e){if("canvas"===e.toLowerCase())return function(e){const t=new We;switch(t[d]=e,t.nodeValue=null,t[u]=null,t[p]=null,e){case pe.ELEMENT_NODE:t[N]=null,t.attributes={};case pe.DOCUMENT_NODE:case pe.DOCUMENT_FRAGMENT_NODE:t.childNodes=[]}return t}(pe.ELEMENT_NODE);return ue(pe.ELEMENT_NODE)}(e);return t[N]=e.toUpperCase(),t}}createTextNode(e){return ze(pe.TEXT_NODE,e)}createComment(e){return ze(pe.COMMENT_NODE,e)}createCDATASection(e){return ze(pe.CDATA_SECTION_NODE,e,"]]>")}createProcessingInstruction(e,t){e:if(e&&"string"==typeof e){if(!_e.isNameCharStart(e[0]))break e;for(let t=1;t");return s.target=e,s}throw new Error("Invalid target name "+JSON.stringify(e)+".")}createDocumentType(e,t,s){return qe(ue(pe.DOCUMENT_TYPE_NODE),e,t,s)}getElementsByName(e){const t=[];return e&&"string"==typeof e&&this.forEach((s=>{s.attributes&&s.attributes.name===e&&t.push(s)})),t}}function ze(e,t,s=!1){const i=ue(e);if(i.nodeValue="",t&&"string"==typeof t){if(s&&"string"==typeof s&&-1!==t.indexOf(s))throw new Error("The data provided ('"+t+"') contains '"+s+"'.");i.nodeValue+=t}return i}function qe(e,t,s,i){return t&&"string"==typeof t?(e.name=t.toLowerCase(),e.publicId=s&&"string"==typeof s?s:"",e.systemId=i&&"string"==typeof i?i:""):e.name=e.publicId=e.systemId="",e}Xe.Node=pe,Xe.EntityEncoder=Fe;export{Xe as default}; +">"===o||this.options.allowSelfClosingSyntax&&"/"===o&&">"===this.lexer.peek()||o===i);)o=this.lexer.getNextChar();g=this.lexer.index,o=this.lexer.skipWhiteSpace()}if(e.attributes.hasOwnProperty(t))break;r=this.lexer.str.slice(s,g),""===r?r=!0:this.options.decodeEntities&&(r=this.entityEncoder.decode(r))}else if(e.attributes.hasOwnProperty(t))break;e.attributes[t]=r;break;case 2:for(let i=0;i0&&A[0]!==e;)A.shift();A.shift();break}}}else this.addTextNode(A,r,this.lexer.index,!1);this.lexer.getNextChar()}parseText(A){var e=this.lexer.index,t=!1;"SCRIPT"===A[0][C]||"STYLE"===A[0][C]?(this.lexer.goToString("{r.readFile(o.resolve(__dirname,e),((e,g)=>{null!=e?t(e):A(s(g,i,!1))}))}))}if(e)return s(fetch(e),i,!0);if(n)g=Buffer.from(t,"base64");else{var a=globalThis.atob(t),E=a.length;g=new Uint8Array(new ArrayBuffer(E));for(var I=0;IA+": "+e)).join(", ")}`);const{r:s,g:g,b:n,a:r}=this.fillStyleRGBA,o=255*r|0,a=this.canvas[qA];if(0!==A||0!==e||a.length!==t*i*4){for(let r=e;r ${Array.from(arguments).join(", ")} )`);let a=A.getContext("2d").getImageData(e,t,i,s);if(this.transformActive){const A=this[PA].scaleX*i|0,e=this[PA].scaleY*s|0;g=g+this[PA].translateX|0,n=n+this[PA].translateY|0,a=function(A,e,t){return{width:0|e,height:0|t,data:UA(A.data,A.width,A.height,e,t,3,!0,!1)}}(a,A,e),i=a.width,s=a.height,console.log(`${this}→drawImage(): source image resized to: ${i}x${s} (${a.data.length/4} pixels)`),console.log(`${this}→drawImage(): drawing to translated coordinates: ( ${g}, ${n} )`)}const E=a.data,I=this.canvas[qA],h=this.canvas.width;this.canvas.height;const l=s,C=i;let c=0,Q=0;for(let A=0;A=I.length){++Q;continue}const r=4*((t+A)*a.width+e+i),o=E[r],l=E[r+1],C=E[r+2],B=E[r+3];B>0&&++c;const d=I[s],N=I[s+1],D=I[s+2],u=I[s+3],f=1-B/255;I[s+0]=o*(B/255)+d*(u/255)*f|0,I[s+1]=l*(B/255)+N*(u/255)*f|0,I[s+2]=C*(B/255)+D*(u/255)*f|0,I[s+3]=B+u*f|0}return console.log(`${this}→drawImage( <${A.constructor.name}> ${Array.from(arguments).join(", ")} )`),console.log(`${this}→drawImage(): number of non-transparent source pixels drawn: ${c} (${c/(E.length/4)*100|0}%)`),void console.log(`${this}→drawImage(): skipped drawing of ${Q} out-of-bounds pixels on the canvas`)}console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${A.constructor.name}> ${Array.from(arguments).join(", ")} )`)}createImageData(A,e,t){return A instanceof xA?new xA(A.data,A.width,A.height):new xA(A,e,t)}getImageData(A,e,t,i,s){if(0===A&&0===e&&t===this.canvas.width&&i===this.canvas.height&&!s)return console.log(`${this}→getImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`),new xA(this.canvas[qA],this.canvas.width,this.canvas.height);console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(", ")} )`);return new xA(t,i,s)}putImageData(A,e,t,i,s,g,n){let r,o;const a=this.canvas[qA];if(void 0!==i)console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(", ")} )`);else{if(0===e&&0===t&&A.width===this.canvas.width&&A.height===this.canvas.height){console.log(`${this}→putImageData( ${Array.from(arguments).join(", ")} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);for(let e=0;e[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/))||void 0===e?void 0:e.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(g=parseInt(i.r,16),n=parseInt(i.g,16),r=parseInt(i.b,16),o=i.a?parseInt(i.a,10):1,s=!0),i=null===(t=A.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/))||void 0===t?void 0:t.groups,(null==i?void 0:i.r)&&(null==i?void 0:i.g)&&(null==i?void 0:i.b)&&(g=parseInt(i.r,16),n=parseInt(i.g,16),r=parseInt(i.b,16),o=i.a?parseInt(i.a,10):1,s=!0),s?{r:g,g:n,b:r,a:o}:(console.log(`Not a HTML color string: ${A}`),null)}const HA=Symbol("canvas-width"),vA=Symbol("canvas-height"),jA=Symbol("canvas-context"),KA=Symbol("element-id"),qA=Symbol("accesscanvas-data");class WA extends lA{get width(){return console.debug(`${this}→width? (${this[HA]})`),this[HA]}get height(){return console.debug(`${this}→height? (${this[vA]})`),this[vA]}set width(A){console.debug(`${this}→width = ${A}`),this[HA]=A,this.resize(this[HA],this[vA])}set height(A){console.debug(`${this}→height = ${A}`),this[vA]=A,this.resize(this[HA],this[vA])}getContext(A,e){if("2d"!=A)throw new Error(`Not implemented: ${A}`);if(this[jA]=this[jA]||new GA(this),!(this[jA]instanceof GA))throw new Error("Context invalid");return this[jA]}toDataURL(A="image/png",e){throw new Error("Not implemented")}toBlob(A,e="image/png",t){throw new Error("Not implemented")}get clientWidth(){return this.width}get clientHeight(){return this.height}constructor(){super(IA),this[KA]=(Math.random()*Math.pow(36,6)|0).toString(36),this.resize(300,150)}get[Symbol.toStringTag](){return`HTMLCanvasElement#${this[KA]}`}resize(A,e){this[HA]=A,this[vA]=e,this[qA]=new Uint8ClampedArray(this[HA]*this[vA]*4),console.debug(`${this}→reset, new size: ${this[HA]}x${this[vA]} (${this[qA].length}b)`)}}globalThis&&"object"!=typeof globalThis.HTMLCanvasElement&&(globalThis.HTMLCanvasElement=WA);const _A=/&(#\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,XA=/[\^$\\.*+?()[\]{}|]/g,zA=$A({amp:"&",apos:"'",copy:169,gt:">",lt:"<",nbsp:160,quot:'"'});let ZA=zA;class VA{constructor(A){this.entities=A||"default"}encode(A,e){return this.encodingReplacements?A.replace(e instanceof RegExp?p(e):this.encodingRE,(A=>this.encodingReplacements[A]||A)):A}decode(A){return this.decodingReplacements?A.replace(_A,((A,e)=>"#"===e[0]?(e="x"===e[1]||"X"===e[1]?0|parseInt(e.slice(2),16):0|e.slice(1),String.fromCodePoint(e)):this.decodingReplacements[e]||this.decodingReplacements[e.toLowerCase()]||A)):A}set entities(A){"default"===A?A=ZA:A&&A.encodingRE instanceof RegExp||(A=$A(A)),this.encodingRE=A.encodingRE,this.encodingReplacements=A.encodingReplacements,this.decodingReplacements=A.decodingReplacements}static set defaultEntities(A){ZA=A&&"object"==typeof A?$A(Object.assign({},A)):zA}}function $A(A){var e={encodingRE:null,encodingReplacements:null,decodingReplacements:null};if(A&&"object"==typeof A){const t={},i={},s=[];for(let e in A)if(A.hasOwnProperty(e)){let g=A[e];if(Number.isFinite(g))g=String.fromCodePoint(g);else if("string"!=typeof g||""===g)continue;s.push(g.replace(XA,"\\$&")),(!t.hasOwnProperty(g)||e.length+20&&(e.encodingRE=new RegExp(s.join("|"),"g"),e.encodingReplacements=t,e.decodingReplacements=i)}return e.encodingRE||(e.encodingRE=new RegExp("(?:)","g")),e}const Ae=Symbol("entityEncoder");class ee extends lA{constructor(A,e){const t=hA(lA.DOCUMENT_FRAGMENT_NODE,ee);return t[c]=MA.setupOptions(e),t[Ae]=new VA(t[c].entities),t.innerHTML=A,t}get documentElement(){return this[E]||null}get innerHTML(){let A="";for(let e=0;e0)return e[0].textContent}return""}set title(A){const e=this.head;if(e){let t=e.getElementsByTagName("title");t=t.length<=0?e.appendChild(this.createElement("title")):t[0],t.textContent=A}}get body(){return this[a]||null}set body(A){A instanceof lA&&A.nodeType===lA.ELEMENT_NODE&&("BODY"===A.tagName||"FRAMESET"===A.tagName)&&A!==this[a]&&this[E]&&(this[a]?this[a].parentNode.replaceChild(A,this[a]):this[E].appendChild(A))}get entityEncoder(){return this[Ae]}createElement(A){if(A&&"string"==typeof A){const e=function(A){if("canvas"===A.toLowerCase())return function(A){const e=new WA;switch(e[I]=A,e.nodeValue=null,e[h]=null,e[l]=null,A){case lA.ELEMENT_NODE:e[C]=null,e.attributes={};case lA.DOCUMENT_NODE:case lA.DOCUMENT_FRAGMENT_NODE:e.childNodes=[]}return e}(lA.ELEMENT_NODE);return hA(lA.ELEMENT_NODE)}(A);return e[C]=A.toUpperCase(),e}}createTextNode(A){return te(lA.TEXT_NODE,A)}createComment(A){return te(lA.COMMENT_NODE,A)}createCDATASection(A){return te(lA.CDATA_SECTION_NODE,A,"]]>")}createProcessingInstruction(A,e){A:if(A&&"string"==typeof A){if(!MA.isNameCharStart(A[0]))break A;for(let e=1;e");return t.target=A,t}throw new Error("Invalid target name "+JSON.stringify(A)+".")}createDocumentType(A,e,t){return ie(hA(lA.DOCUMENT_TYPE_NODE),A,e,t)}getElementsByName(A){const e=[];return A&&"string"==typeof A&&this.forEach((t=>{t.attributes&&t.attributes.name===A&&e.push(t)})),e}}function te(A,e,t=!1){const i=hA(A);if(i.nodeValue="",e&&"string"==typeof e){if(t&&"string"==typeof t&&-1!==e.indexOf(t))throw new Error("The data provided ('"+e+"') contains '"+t+"'.");i.nodeValue+=e}return i}function ie(A,e,t,i){return e&&"string"==typeof e?(A.name=e.toLowerCase(),A.publicId=t&&"string"==typeof t?t:"",A.systemId=i&&"string"==typeof i?i:""):A.name=A.publicId=A.systemId="",A}ee.Node=lA,ee.EntityEncoder=VA;export{ee as default}; diff --git a/lib/fauxdom-with-canvas.tests.cjs b/lib/fauxdom-with-canvas.tests.cjs deleted file mode 100644 index 0e38fe9..0000000 --- a/lib/fauxdom-with-canvas.tests.cjs +++ /dev/null @@ -1,3399 +0,0 @@ -'use strict'; - -const reCache = {}, - whitespaces = {}, - isWhiteSpace = Object.prototype.hasOwnProperty.bind( whitespaces ), - EOF = null; - -class Lexer -{ - constructor( str ) - { - this.index = 0; - this.str = str; - this.scanChar = this.str[this.index]; - - if ( !isWhiteSpace( "\x20" ) ) - { - // Unicode C0 & C1 control characters are treated as whitespace, along with the ASCII space character. - for ( let i = 0; i <= 0x20; i++ ) - whitespaces[String.fromCharCode( i )] = null; - for ( let i = 0x80; i <= 0x9f; i++ ) - whitespaces[String.fromCharCode( i )] = null; - } - } - - isWhiteSpace( theChar ) - { - return (theChar !== EOF && isWhiteSpace( theChar )); - } - - goToString( toChar, caseSensitive ) - { - if ( caseSensitive !== false ) - this.index = this.str.indexOf( toChar, this.index ); - else - { - if ( !reCache[toChar] ) - reCache[toChar] = new RegExp( toChar, "ig" ); - - reCache[toChar].lastIndex = this.index; - - const match = reCache[toChar].exec( this.str ); - if ( match ) this.index = match.index; - else this.index = -1; - } - - if ( this.index > -1 ) - this.scanChar = this.str[this.index]; - else - { - this.index = this.str.length; - this.scanChar = EOF; - } - } - - goToIndex( index ) - { - this.scanChar = this.str[this.index = index]; - } - - advance( amount ) - { - this.index += amount; - if ( this.index > this.str.length ) - { - this.index = this.str.length; - return (this.scanChar = EOF); - } - return (this.scanChar = this.str[this.index]); - } - - match( str, caseSensitive ) - { - var chunk = this.str.substr( this.index, str.length ); - if ( caseSensitive === false ) - { - str = str.toLowerCase(); - chunk = chunk.toLowerCase(); - } - if ( chunk === str ) - { - this.index += str.length-1; - this.getNextChar(); - return true; - } - return false; - } - - peek() - { - return this.str[this.index + 1]; - } - - getChar() - { - return this.scanChar; - } - - getNextChar() - { - if ( this.index + 1 < this.str.length ) - return (this.scanChar = this.str[++this.index]); - else - { - this.index = this.str.length; - return (this.scanChar = EOF); - } - } - - getNextAfterWhiteSpace() - { - var theChar; - do theChar = this.getNextChar(); - while ( theChar !== EOF && isWhiteSpace( theChar ) ) - return theChar; - } - - skipWhiteSpace() - { - var theChar = this.scanChar; - - while ( theChar !== EOF && isWhiteSpace( theChar ) ) - theChar = this.getNextChar(); - - return this.scanChar; - } -} - -// Implementation of the HTML EventTarget API -// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget -const EVENT_LISTENERS = Symbol("event-listeners"); - -class EventTarget { - addEventListener( eventType, callback, useCaptureOrOptions ) - { - // Lazily create the event listener map on the node - this[EVENT_LISTENERS] = this[EVENT_LISTENERS] ?? new Map(); - - // Registered listeners for this eventType - let listeners = this[EVENT_LISTENERS].get(eventType); - if (!listeners) { - listeners = []; - this[EVENT_LISTENERS].set(eventType, listeners); - } - - // Capturing and non-capturing listeners need to be removed separately - // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#sect1 - // TODO: handle other options? (once, passive, signal) - // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#options - listeners.push({ - callback, - capturing: useCaptureOrOptions === true || !!useCaptureOrOptions?.capture, - options: typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions : { capture: !!useCaptureOrOptions } - }); - } - - removeEventListener( eventType, callback, useCaptureOrOptions ) - { - // There aren't any listeners registered - if (!this[EVENT_LISTENERS]) return; - - // Registered listeners for this eventType - let listeners = this[EVENT_LISTENERS].get(eventType); - if (!listeners) return; - - // Extract the boolean capture value from the different possible argument formats - const captureSetting = !!(typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions.capture : useCaptureOrOptions); - - // Find the indexes of listeners we want to remove, then remove them from the listeners array - // A listener must match the callback object (function) and capture setting (true/false) - // We remove the elements in reverse index order to avoid the indexes changing - listeners.map((listener, i) => { - return listener.callback === callback && listener.capturing === captureSetting ? i : undefined - }) - .reverse() - .forEach(i => { - if (i !== undefined) listeners.splice(i, 1); - }); - } - - dispatchEvent( event ) - { - let notCancelled = true; - - // There aren't any listeners registered - if (!this[EVENT_LISTENERS]) return notCancelled; - - // List active listeners - const listeners = this[EVENT_LISTENERS].get(event.type) ?? []; - - // Dispatch the event for every listener - // TODO: handle 'once', 'passive' options, bubbling & capture - // https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase - listeners?.forEach(({ callback }) => { - callback(event); - - // The event has been canceled through preventDefault() - if (event.defaultPrevented) notCancelled = false; - }); - - return notCancelled; - } - -} - -const DOCTYPE = Symbol( "doctype" ), - HEAD = Symbol( "head" ), - BODY = Symbol( "body" ), - DOCUMENT_ELEMENT = Symbol( "documentElement" ), - NODE_TYPE = Symbol( "nodeType" ), - PARENT_NODE = Symbol( "parentNode" ), - OWNER = Symbol( "ownerDocument" ), - TAG_NAME = Symbol( "tagName" ), - PARSER_OPTIONS = Symbol( "parserOptions" ), - - spacesRE = /\s+/g, - - nodeTypes = { - ELEMENT_NODE: 1, - //ATTRIBUTE_NODE: 2, // Unused - TEXT_NODE: 3, - CDATA_SECTION_NODE: 4, - //ENTITY_REFERENCE_NODE: 5, // Unused, historical - //ENTITY_NODE: 6, // Unused, historical - PROCESSING_INSTRUCTION_NODE: 7, - COMMENT_NODE: 8, - DOCUMENT_NODE: 9, - DOCUMENT_TYPE_NODE: 10, - DOCUMENT_FRAGMENT_NODE: 11, - //NOTATION_NODE: 12 // Unused, historical - }, - - selfClosingTags = { - "AREA": true, - "BASE": true, - "BR": true, - "COL": true, - "COMMAND": true, - "EMBED": true, - "HR": true, - "IMG": true, - "INPUT": true, - "KEYGEN": true, - "LINK": true, - "META": true, - "PARAM": true, - "SOURCE": true, - "TRACK": true, - "WBR": true - }; - -function setupDocument( document ) -{ - var firstElementPosition = -1, - documentElementPosition = -1, - documentTagName = "HTML"; - - if ( document[DOCTYPE] && document[PARSER_OPTIONS].allowCustomRootElement ) - documentTagName = document[DOCTYPE].name.toUpperCase(); - - for ( let i = 0, l = document.childNodes.length; i < l; i++ ) - if ( document.childNodes[i].tagName === documentTagName ) - { - documentElementPosition = i; - - document[NODE_TYPE] = nodeTypes.DOCUMENT_NODE; - document[DOCUMENT_ELEMENT] = document.childNodes[i]; - document[HEAD] = document[BODY] = null; - for ( let k = 0; k < document[DOCUMENT_ELEMENT].childNodes.length; k++ ) - { - const node = document[DOCUMENT_ELEMENT].childNodes[k]; - - switch ( node.tagName ) - { - case "HEAD": document[HEAD] = node; break; - - case "BODY": - case "FRAMESET": - document[BODY] = node; break; - } - - if ( document[HEAD] && document[BODY] ) break; - } - - if ( firstElementPosition !== -1 ) - { - const newParent = document[HEAD] || document[BODY] || document[DOCUMENT_ELEMENT], - count = documentElementPosition - firstElementPosition; - for ( let k = firstElementPosition; k < documentElementPosition; k++ ) - setNodeParent( document.childNodes[k], newParent ); - newParent.childNodes.splice( 0, 0, ...document.childNodes.splice( firstElementPosition, count ) ); - documentElementPosition -= count; - l -= count; - } - - if ( documentElementPosition < l - 1 ) - { - const newParent = document[BODY] || document[HEAD] || document[DOCUMENT_ELEMENT]; - for ( let k = documentElementPosition + 1; k < l; k++ ) - setNodeParent( document.childNodes[k], newParent ); - newParent.childNodes.splice( newParent.childNodes.length, 0, ...document.childNodes.splice( documentElementPosition + 1 ) ); - } - - break; - } - else if ( firstElementPosition === -1 && document.childNodes[i].nodeType === nodeTypes.ELEMENT_NODE ) - firstElementPosition = i; -} - -function getDocument( node ) -{ - const owner = node[OWNER] || node.getRootNode(); - if ( owner[NODE_TYPE] === nodeTypes.DOCUMENT_NODE || owner[NODE_TYPE] === nodeTypes.DOCUMENT_FRAGMENT_NODE ) - return owner; - return null; -} - -function detachNodes( nodes ) -{ - if ( nodes && nodes.length > 0 ) for ( let i = 0; i < nodes.length; i++ ) - setNodeParent( nodes[i], null ); -} - -function setNodeParent( node, parent ) -{ - const owner = (parent !== null ? getDocument( parent ) : null); - - if ( node[OWNER] !== owner && node.hasChildNodes() ) - node.forEach( node => {node[OWNER] = owner;}, null ); - - node[PARENT_NODE] = parent; - node[OWNER] = owner; -} - -function globalizeRegExp( re ) -{ - if ( !re.global ) - { - let flags = re.flags; - re = new RegExp( re.source, flags +"g" ); - } - return re; -} - -const ELEMENT$1 = Symbol( "element" ), - LENGTH = Symbol( "length" ), - - validClassTokenRE = /^\S+$/, - - indexOf = Array.prototype.indexOf, - join = Array.prototype.join, - splice = Array.prototype.splice; - -function createTokenList( elem ) -{ - const list = Object.create( DOMTokenList.prototype ); - - list[LENGTH] = 0; - list[ELEMENT$1] = elem; - const className = elem.className; - if ( className ) list.value = className; - - return list; -} - -class DOMTokenList -{ - constructor() - { - throw new Error( "Cannot directly instantiate DOMTokenList." ); - } - - get length() {return this[LENGTH]} - set length( val ) {} - - get value() - { - return join.call( this, " " ); - } - set value( val ) - { - if ( this[LENGTH] > 0 ) - for ( let k in this ) if ( this.hasOwnProperty( k ) && isFinite( k ) ) - delete this[k]; - this[LENGTH] = 0; - - if ( typeof val === "string" ) - this.add.apply( this, val.split( spacesRE ) ); - else delete this[ELEMENT$1].attributes.class; - } - - add() - { - for ( let i = 0; i < arguments.length; i++ ) - if ( indexOf.call( this, arguments[i] ) === -1 && this.supports( arguments[i] ) ) - this[this[LENGTH]++] = arguments[i]; - this[ELEMENT$1].attributes.class = this.value; - } - - remove() - { - for ( let i = 0, idx; i < arguments.length; i++ ) - { - idx = indexOf.call( this, arguments[i] ); - if ( idx !== -1 ) - { - splice.call( this, idx, 1 ); - this[LENGTH]--; - } - } - this[ELEMENT$1].attributes.class = this.value; - } - - item( v ) - { - if ( typeof v === "number" && v >= 0 && v < this[LENGTH] ) - return this[v]; - } - - toggle( token, force ) - { - var exists = false; - if ( this.supports( token ) ) - { - let idx = indexOf.call( this, token ); - if ( idx !== -1 && force !== true ) - { - splice.call( this, idx, 1 ); - this[LENGTH]--; - } - else if ( force !== false ) - { - exists = true; - if ( idx === -1 ) - this[this[LENGTH]++] = token; - } - this[ELEMENT$1].attributes.class = this.value; - } - return exists; - } - - contains( token ) - { - return (indexOf.call( this, token ) !== -1); - } - - replace( token, newToken ) - { - var idx = indexOf.call( this, token ); - if ( idx >= 0 && this.supports( newToken ) ) - { - if ( indexOf.call( this, newToken ) === -1 ) - this[idx] = newToken; - else - { - splice.call( this, idx, 1 ); - this[LENGTH]--; - } - this[ELEMENT$1].attributes.class = this.value; - return true; - } - return false; - } - - supports( token ) - { - if ( token && typeof token === "string" ) - return token.match( validClassTokenRE ); - return false; - } -} - -// HTML "style" inline CSS property handling -// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style - -// style="border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; border-bottom-color: hotpink; -moz-animation-iteration-count: 1" -const ELEMENT = Symbol( "element" ); -// Note: dom2prop(dom2prop('camelCaseProp')) will work as expected so it's always safe -// to use dom2prop to canonicalize property names in their kebab case (dashed) form -function dom2prop(cssStyleDeclarationPropertyName) { - return cssStyleDeclarationPropertyName.replace(/[A-Z]/g, (r) => '-'+r.toLowerCase()); -} -// In theory a valid CSS property (identifier) is more permissive, but in practice this covers all property names in use -function valid(propertyName) { - if (typeof propertyName !== 'string') return false; - // Valid css property name - if (propertyName.match(/^\-?[a-z_-]*[a-z]$/)) return true; - // Valid custom property - if (propertyName.match(/^\-\-[A-Za-z_-]*[A-Za-z0-9]$/)) return true; - // Valid DOM-style (camel case) property - if (propertyName.match(/^[a-zA-Z]+$/)) return true; - - return false; -} - -// Parses a style="" attribute into a map of property-value pairs for easier alterations -function styleToMap(styleString = "") { - return new Map(styleString.split(/\s*;\s*/g).filter(s => s.length).map(sd => sd.trim().match(/^([a-z-]+)\s*:\s*(.*)$/).slice(1))); -} - -// Stringifies a map of property-value pairs back into a style="" inline style attribute value -function mapToStyle(styleMap) { - return Array.from(styleMap?.entries() ?? []).map(e => e.join(': ')).join('; '); -} - -function createInlineStyle( elem ) -{ - const styleObject = { - [ELEMENT]: elem - }; - - const styleProxy = new Proxy(styleObject, { - get(target, name) { - if (name === ELEMENT) return elem; - if (!valid(name)) return undefined; - - const prop = dom2prop(name); - - return styleToMap(elem.attributes.style).get(prop); - }, - set(target, name, value) { - // Fail silently (return truthy value to avoid showing an TypeError) - if (!valid(name)) return true; - - const prop = dom2prop(name); - const map = styleToMap(elem.attributes.style); - - elem.attributes.style = mapToStyle(map.set(prop, value)); - return true; - }, - deleteProperty(target, name) { - if (!valid(name)) return; - - const prop = dom2prop(name); - const map = styleToMap(elem.attributes.style); - - elem.attributes.style = mapToStyle(map.delete(prop)); - }, - }); - - return styleProxy; -} - -function updateInlineStyle( style, value ) -{ - // Parse and re-stringify value to validate format - const styleValue = mapToStyle(styleToMap(value)); - - style[ELEMENT].attributes.style = styleValue; -} - -const newLinesRE = /\r\n|\r|\f/g, - anbSyntaxRE = /\(\s*(even|odd|(?:(?:([+-]?\d*)n)\s*(?:([+-])\s*(\d+))?|([+-]?\d+)))\s*/g; - -const ParamTypes = { - Selectors: 0, - Identifier: 1, - Iterator: 2, - IteratorOf: 3 -}; - -const paramExpectations = { - "is": ParamTypes.Selectors, - "not": ParamTypes.Selectors, - "where": ParamTypes.Selectors, // Alias of :is() - "has": ParamTypes.Selectors, - - "lang": ParamTypes.Identifier, // Not implementing - "dir": ParamTypes.Identifier, // Not implementing - - "nth-child": ParamTypes.IteratorOf, - "nth-last-child": ParamTypes.IteratorOf, - - "nth-of-type": ParamTypes.Iterator, - "nth-last-of-type": ParamTypes.Iterator, - "nth-col": ParamTypes.Iterator, // Not implementing - "nth-last-col": ParamTypes.Iterator, // Not implementing -}; - -// https://drafts.csswg.org/selectors-4/ - -function parseSelector( selector ) -{ - return parseSelectorList( new Lexer( selector.replace( newLinesRE, "\n" ) ) ); -} - -function parseSelectorList( lexer, terminator = EOF, relative = false ) -{ - var theChar = lexer.skipWhiteSpace(), - selector = {}, - compound = [], - complex = [compound], - ast = [complex]; - - while ( theChar !== EOF && theChar !== terminator ) - { - switch ( theChar ) - { - case "*": // https://drafts.csswg.org/selectors-4/#universal-selector - if ( compound.length > 0 ) - throw syntaxError( "Universal selectors must come before all other simple selectors.", lexer ); - selector.type = "universal"; - compound.push( selector ); - selector = {}; - break; - - case "#": - case ".": - { - lexer.getNextChar(); - const name = parseIdentifier( lexer ); - if ( !name ) throw syntaxError( "Expected an identifier.", lexer ); - - selector.type = (theChar === "#" ? "id" : "class"); - selector.name = name; - - compound.push( selector ); - selector = {}; - break; - } - case "[": // https://drafts.csswg.org/selectors-4/#attribute-selectors - { - lexer.getNextAfterWhiteSpace(); - const name = parseIdentifier( lexer ); - if ( !name ) throw syntaxError( "Expected an identifier.", lexer ); - - selector.type = "attr"; - selector.name = name; - selector.comparison = "="; - selector.value = true; - selector.ignoreCase = false; - - if ( (theChar = lexer.getNextAfterWhiteSpace()) !== "]" ) - { - switch ( theChar ) - { - case "=": break; - - case "~": - case "|": - case "^": - case "$": - case "*": - if ( lexer.peek() !== "=" ) throw syntaxError( "Expected '='.", lexer, 1 ); - selector.comparison = theChar + selector.comparison; - lexer.getNextChar(); - break; - - default: throw syntaxError( "Unexpected character '"+ (theChar === EOF ? "END_OF_INPUT" : theChar) +"'.", lexer ); - } - - theChar = lexer.getNextAfterWhiteSpace(); - if ( theChar === "'" || theChar === '"' ) - { - // https://drafts.csswg.org/css-syntax-3/#consume-string-token - const quote = theChar; - - selector.value = ""; - theChar = lexer.getNextChar(); - - while ( theChar !== EOF && theChar !== quote && theChar !== "\n" ) - { - if ( theChar === "\\" ) - { - selector.value += parseEscapedCodePoint( lexer ); - theChar = lexer.getChar(); - } - else - { - selector.value += theChar; - theChar = lexer.getNextChar(); - } - } - } - else - { - const name = parseIdentifier( lexer ); - if ( !name ) throw syntaxError( "Expected an identifier.", lexer ); - selector.value = name; - } - - if ( lexer.getNextAfterWhiteSpace() !== "]" ) - { - const ident = parseIdentifier( lexer ); - if ( ident === "i" || ident === "I" ) - selector.ignoreCase = true; - else if ( ident === "s" || ident === "S" ) - selector.ignoreCase = false; - else if ( ident ) - throw syntaxError( "Unexpected identifier '"+ ident +"'.", lexer, -ident.length + 1 ); - - if ( lexer.getNextAfterWhiteSpace() !== "]" ) - throw syntaxError( "Expected ']'.", lexer, -1 + ident.length ); - } - } - - compound.push( selector ); - selector = {}; - break; - } - case ":": - { - lexer.getNextChar(); - if ( lexer.match( ":" ) ) // https://drafts.csswg.org/selectors-4/#pseudo-elements - { - const name = parseIdentifier( lexer ); - if ( !name ) throw syntaxError( "Expected a pseudo-element name.", lexer ); - - selector.type = "pseudo-element"; - selector.name = name; - } - else // https://drafts.csswg.org/selectors-4/#pseudo-classes - { - const name = parseIdentifier( lexer ); - if ( !name ) throw syntaxError( "Expected a pseudo-class name.", lexer ); - - selector.type = "pseudo-class"; - selector.name = name; - - const paramType = paramExpectations[name]; - if ( paramType != null ) - { - selector.type = "pseudo-fn"; - - if ( lexer.getNextChar() !== "(" ) - throw syntaxError( "Expected '('.", lexer ); - - switch ( paramType ) - { - case ParamTypes.IteratorOf: // https://drafts.csswg.org/selectors-4/#nth-child-pseudo - case ParamTypes.Iterator: // https://drafts.csswg.org/css-syntax-3/#anb-microsyntax - let A = 0, B = 0, ofSelector; - - anbSyntaxRE.lastIndex = lexer.index; - const match = anbSyntaxRE.exec( lexer.str ); - if ( !match ) throw syntaxError( "Invalid parameter.", lexer, 1 ); - lexer.advance( match[0].length ); - - if ( paramType === ParamTypes.IteratorOf ) - { - lexer.skipWhiteSpace(); - const savedIdx = lexer.index; - if ( parseIdentifier( lexer ).toLowerCase() === "of" ) - { - const chr = lexer.getNextChar(); - if ( chr !== ")" && !lexer.isWhiteSpace( chr ) ) - throw syntaxError( "Expected whitespace.", lexer ); - - ofSelector = parseSelectorList( lexer, ")" ); - if ( !(ofSelector instanceof Array) || ofSelector.length === 0 ) - throw syntaxError( "Expected at least one selector.", lexer ); - } - else lexer.goToIndex( savedIdx ); - } - - if ( lexer.skipWhiteSpace() !== ")" ) - throw syntaxError( "Expected ')'.", lexer ); - - if ( match[1] === "even" || match[1] === "odd" ) - { - A = 2; - if ( match[1] === "odd" ) B = 1; - } - else if ( match[5] ) // We found just an integer. - B = parseInt( match[5], 10 ); - else - { - if ( match[2] === "-" ) A = -1; - else if ( !match[2] || match[2] === "+" ) A = 1; - else A = parseInt( match[2], 10 ); - - if ( match[3] ) - B = parseInt( match[3] + match[4], 10 ); - } - - selector.params = [A, B]; - if ( ofSelector ) selector.params.push( ofSelector ); - break; - - case ParamTypes.Selectors: - lexer.getNextChar(); - selector.params = parseSelectorList( lexer, ")", true ); - if ( selector.params.length === 0 ) - throw syntaxError( "Expected at least one selector.", lexer ); - break; - - case ParamTypes.Identifier: - if ( isIdentifierStart( lexer.getNextAfterWhiteSpace() ) ) - selector.params = [parseIdentifier( lexer )]; - else throw syntaxError( "Expected an identifier.", lexer ); - lexer.getNextChar(); - break; - } - if ( lexer.skipWhiteSpace() !== ")" ) throw syntaxError( "Expected ')'.", lexer ); - } - // Having this branch here allows custom functional pseudo-classes with - // these names to be defined by the user. - else if ( name === "before" || name === "after" || name === "first-line" || name === "first-letter" ) - selector.type = "pseudo-element"; - } - - compound.push( selector ); - selector = {}; - break; - } - - // https://drafts.csswg.org/selectors-4/#combinators - case "+": - case ">": - case "~": - if ( compound.length === 0 ) - { - if ( complex.length === 1 ) - { - if ( relative ) - complex.unshift( [{type: "pseudo-class", name: "scope"}] ); - else throw syntaxError( "Absolute selectors cannot start with a combinator.", lexer ); - } - else if ( typeof complex[complex.length - 2] === "string" ) - throw syntaxError( "Cannot have multiple combinators in a row.", lexer ); - complex.splice( complex.length - 1, 0, theChar ); - } - else complex.push( theChar, compound = [] ); - break; - - case ",": - if ( compound.length === 0 ) - { - if ( complex.length > 1 ) - { - complex.pop(); - if ( typeof complex[complex.length - 1] === "string" ) - throw syntaxError( "Complex selectors are not allowed to end with a combinator.", lexer, -1 ); - ast.push( complex = [compound] ); - } - } - else ast.push( complex = [compound = []] ); - lexer.skipWhiteSpace(); - break; - - default: - if ( lexer.isWhiteSpace( theChar ) ) - { - if ( compound.length > 0 ) - complex.push( compound = [] ); - lexer.skipWhiteSpace(); - lexer.advance( -1 ); - } - else if ( isIdentifierStart( theChar ) ) - { - if ( compound.length > 0 ) - throw syntaxError( "Type (tag name) selectors must come before all other simple selectors.", lexer ); - - selector.type = "type"; - // We'll always have a valid identifier here, thanks to - // the isIdentifierStart() above. - selector.name = parseIdentifier( lexer ).toUpperCase(); - - compound.push( selector ); - selector = {}; - } - else throw syntaxError( "Unexpected character '"+ theChar +"'.", lexer ); - } - theChar = lexer.getNextChar(); - } - - if ( compound.length === 0 ) - { - if ( complex.length === 1 ) - { - ast.pop(); - complex = ast[ast.length - 1]; - } - else complex.pop(); - } - - if ( complex && typeof complex[complex.length - 1] === "string" ) - throw syntaxError( "Complex selectors are not allowed to end with a combinator.", lexer, -1 ); - - return ast; -} - -function syntaxError( message, lexer, offset = 0 ) -{ - var error = new SyntaxError( message ), - column = lexer.index + offset; - error.stack = "SyntaxError: "+ message +"\n\n"+ lexer.str +"\n"+ " ".repeat( column ) +"^\n at index "+ column; - return error; -} - -// https://drafts.csswg.org/css-syntax-3/#consume-name -function parseIdentifier( lexer ) -{ - var name = "", - theChar = lexer.getChar(); - - if ( isIdentifierStart( theChar ) ) - { - do - { - if ( theChar === "\\" ) - { - name += parseEscapedCodePoint( lexer ); - theChar = lexer.getChar(); - } - else - { - name += theChar; - theChar = lexer.getNextChar(); - } - } - while ( theChar !== EOF && (isIdentifierStart( theChar ) || (theChar >= "0" && theChar <= "9") || theChar === "-") ) - lexer.advance( -1 ); - } - - return name; -} - -// https://drafts.csswg.org/css-syntax-3/#consume-escaped-code-point -function parseEscapedCodePoint( lexer ) -{ - var theChar = lexer.getNextChar(); - - if ( isHexDigit( theChar ) ) - { - let codePoint = ""; - - for ( let i = 5; i >= 0 && isHexDigit( theChar ); i-- ) - { - codePoint += theChar; - theChar = lexer.getNextChar(); - } - - if ( lexer.isWhiteSpace( theChar ) ) - lexer.getNextChar(); - - codePoint = parseInt( codePoint, 16 ) | 0; - if ( codePoint === 0 || - (codePoint >= 0xD800 && codePoint <= 0xDFFF) || // Surrogate - codePoint > 0x10FFFF ) // Maximum allowed code point - return "\uFFFD"; - return String.fromCodePoint( codePoint ); - } - else if ( theChar === EOF ) return "\uFFFD"; - - lexer.getNextChar(); - return theChar; -} - -function isHexDigit( theChar ) -{ - return (theChar !== EOF && ((theChar >= "0" && theChar <= "9") || (theChar >= "A" && theChar <= "F") || (theChar >= "a" && theChar <= "f"))); -} - -function isIdentifierStart( theChar ) -{ - return ((theChar >= "A" && theChar <= "Z") || (theChar >= "a" && theChar <= "z") || theChar === "_" || theChar >= "\u0080" || theChar === "\\"); -} - -const STATE_INITIAL = 0, - STATE_DESCENDANT_COMBINATOR = 1, - STATE_CHILD_COMBINATOR = 2, - STATE_NEXT_SIBLING_COMBINATOR = 3, - STATE_SUBSEQUENT_SIBLING_COMBINATOR = 4, - - stateTransitions = { - ">": STATE_CHILD_COMBINATOR, - "+": STATE_NEXT_SIBLING_COMBINATOR, - "~": STATE_SUBSEQUENT_SIBLING_COMBINATOR - }, - - pseudoProcs = { - is( scope, node, selectors ) - { - return matchesSelectorList( scope, node, selectors ); - }, - not( scope, node, selectors ) - { - return !matchesSelectorList( scope, node, selectors ); - }, - has( scope, node, selectors ) - { - var has = false; - - for ( let i = 0; i < selectors.length; i++ ) - if ( selectors[i][0] instanceof Array && isRelativeSimpleSelector( selectors[i][0][0] ) ) - { - has = matchesSelectorList( node, node, selectors, true ); - break; - } - - if ( !has && node.childNodes.length > 0 ) node.forEach( elem => - { - if ( matchesSelectorList( node, elem, selectors ) ) - { - has = true; - return false; - } - } ); - - return has; - }, - - ["nth-child"]( scope, node, args ) - { - const parent = node[PARENT_NODE], - nodes = parent.childNodes, - iter = new ChildIterator( args[0], args[1] ); - for ( let i = 0; i < nodes.length; i++ ) - if ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE ) - { - if ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) ) - { - const iterMatch = iter.next(); - if ( nodes[i] === node ) - return iterMatch; - } - } - return false; - }, - ["nth-last-child"]( scope, node, args ) - { - const parent = node[PARENT_NODE], - nodes = parent.childNodes, - iter = new ChildIterator( args[0], args[1] ); - for ( let i = nodes.length - 1; i >= 0; i-- ) - if ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE ) - { - if ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) ) - { - const iterMatch = iter.next(); - if ( nodes[i] === node ) - return iterMatch; - } - } - return false; - }, - - ["nth-of-type"]( scope, node, args ) - { - const nodes = node[PARENT_NODE].childNodes, - iter = new ChildIterator( args[0], args[1] ), - tagName = node[TAG_NAME]; - for ( let i = 0; i < nodes.length; i++ ) - if ( nodes[i][TAG_NAME] === tagName ) - { - const iterMatch = iter.next(); - if ( nodes[i] === node ) - return iterMatch; - } - - // For code here to be reachable, 'node' would have to not be inside - // its own parent, or the above test of 'nodes[i] === node' would - // have to be skippable. Since neither of these scenarios is - // possible (for now), an explicit 'return false' here never - // executes and isn't needed. - }, - ["nth-last-of-type"]( scope, node, args ) - { - const nodes = node[PARENT_NODE].childNodes, - iter = new ChildIterator( args[0], args[1] ), - tagName = node[TAG_NAME]; - for ( let i = nodes.length - 1; i >= 0; i-- ) - if ( nodes[i][TAG_NAME] === tagName ) - { - const iterMatch = iter.next(); - if ( nodes[i] === node ) - return iterMatch; - } - - // For code here to be reachable, 'node' would have to not be inside - // its own parent, or the above test of 'nodes[i] === node' would - // have to be skippable. Since neither of these scenarios is - // possible (for now), an explicit 'return false' here never - // executes and isn't needed. - } - }, - pseudoClasses = { - scope( scope, node ) - { - return (node === scope); - }, - - enabled( scope, node ) - { - switch ( node[TAG_NAME] ) - { - case "BUTTON": - case "INPUT": - case "SELECT": - case "TEXTAREA": - case "OPTGROUP": - case "OPTION": - case "FIELDSET": - return !node.hasAttribute( "disabled" ); - } - return false; - }, - disabled( scope, node ) - { - switch ( node[TAG_NAME] ) - { - case "BUTTON": - case "INPUT": - case "SELECT": - case "TEXTAREA": - case "OPTGROUP": - case "OPTION": - case "FIELDSET": - return node.hasAttribute( "disabled" ); - } - return false; - }, - - checked( scope, node ) - { - if ( node[TAG_NAME] === "INPUT" ) - { - const type = node.getAttribute( "type" ); - if ( type === "checkbox" || type === "radio" ) - return node.hasAttribute( "checked" ); - } - else if ( node[TAG_NAME] === "OPTION" ) - return node.hasAttribute( "selected" ); - return false; - }, - - required( scope, node ) - { - switch ( node[TAG_NAME] ) - { - case "INPUT": - case "SELECT": - case "TEXTAREA": - return node.hasAttribute( "required" ); - } - return false; - }, - optional( scope, node ) - { - switch ( node[TAG_NAME] ) - { - case "INPUT": - case "SELECT": - case "TEXTAREA": - return !node.hasAttribute( "required" ); - } - return false; - }, - - root( scope, node ) - { - const document = getDocument( scope ); - return (!!document && document.documentElement === node); - }, - empty( scope, node ) - { - return (node.childNodes.length === 0); - }, - - ["first-child"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes; - for ( let i = 0; i < nodes.length; i++ ) - if ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE ) - return (nodes[i] === node); - - // For code here to be reachable, we would have to be looking at an - // ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes. - // Therefore, an explicit 'return false' here never executes and - // isn't needed. - }, - ["last-child"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes; - for ( let i = nodes.length - 1; i >= 0; i-- ) - if ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE ) - return (nodes[i] === node); - - // For code here to be reachable, we would have to be looking at an - // ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes. - // Therefore, an explicit 'return false' here never executes and - // isn't needed. - }, - ["only-child"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes; - let first, last; - for ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- ) - { - if ( !first && nodes[s][NODE_TYPE] === Node.ELEMENT_NODE ) - first = nodes[s]; - if ( !last && nodes[e][NODE_TYPE] === Node.ELEMENT_NODE ) - last = nodes[e]; - } - return (first === last && first === node); - }, - - ["first-of-type"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes, - tagName = node[TAG_NAME]; - for ( let i = 0; i < nodes.length; i++ ) - if ( nodes[i][TAG_NAME] === tagName ) - return (nodes[i] === node); - - // For code here to be reachable, we would have to be looking at an - // ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes. - // Therefore, an explicit 'return false' here never executes and - // isn't needed. - }, - ["last-of-type"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes, - tagName = node[TAG_NAME]; - for ( let i = nodes.length - 1; i >= 0; i-- ) - if ( nodes[i][TAG_NAME] === tagName ) - return (nodes[i] === node); - - // For code here to be reachable, we would have to be looking at an - // ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes. - // Therefore, an explicit 'return false' here never executes and - // isn't needed. - }, - ["only-of-type"]( scope, node ) - { - const nodes = node[PARENT_NODE].childNodes, - tagName = node[TAG_NAME]; - let first, last; - for ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- ) - { - if ( !first && nodes[s][TAG_NAME] === tagName ) - first = nodes[s]; - if ( !last && nodes[e][TAG_NAME] === tagName ) - last = nodes[e]; - } - return (first === last && first === node); - } - }; - -pseudoProcs.where = pseudoProcs.is; - -function querySelector( scope, selector, all ) -{ - const selectors = parseSelector( selector ), - result = []; - - scope.forEach( node => - { - if ( matchesSelectorList( scope, node, selectors ) ) - { - result.push( node ); - if ( !all ) return false; - } - } ); - - return (all ? result : (result[0] || null)); -} - -function closest( scope, selector ) -{ - const selectors = parseSelector( selector ); - let node = scope; - - while ( node != null && node[NODE_TYPE] === Node.ELEMENT_NODE ) - { - if ( matchesSelectorList( scope, node, selectors ) ) - return node; - node = node[PARENT_NODE]; - } - - return null; -} - -function matches( scope, selector ) -{ - return matchesSelectorList( scope, scope, parseSelector( selector ) ); -} - -function matchesSelectorList( scope, node, selectors, relative = false ) -{ - var currentNode; - -List: - for ( let i = 0; i < selectors.length; i++ ) - { - const complex = selectors[i]; - let state = STATE_INITIAL; - - if ( relative && complex[0] instanceof Array && !isRelativeSimpleSelector( complex[0][0] ) ) - continue; - - currentNode = node; - - Complex: - for ( let x = (relative ? 0 : complex.length - 1); - (relative ? x < complex.length : x >= 0); - (relative ? x++ : x--) ) - { - if ( stateTransitions.hasOwnProperty( complex[x] ) ) - state = stateTransitions[complex[x]]; - else switch ( state ) - { - case STATE_INITIAL: - if ( !matchesCompoundSelector( scope, currentNode, complex[x] ) ) - continue List; - state = STATE_DESCENDANT_COMBINATOR; - break; - - case STATE_DESCENDANT_COMBINATOR: - while ( currentNode = currentNode[PARENT_NODE] ) - if ( matchesCompoundSelector( scope, currentNode, complex[x] ) ) - continue Complex; - continue List; - - case STATE_CHILD_COMBINATOR: - currentNode = currentNode[PARENT_NODE]; - if ( !matchesCompoundSelector( scope, currentNode, complex[x] ) ) - continue List; - break; - - case STATE_NEXT_SIBLING_COMBINATOR: - { - const nodes = currentNode[PARENT_NODE].childNodes; - currentNode = nodes[nodes.indexOf( currentNode ) + (relative ? 1 : -1)]; - if ( !matchesCompoundSelector( scope, currentNode, complex[x] ) ) - continue List; - break; - } - case STATE_SUBSEQUENT_SIBLING_COMBINATOR: - { - const nodes = currentNode[PARENT_NODE].childNodes; - for ( let k = nodes.indexOf( currentNode ) + (relative ? 1 : -1); - (relative ? k < nodes.length : k >= 0); - (relative ? k++ : k--) ) - if ( matchesCompoundSelector( scope, nodes[k], complex[x] ) ) - { - currentNode = nodes[k]; - continue Complex; - } - continue List; - } - } - } - return true; - } - return false; -} - -function matchesCompoundSelector( scope, node, compound ) -{ - if ( !node || node[NODE_TYPE] !== Node.ELEMENT_NODE ) - return false; - for ( let i = 0; i < compound.length; i++ ) - { - const simple = compound[i]; - let matched; - - matched = false; - switch ( simple.type ) - { - case "universal": return true; - - case "type": matched = (node[TAG_NAME] === simple.name); break; - case "id": matched = (node.id === simple.name); break; - case "class": matched = node.classList.contains( simple.name ); break; - - case "attr": - if ( simple.comparison === "=" && (simple.value === true || simple.value === "") ) - matched = node.hasAttribute( simple.name ); - else - { - let attr = node.getAttribute( simple.name ); - if ( typeof attr === "string" ) - { - let value = (simple.ignoreCase ? simple.value.toLowerCase() : simple.value); - if ( simple.ignoreCase ) attr = attr.toLowerCase(); - if ( value !== "" ) switch ( simple.comparison ) - { - case "=": matched = (attr === value); break; - case "~=": matched = attr.split( spacesRE ).indexOf( value ) !== -1; break; - case "|=": matched = (attr === value || attr.startsWith( value +"-" )); break; - case "^=": matched = attr.startsWith( value ); break; - case "$=": matched = attr.endsWith( value ); break; - case "*=": matched = attr.indexOf( value ) !== -1; break; - } - } - } - break; - - case "pseudo-element": break; - - case "pseudo-class": - if ( pseudoClasses.hasOwnProperty( simple.name ) ) - matched = !!pseudoClasses[simple.name].call( null, scope, node ); - break; - - case "pseudo-fn": - if ( pseudoProcs.hasOwnProperty( simple.name ) ) - matched = !!pseudoProcs[simple.name].call( null, scope, node, simple.params ); - break; - } - - if ( !matched ) return false; - } - return true; -} - -function isRelativeSimpleSelector( simple ) -{ - return (!!simple && simple.type === "pseudo-class" && simple.name === "scope"); -} - -class ChildIterator -{ - constructor( A, B ) - { - this.A = parseInt( A, 10 ) | 0; - this.B = parseInt( B, 10 ) | 0; - this.current = 0; - } - - next() - { - if ( this.A === 0 && this.B === 0 ) - return false; - - this.current += 1; - - let match = false; - if ( this.A === 0 ) - match = (this.current === this.B); - else if ( (this.A < 0 && this.B >= this.current) || (this.A > 0 && this.current >= this.B) ) - match = (((this.current + this.B) % this.A) === 0); - - return match; - } -} - -function serializeNode( elem ) -{ - var tagName = elem.tagName, - owner = getDocument( elem ), - entities = owner ? owner.entityEncoder : null, - html = ""; - switch ( elem.nodeType ) - { - case nodeTypes.ELEMENT_NODE: - tagName = tagName.toLowerCase(); - html += "<"+ tagName; - for ( let k in elem.attributes ) - if ( elem.attributes.hasOwnProperty( k ) ) - { - let attr = elem.attributes[k]; - if ( attr === true ) - attr = ""; - else if ( entities && owner[PARSER_OPTIONS] ) - attr = encodeEntities( attr, entities, owner[PARSER_OPTIONS] ); - - html += " "+ k; - if ( attr !== "" ) - html += '="'+ attr +'"'; - } - html += ">"; - - for ( let i = 0; i < elem.childNodes.length; i++ ) - html += serializeNode( elem.childNodes[i] ); - - if ( selfClosingTags[elem.tagName] !== true ) - html += ""; - break; - - case nodeTypes.TEXT_NODE: - if ( entities && owner[PARSER_OPTIONS] && - (!elem.parentNode || (elem.parentNode.tagName !== "SCRIPT" && elem.parentNode.tagName !== "STYLE")) ) - html += encodeEntities( elem.nodeValue, entities, owner[PARSER_OPTIONS] ); - else html += elem.nodeValue; - break; - - case nodeTypes.CDATA_SECTION_NODE: - html += ""; - break; - - case nodeTypes.PROCESSING_INSTRUCTION_NODE: - html += ""; - break; - - case nodeTypes.COMMENT_NODE: - html += ""; - break; - - case nodeTypes.DOCUMENT_TYPE_NODE: - html += ""; - break; - } - return html; -} - -function encodeEntities( text, entities, options ) -{ - if ( options.encodeEntities === false ) - return text; - else if ( options.encodeEntities === true || !(options.encodeEntities instanceof RegExp) ) - return entities.encode( text ); - return entities.encode( text, options.encodeEntities ); -} - -const CLASS_LIST = Symbol( "classList" ); -const INLINE_STYLE = Symbol( "style" ); - -const EXTEND_NODE = Symbol( "extendNode" ); - -function createNode( nodeType, baseClass = Node ) -{ - const node = Object.create( baseClass.prototype ); - - node[NODE_TYPE] = nodeType; - node.nodeValue = null; - node[PARENT_NODE] = null; - node[OWNER] = null; - - switch ( nodeType ) - { - case Node.ELEMENT_NODE: - node[TAG_NAME] = null; - node.attributes = {}; - // fallthrough - - case Node.DOCUMENT_NODE: - case Node.DOCUMENT_FRAGMENT_NODE: - node.childNodes = []; - } - - return node; -} - -class Node extends EventTarget -{ - constructor() - { - super(); - - // We allow `extend`-ing `class`-es to call super(EXTEND_NODE) - if (arguments[0] === EXTEND_NODE) return; - - throw new Error( "Cannot directly instantiate Node." ); - } - - get nodeType() {return this[NODE_TYPE]} - - get nodeName() - { - switch ( this.nodeType ) - { - case Node.ELEMENT_NODE: return this.tagName; - case Node.TEXT_NODE: return "#text"; - case Node.CDATA_SECTION_NODE: return "#cdata-section"; - case Node.PROCESSING_INSTRUCTION_NODE: return this.target; - case Node.COMMENT_NODE: return "#comment"; - case Node.DOCUMENT_NODE: return "#document"; - case Node.DOCUMENT_TYPE_NODE: return this.name; - case Node.DOCUMENT_FRAGMENT_NODE: return "#document-fragment"; - } - } - - get parentNode() {return this[PARENT_NODE]} - get ownerDocument() {return this[OWNER]} - get tagName() {return this[TAG_NAME] || null} - - get firstChild() - { - if ( this.childNodes ) return this.childNodes[0] || null; - return null; - } - - get lastChild() - { - if ( this.childNodes ) return this.childNodes[this.childNodes.length - 1] || null; - return null; - } - - get previousSibling() - { - const parent = this.parentNode; - if ( parent ) - { - const idx = parent.childNodes.indexOf( this ); - if ( idx > 0 ) return parent.childNodes[idx - 1]; - } - return null; - } - - get nextSibling() - { - const parent = this.parentNode; - if ( parent ) - { - const idx = parent.childNodes.indexOf( this ); - if ( idx > -1 && idx < parent.childNodes.length - 1 ) return parent.childNodes[idx + 1]; - } - return null; - } - - get id() - { - return (this.attributes && this.attributes.id) || ""; - } - set id( id ) - { - if ( this.attributes ) - this.attributes.id = id; - } - - get className() - { - return (this.attributes && this.attributes.class) || ""; - } - set className( val ) - { - if ( this.attributes ) - { - this.classList.value = val; - this.attributes.class = this[CLASS_LIST].value; - } - } - - get classList() - { - if ( this.attributes ) - { - if ( !this[CLASS_LIST] ) - this[CLASS_LIST] = createTokenList( this ); - return this[CLASS_LIST]; - } - return null; - } - - get innerHTML() - { - if ( this.nodeType === Node.ELEMENT_NODE ) - { - let html = ""; - for ( let i = 0; i < this.childNodes.length; i++ ) - html += serializeNode( this.childNodes[i] ); - return html; - } - return null; - } - set innerHTML( html ) - { - if ( this.nodeType === Node.ELEMENT_NODE && selfClosingTags[this.tagName] !== true ) - { - const nodes = parseHTML( this, html ); - if ( nodes ) - addChildNode( this, nodes, 0, this.childNodes.length ); - else - { - detachNodes( this.childNodes ); - this.childNodes.length = 0; - } - } - } - - get outerHTML() - { - return serializeNode( this ); - } - set outerHTML( html ) - { - if ( this.parentNode ) - { - const idx = this.parentNode.childNodes.indexOf( this ), - nodes = parseHTML( this, html ); - if ( nodes ) - addChildNode( this.parentNode, nodes, idx, 1 ); - else detachNodes( this.parentNode.childNodes.splice( idx, 1 ) ); - } - } - - get style() - { - if ( this.attributes ) - { - if ( !this[INLINE_STYLE] ) - this[INLINE_STYLE] = createInlineStyle( this ); - return this[INLINE_STYLE]; - } - return null; - } - set style( value ) - { - if ( this.attributes ) - { - if ( !this[INLINE_STYLE] ) - this[INLINE_STYLE] = createInlineStyle( this ); - - updateInlineStyle( this[INLINE_STYLE], value ); - } - } - - get textContent() - { - if ( this.childNodes ) - { - let text = ""; - for ( let i = 0; i < this.childNodes.length; i++ ) - { - if ( this.childNodes[i].nodeType !== Node.COMMENT_NODE && - this.childNodes[i].nodeType !== Node.CDATA_SECTION_NODE && - this.childNodes[i].nodeType !== Node.PROCESSING_INSTRUCTION_NODE ) - text += this.childNodes[i].textContent; - } - return text; - } - return this.nodeValue; - } - set textContent( text ) - { - if ( text == null ) - text = ""; - else if ( typeof text !== "string" ) - text += ""; - - if ( this.childNodes ) - { - let node = createNode( Node.TEXT_NODE ); - node.nodeValue = text; - setNodeParent( node, this ); - - detachNodes( this.childNodes ); - this.childNodes.length = 1; - this.childNodes[0] = node; - } - else if ( this.nodeType >= Node.TEXT_NODE && this.nodeType <= Node.COMMENT_NODE ) - this.nodeValue = text; - } - - getRootNode() - { - let rootNode = this; - while ( rootNode.parentNode ) - rootNode = rootNode.parentNode; - return rootNode; - } - - hasAttributes() - { - if ( this.attributes ) for ( let k in this.attributes ) - if ( this.attributes.hasOwnProperty( k ) ) return true; - return false; - } - - getAttributeNames() - { - if ( this.attributes ) - return Object.keys( this.attributes ); - return []; - } - - getAttribute( name ) - { - var result; - if ( this.attributes && name && typeof name === "string" ) - result = this.attributes[lowerAttributeCase( this, name )]; - if ( result === undefined ) - return null; - return result; - } - - setAttribute( name, value ) - { - if ( this.attributes && name && typeof name === "string" ) - { - name = lowerAttributeCase( this, name ); - if ( name === "class" ) - { - if ( value !== true ) - this.className = ""+ value; - else - { - this.classList.value = ""; - this.attributes[name] = true; - } - } - else if ( typeof value === "string" || value === true ) - this.attributes[name] = value; - else this.attributes[name] = ""+ value; - } - } - - toggleAttribute( name, force ) - { - if ( this.attributes && name && typeof name === "string" ) - { - name = lowerAttributeCase( this, name ); - if ( !this.attributes.hasOwnProperty( name ) ) - { - if ( arguments.length === 1 || force === true ) - return (this.attributes[name] = true); - return false; - } - else if ( arguments.length === 1 || force === false ) - { - delete this.attributes[name]; - return false; - } - return true; - } - } - - removeAttribute( name ) - { - if ( this.attributes && name && typeof name === "string" ) - { - name = lowerAttributeCase( this, name ); - if ( name === "class" && this[CLASS_LIST] ) - this[CLASS_LIST].value = null; - delete this.attributes[name]; - } - } - - hasAttribute( name ) - { - if ( this.attributes && name && typeof name === "string" ) - return this.attributes.hasOwnProperty( lowerAttributeCase( this, name ) ); - return false; - } - - hasChildNodes() - { - return (!!this.childNodes && this.childNodes.length > 0); - } - - appendChild( child ) - { - return this.insertBefore( child, null ); - } - - insertBefore( newChild, refChild ) - { - if ( this.childNodes && newChild instanceof Node && arguments.length > 1 ) - { - let idx = -1; - - if ( refChild == null ) - idx = this.childNodes.length; - else if ( refChild instanceof Node && refChild.parentNode === this ) - idx = this.childNodes.indexOf( refChild ); - - if ( idx !== -1 ) - return addChildNode( this, newChild, idx ); - } - return null; - } - - replaceChild( newChild, oldChild ) - { - if ( this.childNodes && oldChild instanceof Node && newChild instanceof Node && - oldChild.parentNode === this && oldChild !== newChild ) - { - addChildNode( this, newChild, this.childNodes.indexOf( oldChild ), 1 ); - return oldChild; - } - return null; - } - - removeChild( child ) - { - if ( this.childNodes && child instanceof Node && child.parentNode === this ) - { - const idx = this.childNodes.indexOf( child ), - owner = getDocument( this ); - - if ( owner && child.parentNode === owner.documentElement && tagNameProp.hasOwnProperty( child.tagName ) ) - owner[tagNameProp[child.tagName]] = null; - - detachNodes( this.childNodes.splice( idx, 1 ) ); - return child; - } - return null; - } - - cloneNode( deep ) - { - var clone; - - if ( this.nodeType === Node.DOCUMENT_NODE || this.nodeType === Node.DOCUMENT_FRAGMENT_NODE ) - clone = new DOM( null, this[PARSER_OPTIONS] ); - else clone = createNode( this.nodeType ); - - switch ( this.nodeType ) - { - case Node.ELEMENT_NODE: - clone[TAG_NAME] = this.tagName; - clone.attributes = Object.assign( clone.attributes, this.attributes ); - break; - - case Node.TEXT_NODE: - case Node.CDATA_SECTION_NODE: - case Node.PROCESSING_INSTRUCTION_NODE: - case Node.COMMENT_NODE: - clone.nodeValue = this.nodeValue; - break; - - case Node.DOCUMENT_NODE: - case Node.DOCUMENT_FRAGMENT_NODE: - clone[NODE_TYPE] = this.nodeType; - clone.entityEncoder.entities = this.entityEncoder; - break; - - case Node.DOCUMENT_TYPE_NODE: - clone.name = this.name; - clone.publicId = this.publicId; - clone.systemId = this.systemId; - break; - } - - if ( deep === true && this.childNodes && this.childNodes.length > 0 ) - { - for ( let i = 0; i < this.childNodes.length; i++ ) - clone.appendChild( this.childNodes[i].cloneNode( true ) ); - - if ( clone.nodeType === Node.DOCUMENT_NODE || clone.nodeType === Node.DOCUMENT_FRAGMENT_NODE ) - setupDocument( clone ); - } - - return clone; - } - - getElementById( id ) - { - var elem = null; - if ( id && typeof id === "string" && this.childNodes ) - this.forEach( node => - { - if ( node.id === id ) - { - elem = node; - return false; - } - } ); - return elem; - } - - getElementsByClassName( className ) - { - var nodeList = []; - if ( className && typeof className === "string" ) - { - const classList = className.trim().split( spacesRE ); - if ( classList.length > 1 || classList[0] !== "" ) this.forEach( node => - { - for ( let i = 0; i < classList.length; i++ ) - if ( !node.classList.contains( classList[i] ) ) - return; - nodeList.push( node ); - } ); - } - return nodeList; - } - - getElementsByTagName( tagName ) - { - var nodeList = []; - if ( tagName && typeof tagName === "string" ) - { - tagName = tagName.toUpperCase(); - this.forEach( node => - { - if ( tagName === "*" || node.tagName === tagName ) - nodeList.push( node ); - } ); - } - return nodeList; - } - - closest( selector ) - { - if ( selector && typeof selector === "string" ) - return closest( this, selector ); - else return null; - } - - matches( selector ) - { - if ( selector && typeof selector === "string" ) - return matches( this, selector ); - else return false; - } - - querySelector( selector ) - { - if ( selector && typeof selector === "string" ) - return querySelector( this, selector, false ); - else return null; - } - - querySelectorAll( selector ) - { - if ( selector && typeof selector === "string" ) - return querySelector( this, selector, true ); - else return []; - } - - // Non-standard - - forEach( callback, type = nodeTypes.ELEMENT_NODE ) - { - // This unrolled recursive function is about 1.45x faster in Node than its - // equivalent recursive form. - - let childNodes = this.childNodes, - current = this.firstChild, - idxStack = [], - idx = 0, - parent, nextSibling; - - while ( current ) - { - // 'parent' and 'nextSibling' are stored here so that if callback() changes - // the document, we can maintain our place in the overall list of nodes by - // looking for insertions, deletions, or replacements within the 'current' - // node's list of siblings. - parent = current[PARENT_NODE]; - nextSibling = childNodes[idx + 1]; - - if ( (type === null || current.nodeType === type) && - callback( current, parent ) === false ) - return; - - // If the parent of 'current' changes during callback(), we no longer want to - // look at the children of 'current' here as it was either moved or removed. - if ( current[PARENT_NODE] === parent && current.childNodes && current.childNodes.length > 0 ) - { - idxStack.push( idx ); - childNodes = current.childNodes; - current = childNodes[idx = 0]; - } - else - { - if ( nextSibling ) - { - idx += 1; - // If callback() changed the number of nodes that come before the - // previously found 'nextSibling', 'idx' needs to be updated so we - // don't skip over or repeat visits to any nodes. - if ( nextSibling !== childNodes[idx] ) - idx = parent.childNodes.indexOf( nextSibling ); - } - else idx = childNodes.length; - - while ( childNodes[idx] == null ) - { - current = parent; - parent = current[PARENT_NODE]; - if ( current && current !== this ) - { - childNodes = parent.childNodes; - idx = idxStack.pop() + 1; - } - else return; - } - current = childNodes[idx]; - } - } - } -} - -Object.defineProperties( Node, -{ - ELEMENT_NODE: {value: nodeTypes.ELEMENT_NODE}, - //ATTRIBUTE_NODE: {value: nodeTypes.ATTRIBUTE_NODE}, - TEXT_NODE: {value: nodeTypes.TEXT_NODE}, - CDATA_SECTION_NODE: {value: nodeTypes.CDATA_SECTION_NODE}, - //ENTITY_REFERENCE_NODE: {value: nodeTypes.ENTITY_REFERENCE_NODE}, - //ENTITY_NODE: {value: nodeTypes.ENTITY_NODE}, - PROCESSING_INSTRUCTION_NODE: {value: nodeTypes.PROCESSING_INSTRUCTION_NODE}, - COMMENT_NODE: {value: nodeTypes.COMMENT_NODE}, - DOCUMENT_NODE: {value: nodeTypes.DOCUMENT_NODE}, - DOCUMENT_TYPE_NODE: {value: nodeTypes.DOCUMENT_TYPE_NODE}, - DOCUMENT_FRAGMENT_NODE: {value: nodeTypes.DOCUMENT_FRAGMENT_NODE}, - //NOTATION_NODE: {value: nodeTypes.NOTATION_NODE}, -} ); - -const tagNameProp = { - HEAD, - BODY, - FRAMESET: BODY -}; - -function addChildNode( parent, node, index, removalCount = 0 ) -{ - if ( !parent || - (parent.nodeType !== Node.ELEMENT_NODE && - parent.nodeType !== Node.DOCUMENT_NODE && - parent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) || - (parent.nodeType === Node.ELEMENT_NODE && selfClosingTags[parent.tagName] === true) ) - return node; - - if ( node.nodeType <= Node.COMMENT_NODE ) - { - if ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE ) - { - if ( tagNameProp.hasOwnProperty( node.tagName ) ) - { - const prop = tagNameProp[node.tagName]; - if ( parent.parentNode[prop] && removalCount === 0 ) - return node; - parent.parentNode[prop] = node; - } - } - - if ( node.parentNode ) - node.parentNode.removeChild( node ); - setNodeParent( node, parent ); - detachNodes( parent.childNodes.splice( index, removalCount, node ) ); - } - else if ( node.nodeType === Node.DOCUMENT_TYPE_NODE && - (parent.nodeType === Node.DOCUMENT_NODE || parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) ) - { - const owner = node.parentNode; - if ( owner && (owner.nodeType === Node.DOCUMENT_NODE || owner.nodeType === Node.DOCUMENT_FRAGMENT_NODE) ) - { - owner.removeChild( node ); - owner[DOCTYPE] = null; - } - setNodeParent( node, parent ); - detachNodes( parent.childNodes.splice( index, removalCount, node ) ); - parent[DOCTYPE] = node; - } - else if ( node.nodeType === Node.DOCUMENT_FRAGMENT_NODE ) - { - if ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE ) - { - if ( removalCount > 0 ) - detachNodes( parent.childNodes.splice( index, removalCount ) ); - for ( let i = node.childNodes.length - 1; i >= 0; i-- ) - { - const child = node.childNodes[i]; - if ( tagNameProp.hasOwnProperty( child.tagName ) ) - { - const prop = tagNameProp[child.tagName]; - if ( parent.parentNode[prop] && removalCount === 0 ) - continue; - parent.parentNode[prop] = child; - } - setNodeParent( child, parent ); - parent.childNodes.splice( index, 0, child ); - node.childNodes.splice( i, 1 ); - } - } - else if ( node !== getDocument( parent ) ) - { - for ( let i = 0; i < node.childNodes.length; i++ ) - setNodeParent( node.childNodes[i], parent ); - detachNodes( parent.childNodes.splice( index, removalCount, ...node.childNodes ) ); - node.childNodes.length = 0; - } - } - - return node; -} - -function parseHTML( parent, html ) -{ - if ( html && typeof html === "string" ) - { - const owner = getDocument( parent ); - return new Parser( html, owner ? owner[PARSER_OPTIONS] : null, owner ? owner.entityEncoder : null ).parseHTML(); - } -} - -function lowerAttributeCase( node, name ) -{ - const owner = getDocument( node ); - if ( owner && owner[PARSER_OPTIONS].lowerAttributeCase ) - return name.toLowerCase(); - return name; -} - -const toLowerCase = String.prototype.toLowerCase, - toUpperCase = String.prototype.toUpperCase, - - defaultOptions = { - allowCustomRootElement: false, - allowSelfClosingSyntax: false, - allowCDATA: false, - allowProcessingInstructions: false, - decodeEntities: false, - encodeEntities: false, - collapseWhitespace: false, - trimWhitespace: false, - lowerAttributeCase: false - }, - - STATE_START_TAG = 0, - STATE_ATTRIBUTE = 1, - STATE_END_TAG = 2, - - // '12.1.2.3 Attributes' from HTML5 spec. - attributeNameExclusions = { - //"\0": true, // This is caught by the lexer in isWhiteSpace(). - //'"': true, // Disabled to better match browser behaviour. - //"'": true, // Disabled to better match browser behaviour. - ">": true, - "/": true, - "=": true - }, - - pTagBoundary = {P: true}, - definitionTagBoundary = {DT: true, DD: true}, - tableStructureTagBoundary = {TBODY: true, THEAD: true, TFOOT: true}, - tableCellTagBoundary = {TD: true, TH: true}, - formElementTagBoundary = {BUTTON: true, DATALIST: true, OPTGROUP: true, OPTION: true, PROGRESS: true, SELECT: true, TEXTAREA: true}, - - // Largely based on '8.1.2.4 Optional tags' from the HTML5 spec. - // https://www.w3.org/TR/html50/syntax.html#syntax-tag-omission - tagBoundaries = { - ADDRESS: pTagBoundary, - ARTICLE: pTagBoundary, - ASIDE: pTagBoundary, - BLOCKQUOTE: pTagBoundary, - DIV: pTagBoundary, - FIELDSET: pTagBoundary, - FOOTER: pTagBoundary, - H1: pTagBoundary, - H2: pTagBoundary, - H3: pTagBoundary, - H4: pTagBoundary, - H5: pTagBoundary, - H6: pTagBoundary, - HEADER: pTagBoundary, - HGROUP: pTagBoundary, - HR: pTagBoundary, - MAIN: pTagBoundary, - NAV: pTagBoundary, - P: pTagBoundary, - PRE: pTagBoundary, - SECTION: pTagBoundary, - - BODY: {HEAD: true, TITLE: true}, - - // Definitions - DL: pTagBoundary, - DD: definitionTagBoundary, - DT: definitionTagBoundary, - - // Tables - TABLE: pTagBoundary, - TBODY: tableStructureTagBoundary, - THEAD: tableStructureTagBoundary, - TD: tableCellTagBoundary, - TFOOT: tableStructureTagBoundary, - TH: tableCellTagBoundary, - TR: {TR: true}, - - // Lists - LI: {LI: true}, - OL: pTagBoundary, - UL: pTagBoundary, - - // Forms - BUTTON: formElementTagBoundary, - DATALIST: formElementTagBoundary, - FORM: pTagBoundary, - INPUT: formElementTagBoundary, - OPTGROUP: {OPTGROUP: true, OPTION: true}, - OPTION: {OPTION: true}, - OUTPUT: formElementTagBoundary, - PROGRESS: formElementTagBoundary, - SELECT: formElementTagBoundary, - TEXTAREA: formElementTagBoundary, - }; - -class Parser -{ - constructor( html, options, entityEncoder ) - { - this.options = Parser.setupOptions( options ); - this.lexer = new Lexer( html ); - this.entityEncoder = entityEncoder; - } - - static setupOptions( options ) - { - options = Object.assign( {}, defaultOptions, options ); - if ( options.encodeEntities instanceof RegExp ) - options.encodeEntities = globalizeRegExp( options.encodeEntities ); - return Object.freeze( options ); - } - - static isNameCharStart( chr ) - { - return chr === ":" || chr === "_" || (chr >= "A" && chr <= "Z") || (chr >= "a" && chr <= "z") || - (chr >= "\xC0" && chr <= "\xD6") || (chr >= "\xD8" && chr <= "\xF6") || - (chr >= "\xF8" && chr <= "\u02FF") || (chr >= "\u0370" && chr <= "\u037D") || - (chr >= "\u037F" && chr <= "\u1FFF") || chr === "\u200C" || chr === "\u200D" || - (chr >= "\u2070" && chr <= "\u218F") || (chr >= "\u2C00" && chr <= "\u2FEF") || - (chr >= "\u3001" && chr <= "\uD7FF") || (chr >= "\uF900" && chr <= "\uFDCF") || - (chr >= "\uFDF0" && chr <= "\uFFFD") || (chr >= "\u10000" && chr <= "\uEFFFF"); - } - - static isNameChar( chr ) - { - return Parser.isNameCharStart( chr ) || - (chr >= "0" && chr <= "9") || chr === "-" || chr === "." || chr === "\xB7" || - (chr >= "\u0300" && chr <= "\u036F") || chr === "\u203F" || chr === "\u2040"; - } - - parseHTML() - { - var rootNode = createNode( Node.DOCUMENT_FRAGMENT_NODE ), - scopeChain = [rootNode], theChar; - - rootNode[PARSER_OPTIONS] = this.options; - - if ( this.options.trimWhitespace ) - theChar = this.lexer.skipWhiteSpace(); - else theChar = this.lexer.getChar(); - - while ( theChar !== EOF && scopeChain.length > 0 ) - { - if ( theChar === "<" ) - this.parseTag( scopeChain ); - else this.parseText( scopeChain ); - - if ( this.options.trimWhitespace ) - theChar = this.lexer.skipWhiteSpace(); - else theChar = this.lexer.getChar(); - } - - return rootNode; - } - - parseTag( scopeChain ) - { - var node, name, selfClosing, state = STATE_START_TAG, - tagStartIdx = this.lexer.index, - theChar = this.lexer.getNextChar(), - startIdx, endIdx; - - if ( theChar !== EOF ) - Main: - while ( theChar !== ">" && theChar !== EOF ) - { - startIdx = this.lexer.index; - - if ( state === STATE_START_TAG ) - { - if ( theChar === "!" || theChar === "?" ) - { - if ( this.options.allowProcessingInstructions && this.lexer.match( "?" ) ) - { - startIdx = this.lexer.index; - theChar = this.lexer.getChar(); - PINode: - if ( Parser.isNameCharStart( theChar ) ) - { - node = createNode( Node.PROCESSING_INSTRUCTION_NODE ); - - // Find target's name. - while ( theChar !== EOF && Parser.isNameChar( theChar ) ) - theChar = this.lexer.getNextChar(); - - // If we have a non-whitespace character here that isn't EOF or - // the end '?>', then we've come across an invalid name character - // in the target name and this tag should be treated as a comment. - if ( !this.lexer.isWhiteSpace( theChar ) && theChar !== EOF && - !(theChar === "?" && this.lexer.peek() === ">") ) - break PINode; - - node.target = this.lexer.str.slice( startIdx, this.lexer.index ); - - this.lexer.skipWhiteSpace(); - startIdx = this.lexer.index; - this.lexer.goToString( "?>" ); - node.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index ); - this.lexer.advance( 1 ); - scopeChain[0].childNodes.push( node ); - setNodeParent( node, scopeChain[0] ); - break; - } - - // Go back to before the first '?' to include everything between the - // angle brackets in the comment we're going to create from this tag. - this.lexer.advance( startIdx - this.lexer.index - 1 ); - } - - if ( this.options.allowCDATA && this.lexer.match( "![CDATA[" ) ) - { - node = createNode( Node.CDATA_SECTION_NODE ); - startIdx = this.lexer.index; - this.lexer.goToString( "]]>" ); - node.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index ); - this.lexer.advance( 2 ); - scopeChain[0].childNodes.push( node ); - setNodeParent( node, scopeChain[0] ); - break; - } - else if ( this.lexer.match( "!DOCTYPE", false ) ) - { - this.lexer.skipWhiteSpace(); - startIdx = this.lexer.index; - this.lexer.goToString( ">" ); - - let rootNode = scopeChain[scopeChain.length - 1]; - - if ( rootNode.doctype ) - break; - else if ( rootNode.childNodes.length > 0 ) - for ( let i = rootNode.childNodes.length - 1; i >= 0; i-- ) - if ( rootNode.childNodes[i].nodeType < Node.TEXT_NODE || rootNode.childNodes[i].nodeType > Node.COMMENT_NODE ) - break Main; - - let params = this.lexer.str.slice( startIdx, this.lexer.index ).split( spacesRE ); - node = createNode( Node.DOCUMENT_TYPE_NODE ); - node.name = toLowerCase.call( params.shift() ); - - if ( params.length > 1 ) - { - let idType = toLowerCase.call( params.shift() ); - params = params.join( " " ).split( '"' ); - if ( params[0] === "" ) switch ( idType ) - { - case "public": - params.shift(); - node.publicId = params.shift(); - - case "system": - params.shift(); - node.systemId = params.shift(); - } - } - - if ( !node.publicId ) node.publicId = ""; - if ( !node.systemId ) node.systemId = ""; - - rootNode.childNodes.push( node ); - rootNode.doctype = node; - setNodeParent( node, rootNode ); - break; - } - else - { - let endTag; - if ( this.lexer.match( "!--" ) ) - { - if ( !this.lexer.match( ">" ) && !this.lexer.match( "->" ) ) - endTag = "-->"; - } - else - { - if ( theChar === "!" ) // Don't skip question marks that show up here. - this.lexer.getNextChar(); - endTag = ">"; - } - - node = createNode( Node.COMMENT_NODE ); - startIdx = this.lexer.index; - if ( endTag ) this.lexer.goToString( endTag ); - node.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index ); - this.lexer.advance( endTag ? endTag.length - 1 : -1 ); - scopeChain[0].childNodes.push( node ); - setNodeParent( node, scopeChain[0] ); - break; - } - } - else if ( theChar === "/" ) - { - theChar = this.lexer.getNextChar(); - state = STATE_END_TAG; - startIdx += 1; - } - } - - if ( state === STATE_ATTRIBUTE ) - { - // Find an attribute name. - while ( (this.lexer.index === startIdx && theChar === "=") || - (!this.lexer.isWhiteSpace( theChar ) && - !attributeNameExclusions[theChar] && - theChar !== EOF) ) - theChar = this.lexer.getNextChar(); - endIdx = this.lexer.index; - } - else - { - // Find a tag name. - while ( ((theChar >= "a" && theChar <= "z") || (theChar >= "A" && theChar <= "Z") || - (this.lexer.index > startIdx && ((theChar >= "0" && theChar <= "9") || theChar === "-" || theChar === "_" || theChar === ":"))) && - theChar !== EOF ) - theChar = this.lexer.getNextChar(); - endIdx = this.lexer.index; - if ( theChar === EOF ) - { - this.addTextNode( scopeChain, tagStartIdx, endIdx, false ); - return; - } - theChar = this.lexer.skipWhiteSpace(); - - if ( state === STATE_END_TAG ) - theChar = this.lexer.goToString( ">" ); - } - - if ( startIdx === endIdx ) - { - // Found an illegal character while searching for an attribute or tag name. - if ( this.options.allowSelfClosingSyntax && theChar === "/" && this.lexer.peek() === ">" ) - { - // If self-closing tag syntax is allowed, and we've found "/>", then we - // need to close the tag at the top of the scope chain. - theChar = this.lexer.getNextChar(); - state = STATE_END_TAG; - name = scopeChain[0][TAG_NAME]; - } - else if ( state === STATE_START_TAG ) - { - this.lexer.goToString( "<" ); - this.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false ); - tagStartIdx = this.lexer.index; - theChar = this.lexer.getNextChar(); - continue; - } - else if ( state === STATE_END_TAG ) - { - if ( startIdx === this.lexer.index ) break; // This throws "" away. - node = this.addTextNode( scopeChain, startIdx, this.lexer.index ); - node[NODE_TYPE] = Node.COMMENT_NODE; - break; - } - else - { - // All other illegal characters are simply skipped over, along with any - // following whitespace. - this.lexer.getNextChar(); - theChar = this.lexer.skipWhiteSpace(); - continue; - } - } - else - { - name = this.lexer.str.slice( startIdx, endIdx ); - if ( state !== STATE_ATTRIBUTE ) - name = toUpperCase.call( name ); - theChar = this.lexer.skipWhiteSpace(); - } - - switch ( state ) - { - case STATE_START_TAG: - node = createNode( Node.ELEMENT_NODE ); - node[TAG_NAME] = name; - while ( tagBoundaries.hasOwnProperty( node[TAG_NAME] ) && tagBoundaries[node[TAG_NAME]][scopeChain[0][TAG_NAME]] ) - scopeChain.splice( 0, 1 ); - scopeChain[0].childNodes.push( node ); - setNodeParent( node, scopeChain[0] ); - state = STATE_ATTRIBUTE; - selfClosing = selfClosingTags[node[TAG_NAME]]; - if ( selfClosing !== true ) scopeChain.unshift( node ); - break; - - case STATE_ATTRIBUTE: - let value = true; - - if ( this.options.lowerAttributeCase ) - name = toLowerCase.call( name ); - - if ( theChar === "=" ) - { - this.lexer.getNextChar(); - theChar = this.lexer.skipWhiteSpace(); - startIdx = this.lexer.index; - - if ( theChar === '"' || theChar === "'" ) - { - this.lexer.getNextChar(); - this.lexer.goToString( theChar ); - endIdx = this.lexer.index; - startIdx += 1; - this.lexer.getNextChar(); - theChar = this.lexer.skipWhiteSpace(); - } - else // Unquoted attribute value - { - while ( !this.lexer.isWhiteSpace( theChar ) && - //!unquotedAttributeExclusions[theChar] && - theChar !== ">" && - (!this.options.allowSelfClosingSyntax || !(theChar === "/" && this.lexer.peek() === ">")) && - theChar !== EOF ) - theChar = this.lexer.getNextChar(); - endIdx = this.lexer.index; - theChar = this.lexer.skipWhiteSpace(); - } - - if ( node.attributes.hasOwnProperty( name ) ) break; - value = this.lexer.str.slice( startIdx, endIdx ); - - if ( value === "" ) - value = true; - else if ( this.options.decodeEntities ) - value = this.entityEncoder.decode( value ); - } - else if ( node.attributes.hasOwnProperty( name ) ) break; - - node.attributes[name] = value; - break; - - case STATE_END_TAG: - for ( let i = 0; i < scopeChain.length; i++ ) - if ( scopeChain[i][TAG_NAME] === name ) - { - node = scopeChain[i]; - while ( scopeChain.length > 0 && scopeChain[0] !== node ) - scopeChain.shift(); - scopeChain.shift(); - break; - } - break; - } - } - else this.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false ); - - this.lexer.getNextChar(); - } - - parseText( scopeChain ) - { - var startIdx = this.lexer.index, - preserveContent = false; - - if ( scopeChain[0][TAG_NAME] === "SCRIPT" || scopeChain[0][TAG_NAME] === "STYLE" ) - { - this.lexer.goToString( "<\/"+ scopeChain[0][TAG_NAME], false ); - preserveContent = true; - } - else this.lexer.goToString( "<" ); - - this.addTextNode( scopeChain, startIdx, this.lexer.index, preserveContent ); - } - - addTextNode( scopeChain, startIdx, endIdx, preserveContent ) - { - var node = createNode( Node.TEXT_NODE ), - value = this.lexer.str.slice( startIdx, endIdx ); - - if ( preserveContent != null ) - { - if ( this.options.trimWhitespace ) - value = value.trim(); - else if ( this.options.collapseWhitespace && !preserveContent ) - value = value.replace( spacesRE, " " ); - - if ( this.options.decodeEntities && !preserveContent ) - value = this.entityEncoder.decode( value ); - } - - node.nodeValue = value; - scopeChain[0].childNodes.push( node ); - setNodeParent( node, scopeChain[0] ); - - return node; - } -} - -class ImageData { - constructor(widthOrData, heightOrWidth, settingsOrHeight, settings) { - var _a, _b; - const rgbaArray = (widthOrData instanceof Uint8ClampedArray) ? widthOrData : null; - let colorSpace = "srgb"; - if (rgbaArray) { - console.log(`[ImageData] Warning: Array initializer support is experimental! ( new ImageData([${rgbaArray.length}b ${(_b = (_a = rgbaArray === null || rgbaArray === void 0 ? void 0 : rgbaArray.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : "Array"}], ${Array.from(arguments).slice(1).join(',')}) )`); - this.width = heightOrWidth; - this.height = typeof settingsOrHeight === "number" ? settingsOrHeight : undefined; - colorSpace = (typeof settingsOrHeight === "object" ? settingsOrHeight : (typeof settings === "object" ? settings : { colorSpace: "srgb" })).colorSpace; - } - else { - this.width = widthOrData; - this.height = heightOrWidth; - colorSpace = (typeof settingsOrHeight === "object" ? settingsOrHeight : { colorSpace: "srgb" }).colorSpace; - } - if (colorSpace !== "srgb") { - console.log(`[ImageData] Warning: Only the 'srgb' color space is supported! ( new ImageData(${Array.from(arguments).join(',')}) )`); - throw new Error(`Unsupported colorSpace: ${colorSpace}`); - } - // We need to calculate the height based on the array data and width - if (this.height === undefined) { - this.height = rgbaArray.length / this.width / 4; - } - if (rgbaArray) { - if (this.width * this.height * 4 !== rgbaArray.length) { - // TODO: this should be a "DOMException" - throw new Error(`The array dimensions do not match the supplied width or height`); - } - this.data = new Uint8ClampedArray(rgbaArray); - } - else { - this.data = new Uint8ClampedArray(this.width * this.height * 4); - } - } -} -// Export onto the global scope -if (globalThis && typeof globalThis.ImageData !== "object") { - // @ts-ignore - globalThis.ImageData = ImageData; -} - -// https://html.spec.whatwg.org/multipage/canvas.html#canvasrenderingcontext2d -const FILL_STYLE = Symbol("fill-style"); -class CanvasRenderingContext2D { - get fillStyle() { - return this[FILL_STYLE]; - } - set fillStyle(newStyle) { - console.log(`${this}→fillStyle = ${newStyle}`); - this[FILL_STYLE] = newStyle; - } - // CanvasRect - clearRect(x, y, w, h) { - throw new Error("Not implemented"); - } - fillRect(x, y, w, h) { - const { r, g, b, a } = this.fillStyleRGBA; - const alpha = a * 255 | 0; - const data = this.canvas[CANVAS_DATA]; - // Optimization: full-canvas fill - if (x === 0 && y === 0 && data.length === w * h * 4) { - for (let i = 0; i < data.length; i += 4) { - if (i < 100) - console.log(`→ fill #${i} rgba(${data[i]},${data[i + 1]},${data[i + 2]} @ ${data[i + 3]}) => rgba(${r},${g},${b} @ ${alpha})`); - data[i + 0] = r; - data[i + 1] = g; - data[i + 2] = b; - data[i + 3] = alpha; - } - console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) whole canvas with ${r},${g},${b} @ ${alpha}`); - console.log(data); - return; - } - for (let row = y; row < y + h; ++row) { - const startIdx = row * 4 + x; - const endIdx = row * 4 + x + w; - for (let i = startIdx; i < endIdx; ++i) { - data[i + 0] = r; - data[i + 1] = g; - data[i + 2] = b; - data[i + 3] = alpha; - } - } - console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) with ${r},${g},${b} @ ${alpha}`); - } - strokeRect(x, y, w, h) { - throw new Error("Not implemented"); - } - constructor(parentCanvas) { - this.canvas = parentCanvas; - // defaults - this.fillStyle = "#000"; - } - drawImage(image, x1, y1, w1, h1, x2, y2, w2, h2) { - if (image instanceof globalThis.HTMLCanvasElement) { - w1 = w1 !== null && w1 !== void 0 ? w1 : image.width; - h1 = h1 !== null && h1 !== void 0 ? h1 : image.height; - if (w1 !== w2 || h1 !== h2) { - console.log(`${this} Not implemented: image scaling in drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`); - return; - } - const srcImage = image.getContext("2d").getImageData(x1, y1, w1, h1); - const srcPixels = srcImage.data; - const dstPixels = this.canvas[CANVAS_DATA]; - const rows = h1; - const cols = w1; - for (let row = 0; row < rows; ++row) { - for (let col = 0; col < cols; ++col) { - // source pixel - const si = ((y1 + row) * srcImage.width + x1 + col) * 4; - const sr = srcPixels[si]; - const sg = srcPixels[si + 1]; - const sb = srcPixels[si + 2]; - const sa = srcPixels[si + 3]; - // destination pixel - const di = ((y2 + row) * srcImage.width + x2 + col) * 4; - const dr = dstPixels[di]; - const dg = dstPixels[di + 1]; - const db = dstPixels[di + 2]; - const da = dstPixels[di + 3]; - // blend pixels using premultiplied alpha and the default 'source-over' composition - // https://drafts.fxtf.org/compositing/#porterduffcompositingoperators_srcover - const dstcontrib = (1 - sa / 255); - dstPixels[di + 0] = sr * (sa / 255) + dr * (da / 255) * dstcontrib | 0; - dstPixels[di + 1] = sg * (sa / 255) + dg * (da / 255) * dstcontrib | 0; - dstPixels[di + 2] = sb * (sa / 255) + db * (da / 255) * dstcontrib | 0; - dstPixels[di + 3] = sa + da * dstcontrib | 0; - if (row === col) { - console.log(`→ [${row},${col}]: imgdata#${si} rgba(${sr},${sg},${sb} @ ${sa}) + canvas#${di} rgba(${dr},${dg},${db} @ ${da}) => rgba(${dstPixels[di]},${dstPixels[di + 1]},${dstPixels[di + 2]} @ ${dstPixels[di + 3]})`); - } - } - } - console.log(`${this}→drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`); - return; - } - //let dx,dy,dw,dh; - //let sx,sy,sw,sh; - console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`); - } - createImageData(widthOrImagedata, height, settings) { - if (widthOrImagedata instanceof ImageData) { - return new ImageData(widthOrImagedata.data, widthOrImagedata.width, widthOrImagedata.height); - } - return new ImageData(widthOrImagedata, height, settings); - } - getImageData(sx, sy, sw, sh, settings) { - if (sx === 0 && sy === 0 && sw === this.canvas.width && sh === this.canvas.height && !settings) { - console.log(`${this}→getImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`); - return new ImageData(this.canvas[CANVAS_DATA], this.canvas.width, this.canvas.height); - } - console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(', ')} )`); - const id = new ImageData(sw, sh, settings); - return id; - } - putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) { - let premultWarnLow, premultWarnZero; - const canvas = this.canvas[CANVAS_DATA]; - if (dirtyX === undefined) { - if (dx === 0 && dy === 0 && imagedata.width === this.canvas.width && imagedata.height === this.canvas.height) { - console.log(`${this}→putImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`); - for (let col = 0; col < imagedata.height; ++col) { - for (let row = 0; row < imagedata.width; ++row) { - const idx = (col * imagedata.width + row) * 4; - const alpha = imagedata.data[idx + 3], r = imagedata.data[idx + 0], g = imagedata.data[idx + 1], b = imagedata.data[idx + 2]; - // Transparent pixels that are not fully black/white have browser inconsistencies - // Context for these warnings: - // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData#data_loss_due_to_browser_optimization - if (alpha === 0 && (r | g | b) !== 0 && (r & g & b) !== 255) { - premultWarnZero = true; - } - else if (alpha < 255 && (r | g | b) !== 0 && (r & g & b) !== 255) { - premultWarnLow = true; - } - canvas[idx + 0] = r; - canvas[idx + 1] = g; - canvas[idx + 2] = b; - canvas[idx + 3] = alpha; //a - } - } - if (premultWarnLow) { - console.log(`${this} Compat warning: image contained colored non-opaque pixels (alpha<255), the result be inconsistent with observed browser behavior.`); - } - if (premultWarnZero) { - console.log(`${this} Compat warning: image contained fully transparent colored pixels (alpha=0), the result of this operation may differ from browser behavior.`); - } - return; - } - console.log(`${this} Not implemented: non-whole-canvas putImageData( ${Array.from(arguments).join(', ')} )`); - return; - } - console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(', ')} )`); - } - setTransform(matrixOrA, b, c, d, e, f) { - console.log(`${this} Not implemented: context2d.setTransform( ${Array.from(arguments).join(', ')} )`); - } - // Stringifies the context object with its canvas & unique ID to ease debugging - get [Symbol.toStringTag]() { - return `${this.canvas[Symbol.toStringTag]}::context2d`; - } - // https://developer.mozilla.org/en-US/docs/Web/CSS/color_value - get fillStyleRGBA() { - let c; - let r = 0, g = 0, b = 0, a = 1; - // Named color ('white', 'black', etc) - if (CSS_NAMED_COLORS.has(this.fillStyle)) { - c = HTMLColorToRGBA(CSS_NAMED_COLORS.get(this.fillStyle)); - if (c) - return c; - } - // HTML color (#aaa, #bbccdd, #rrggbbaa) - c = HTMLColorToRGBA(this.fillStyle); - if (c) - return c; - // rgb() color definition - c = HTMLColorToRGBA(this.fillStyle); - if (c) - return c; - return { r, g, b, a }; - } -} -// TODO: these are only the basic colors -const CSS_NAMED_COLORS = new Map([ - ["black", "#000000"], - ["silver", "#c0c0c0"], - ["gray", "#808080"], - ["white", "#ffffff"], - ["maroon", "#800000"], - ["red", "#ff0000"], - ["purple", "#800080"], - ["fuchsia", "#ff00ff"], - ["green", "#008000"], - ["lime", "#00ff00"], - ["olive", "#808000"], - ["yellow", "#ffff00"], - ["navy", "#000080"], - ["blue", "#0000ff"], - ["teal", "#008080"], - ["aqua", "#00ffff"], -]); -function HTMLColorToRGBA(color) { - var _a, _b; - let r = 0, g = 0, b = 0, a = 0; - let matched, wasMatched; - // Match longform - matched = (_a = color.match(/^#(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/)) === null || _a === void 0 ? void 0 : _a.groups; - if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) { - r = parseInt(matched.r, 16); - g = parseInt(matched.g, 16); - b = parseInt(matched.b, 16); - a = matched.a ? parseInt(matched.a, 10) : 1.0; - wasMatched = true; - } - // Match short form - matched = (_b = color.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/)) === null || _b === void 0 ? void 0 : _b.groups; - if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) { - r = parseInt(matched.r, 16); - g = parseInt(matched.g, 16); - b = parseInt(matched.b, 16); - a = matched.a ? parseInt(matched.a, 10) : 1.0; - wasMatched = true; - } - if (!wasMatched) { - console.log(`Not a HTML color string: ${color}`); - return null; - } - return { r, g, b, a }; -} - -// https://html.spec.whatwg.org/multipage/canvas.html#the-canvas-element -// Implementation -const WIDTH = Symbol("canvas-width"); -const HEIGHT = Symbol("canvas-height"); -const CONTEXT = Symbol("canvas-context"); -const EID = Symbol("element-id"); -// Access canvas data (for the Context or testing/debugging) -const CANVAS_DATA = Symbol("accesscanvas-data"); -class HTMLCanvasElement extends Node { - get width() { - console.debug(`${this}→width? (${this[WIDTH]})`); - return this[WIDTH]; - } - get height() { - console.debug(`${this}→height? (${this[HEIGHT]})`); - return this[HEIGHT]; - } - set width(width) { - console.debug(`${this}→width = ${width}`); - this[WIDTH] = width; - this.resize(this[WIDTH], this[HEIGHT]); - } - set height(height) { - console.debug(`${this}→height = ${height}`); - this[HEIGHT] = height; - this.resize(this[WIDTH], this[HEIGHT]); - } - //getContext(contextId: "bitmaprenderer", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null; - //getContext(contextId: string, options?: any): RenderingContext | null; - getContext(contextId, _options) { - if (contextId != "2d") - throw new Error(`Not implemented: ${contextId}`); - this[CONTEXT] = this[CONTEXT] || new CanvasRenderingContext2D(this); - if (!(this[CONTEXT] instanceof CanvasRenderingContext2D)) - throw new Error(`Context invalid`); - return this[CONTEXT]; - } - toDataURL(_type = "image/png", _quality) { - throw new Error("Not implemented"); - } - toBlob(_callback, _type = "image/png", _quality) { - throw new Error("Not implemented"); - } - get clientWidth() { - return this.width; - } - get clientHeight() { - return this.height; - } - constructor() { - super(EXTEND_NODE); - // Assign a new pseudo-random element ID - this[EID] = (Math.random() * (Math.pow(36, 6)) | 0).toString(36); - // The default size of a new canvas in most implementations - this.resize(300, 150); - } - // Stringifies the object including its unique element tag - get [Symbol.toStringTag]() { - return `HTMLCanvasElement#${this[EID]}`; - } - resize(width, height) { - this[WIDTH] = width; - this[HEIGHT] = height; - this[CANVAS_DATA] = new Uint8ClampedArray(this[WIDTH] * this[HEIGHT] * 4); - console.debug(`${this}→reset, new size: ${this[WIDTH]}x${this[HEIGHT]} (${this[CANVAS_DATA].length}b)`); - } -} -// Export onto the global scope -if (globalThis && typeof globalThis.HTMLCanvasElement !== "object") { - // @ts-ignore - globalThis.HTMLCanvasElement = HTMLCanvasElement; -} - -function createCanvasNode( nodeType ) -{ - const node = new HTMLCanvasElement(); - - node[NODE_TYPE] = nodeType; - node.nodeValue = null; - node[PARENT_NODE] = null; - node[OWNER] = null; - - switch ( nodeType ) - { - case Node.ELEMENT_NODE: - node[TAG_NAME] = null; - node.attributes = {}; - // fallthrough - - case Node.DOCUMENT_NODE: - case Node.DOCUMENT_FRAGMENT_NODE: - node.childNodes = []; - } - - return node; -} - -const decodingRE = /&(#\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g, - - // From 'SyntaxCharacter' in section 21.2.1 (Patterns) of the ECMAScript 6.0 spec. - regExpEscapeRE = /[\^$\\.*+?()[\]{}|]/g, - - _defaultEntities = processEntities( { - "amp": "&", - "apos": "'", - "copy": 169, - "gt": ">", - "lt": "<", - "nbsp": 160, - "quot": '"' - } ); - -let defaultEntities = _defaultEntities; - -class EntityEncoder -{ - constructor( entities ) - { - this.entities = entities || "default"; - } - - encode( string, what ) - { - if ( !this.encodingReplacements ) return string; - return string.replace( what instanceof RegExp ? globalizeRegExp( what ) : this.encodingRE, chr => this.encodingReplacements[chr] || chr ); - } - - decode( string ) - { - if ( !this.decodingReplacements ) return string; - return string.replace( decodingRE, ( _, m ) => - { - if ( m[0] === "#" ) - { - if ( m[1] === "x" || m[1] === "X" ) - m = parseInt( m.slice( 2 ), 16 ) | 0; - else m = m.slice( 1 ) | 0; - return String.fromCodePoint( m ); - } - return this.decodingReplacements[m] || this.decodingReplacements[m.toLowerCase()] || _; - } ); - } - - set entities( entities ) - { - if ( entities === "default" ) - entities = defaultEntities; - else if ( !entities || !(entities.encodingRE instanceof RegExp) ) - entities = processEntities( entities ); - - this.encodingRE = entities.encodingRE; - this.encodingReplacements = entities.encodingReplacements; - this.decodingReplacements = entities.decodingReplacements; - } - - static set defaultEntities( entities ) - { - if ( entities && typeof entities === "object" ) - defaultEntities = processEntities( Object.assign( {}, entities ) ); - else defaultEntities = _defaultEntities; - } -} - -function processEntities( entities ) -{ - var result = { - encodingRE: null, - encodingReplacements: null, - decodingReplacements: null - }; - - if ( entities && typeof entities === "object" ) - { - const escapes = {}, - unescapes = {}, - entityList = []; - - for ( let k in entities ) - if ( entities.hasOwnProperty( k ) ) - { - let entity = entities[k]; - - if ( Number.isFinite( entity ) ) - entity = String.fromCodePoint( entity ); - else if ( typeof entity !== "string" || entity === "" ) - continue; - - entityList.push( entity.replace( regExpEscapeRE, "\\$&" ) ); - if ( !escapes.hasOwnProperty( entity ) || (k.length + 2) < escapes[entity].length ) - escapes[entity] = "&"+ k +";"; - unescapes[k] = entity; - } - - if ( entityList.length > 0 ) - { - result.encodingRE = new RegExp( entityList.join( "|" ), "g" ); - result.encodingReplacements = escapes; - result.decodingReplacements = unescapes; - } - } - - if ( !result.encodingRE ) - result.encodingRE = new RegExp( "(?:)", "g" ); - - return result; -} - -/* @END_UNIT_TESTS */ - -const ENTITY_ENCODER = Symbol( "entityEncoder" ); - -class DOM extends Node -{ - constructor( html, options ) - { - const node = createNode( Node.DOCUMENT_FRAGMENT_NODE, DOM ); - node[PARSER_OPTIONS] = Parser.setupOptions( options ); - node[ENTITY_ENCODER] = new EntityEncoder( node[PARSER_OPTIONS].entities ); - node.innerHTML = html; - return node; - } - - get documentElement() {return this[DOCUMENT_ELEMENT] || null} - - get innerHTML() - { - let html = ""; - for ( let i = 0; i < this.childNodes.length; i++ ) - html += serializeNode( this.childNodes[i] ); - return html; - } - set innerHTML( html ) - { - this[NODE_TYPE] = Node.DOCUMENT_FRAGMENT_NODE; - if ( html && typeof html === "string" ) - { - const rootNode = new Parser( html, this[PARSER_OPTIONS], this[ENTITY_ENCODER] ).parseHTML(); - - detachNodes( this.childNodes ); - - if ( rootNode.doctype ) - this[DOCTYPE] = rootNode.doctype; - else this[DOCTYPE] = null; - - this.childNodes = rootNode.childNodes; - for ( let i = 0; i < this.childNodes.length; i++ ) - setNodeParent( this.childNodes[i], this ); - - setupDocument( this ); - } - else this.childNodes.length = 0; - } - - get outerHTML() {return null} - set outerHTML( v ) {} - - get doctype() - { - return this[DOCTYPE] || null; - } - set doctype( val ) - { - if ( val ) - { - let doctype = this[DOCTYPE]; - if ( val instanceof Node ) - { - if ( val.nodeType === Node.DOCUMENT_TYPE_NODE && val !== doctype ) - { - this[DOCTYPE] = val; - if ( doctype ) this.replaceChild( val, doctype ); - else this.insertBefore( val, this.firstChild ); - } - } - else if ( typeof val === "object" ) - { - if ( !doctype ) - this[DOCTYPE] = this.insertBefore( this.createDocumentType( val.name, val.publicId, val.systemId ), this.firstChild ); - else setupDocumentType( doctype, val.name, val.publicId, val.systemId ); - } - } - else if ( val === null && this[DOCTYPE] ) - { - this.removeChild( this[DOCTYPE] ); - this[DOCTYPE] = null; - } - } - - get head() - { - return this[HEAD] || null; - } - - get title() - { - const head = this.head; - if ( head ) - { - const title = head.getElementsByTagName( "title" ); - if ( title.length > 0 ) - return title[0].textContent; - } - return ""; - } - set title( val ) - { - const head = this.head; - if ( head ) - { - let title = head.getElementsByTagName( "title" ); - if ( title.length <= 0 ) - title = head.appendChild( this.createElement( "title" ) ); - else title = title[0]; - title.textContent = val; - } - } - - get body() - { - return this[BODY] || null; - } - set body( val ) - { - if ( val instanceof Node && val.nodeType === Node.ELEMENT_NODE && - (val.tagName === "BODY" || val.tagName === "FRAMESET") && - val !== this[BODY] && this[DOCUMENT_ELEMENT] ) - { - if ( this[BODY] ) this[BODY].parentNode.replaceChild( val, this[BODY] ); - else this[DOCUMENT_ELEMENT].appendChild( val ); - } - } - - get entityEncoder() - { - return this[ENTITY_ENCODER]; - } - - createElement( tagName ) - { - if ( tagName && typeof tagName === "string" ) - { - const node = createNodeForTagName( tagName ); - node[TAG_NAME] = tagName.toUpperCase(); - return node; - } - } - - createTextNode( text ) - { - return createTextBasedNode( Node.TEXT_NODE, text ); - } - - createComment( data ) - { - return createTextBasedNode( Node.COMMENT_NODE, data ); - } - - createCDATASection( data ) - { - return createTextBasedNode( Node.CDATA_SECTION_NODE, data, "]]>" ); - } - - createProcessingInstruction( target, data ) - { - NewNode: - if ( target && typeof target === "string" ) - { - if ( Parser.isNameCharStart( target[0] ) ) - for ( let i = 1; i < target.length; i++ ) - { - if ( !Parser.isNameChar( target[i] ) ) - break NewNode; - } - else break NewNode; - - const node = createTextBasedNode( Node.PROCESSING_INSTRUCTION_NODE, data, "?>" ); - node.target = target; - return node; - } - throw new Error( "Invalid target name "+ JSON.stringify( target ) +"." ); - } - - createDocumentType( name, publicId, systemId ) - { - return setupDocumentType( createNode( Node.DOCUMENT_TYPE_NODE ), name, publicId, systemId ); - } - - getElementsByName( name ) - { - const nodeList = []; - if ( name && typeof name === "string" ) - this.forEach( node => - { - if ( node.attributes && node.attributes.name === name ) - nodeList.push( node ); - } ); - return nodeList; - } -} - -function createTextBasedNode( type, text, disallowed = false ) -{ - const node = createNode( type ); - node.nodeValue = ""; - if ( text && typeof text === "string" ) - { - if ( disallowed && typeof disallowed === "string" && text.indexOf( disallowed ) !== -1 ) - throw new Error( "The data provided ('"+ text +"') contains '"+ disallowed +"'." ); - node.nodeValue += text; - } - return node; -} - -function setupDocumentType( doctype, name, publicId, systemId ) -{ - if ( name && typeof name === "string" ) - { - doctype.name = name.toLowerCase(); - - if ( publicId && typeof publicId === "string" ) - doctype.publicId = publicId; - else doctype.publicId = ""; - - if ( systemId && typeof systemId === "string" ) - doctype.systemId = systemId; - else doctype.systemId = ""; - } - else doctype.name = doctype.publicId = doctype.systemId = ""; - - return doctype; -} - -function createNodeForTagName( tagName ) -{ - switch ( tagName.toLowerCase() ) - { - case 'canvas': - return createCanvasNode( Node.ELEMENT_NODE ); - default: - return createNode( Node.ELEMENT_NODE ); - } -} - -/* @START_UNIT_TESTS */ -DOM.parseSelector = parseSelector; -/* @END_UNIT_TESTS */ - -DOM.Node = Node; -DOM.EntityEncoder = EntityEncoder; - -module.exports = DOM; -//# sourceMappingURL=fauxdom-with-canvas.tests.cjs.map diff --git a/lib/fauxdom-with-canvas.tests.cjs.map b/lib/fauxdom-with-canvas.tests.cjs.map deleted file mode 100644 index 3fc2c71..0000000 --- a/lib/fauxdom-with-canvas.tests.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"fauxdom-with-canvas.tests.cjs","sources":["../src/lexer.js","../src/event-target.js","../src/utils.js","../src/token-list.js","../src/css-style-declaration.js","../src/selector-parser.js","../src/selectors.js","../src/serializer.js","../src/node.js","../src/html-parser.js","../src/js-canvas/ImageData.js","../src/js-canvas/RenderingContext.js","../src/js-canvas/HTMLCanvasElement.js","../src/canvas-node.js","../src/entity-encoder.js","../src/document.js"],"sourcesContent":["const reCache = {},\n\twhitespaces = {},\n\tisWhiteSpace = Object.prototype.hasOwnProperty.bind( whitespaces ),\n\tEOF = null;\n\nexport {whitespaces, EOF};\n\nexport class Lexer\n{\n\tconstructor( str )\n\t{\n\t\tthis.index = 0;\n\t\tthis.str = str;\n\t\tthis.scanChar = this.str[this.index];\n\t\t\n\t\tif ( !isWhiteSpace( \"\\x20\" ) )\n\t\t{\n\t\t\t// Unicode C0 & C1 control characters are treated as whitespace, along with the ASCII space character.\n\t\t\tfor ( let i = 0; i <= 0x20; i++ )\n\t\t\t\twhitespaces[String.fromCharCode( i )] = null;\n\t\t\tfor ( let i = 0x80; i <= 0x9f; i++ )\n\t\t\t\twhitespaces[String.fromCharCode( i )] = null;\n\t\t}\n\t}\n\t\n\tisWhiteSpace( theChar )\n\t{\n\t\treturn (theChar !== EOF && isWhiteSpace( theChar ));\n\t}\n\t\n\tgoToString( toChar, caseSensitive )\n\t{\n\t\tif ( caseSensitive !== false )\n\t\t\tthis.index = this.str.indexOf( toChar, this.index );\n\t\telse\n\t\t{\n\t\t\tif ( !reCache[toChar] )\n\t\t\t\treCache[toChar] = new RegExp( toChar, \"ig\" );\n\t\t\t\n\t\t\treCache[toChar].lastIndex = this.index;\n\t\t\t\n\t\t\tconst match = reCache[toChar].exec( this.str );\n\t\t\tif ( match ) this.index = match.index;\n\t\t\telse this.index = -1;\n\t\t}\n\t\t\n\t\tif ( this.index > -1 )\n\t\t\tthis.scanChar = this.str[this.index];\n\t\telse\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\tthis.scanChar = EOF;\n\t\t}\n\t}\n\t\n\tgoToIndex( index )\n\t{\n\t\tthis.scanChar = this.str[this.index = index];\n\t}\n\t\n\tadvance( amount )\n\t{\n\t\tthis.index += amount;\n\t\tif ( this.index > this.str.length )\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\treturn (this.scanChar = EOF);\n\t\t}\n\t\treturn (this.scanChar = this.str[this.index]);\n\t}\n\t\n\tmatch( str, caseSensitive )\n\t{\n\t\tvar chunk = this.str.substr( this.index, str.length );\n\t\tif ( caseSensitive === false )\n\t\t{\n\t\t\tstr = str.toLowerCase();\n\t\t\tchunk = chunk.toLowerCase();\n\t\t}\n\t\tif ( chunk === str )\n\t\t{\n\t\t\tthis.index += str.length-1;\n\t\t\tthis.getNextChar();\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tpeek()\n\t{\n\t\treturn this.str[this.index + 1];\n\t}\n\t\n\tgetChar()\n\t{\n\t\treturn this.scanChar;\n\t}\n\t\n\tgetNextChar()\n\t{\n\t\tif ( this.index + 1 < this.str.length )\n\t\t\treturn (this.scanChar = this.str[++this.index]);\n\t\telse\n\t\t{\n\t\t\tthis.index = this.str.length;\n\t\t\treturn (this.scanChar = EOF);\n\t\t}\n\t}\n\t\n\tgetNextAfterWhiteSpace()\n\t{\n\t\tvar theChar;\n\t\tdo theChar = this.getNextChar();\n\t\twhile ( theChar !== EOF && isWhiteSpace( theChar ) )\n\t\treturn theChar;\n\t}\n\t\n\tskipWhiteSpace()\n\t{\n\t\tvar theChar = this.scanChar;\n\t\t\n\t\twhile ( theChar !== EOF && isWhiteSpace( theChar ) )\n\t\t\ttheChar = this.getNextChar();\n\t\t\n\t\treturn this.scanChar;\n\t}\n}","// Implementation of the HTML EventTarget API\n// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget\nconst EVENT_LISTENERS = Symbol(\"event-listeners\");\n\nexport default class EventTarget {\n\taddEventListener( eventType, callback, useCaptureOrOptions )\n\t{\n\t\t// Lazily create the event listener map on the node\n\t\tthis[EVENT_LISTENERS] = this[EVENT_LISTENERS] ?? new Map();\n\n\t\t// Registered listeners for this eventType\n\t\tlet listeners = this[EVENT_LISTENERS].get(eventType);\n\t\tif (!listeners) {\n\t\t\tlisteners = [];\n\t\t\tthis[EVENT_LISTENERS].set(eventType, listeners);\n\t\t}\n\n\t\t// Capturing and non-capturing listeners need to be removed separately\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#sect1\n\t\t// TODO: handle other options? (once, passive, signal)\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#options\n\t\tlisteners.push({\n\t\t\tcallback,\n\t\t\tcapturing: useCaptureOrOptions === true || !!useCaptureOrOptions?.capture,\n\t\t\toptions: typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions : { capture: !!useCaptureOrOptions }\n\t\t});\n\t}\n\n\tremoveEventListener( eventType, callback, useCaptureOrOptions )\n\t{\n\t\t// There aren't any listeners registered\n\t\tif (!this[EVENT_LISTENERS]) return;\n\n\t\t// Registered listeners for this eventType\n\t\tlet listeners = this[EVENT_LISTENERS].get(eventType);\n\t\tif (!listeners) return;\n\n\t\t// Extract the boolean capture value from the different possible argument formats\n\t\tconst captureSetting = !!(typeof useCaptureOrOptions === 'object' ? useCaptureOrOptions.capture : useCaptureOrOptions);\n\n\t\t// Find the indexes of listeners we want to remove, then remove them from the listeners array\n\t\t// A listener must match the callback object (function) and capture setting (true/false)\n\t\t// We remove the elements in reverse index order to avoid the indexes changing\n\t\tlisteners.map((listener, i) => {\n\t\t\treturn listener.callback === callback && listener.capturing === captureSetting ? i : undefined\n\t\t})\n\t\t\t.reverse()\n\t\t\t.forEach(i => {\n\t\t\t\tif (i !== undefined) listeners.splice(i, 1)\n\t\t\t});\n\t}\n\n\tdispatchEvent( event )\n\t{\n\t\tlet notCancelled = true;\n\n\t\t// There aren't any listeners registered\n\t\tif (!this[EVENT_LISTENERS]) return notCancelled;\n\n\t\t// List active listeners\n\t\tconst listeners = this[EVENT_LISTENERS].get(event.type) ?? [];\n\n\t\t// Dispatch the event for every listener\n\t\t// TODO: handle 'once', 'passive' options, bubbling & capture\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Event/eventPhase\n\t\tlisteners?.forEach(({ callback }) => {\n\t\t\tcallback(event);\n\n\t\t\t// The event has been canceled through preventDefault()\n\t\t\tif (event.defaultPrevented) notCancelled = false;\n\t\t});\n\n\t\treturn notCancelled;\n\t}\n\n}\n","const DOCTYPE = Symbol( \"doctype\" ),\n\tHEAD = Symbol( \"head\" ),\n\tBODY = Symbol( \"body\" ),\n\tDOCUMENT_ELEMENT = Symbol( \"documentElement\" ),\n\tNODE_TYPE = Symbol( \"nodeType\" ),\n\tPARENT_NODE = Symbol( \"parentNode\" ),\n\tOWNER = Symbol( \"ownerDocument\" ),\n\tTAG_NAME = Symbol( \"tagName\" ),\n\tPARSER_OPTIONS = Symbol( \"parserOptions\" ),\n\t\n\tspacesRE = /\\s+/g,\n/* @START_BROWSER_ONLY */\n\treFlagsRE = /[gimsuy]*$/,\n/* @END_BROWSER_ONLY */\n\t\n\tnodeTypes = {\n\t\tELEMENT_NODE: 1,\n\t\t//ATTRIBUTE_NODE: 2, // Unused\n\t\tTEXT_NODE: 3,\n\t\tCDATA_SECTION_NODE: 4,\n\t\t//ENTITY_REFERENCE_NODE: 5, // Unused, historical\n\t\t//ENTITY_NODE: 6, // Unused, historical\n\t\tPROCESSING_INSTRUCTION_NODE: 7,\n\t\tCOMMENT_NODE: 8,\n\t\tDOCUMENT_NODE: 9,\n\t\tDOCUMENT_TYPE_NODE: 10,\n\t\tDOCUMENT_FRAGMENT_NODE: 11,\n\t\t//NOTATION_NODE: 12 // Unused, historical\n\t},\n\t\n\tselfClosingTags = {\n\t\t\"AREA\": true,\n\t\t\"BASE\": true,\n\t\t\"BR\": true,\n\t\t\"COL\": true,\n\t\t\"COMMAND\": true,\n\t\t\"EMBED\": true,\n\t\t\"HR\": true,\n\t\t\"IMG\": true,\n\t\t\"INPUT\": true,\n\t\t\"KEYGEN\": true,\n\t\t\"LINK\": true,\n\t\t\"META\": true,\n\t\t\"PARAM\": true,\n\t\t\"SOURCE\": true,\n\t\t\"TRACK\": true,\n\t\t\"WBR\": true\n\t};\n\nexport {DOCTYPE, HEAD, BODY, DOCUMENT_ELEMENT, NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME, PARSER_OPTIONS, spacesRE, nodeTypes, selfClosingTags};\n\nexport function setupDocument( document )\n{\n\tvar firstElementPosition = -1,\n\t\tdocumentElementPosition = -1,\n\t\tdocumentTagName = \"HTML\";\n\t\n\tif ( document[DOCTYPE] && document[PARSER_OPTIONS].allowCustomRootElement )\n\t\tdocumentTagName = document[DOCTYPE].name.toUpperCase();\n\t\n\tfor ( let i = 0, l = document.childNodes.length; i < l; i++ )\n\t\tif ( document.childNodes[i].tagName === documentTagName )\n\t\t{\n\t\t\tdocumentElementPosition = i;\n\t\t\t\n\t\t\tdocument[NODE_TYPE] = nodeTypes.DOCUMENT_NODE;\n\t\t\tdocument[DOCUMENT_ELEMENT] = document.childNodes[i];\n\t\t\tdocument[HEAD] = document[BODY] = null;\n\t\t\tfor ( let k = 0; k < document[DOCUMENT_ELEMENT].childNodes.length; k++ )\n\t\t\t{\n\t\t\t\tconst node = document[DOCUMENT_ELEMENT].childNodes[k];\n\t\t\t\t\n\t\t\t\tswitch ( node.tagName )\n\t\t\t\t{\n\t\t\t\t\tcase \"HEAD\": document[HEAD] = node; break;\n\t\t\t\t\t\n\t\t\t\t\tcase \"BODY\":\n\t\t\t\t\tcase \"FRAMESET\":\n\t\t\t\t\t\tdocument[BODY] = node; break;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tif ( document[HEAD] && document[BODY] ) break;\n\t\t\t}\n\t\t\t\n\t\t\tif ( firstElementPosition !== -1 )\n\t\t\t{\n\t\t\t\tconst newParent = document[HEAD] || document[BODY] || document[DOCUMENT_ELEMENT],\n\t\t\t\t\tcount = documentElementPosition - firstElementPosition;\n\t\t\t\tfor ( let k = firstElementPosition; k < documentElementPosition; k++ )\n\t\t\t\t\tsetNodeParent( document.childNodes[k], newParent );\n\t\t\t\tnewParent.childNodes.splice( 0, 0, ...document.childNodes.splice( firstElementPosition, count ) );\n\t\t\t\tdocumentElementPosition -= count;\n\t\t\t\tl -= count;\n\t\t\t}\n\t\t\t\n\t\t\tif ( documentElementPosition < l - 1 )\n\t\t\t{\n\t\t\t\tconst newParent = document[BODY] || document[HEAD] || document[DOCUMENT_ELEMENT];\n\t\t\t\tfor ( let k = documentElementPosition + 1; k < l; k++ )\n\t\t\t\t\tsetNodeParent( document.childNodes[k], newParent );\n\t\t\t\tnewParent.childNodes.splice( newParent.childNodes.length, 0, ...document.childNodes.splice( documentElementPosition + 1 ) );\n\t\t\t}\n\t\t\t\n\t\t\tbreak;\n\t\t}\n\t\telse if ( firstElementPosition === -1 && document.childNodes[i].nodeType === nodeTypes.ELEMENT_NODE )\n\t\t\tfirstElementPosition = i;\n}\n\nexport function getDocument( node )\n{\n\tconst owner = node[OWNER] || node.getRootNode();\n\tif ( owner[NODE_TYPE] === nodeTypes.DOCUMENT_NODE || owner[NODE_TYPE] === nodeTypes.DOCUMENT_FRAGMENT_NODE )\n\t\treturn owner;\n\treturn null;\n}\n\nexport function detachNodes( nodes )\n{\n\tif ( nodes && nodes.length > 0 ) for ( let i = 0; i < nodes.length; i++ )\n\t\tsetNodeParent( nodes[i], null );\n}\n\nexport function setNodeParent( node, parent )\n{\n\tconst owner = (parent !== null ? getDocument( parent ) : null);\n\t\n\tif ( node[OWNER] !== owner && node.hasChildNodes() )\n\t\tnode.forEach( node => {node[OWNER] = owner}, null );\n\t\n\tnode[PARENT_NODE] = parent;\n\tnode[OWNER] = owner;\n}\n\nexport function globalizeRegExp( re )\n{\n\tif ( !re.global )\n\t{\n\t\tlet flags = re.flags;\n\t/* @START_BROWSER_ONLY */\n\t\tif ( flags === undefined )\n\t\t\tflags = re.toString().match( reFlagsRE )[0];\n\t/* @END_BROWSER_ONLY */\n\t\tre = new RegExp( re.source, flags +\"g\" );\n\t}\n\treturn re;\n}","import {spacesRE} from \"./utils.js\";\n\nconst ELEMENT = Symbol( \"element\" ),\n\tLENGTH = Symbol( \"length\" ),\n\t\n\tvalidClassTokenRE = /^\\S+$/,\n\t\n\tindexOf = Array.prototype.indexOf,\n\tjoin = Array.prototype.join,\n\tsplice = Array.prototype.splice;\n\nexport function createTokenList( elem )\n{\n\tconst list = Object.create( DOMTokenList.prototype );\n\t\n\tlist[LENGTH] = 0;\n\tlist[ELEMENT] = elem;\n\tconst className = elem.className;\n\tif ( className ) list.value = className;\n\t\n\treturn list;\n}\n\nexport default class DOMTokenList\n{\n\tconstructor()\n\t{\n\t\tthrow new Error( \"Cannot directly instantiate DOMTokenList.\" );\n\t}\n\t\n\tget length() {return this[LENGTH]}\n\tset length( val ) {}\n\t\n\tget value()\n\t{\n\t\treturn join.call( this, \" \" );\n\t}\n\tset value( val )\n\t{\n\t\tif ( this[LENGTH] > 0 )\n\t\t\tfor ( let k in this ) if ( this.hasOwnProperty( k ) && isFinite( k ) )\n\t\t\t\tdelete this[k];\n\t\tthis[LENGTH] = 0;\n\t\t\n\t\tif ( typeof val === \"string\" )\n\t\t\tthis.add.apply( this, val.split( spacesRE ) );\n\t\telse delete this[ELEMENT].attributes.class;\n\t}\n\t\n\tadd()\n\t{\n\t\tfor ( let i = 0; i < arguments.length; i++ )\n\t\t\tif ( indexOf.call( this, arguments[i] ) === -1 && this.supports( arguments[i] ) )\n\t\t\t\tthis[this[LENGTH]++] = arguments[i];\n\t\tthis[ELEMENT].attributes.class = this.value;\n\t}\n\t\n\tremove()\n\t{\n\t\tfor ( let i = 0, idx; i < arguments.length; i++ )\n\t\t{\n\t\t\tidx = indexOf.call( this, arguments[i] );\n\t\t\tif ( idx !== -1 )\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t}\n\t\tthis[ELEMENT].attributes.class = this.value;\n\t}\n\t\n\titem( v )\n\t{\n\t\tif ( typeof v === \"number\" && v >= 0 && v < this[LENGTH] )\n\t\t\treturn this[v];\n\t}\n\t\n\ttoggle( token, force )\n\t{\n\t\tvar exists = false;\n\t\tif ( this.supports( token ) )\n\t\t{\n\t\t\tlet idx = indexOf.call( this, token );\n\t\t\tif ( idx !== -1 && force !== true )\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t\telse if ( force !== false )\n\t\t\t{\n\t\t\t\texists = true;\n\t\t\t\tif ( idx === -1 )\n\t\t\t\t\tthis[this[LENGTH]++] = token;\n\t\t\t}\n\t\t\tthis[ELEMENT].attributes.class = this.value;\n\t\t}\n\t\treturn exists;\n\t}\n\t\n\tcontains( token )\n\t{\n\t\treturn (indexOf.call( this, token ) !== -1);\n\t}\n\t\n\treplace( token, newToken )\n\t{\n\t\tvar idx = indexOf.call( this, token );\n\t\tif ( idx >= 0 && this.supports( newToken ) )\n\t\t{\n\t\t\tif ( indexOf.call( this, newToken ) === -1 )\n\t\t\t\tthis[idx] = newToken;\n\t\t\telse\n\t\t\t{\n\t\t\t\tsplice.call( this, idx, 1 );\n\t\t\t\tthis[LENGTH]--;\n\t\t\t}\n\t\t\tthis[ELEMENT].attributes.class = this.value;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\t\n\tsupports( token )\n\t{\n\t\tif ( token && typeof token === \"string\" )\n\t\t\treturn token.match( validClassTokenRE );\n\t\treturn false;\n\t}\n}","// HTML \"style\" inline CSS property handling\n// https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\n\n// style=\"border: 0px; clip: rect(0px, 0px, 0px, 0px); height: 1px; margin: -1px; overflow: hidden; padding: 0px; position: absolute; width: 1px; border-bottom-color: hotpink; -moz-animation-iteration-count: 1\"\nconst ELEMENT = Symbol( \"element\" );\n\n// Conversions between kebab-case and camelCase forms of the CSS property name\n// The rules are as described in https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style\nfunction prop2dom(cssPropertyName) {\n\treturn cssPropertyName.replace(/-[a-z]/g, (r) => r.toUpperCase().substr(1));\n}\n// Note: dom2prop(dom2prop('camelCaseProp')) will work as expected so it's always safe\n// to use dom2prop to canonicalize property names in their kebab case (dashed) form\nfunction dom2prop(cssStyleDeclarationPropertyName) {\n\treturn cssStyleDeclarationPropertyName.replace(/[A-Z]/g, (r) => '-'+r.toLowerCase());\n}\n// In theory a valid CSS property (identifier) is more permissive, but in practice this covers all property names in use\nfunction valid(propertyName) {\n\tif (typeof propertyName !== 'string') return false;\n\t// Valid css property name\n\tif (propertyName.match(/^\\-?[a-z_-]*[a-z]$/)) return true;\n\t// Valid custom property\n\tif (propertyName.match(/^\\-\\-[A-Za-z_-]*[A-Za-z0-9]$/)) return true;\n\t// Valid DOM-style (camel case) property\n\tif (propertyName.match(/^[a-zA-Z]+$/)) return true;\n\n\treturn false;\n}\n\n// Parses a style=\"\" attribute into a map of property-value pairs for easier alterations\nfunction styleToMap(styleString = \"\") {\n\treturn new Map(styleString.split(/\\s*;\\s*/g).filter(s => s.length).map(sd => sd.trim().match(/^([a-z-]+)\\s*:\\s*(.*)$/).slice(1)));\n}\n\n// Stringifies a map of property-value pairs back into a style=\"\" inline style attribute value\nfunction mapToStyle(styleMap) {\n\treturn Array.from(styleMap?.entries() ?? []).map(e => e.join(': ')).join('; ');\n}\n\nexport function createInlineStyle( elem )\n{\n\tconst styleObject = {\n\t\t[ELEMENT]: elem\n\t};\n\n\tconst styleProxy = new Proxy(styleObject, {\n\t\tget(target, name) {\n\t\t\tif (name === ELEMENT) return elem;\n\t\t\tif (!valid(name)) return undefined;\n\n\t\t\tconst prop = dom2prop(name);\n\n\t\t\treturn styleToMap(elem.attributes.style).get(prop);\n\t\t},\n\t\tset(target, name, value) {\n\t\t\t// Fail silently (return truthy value to avoid showing an TypeError)\n\t\t\tif (!valid(name)) return true;\n\n\t\t\tconst prop = dom2prop(name);\n\t\t\tconst map = styleToMap(elem.attributes.style);\n\n\t\t\telem.attributes.style = mapToStyle(map.set(prop, value));\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(target, name) {\n\t\t\tif (!valid(name)) return;\n\n\t\t\tconst prop = dom2prop(name);\n\t\t\tconst map = styleToMap(elem.attributes.style);\n\n\t\t\telem.attributes.style = mapToStyle(map.delete(prop));\n\t\t},\n\t});\n\n\treturn styleProxy;\n}\n\nexport function updateInlineStyle( style, value )\n{\n\t// Parse and re-stringify value to validate format\n\tconst styleValue = mapToStyle(styleToMap(value));\n\n\tstyle[ELEMENT].attributes.style = styleValue;\n}\n\nexport default class CSSStyleDeclaration {\n\tconstructor()\n\t{\n\t\tthrow new Error( \"Cannot directly instantiate CSSStyleDeclaration.\" );\n\t}\n}\n","import {Lexer, EOF} from \"./lexer.js\";\n\nconst newLinesRE = /\\r\\n|\\r|\\f/g,\n\tanbSyntaxRE = /\\(\\s*(even|odd|(?:(?:([+-]?\\d*)n)\\s*(?:([+-])\\s*(\\d+))?|([+-]?\\d+)))\\s*/g;\n\nconst ParamTypes = {\n\tSelectors: 0,\n\tIdentifier: 1,\n\tIterator: 2,\n\tIteratorOf: 3\n};\n\nconst paramExpectations = {\n\t\"is\": ParamTypes.Selectors,\n\t\"not\": ParamTypes.Selectors,\n\t\"where\": ParamTypes.Selectors, // Alias of :is()\n\t\"has\": ParamTypes.Selectors,\n\t\n\t\"lang\": ParamTypes.Identifier, // Not implementing\n\t\"dir\": ParamTypes.Identifier, // Not implementing\n\t\n\t\"nth-child\": ParamTypes.IteratorOf,\n\t\"nth-last-child\": ParamTypes.IteratorOf,\n\t\n\t\"nth-of-type\": ParamTypes.Iterator,\n\t\"nth-last-of-type\": ParamTypes.Iterator,\n\t\"nth-col\": ParamTypes.Iterator, // Not implementing\n\t\"nth-last-col\": ParamTypes.Iterator, // Not implementing\n};\n\n// https://drafts.csswg.org/selectors-4/\n\nexport function parseSelector( selector )\n{\n\treturn parseSelectorList( new Lexer( selector.replace( newLinesRE, \"\\n\" ) ) );\n}\n\nfunction parseSelectorList( lexer, terminator = EOF, relative = false )\n{\n\tvar theChar = lexer.skipWhiteSpace(),\n\t\tselector = {},\n\t\tcompound = [],\n\t\tcomplex = [compound],\n\t\tast = [complex];\n\t\n\twhile ( theChar !== EOF && theChar !== terminator )\n\t{\n\t\tswitch ( theChar )\n\t\t{\n\t\t\tcase \"*\": // https://drafts.csswg.org/selectors-4/#universal-selector\n\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\tthrow syntaxError( \"Universal selectors must come before all other simple selectors.\", lexer );\n\t\t\t\tselector.type = \"universal\";\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"#\":\n\t\t\tcase \".\":\n\t\t\t{\n\t\t\t\tlexer.getNextChar();\n\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\n\t\t\t\tselector.type = (theChar === \"#\" ? \"id\" : \"class\");\n\t\t\t\tselector.name = name;\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"[\": // https://drafts.csswg.org/selectors-4/#attribute-selectors\n\t\t\t{\n\t\t\t\tlexer.getNextAfterWhiteSpace();\n\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\n\t\t\t\tselector.type = \"attr\";\n\t\t\t\tselector.name = name;\n\t\t\t\tselector.comparison = \"=\";\n\t\t\t\tselector.value = true;\n\t\t\t\tselector.ignoreCase = false;\n\t\t\t\t\n\t\t\t\tif ( (theChar = lexer.getNextAfterWhiteSpace()) !== \"]\" )\n\t\t\t\t{\n\t\t\t\t\tswitch ( theChar )\n\t\t\t\t\t{\n\t\t\t\t\t\tcase \"=\": break;\n\t\t\t\t\t\t\n\t\t\t\t\t\tcase \"~\":\n\t\t\t\t\t\tcase \"|\":\n\t\t\t\t\t\tcase \"^\":\n\t\t\t\t\t\tcase \"$\":\n\t\t\t\t\t\tcase \"*\":\n\t\t\t\t\t\t\tif ( lexer.peek() !== \"=\" ) throw syntaxError( \"Expected '='.\", lexer, 1 );\n\t\t\t\t\t\t\tselector.comparison = theChar + selector.comparison;\n\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\tdefault: throw syntaxError( \"Unexpected character '\"+ (theChar === EOF ? \"END_OF_INPUT\" : theChar) +\"'.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\ttheChar = lexer.getNextAfterWhiteSpace();\n\t\t\t\t\tif ( theChar === \"'\" || theChar === '\"' )\n\t\t\t\t\t{\n\t\t\t\t\t\t// https://drafts.csswg.org/css-syntax-3/#consume-string-token\n\t\t\t\t\t\tconst quote = theChar;\n\t\t\t\t\t\t\n\t\t\t\t\t\tselector.value = \"\";\n\t\t\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t\t\t\t\n\t\t\t\t\t\twhile ( theChar !== EOF && theChar !== quote && theChar !== \"\\n\" )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( theChar === \"\\\\\" )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tselector.value += parseEscapedCodePoint( lexer );\n\t\t\t\t\t\t\t\ttheChar = lexer.getChar();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tselector.value += theChar;\n\t\t\t\t\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\t\tselector.value = name;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( lexer.getNextAfterWhiteSpace() !== \"]\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst ident = parseIdentifier( lexer );\n\t\t\t\t\t\tif ( ident === \"i\" || ident === \"I\" )\n\t\t\t\t\t\t\tselector.ignoreCase = true;\n\t\t\t\t\t\telse if ( ident === \"s\" || ident === \"S\" )\n\t\t\t\t\t\t\tselector.ignoreCase = false;\n\t\t\t\t\t\telse if ( ident )\n\t\t\t\t\t\t\tthrow syntaxError( \"Unexpected identifier '\"+ ident +\"'.\", lexer, -ident.length + 1 );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( lexer.getNextAfterWhiteSpace() !== \"]\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Expected ']'.\", lexer, -1 + ident.length );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \":\":\n\t\t\t{\n\t\t\t\tlexer.getNextChar();\n\t\t\t\tif ( lexer.match( \":\" ) ) // https://drafts.csswg.org/selectors-4/#pseudo-elements\n\t\t\t\t{\n\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected a pseudo-element name.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"pseudo-element\";\n\t\t\t\t\tselector.name = name;\n\t\t\t\t}\n\t\t\t\telse // https://drafts.csswg.org/selectors-4/#pseudo-classes\n\t\t\t\t{\n\t\t\t\t\tconst name = parseIdentifier( lexer );\n\t\t\t\t\tif ( !name ) throw syntaxError( \"Expected a pseudo-class name.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"pseudo-class\";\n\t\t\t\t\tselector.name = name;\n\t\t\t\t\t\n\t\t\t\t\tconst paramType = paramExpectations[name];\n\t\t\t\t\tif ( paramType != null )\n\t\t\t\t\t{\n\t\t\t\t\t\tselector.type = \"pseudo-fn\";\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( lexer.getNextChar() !== \"(\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Expected '('.\", lexer );\n\t\t\t\t\t\t\n\t\t\t\t\t\tswitch ( paramType )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase ParamTypes.IteratorOf: // https://drafts.csswg.org/selectors-4/#nth-child-pseudo\n\t\t\t\t\t\t\tcase ParamTypes.Iterator: // https://drafts.csswg.org/css-syntax-3/#anb-microsyntax\n\t\t\t\t\t\t\t\tlet A = 0, B = 0, ofSelector;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tanbSyntaxRE.lastIndex = lexer.index;\n\t\t\t\t\t\t\t\tconst match = anbSyntaxRE.exec( lexer.str );\n\t\t\t\t\t\t\t\tif ( !match ) throw syntaxError( \"Invalid parameter.\", lexer, 1 );\n\t\t\t\t\t\t\t\tlexer.advance( match[0].length );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( paramType === ParamTypes.IteratorOf )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\t\t\t\t\t\tconst savedIdx = lexer.index;\n\t\t\t\t\t\t\t\t\tif ( parseIdentifier( lexer ).toLowerCase() === \"of\" )\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tconst chr = lexer.getNextChar();\n\t\t\t\t\t\t\t\t\t\tif ( chr !== \")\" && !lexer.isWhiteSpace( chr ) )\n\t\t\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected whitespace.\", lexer );\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\tofSelector = parseSelectorList( lexer, \")\" );\n\t\t\t\t\t\t\t\t\t\tif ( !(ofSelector instanceof Array) || ofSelector.length === 0 )\n\t\t\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected at least one selector.\", lexer );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse lexer.goToIndex( savedIdx );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( lexer.skipWhiteSpace() !== \")\" )\n\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected ')'.\", lexer );\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tif ( match[1] === \"even\" || match[1] === \"odd\" )\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tA = 2;\n\t\t\t\t\t\t\t\t\tif ( match[1] === \"odd\" ) B = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse if ( match[5] ) // We found just an integer.\n\t\t\t\t\t\t\t\t\tB = parseInt( match[5], 10 );\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tif ( match[2] === \"-\" ) A = -1;\n\t\t\t\t\t\t\t\t\telse if ( !match[2] || match[2] === \"+\" ) A = 1;\n\t\t\t\t\t\t\t\t\telse A = parseInt( match[2], 10 );\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tif ( match[3] )\n\t\t\t\t\t\t\t\t\t\tB = parseInt( match[3] + match[4], 10 );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tselector.params = [A, B];\n\t\t\t\t\t\t\t\tif ( ofSelector ) selector.params.push( ofSelector );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase ParamTypes.Selectors:\n\t\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\t\tselector.params = parseSelectorList( lexer, \")\", true );\n\t\t\t\t\t\t\t\tif ( selector.params.length === 0 )\n\t\t\t\t\t\t\t\t\tthrow syntaxError( \"Expected at least one selector.\", lexer );\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tcase ParamTypes.Identifier:\n\t\t\t\t\t\t\t\tif ( isIdentifierStart( lexer.getNextAfterWhiteSpace() ) )\n\t\t\t\t\t\t\t\t\tselector.params = [parseIdentifier( lexer )];\n\t\t\t\t\t\t\t\telse throw syntaxError( \"Expected an identifier.\", lexer );\n\t\t\t\t\t\t\t\tlexer.getNextChar();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( lexer.skipWhiteSpace() !== \")\" ) throw syntaxError( \"Expected ')'.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\t// Having this branch here allows custom functional pseudo-classes with\n\t\t\t\t\t// these names to be defined by the user.\n\t\t\t\t\telse if ( name === \"before\" || name === \"after\" || name === \"first-line\" || name === \"first-letter\" )\n\t\t\t\t\t\tselector.type = \"pseudo-element\";\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tcompound.push( selector );\n\t\t\t\tselector = {};\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\t\n\t\t\t// https://drafts.csswg.org/selectors-4/#combinators\n\t\t\tcase \"+\":\n\t\t\tcase \">\":\n\t\t\tcase \"~\":\n\t\t\t\tif ( compound.length === 0 )\n\t\t\t\t{\n\t\t\t\t\tif ( complex.length === 1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tif ( relative )\n\t\t\t\t\t\t\tcomplex.unshift( [{type: \"pseudo-class\", name: \"scope\"}] );\n\t\t\t\t\t\telse throw syntaxError( \"Absolute selectors cannot start with a combinator.\", lexer );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof complex[complex.length - 2] === \"string\" )\n\t\t\t\t\t\tthrow syntaxError( \"Cannot have multiple combinators in a row.\", lexer );\n\t\t\t\t\tcomplex.splice( complex.length - 1, 0, theChar );\n\t\t\t\t}\n\t\t\t\telse complex.push( theChar, compound = [] );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \",\":\n\t\t\t\tif ( compound.length === 0 )\n\t\t\t\t{\n\t\t\t\t\tif ( complex.length > 1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tcomplex.pop();\n\t\t\t\t\t\tif ( typeof complex[complex.length - 1] === \"string\" )\n\t\t\t\t\t\t\tthrow syntaxError( \"Complex selectors are not allowed to end with a combinator.\", lexer, -1 );\n\t\t\t\t\t\tast.push( complex = [compound] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse ast.push( complex = [compound = []] );\n\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tdefault:\n\t\t\t\tif ( lexer.isWhiteSpace( theChar ) )\n\t\t\t\t{\n\t\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\t\tcomplex.push( compound = [] );\n\t\t\t\t\tlexer.skipWhiteSpace();\n\t\t\t\t\tlexer.advance( -1 );\n\t\t\t\t}\n\t\t\t\telse if ( isIdentifierStart( theChar ) )\n\t\t\t\t{\n\t\t\t\t\tif ( compound.length > 0 )\n\t\t\t\t\t\tthrow syntaxError( \"Type (tag name) selectors must come before all other simple selectors.\", lexer );\n\t\t\t\t\t\n\t\t\t\t\tselector.type = \"type\";\n\t\t\t\t\t// We'll always have a valid identifier here, thanks to\n\t\t\t\t\t// the isIdentifierStart() above.\n\t\t\t\t\tselector.name = parseIdentifier( lexer ).toUpperCase();\n\t\t\t\t\t\n\t\t\t\t\tcompound.push( selector );\n\t\t\t\t\tselector = {};\n\t\t\t\t}\n\t\t\t\telse throw syntaxError( \"Unexpected character '\"+ theChar +\"'.\", lexer );\n\t\t}\n\t\ttheChar = lexer.getNextChar();\n\t}\n\t\n\tif ( compound.length === 0 )\n\t{\n\t\tif ( complex.length === 1 )\n\t\t{\n\t\t\tast.pop();\n\t\t\tcomplex = ast[ast.length - 1];\n\t\t}\n\t\telse complex.pop();\n\t}\n\t\n\tif ( complex && typeof complex[complex.length - 1] === \"string\" )\n\t\tthrow syntaxError( \"Complex selectors are not allowed to end with a combinator.\", lexer, -1 );\n\t\n\treturn ast;\n}\n\nfunction syntaxError( message, lexer, offset = 0 )\n{\n\tvar error = new SyntaxError( message ),\n\t\tcolumn = lexer.index + offset;\n\terror.stack = \"SyntaxError: \"+ message +\"\\n\\n\"+ lexer.str +\"\\n\"+ \" \".repeat( column ) +\"^\\n at index \"+ column;\n\treturn error;\n}\n\n// https://drafts.csswg.org/css-syntax-3/#consume-name\nfunction parseIdentifier( lexer )\n{\n\tvar name = \"\",\n\t\ttheChar = lexer.getChar();\n\t\n\tif ( isIdentifierStart( theChar ) )\n\t{\n\t\tdo\n\t\t{\n\t\t\tif ( theChar === \"\\\\\" )\n\t\t\t{\n\t\t\t\tname += parseEscapedCodePoint( lexer );\n\t\t\t\ttheChar = lexer.getChar();\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tname += theChar;\n\t\t\t\ttheChar = lexer.getNextChar();\n\t\t\t}\n\t\t}\n\t\twhile ( theChar !== EOF && (isIdentifierStart( theChar ) || (theChar >= \"0\" && theChar <= \"9\") || theChar === \"-\") )\n\t\tlexer.advance( -1 );\n\t}\n\t\n\treturn name;\n}\n\n// https://drafts.csswg.org/css-syntax-3/#consume-escaped-code-point\nfunction parseEscapedCodePoint( lexer )\n{\n\tvar theChar = lexer.getNextChar();\n\t\n\tif ( isHexDigit( theChar ) )\n\t{\n\t\tlet codePoint = \"\";\n\t\t\n\t\tfor ( let i = 5; i >= 0 && isHexDigit( theChar ); i-- )\n\t\t{\n\t\t\tcodePoint += theChar;\n\t\t\ttheChar = lexer.getNextChar();\n\t\t}\n\t\t\n\t\tif ( lexer.isWhiteSpace( theChar ) )\n\t\t\tlexer.getNextChar();\n\t\t\n\t\tcodePoint = parseInt( codePoint, 16 ) | 0;\n\t\tif ( codePoint === 0 ||\n\t\t\t(codePoint >= 0xD800 && codePoint <= 0xDFFF) || // Surrogate\n\t\t\tcodePoint > 0x10FFFF ) // Maximum allowed code point\n\t\t\t\treturn \"\\uFFFD\";\n\t\treturn String.fromCodePoint( codePoint );\n\t}\n\telse if ( theChar === EOF ) return \"\\uFFFD\";\n\t\n\tlexer.getNextChar();\n\treturn theChar;\n}\n\nfunction isHexDigit( theChar )\n{\n\treturn (theChar !== EOF && ((theChar >= \"0\" && theChar <= \"9\") || (theChar >= \"A\" && theChar <= \"F\") || (theChar >= \"a\" && theChar <= \"f\")));\n}\n\nfunction isIdentifierStart( theChar )\n{\n\treturn ((theChar >= \"A\" && theChar <= \"Z\") || (theChar >= \"a\" && theChar <= \"z\") || theChar === \"_\" || theChar >= \"\\u0080\" || theChar === \"\\\\\");\n}","import {parseSelector} from \"./selector-parser.js\";\nimport Node from \"./node.js\";\nimport {NODE_TYPE, PARENT_NODE, TAG_NAME, spacesRE, getDocument} from \"./utils.js\";\n\nconst STATE_INITIAL = 0,\n\tSTATE_DESCENDANT_COMBINATOR = 1,\n\tSTATE_CHILD_COMBINATOR = 2,\n\tSTATE_NEXT_SIBLING_COMBINATOR = 3,\n\tSTATE_SUBSEQUENT_SIBLING_COMBINATOR = 4,\n\t\n\tstateTransitions = {\n\t\t\">\": STATE_CHILD_COMBINATOR,\n\t\t\"+\": STATE_NEXT_SIBLING_COMBINATOR,\n\t\t\"~\": STATE_SUBSEQUENT_SIBLING_COMBINATOR\n\t},\n\t\n\tpseudoProcs = {\n\t\tis( scope, node, selectors )\n\t\t{\n\t\t\treturn matchesSelectorList( scope, node, selectors );\n\t\t},\n\t\tnot( scope, node, selectors )\n\t\t{\n\t\t\treturn !matchesSelectorList( scope, node, selectors );\n\t\t},\n\t\thas( scope, node, selectors )\n\t\t{\n\t\t\tvar has = false;\n\t\t\t\n\t\t\tfor ( let i = 0; i < selectors.length; i++ )\n\t\t\t\tif ( selectors[i][0] instanceof Array && isRelativeSimpleSelector( selectors[i][0][0] ) )\n\t\t\t\t{\n\t\t\t\t\thas = matchesSelectorList( node, node, selectors, true );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\n\t\t\tif ( !has && node.childNodes.length > 0 ) node.forEach( elem =>\n\t\t\t{\n\t\t\t\tif ( matchesSelectorList( node, elem, selectors ) )\n\t\t\t\t{\n\t\t\t\t\thas = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\t\t\n\t\t\treturn has;\n\t\t},\n\t\t\n\t\t[\"nth-child\"]( scope, node, args )\n\t\t{\n\t\t\tconst parent = node[PARENT_NODE],\n\t\t\t\tnodes = parent.childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] );\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t{\n\t\t\t\t\tif ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t[\"nth-last-child\"]( scope, node, args )\n\t\t{\n\t\t\tconst parent = node[PARENT_NODE],\n\t\t\t\tnodes = parent.childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] );\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t{\n\t\t\t\t\tif ( !args[2] || matchesSelectorList( parent, nodes[i], args[2] ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\t[\"nth-of-type\"]( scope, node, args )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] ),\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t{\n\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t}\n\t\t\t\n\t\t\t// For code here to be reachable, 'node' would have to not be inside\n\t\t\t// its own parent, or the above test of 'nodes[i] === node' would\n\t\t\t// have to be skippable. Since neither of these scenarios is\n\t\t\t// possible (for now), an explicit 'return false' here never\n\t\t\t// executes and isn't needed.\n\t\t},\n\t\t[\"nth-last-of-type\"]( scope, node, args )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\titer = new ChildIterator( args[0], args[1] ),\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t{\n\t\t\t\t\tconst iterMatch = iter.next();\n\t\t\t\t\tif ( nodes[i] === node )\n\t\t\t\t\t\treturn iterMatch;\n\t\t\t\t}\n\t\t\t\n\t\t\t// For code here to be reachable, 'node' would have to not be inside\n\t\t\t// its own parent, or the above test of 'nodes[i] === node' would\n\t\t\t// have to be skippable. Since neither of these scenarios is\n\t\t\t// possible (for now), an explicit 'return false' here never\n\t\t\t// executes and isn't needed.\n\t\t}\n\t},\n\tpseudoClasses = {\n\t\tscope( scope, node )\n\t\t{\n\t\t\treturn (node === scope);\n\t\t},\n\t\t\n\t\tenabled( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"BUTTON\":\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\tcase \"OPTGROUP\":\n\t\t\t\tcase \"OPTION\":\n\t\t\t\tcase \"FIELDSET\":\n\t\t\t\t\treturn !node.hasAttribute( \"disabled\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tdisabled( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"BUTTON\":\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\tcase \"OPTGROUP\":\n\t\t\t\tcase \"OPTION\":\n\t\t\t\tcase \"FIELDSET\":\n\t\t\t\t\treturn node.hasAttribute( \"disabled\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\tchecked( scope, node )\n\t\t{\n\t\t\tif ( node[TAG_NAME] === \"INPUT\" )\n\t\t\t{\n\t\t\t\tconst type = node.getAttribute( \"type\" );\n\t\t\t\tif ( type === \"checkbox\" || type === \"radio\" )\n\t\t\t\t\treturn node.hasAttribute( \"checked\" );\n\t\t\t}\n\t\t\telse if ( node[TAG_NAME] === \"OPTION\" )\n\t\t\t\treturn node.hasAttribute( \"selected\" );\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\trequired( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\t\treturn node.hasAttribute( \"required\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\toptional( scope, node )\n\t\t{\n\t\t\tswitch ( node[TAG_NAME] )\n\t\t\t{\n\t\t\t\tcase \"INPUT\":\n\t\t\t\tcase \"SELECT\":\n\t\t\t\tcase \"TEXTAREA\":\n\t\t\t\t\treturn !node.hasAttribute( \"required\" );\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\t\n\t\troot( scope, node )\n\t\t{\n\t\t\tconst document = getDocument( scope );\n\t\t\treturn (!!document && document.documentElement === node);\n\t\t},\n\t\tempty( scope, node )\n\t\t{\n\t\t\treturn (node.childNodes.length === 0);\n\t\t},\n\t\t\n\t\t[\"first-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"last-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"only-child\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes;\n\t\t\tlet first, last;\n\t\t\tfor ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- )\n\t\t\t{\n\t\t\t\tif ( !first && nodes[s][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\tfirst = nodes[s];\n\t\t\t\tif ( !last && nodes[e][NODE_TYPE] === Node.ELEMENT_NODE )\n\t\t\t\t\tlast = nodes[e];\n\t\t\t}\n\t\t\treturn (first === last && first === node);\n\t\t},\n\t\t\n\t\t[\"first-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = 0; i < nodes.length; i++ )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"last-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tfor ( let i = nodes.length - 1; i >= 0; i-- )\n\t\t\t\tif ( nodes[i][TAG_NAME] === tagName )\n\t\t\t\t\treturn (nodes[i] === node);\n\t\t\t\n\t\t\t// For code here to be reachable, we would have to be looking at an\n\t\t\t// ELEMENT_NODE node inside a parent that has no ELEMENT_NODE nodes.\n\t\t\t// Therefore, an explicit 'return false' here never executes and\n\t\t\t// isn't needed.\n\t\t},\n\t\t[\"only-of-type\"]( scope, node )\n\t\t{\n\t\t\tconst nodes = node[PARENT_NODE].childNodes,\n\t\t\t\ttagName = node[TAG_NAME];\n\t\t\tlet first, last;\n\t\t\tfor ( let s = 0, e = nodes.length - 1; e >= 0 && !(first && last); s++, e-- )\n\t\t\t{\n\t\t\t\tif ( !first && nodes[s][TAG_NAME] === tagName )\n\t\t\t\t\tfirst = nodes[s];\n\t\t\t\tif ( !last && nodes[e][TAG_NAME] === tagName )\n\t\t\t\t\tlast = nodes[e];\n\t\t\t}\n\t\t\treturn (first === last && first === node);\n\t\t}\n\t};\n\npseudoProcs.where = pseudoProcs.is;\n\nexport function querySelector( scope, selector, all )\n{\n\tconst selectors = parseSelector( selector ),\n\t\tresult = [];\n\t\n\tscope.forEach( node =>\n\t{\n\t\tif ( matchesSelectorList( scope, node, selectors ) )\n\t\t{\n\t\t\tresult.push( node );\n\t\t\tif ( !all ) return false;\n\t\t}\n\t} );\n\t\n\treturn (all ? result : (result[0] || null));\n}\n\nexport function closest( scope, selector )\n{\n\tconst selectors = parseSelector( selector );\n\tlet node = scope;\n\t\n\twhile ( node != null && node[NODE_TYPE] === Node.ELEMENT_NODE )\n\t{\n\t\tif ( matchesSelectorList( scope, node, selectors ) )\n\t\t\treturn node;\n\t\tnode = node[PARENT_NODE];\n\t}\n\t\n\treturn null;\n}\n\nexport function matches( scope, selector )\n{\n\treturn matchesSelectorList( scope, scope, parseSelector( selector ) );\n}\n\nfunction matchesSelectorList( scope, node, selectors, relative = false )\n{\n\tvar currentNode;\n\t\nList:\n\tfor ( let i = 0; i < selectors.length; i++ )\n\t{\n\t\tconst complex = selectors[i];\n\t\tlet state = STATE_INITIAL;\n\t\t\n\t\tif ( relative && complex[0] instanceof Array && !isRelativeSimpleSelector( complex[0][0] ) )\n\t\t\tcontinue;\n\t\t\n\t\tcurrentNode = node;\n\t\t\n\tComplex:\n\t\tfor ( let x = (relative ? 0 : complex.length - 1);\n\t\t\t(relative ? x < complex.length : x >= 0);\n\t\t\t(relative ? x++ : x--) )\n\t\t{\n\t\t\tif ( stateTransitions.hasOwnProperty( complex[x] ) )\n\t\t\t\tstate = stateTransitions[complex[x]];\n\t\t\telse switch ( state )\n\t\t\t{\n\t\t\t\tcase STATE_INITIAL:\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tstate = STATE_DESCENDANT_COMBINATOR;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_DESCENDANT_COMBINATOR:\n\t\t\t\t\twhile ( currentNode = currentNode[PARENT_NODE] )\n\t\t\t\t\t\tif ( matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\t\tcontinue Complex;\n\t\t\t\t\tcontinue List;\n\t\t\t\t\t\n\t\t\t\tcase STATE_CHILD_COMBINATOR:\n\t\t\t\t\tcurrentNode = currentNode[PARENT_NODE];\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_NEXT_SIBLING_COMBINATOR:\n\t\t\t\t{\n\t\t\t\t\tconst nodes = currentNode[PARENT_NODE].childNodes;\n\t\t\t\t\tcurrentNode = nodes[nodes.indexOf( currentNode ) + (relative ? 1 : -1)];\n\t\t\t\t\tif ( !matchesCompoundSelector( scope, currentNode, complex[x] ) )\n\t\t\t\t\t\tcontinue List;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcase STATE_SUBSEQUENT_SIBLING_COMBINATOR:\n\t\t\t\t{\n\t\t\t\t\tconst nodes = currentNode[PARENT_NODE].childNodes;\n\t\t\t\t\tfor ( let k = nodes.indexOf( currentNode ) + (relative ? 1 : -1);\n\t\t\t\t\t\t\t(relative ? k < nodes.length : k >= 0);\n\t\t\t\t\t\t\t(relative ? k++ : k--) )\n\t\t\t\t\t\tif ( matchesCompoundSelector( scope, nodes[k], complex[x] ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcurrentNode = nodes[k];\n\t\t\t\t\t\t\tcontinue Complex;\n\t\t\t\t\t\t}\n\t\t\t\t\tcontinue List;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction matchesCompoundSelector( scope, node, compound )\n{\n\tif ( !node || node[NODE_TYPE] !== Node.ELEMENT_NODE )\n\t\treturn false;\n\tfor ( let i = 0; i < compound.length; i++ )\n\t{\n\t\tconst simple = compound[i];\n\t\tlet matched;\n\t\t\n\t\tmatched = false;\n\t\tswitch ( simple.type )\n\t\t{\n\t\t\tcase \"universal\": return true;\n\t\t\t\n\t\t\tcase \"type\": matched = (node[TAG_NAME] === simple.name); break;\n\t\t\tcase \"id\": matched = (node.id === simple.name); break;\n\t\t\tcase \"class\": matched = node.classList.contains( simple.name ); break;\n\t\t\t\n\t\t\tcase \"attr\":\n\t\t\t\tif ( simple.comparison === \"=\" && (simple.value === true || simple.value === \"\") )\n\t\t\t\t\tmatched = node.hasAttribute( simple.name );\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tlet attr = node.getAttribute( simple.name );\n\t\t\t\t\tif ( typeof attr === \"string\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tlet value = (simple.ignoreCase ? simple.value.toLowerCase() : simple.value);\n\t\t\t\t\t\tif ( simple.ignoreCase ) attr = attr.toLowerCase();\n\t\t\t\t\t\tif ( value !== \"\" ) switch ( simple.comparison )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tcase \"=\": matched = (attr === value); break;\n\t\t\t\t\t\t\tcase \"~=\": matched = attr.split( spacesRE ).indexOf( value ) !== -1; break;\n\t\t\t\t\t\t\tcase \"|=\": matched = (attr === value || attr.startsWith( value +\"-\" )); break;\n\t\t\t\t\t\t\tcase \"^=\": matched = attr.startsWith( value ); break;\n\t\t\t\t\t\t\tcase \"$=\": matched = attr.endsWith( value ); break;\n\t\t\t\t\t\t\tcase \"*=\": matched = attr.indexOf( value ) !== -1; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"pseudo-element\": break;\n\t\t\t\n\t\t\tcase \"pseudo-class\":\n\t\t\t\tif ( pseudoClasses.hasOwnProperty( simple.name ) )\n\t\t\t\t\tmatched = !!pseudoClasses[simple.name].call( null, scope, node );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase \"pseudo-fn\":\n\t\t\t\tif ( pseudoProcs.hasOwnProperty( simple.name ) )\n\t\t\t\t\tmatched = !!pseudoProcs[simple.name].call( null, scope, node, simple.params );\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( !matched ) return false;\n\t}\n\treturn true;\n}\n\nfunction isRelativeSimpleSelector( simple )\n{\n\treturn (!!simple && simple.type === \"pseudo-class\" && simple.name === \"scope\");\n}\n\nclass ChildIterator\n{\n\tconstructor( A, B )\n\t{\n\t\tthis.A = parseInt( A, 10 ) | 0;\n\t\tthis.B = parseInt( B, 10 ) | 0;\n\t\tthis.current = 0;\n\t}\n\t\n\tnext()\n\t{\n\t\tif ( this.A === 0 && this.B === 0 )\n\t\t\treturn false;\n\t\t\n\t\tthis.current += 1;\n\t\t\n\t\tlet match = false;\n\t\tif ( this.A === 0 )\n\t\t\tmatch = (this.current === this.B);\n\t\telse if ( (this.A < 0 && this.B >= this.current) || (this.A > 0 && this.current >= this.B) )\n\t\t\tmatch = (((this.current + this.B) % this.A) === 0);\n\t\t\n\t\treturn match;\n\t}\n}","import {PARSER_OPTIONS, nodeTypes, selfClosingTags, getDocument} from \"./utils.js\";\n\nexport function serializeNode( elem )\n{\n\tvar tagName = elem.tagName,\n\t\towner = getDocument( elem ),\n\t\tentities = owner ? owner.entityEncoder : null,\n\t\thtml = \"\";\n\tswitch ( elem.nodeType )\n\t{\n\t\tcase nodeTypes.ELEMENT_NODE:\n\t\t\ttagName = tagName.toLowerCase();\n\t\t\thtml += \"<\"+ tagName;\n\t\t\tfor ( let k in elem.attributes )\n\t\t\t\tif ( elem.attributes.hasOwnProperty( k ) )\n\t\t\t\t{\n\t\t\t\t\tlet attr = elem.attributes[k];\n\t\t\t\t\tif ( attr === true )\n\t\t\t\t\t\tattr = \"\";\n\t\t\t\t\telse if ( entities && owner[PARSER_OPTIONS] )\n\t\t\t\t\t\tattr = encodeEntities( attr, entities, owner[PARSER_OPTIONS] );\n\t\t\t\t\t\n\t\t\t\t\thtml += \" \"+ k;\n\t\t\t\t\tif ( attr !== \"\" )\n\t\t\t\t\t\thtml += '=\"'+ attr +'\"';\n\t\t\t\t}\n\t\t\thtml += \">\";\n\t\t\t\n\t\t\tfor ( let i = 0; i < elem.childNodes.length; i++ )\n\t\t\t\thtml += serializeNode( elem.childNodes[i] );\n\t\t\t\n\t\t\tif ( selfClosingTags[elem.tagName] !== true )\n\t\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.TEXT_NODE:\n\t\t\tif ( entities && owner[PARSER_OPTIONS] &&\n\t\t\t\t(!elem.parentNode || (elem.parentNode.tagName !== \"SCRIPT\" && elem.parentNode.tagName !== \"STYLE\")) )\n\t\t\t\t\thtml += encodeEntities( elem.nodeValue, entities, owner[PARSER_OPTIONS] );\n\t\t\telse html += elem.nodeValue;\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.CDATA_SECTION_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.PROCESSING_INSTRUCTION_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.COMMENT_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t\t\t\n\t\tcase nodeTypes.DOCUMENT_TYPE_NODE:\n\t\t\thtml += \"\";\n\t\t\tbreak;\n\t}\n\treturn html;\n}\n\nfunction encodeEntities( text, entities, options )\n{\n\tif ( options.encodeEntities === false )\n\t\treturn text;\n\telse if ( options.encodeEntities === true || !(options.encodeEntities instanceof RegExp) )\n\t\treturn entities.encode( text );\n\treturn entities.encode( text, options.encodeEntities );\n}","import DOM from \"./document.js\";\nimport Parser from \"./html-parser.js\";\nimport EventTarget from \"./event-target.js\";\nimport {createTokenList} from \"./token-list.js\";\nimport {createInlineStyle, updateInlineStyle} from \"./css-style-declaration.js\";\nimport {querySelector, closest, matches} from \"./selectors.js\";\nimport {serializeNode} from \"./serializer.js\";\nimport {DOCTYPE, HEAD, BODY, NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME, PARSER_OPTIONS,\n\tspacesRE, nodeTypes, selfClosingTags, setupDocument, getDocument, detachNodes, setNodeParent} from \"./utils.js\";\n\nconst CLASS_LIST = Symbol( \"classList\" );\nconst INLINE_STYLE = Symbol( \"style\" );\n\nexport const EXTEND_NODE = Symbol( \"extendNode\" );\n\nexport function createNode( nodeType, baseClass = Node )\n{\n\tconst node = Object.create( baseClass.prototype );\n\t\n\tnode[NODE_TYPE] = nodeType;\n\tnode.nodeValue = null;\n\tnode[PARENT_NODE] = null;\n\tnode[OWNER] = null;\n\t\n\tswitch ( nodeType )\n\t{\n\t\tcase Node.ELEMENT_NODE:\n\t\t\tnode[TAG_NAME] = null;\n\t\t\tnode.attributes = {};\n\t\t\t// fallthrough\n\t\t\t\n\t\tcase Node.DOCUMENT_NODE:\n\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\tnode.childNodes = [];\n\t}\n\t\n\treturn node;\n}\n\nexport default class Node extends EventTarget\n{\n\tconstructor()\n\t{\n\t\tsuper();\n\n\t\t// We allow `extend`-ing `class`-es to call super(EXTEND_NODE)\n\t\tif (arguments[0] === EXTEND_NODE) return;\n\n\t\tthrow new Error( \"Cannot directly instantiate Node.\" );\n\t}\n\t\n\tget nodeType() {return this[NODE_TYPE]}\n\t\n\tget nodeName()\n\t{\n\t\tswitch ( this.nodeType )\n\t\t{\n\t\t\tcase Node.ELEMENT_NODE: return this.tagName;\n\t\t\tcase Node.TEXT_NODE: return \"#text\";\n\t\t\tcase Node.CDATA_SECTION_NODE: return \"#cdata-section\";\n\t\t\tcase Node.PROCESSING_INSTRUCTION_NODE: return this.target;\n\t\t\tcase Node.COMMENT_NODE: return \"#comment\";\n\t\t\tcase Node.DOCUMENT_NODE: return \"#document\";\n\t\t\tcase Node.DOCUMENT_TYPE_NODE: return this.name;\n\t\t\tcase Node.DOCUMENT_FRAGMENT_NODE: return \"#document-fragment\";\n\t\t}\n\t}\n\t\n\tget parentNode() {return this[PARENT_NODE]}\n\tget ownerDocument() {return this[OWNER]}\n\tget tagName() {return this[TAG_NAME] || null}\n\t\n\tget firstChild()\n\t{\n\t\tif ( this.childNodes ) return this.childNodes[0] || null;\n\t\treturn null;\n\t}\n\t\n\tget lastChild()\n\t{\n\t\tif ( this.childNodes ) return this.childNodes[this.childNodes.length - 1] || null;\n\t\treturn null;\n\t}\n\t\n\tget previousSibling()\n\t{\n\t\tconst parent = this.parentNode;\n\t\tif ( parent )\n\t\t{\n\t\t\tconst idx = parent.childNodes.indexOf( this );\n\t\t\tif ( idx > 0 ) return parent.childNodes[idx - 1];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget nextSibling()\n\t{\n\t\tconst parent = this.parentNode;\n\t\tif ( parent )\n\t\t{\n\t\t\tconst idx = parent.childNodes.indexOf( this );\n\t\t\tif ( idx > -1 && idx < parent.childNodes.length - 1 ) return parent.childNodes[idx + 1];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget id()\n\t{\n\t\treturn (this.attributes && this.attributes.id) || \"\";\n\t}\n\tset id( id )\n\t{\n\t\tif ( this.attributes )\n\t\t\tthis.attributes.id = id;\n\t}\n\t\n\tget className()\n\t{\n\t\treturn (this.attributes && this.attributes.class) || \"\";\n\t}\n\tset className( val )\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tthis.classList.value = val;\n\t\t\tthis.attributes.class = this[CLASS_LIST].value;\n\t\t}\n\t}\n\t\n\tget classList()\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[CLASS_LIST] )\n\t\t\t\tthis[CLASS_LIST] = createTokenList( this );\n\t\t\treturn this[CLASS_LIST];\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tget innerHTML()\n\t{\n\t\tif ( this.nodeType === Node.ELEMENT_NODE )\n\t\t{\n\t\t\tlet html = \"\";\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\thtml += serializeNode( this.childNodes[i] );\n\t\t\treturn html;\n\t\t}\n\t\treturn null;\n\t}\n\tset innerHTML( html )\n\t{\n\t\tif ( this.nodeType === Node.ELEMENT_NODE && selfClosingTags[this.tagName] !== true )\n\t\t{\n\t\t\tconst nodes = parseHTML( this, html );\n\t\t\tif ( nodes )\n\t\t\t\taddChildNode( this, nodes, 0, this.childNodes.length );\n\t\t\telse\n\t\t\t{\n\t\t\t\tdetachNodes( this.childNodes );\n\t\t\t\tthis.childNodes.length = 0;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tget outerHTML()\n\t{\n\t\treturn serializeNode( this );\n\t}\n\tset outerHTML( html )\n\t{\n\t\tif ( this.parentNode )\n\t\t{\n\t\t\tconst idx = this.parentNode.childNodes.indexOf( this ),\n\t\t\t\tnodes = parseHTML( this, html );\n\t\t\tif ( nodes )\n\t\t\t\taddChildNode( this.parentNode, nodes, idx, 1 );\n\t\t\telse detachNodes( this.parentNode.childNodes.splice( idx, 1 ) );\n\t\t}\n\t}\n\n\tget style()\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[INLINE_STYLE] )\n\t\t\t\tthis[INLINE_STYLE] = createInlineStyle( this );\n\t\t\treturn this[INLINE_STYLE];\n\t\t}\n\t\treturn null;\n\t}\n\tset style( value )\n\t{\n\t\tif ( this.attributes )\n\t\t{\n\t\t\tif ( !this[INLINE_STYLE] )\n\t\t\t\tthis[INLINE_STYLE] = createInlineStyle( this );\n\n\t\t\tupdateInlineStyle( this[INLINE_STYLE], value );\n\t\t}\n\t}\n\t\n\tget textContent()\n\t{\n\t\tif ( this.childNodes )\n\t\t{\n\t\t\tlet text = \"\";\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t{\n\t\t\t\tif ( this.childNodes[i].nodeType !== Node.COMMENT_NODE &&\n\t\t\t\t\t\tthis.childNodes[i].nodeType !== Node.CDATA_SECTION_NODE &&\n\t\t\t\t\t\tthis.childNodes[i].nodeType !== Node.PROCESSING_INSTRUCTION_NODE )\n\t\t\t\t\ttext += this.childNodes[i].textContent;\n\t\t\t}\n\t\t\treturn text;\n\t\t}\n\t\treturn this.nodeValue;\n\t}\n\tset textContent( text )\n\t{\n\t\tif ( text == null )\n\t\t\ttext = \"\";\n\t\telse if ( typeof text !== \"string\" )\n\t\t\ttext += \"\";\n\t\t\n\t\tif ( this.childNodes )\n\t\t{\n\t\t\tlet node = createNode( Node.TEXT_NODE );\n\t\t\tnode.nodeValue = text;\n\t\t\tsetNodeParent( node, this );\n\t\t\t\n\t\t\tdetachNodes( this.childNodes );\n\t\t\tthis.childNodes.length = 1;\n\t\t\tthis.childNodes[0] = node;\n\t\t}\n\t\telse if ( this.nodeType >= Node.TEXT_NODE && this.nodeType <= Node.COMMENT_NODE )\n\t\t\tthis.nodeValue = text;\n\t}\n\t\n\tgetRootNode()\n\t{\n\t\tlet rootNode = this;\n\t\twhile ( rootNode.parentNode )\n\t\t\trootNode = rootNode.parentNode;\n\t\treturn rootNode;\n\t}\n\t\n\thasAttributes()\n\t{\n\t\tif ( this.attributes ) for ( let k in this.attributes )\n\t\t\tif ( this.attributes.hasOwnProperty( k ) ) return true;\n\t\treturn false;\n\t}\n\t\n\tgetAttributeNames()\n\t{\n\t\tif ( this.attributes )\n\t\t\treturn Object.keys( this.attributes );\n\t\treturn [];\n\t}\n\t\n\tgetAttribute( name )\n\t{\n\t\tvar result;\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t\tresult = this.attributes[lowerAttributeCase( this, name )];\n\t\tif ( result === undefined )\n\t\t\treturn null;\n\t\treturn result;\n\t}\n\t\n\tsetAttribute( name, value )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( name === \"class\" )\n\t\t\t{\n\t\t\t\tif ( value !== true )\n\t\t\t\t\tthis.className = \"\"+ value;\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.classList.value = \"\";\n\t\t\t\t\tthis.attributes[name] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( typeof value === \"string\" || value === true )\n\t\t\t\tthis.attributes[name] = value;\n\t\t\telse this.attributes[name] = \"\"+ value;\n\t\t}\n\t}\n\t\n\ttoggleAttribute( name, force )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( !this.attributes.hasOwnProperty( name ) )\n\t\t\t{\n\t\t\t\tif ( arguments.length === 1 || force === true )\n\t\t\t\t\treturn (this.attributes[name] = true);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\telse if ( arguments.length === 1 || force === false )\n\t\t\t{\n\t\t\t\tdelete this.attributes[name];\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t}\n\t\n\tremoveAttribute( name )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t{\n\t\t\tname = lowerAttributeCase( this, name );\n\t\t\tif ( name === \"class\" && this[CLASS_LIST] )\n\t\t\t\tthis[CLASS_LIST].value = null;\n\t\t\tdelete this.attributes[name];\n\t\t}\n\t}\n\t\n\thasAttribute( name )\n\t{\n\t\tif ( this.attributes && name && typeof name === \"string\" )\n\t\t\treturn this.attributes.hasOwnProperty( lowerAttributeCase( this, name ) );\n\t\treturn false;\n\t}\n\t\n\thasChildNodes()\n\t{\n\t\treturn (!!this.childNodes && this.childNodes.length > 0);\n\t}\n\t\n\tappendChild( child )\n\t{\n\t\treturn this.insertBefore( child, null );\n\t}\n\t\n\tinsertBefore( newChild, refChild )\n\t{\n\t\tif ( this.childNodes && newChild instanceof Node && arguments.length > 1 )\n\t\t{\n\t\t\tlet idx = -1;\n\t\t\t\n\t\t\tif ( refChild == null )\n\t\t\t\tidx = this.childNodes.length;\n\t\t\telse if ( refChild instanceof Node && refChild.parentNode === this )\n\t\t\t\tidx = this.childNodes.indexOf( refChild );\n\t\t\t\n\t\t\tif ( idx !== -1 )\n\t\t\t\treturn addChildNode( this, newChild, idx );\n\t\t}\n\t\treturn null;\n\t}\n\t\n\treplaceChild( newChild, oldChild )\n\t{\n\t\tif ( this.childNodes && oldChild instanceof Node && newChild instanceof Node &&\n\t\t\toldChild.parentNode === this && oldChild !== newChild )\n\t\t{\n\t\t\taddChildNode( this, newChild, this.childNodes.indexOf( oldChild ), 1 );\n\t\t\treturn oldChild;\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tremoveChild( child )\n\t{\n\t\tif ( this.childNodes && child instanceof Node && child.parentNode === this )\n\t\t{\n\t\t\tconst idx = this.childNodes.indexOf( child ),\n\t\t\t\towner = getDocument( this );\n\t\t\t\n\t\t\tif ( owner && child.parentNode === owner.documentElement && tagNameProp.hasOwnProperty( child.tagName ) )\n\t\t\t\towner[tagNameProp[child.tagName]] = null;\n\t\t\t\n\t\t\tdetachNodes( this.childNodes.splice( idx, 1 ) );\n\t\t\treturn child;\n\t\t}\n\t\treturn null;\n\t}\n\t\n\tcloneNode( deep )\n\t{\n\t\tvar clone;\n\t\t\n\t\tif ( this.nodeType === Node.DOCUMENT_NODE || this.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t\t\tclone = new DOM( null, this[PARSER_OPTIONS] );\n\t\telse clone = createNode( this.nodeType );\n\t\t\n\t\tswitch ( this.nodeType )\n\t\t{\n\t\t\tcase Node.ELEMENT_NODE:\n\t\t\t\tclone[TAG_NAME] = this.tagName;\n\t\t\t\tclone.attributes = Object.assign( clone.attributes, this.attributes );\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.TEXT_NODE:\n\t\t\tcase Node.CDATA_SECTION_NODE:\n\t\t\tcase Node.PROCESSING_INSTRUCTION_NODE:\n\t\t\tcase Node.COMMENT_NODE:\n\t\t\t\tclone.nodeValue = this.nodeValue;\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.DOCUMENT_NODE:\n\t\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\t\tclone[NODE_TYPE] = this.nodeType;\n\t\t\t\tclone.entityEncoder.entities = this.entityEncoder;\n\t\t\t\tbreak;\n\t\t\t\t\n\t\t\tcase Node.DOCUMENT_TYPE_NODE:\n\t\t\t\tclone.name = this.name;\n\t\t\t\tclone.publicId = this.publicId;\n\t\t\t\tclone.systemId = this.systemId;\n\t\t\t\tbreak;\n\t\t}\n\t\t\n\t\tif ( deep === true && this.childNodes && this.childNodes.length > 0 )\n\t\t{\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\tclone.appendChild( this.childNodes[i].cloneNode( true ) );\n\t\t\t\n\t\t\tif ( clone.nodeType === Node.DOCUMENT_NODE || clone.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t\t\t\tsetupDocument( clone );\n\t\t}\n\t\t\n\t\treturn clone;\n\t}\n\t\n\tgetElementById( id )\n\t{\n\t\tvar elem = null;\n\t\tif ( id && typeof id === \"string\" && this.childNodes )\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( node.id === id )\n\t\t\t\t{\n\t\t\t\t\telem = node;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\t\treturn elem;\n\t}\n\t\n\tgetElementsByClassName( className )\n\t{\n\t\tvar nodeList = [];\n\t\tif ( className && typeof className === \"string\" )\n\t\t{\n\t\t\tconst classList = className.trim().split( spacesRE );\n\t\t\tif ( classList.length > 1 || classList[0] !== \"\" ) this.forEach( node =>\n\t\t\t{\n\t\t\t\tfor ( let i = 0; i < classList.length; i++ )\n\t\t\t\t\tif ( !node.classList.contains( classList[i] ) )\n\t\t\t\t\t\treturn;\n\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\t}\n\t\treturn nodeList;\n\t}\n\t\n\tgetElementsByTagName( tagName )\n\t{\n\t\tvar nodeList = [];\n\t\tif ( tagName && typeof tagName === \"string\" )\n\t\t{\n\t\t\ttagName = tagName.toUpperCase();\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( tagName === \"*\" || node.tagName === tagName )\n\t\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\t}\n\t\treturn nodeList;\n\t}\n\t\n\tclosest( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn closest( this, selector );\n\t\telse return null;\n\t}\n\t\n\tmatches( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn matches( this, selector );\n\t\telse return false;\n\t}\n\t\n\tquerySelector( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn querySelector( this, selector, false );\n\t\telse return null;\n\t}\n\t\n\tquerySelectorAll( selector )\n\t{\n\t\tif ( selector && typeof selector === \"string\" )\n\t\t\treturn querySelector( this, selector, true );\n\t\telse return [];\n\t}\n\t\n\t// Non-standard\n\t\n\tforEach( callback, type = nodeTypes.ELEMENT_NODE )\n\t{\n\t\t// This unrolled recursive function is about 1.45x faster in Node than its\n\t\t// equivalent recursive form.\n\t\t\n\t\tlet childNodes = this.childNodes,\n\t\t\tcurrent = this.firstChild,\n\t\t\tidxStack = [],\n\t\t\tidx = 0,\n\t\t\tparent, nextSibling;\n\t\t\n\t\twhile ( current )\n\t\t{\n\t\t\t// 'parent' and 'nextSibling' are stored here so that if callback() changes\n\t\t\t// the document, we can maintain our place in the overall list of nodes by\n\t\t\t// looking for insertions, deletions, or replacements within the 'current'\n\t\t\t// node's list of siblings.\n\t\t\tparent = current[PARENT_NODE];\n\t\t\tnextSibling = childNodes[idx + 1];\n\t\t\t\n\t\t\tif ( (type === null || current.nodeType === type) &&\n\t\t\t\tcallback( current, parent ) === false )\n\t\t\t\t\treturn;\n\t\t\t\n\t\t\t// If the parent of 'current' changes during callback(), we no longer want to\n\t\t\t// look at the children of 'current' here as it was either moved or removed.\n\t\t\tif ( current[PARENT_NODE] === parent && current.childNodes && current.childNodes.length > 0 )\n\t\t\t{\n\t\t\t\tidxStack.push( idx );\n\t\t\t\tchildNodes = current.childNodes;\n\t\t\t\tcurrent = childNodes[idx = 0];\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tif ( nextSibling )\n\t\t\t\t{\n\t\t\t\t\tidx += 1;\n\t\t\t\t\t// If callback() changed the number of nodes that come before the\n\t\t\t\t\t// previously found 'nextSibling', 'idx' needs to be updated so we\n\t\t\t\t\t// don't skip over or repeat visits to any nodes.\n\t\t\t\t\tif ( nextSibling !== childNodes[idx] )\n\t\t\t\t\t\tidx = parent.childNodes.indexOf( nextSibling );\n\t\t\t\t}\n\t\t\t\telse idx = childNodes.length;\n\t\t\t\t\n\t\t\t\twhile ( childNodes[idx] == null )\n\t\t\t\t{\n\t\t\t\t\tcurrent = parent;\n\t\t\t\t\tparent = current[PARENT_NODE];\n\t\t\t\t\tif ( current && current !== this )\n\t\t\t\t\t{\n\t\t\t\t\t\tchildNodes = parent.childNodes;\n\t\t\t\t\t\tidx = idxStack.pop() + 1;\n\t\t\t\t\t}\n\t\t\t\t\telse return;\n\t\t\t\t}\n\t\t\t\tcurrent = childNodes[idx];\n\t\t\t}\n\t\t}\n\t}\n}\n\nObject.defineProperties( Node,\n{\n\tELEMENT_NODE: {value: nodeTypes.ELEMENT_NODE},\n\t//ATTRIBUTE_NODE: {value: nodeTypes.ATTRIBUTE_NODE},\n\tTEXT_NODE: {value: nodeTypes.TEXT_NODE},\n\tCDATA_SECTION_NODE: {value: nodeTypes.CDATA_SECTION_NODE},\n\t//ENTITY_REFERENCE_NODE: {value: nodeTypes.ENTITY_REFERENCE_NODE},\n\t//ENTITY_NODE: {value: nodeTypes.ENTITY_NODE},\n\tPROCESSING_INSTRUCTION_NODE: {value: nodeTypes.PROCESSING_INSTRUCTION_NODE},\n\tCOMMENT_NODE: {value: nodeTypes.COMMENT_NODE},\n\tDOCUMENT_NODE: {value: nodeTypes.DOCUMENT_NODE},\n\tDOCUMENT_TYPE_NODE: {value: nodeTypes.DOCUMENT_TYPE_NODE},\n\tDOCUMENT_FRAGMENT_NODE: {value: nodeTypes.DOCUMENT_FRAGMENT_NODE},\n\t//NOTATION_NODE: {value: nodeTypes.NOTATION_NODE},\n} );\n\nconst tagNameProp = {\n\tHEAD,\n\tBODY,\n\tFRAMESET: BODY\n};\n\nfunction addChildNode( parent, node, index, removalCount = 0 )\n{\n\tif ( !parent ||\n\t\t(parent.nodeType !== Node.ELEMENT_NODE &&\n\t \t\tparent.nodeType !== Node.DOCUMENT_NODE &&\n\t \t\tparent.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) ||\n\t\t(parent.nodeType === Node.ELEMENT_NODE && selfClosingTags[parent.tagName] === true) )\n\t\t\treturn node;\n\t\n\tif ( node.nodeType <= Node.COMMENT_NODE )\n\t{\n\t\tif ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE )\n\t\t{\n\t\t\tif ( tagNameProp.hasOwnProperty( node.tagName ) )\n\t\t\t{\n\t\t\t\tconst prop = tagNameProp[node.tagName];\n\t\t\t\tif ( parent.parentNode[prop] && removalCount === 0 )\n\t\t\t\t\treturn node;\n\t\t\t\tparent.parentNode[prop] = node;\n\t\t\t}\n\t\t}\n\t\t\n\t\tif ( node.parentNode )\n\t\t\tnode.parentNode.removeChild( node );\n\t\tsetNodeParent( node, parent );\n\t\tdetachNodes( parent.childNodes.splice( index, removalCount, node ) );\n\t}\n\telse if ( node.nodeType === Node.DOCUMENT_TYPE_NODE &&\n\t\t(parent.nodeType === Node.DOCUMENT_NODE || parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) )\n\t{\n\t\tconst owner = node.parentNode;\n\t\tif ( owner && (owner.nodeType === Node.DOCUMENT_NODE || owner.nodeType === Node.DOCUMENT_FRAGMENT_NODE) )\n\t\t{\n\t\t\towner.removeChild( node );\n\t\t\towner[DOCTYPE] = null;\n\t\t}\n\t\tsetNodeParent( node, parent );\n\t\tdetachNodes( parent.childNodes.splice( index, removalCount, node ) );\n\t\tparent[DOCTYPE] = node;\n\t}\n\telse if ( node.nodeType === Node.DOCUMENT_FRAGMENT_NODE )\n\t{\n\t\tif ( parent.parentNode && parent.parentNode.nodeType === Node.DOCUMENT_NODE )\n\t\t{\n\t\t\tif ( removalCount > 0 )\n\t\t\t\tdetachNodes( parent.childNodes.splice( index, removalCount ) );\n\t\t\tfor ( let i = node.childNodes.length - 1; i >= 0; i-- )\n\t\t\t{\n\t\t\t\tconst child = node.childNodes[i];\n\t\t\t\tif ( tagNameProp.hasOwnProperty( child.tagName ) )\n\t\t\t\t{\n\t\t\t\t\tconst prop = tagNameProp[child.tagName];\n\t\t\t\t\tif ( parent.parentNode[prop] && removalCount === 0 )\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tparent.parentNode[prop] = child;\n\t\t\t\t}\n\t\t\t\tsetNodeParent( child, parent );\n\t\t\t\tparent.childNodes.splice( index, 0, child );\n\t\t\t\tnode.childNodes.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t\telse if ( node !== getDocument( parent ) )\n\t\t{\n\t\t\tfor ( let i = 0; i < node.childNodes.length; i++ )\n\t\t\t\tsetNodeParent( node.childNodes[i], parent );\n\t\t\tdetachNodes( parent.childNodes.splice( index, removalCount, ...node.childNodes ) );\n\t\t\tnode.childNodes.length = 0;\n\t\t}\n\t}\n\t\n\treturn node;\n}\n\nfunction parseHTML( parent, html )\n{\n\tif ( html && typeof html === \"string\" )\n\t{\n\t\tconst owner = getDocument( parent );\n\t\treturn new Parser( html, owner ? owner[PARSER_OPTIONS] : null, owner ? owner.entityEncoder : null ).parseHTML();\n\t}\n}\n\nfunction lowerAttributeCase( node, name )\n{\n\tconst owner = getDocument( node );\n\tif ( owner && owner[PARSER_OPTIONS].lowerAttributeCase )\n\t\treturn name.toLowerCase();\n\treturn name;\n}","import {Lexer, EOF} from \"./lexer.js\";\nimport Node, {createNode} from \"./node.js\";\nimport {NODE_TYPE, TAG_NAME, PARSER_OPTIONS, spacesRE, selfClosingTags, setNodeParent, globalizeRegExp} from \"./utils.js\";\n\nconst toLowerCase = String.prototype.toLowerCase,\n\ttoUpperCase = String.prototype.toUpperCase,\n\t\n\tdefaultOptions = {\n\t\tallowCustomRootElement: false,\n\t\tallowSelfClosingSyntax: false,\n\t\tallowCDATA: false,\n\t\tallowProcessingInstructions: false,\n\t\tdecodeEntities: false,\n\t\tencodeEntities: false,\n\t\tcollapseWhitespace: false,\n\t\ttrimWhitespace: false,\n\t\tlowerAttributeCase: false\n\t},\n\t\n\tSTATE_START_TAG = 0,\n\tSTATE_ATTRIBUTE = 1,\n\tSTATE_END_TAG = 2,\n\t\n\t// '12.1.2.3 Attributes' from HTML5 spec.\n\tattributeNameExclusions = {\n\t\t//\"\\0\": true, // This is caught by the lexer in isWhiteSpace().\n\t\t//'\"': true, // Disabled to better match browser behaviour.\n\t\t//\"'\": true, // Disabled to better match browser behaviour.\n\t\t\">\": true,\n\t\t\"/\": true,\n\t\t\"=\": true\n\t},\n\t\n\tpTagBoundary = {P: true},\n\tdefinitionTagBoundary = {DT: true, DD: true},\n\ttableStructureTagBoundary = {TBODY: true, THEAD: true, TFOOT: true},\n\ttableCellTagBoundary = {TD: true, TH: true},\n\tformElementTagBoundary = {BUTTON: true, DATALIST: true, OPTGROUP: true, OPTION: true, PROGRESS: true, SELECT: true, TEXTAREA: true},\n\t\n\t// Largely based on '8.1.2.4 Optional tags' from the HTML5 spec.\n\t// https://www.w3.org/TR/html50/syntax.html#syntax-tag-omission\n\ttagBoundaries = {\n\t\tADDRESS: pTagBoundary,\n\t\tARTICLE: pTagBoundary,\n\t\tASIDE: pTagBoundary,\n\t\tBLOCKQUOTE: pTagBoundary,\n\t\tDIV: pTagBoundary,\n\t\tFIELDSET: pTagBoundary,\n\t\tFOOTER: pTagBoundary,\n\t\tH1: pTagBoundary,\n\t\tH2: pTagBoundary,\n\t\tH3: pTagBoundary,\n\t\tH4: pTagBoundary,\n\t\tH5: pTagBoundary,\n\t\tH6: pTagBoundary,\n\t\tHEADER: pTagBoundary,\n\t\tHGROUP: pTagBoundary,\n\t\tHR: pTagBoundary,\n\t\tMAIN: pTagBoundary,\n\t\tNAV: pTagBoundary,\n\t\tP: pTagBoundary,\n\t\tPRE: pTagBoundary,\n\t\tSECTION: pTagBoundary,\n\t\t\n\t\tBODY: {HEAD: true, TITLE: true},\n\t\t\n\t\t// Definitions\n\t\tDL: pTagBoundary,\n\t\tDD: definitionTagBoundary,\n\t\tDT: definitionTagBoundary,\n\t\t\n\t\t// Tables\n\t\tTABLE: pTagBoundary,\n\t\tTBODY: tableStructureTagBoundary,\n\t\tTHEAD: tableStructureTagBoundary,\n\t\tTD: tableCellTagBoundary,\n\t\tTFOOT: tableStructureTagBoundary,\n\t\tTH: tableCellTagBoundary,\n\t\tTR: {TR: true},\n\t\t\n\t\t// Lists\n\t\tLI: {LI: true},\n\t\tOL: pTagBoundary,\n\t\tUL: pTagBoundary,\n\t\t\n\t\t// Forms\n\t\tBUTTON: formElementTagBoundary,\n\t\tDATALIST: formElementTagBoundary,\n\t\tFORM: pTagBoundary,\n\t\tINPUT: formElementTagBoundary,\n\t\tOPTGROUP: {OPTGROUP: true, OPTION: true},\n\t\tOPTION: {OPTION: true},\n\t\tOUTPUT: formElementTagBoundary,\n\t\tPROGRESS: formElementTagBoundary,\n\t\tSELECT: formElementTagBoundary,\n\t\tTEXTAREA: formElementTagBoundary,\n\t};\n\nexport default class Parser\n{\n\tconstructor( html, options, entityEncoder )\n\t{\n\t\tthis.options = Parser.setupOptions( options );\n\t\tthis.lexer = new Lexer( html );\n\t\tthis.entityEncoder = entityEncoder;\n\t}\n\t\n\tstatic setupOptions( options )\n\t{\n\t\toptions = Object.assign( {}, defaultOptions, options );\n\t\tif ( options.encodeEntities instanceof RegExp )\n\t\t\toptions.encodeEntities = globalizeRegExp( options.encodeEntities );\n\t\treturn Object.freeze( options );\n\t}\n\t\n\tstatic isNameCharStart( chr )\n\t{\n\t\treturn chr === \":\" || chr === \"_\" || (chr >= \"A\" && chr <= \"Z\") || (chr >= \"a\" && chr <= \"z\") ||\n\t\t\t(chr >= \"\\xC0\" && chr <= \"\\xD6\") || (chr >= \"\\xD8\" && chr <= \"\\xF6\") ||\n\t\t\t(chr >= \"\\xF8\" && chr <= \"\\u02FF\") || (chr >= \"\\u0370\" && chr <= \"\\u037D\") ||\n\t\t\t(chr >= \"\\u037F\" && chr <= \"\\u1FFF\") || chr === \"\\u200C\" || chr === \"\\u200D\" ||\n\t\t\t(chr >= \"\\u2070\" && chr <= \"\\u218F\") || (chr >= \"\\u2C00\" && chr <= \"\\u2FEF\") ||\n\t\t\t(chr >= \"\\u3001\" && chr <= \"\\uD7FF\") || (chr >= \"\\uF900\" && chr <= \"\\uFDCF\") ||\n\t\t\t(chr >= \"\\uFDF0\" && chr <= \"\\uFFFD\") || (chr >= \"\\u10000\" && chr <= \"\\uEFFFF\");\n\t}\n\t\n\tstatic isNameChar( chr )\n\t{\n\t\treturn Parser.isNameCharStart( chr ) ||\n\t\t\t(chr >= \"0\" && chr <= \"9\") || chr === \"-\" || chr === \".\" || chr === \"\\xB7\" ||\n\t\t\t(chr >= \"\\u0300\" && chr <= \"\\u036F\") || chr === \"\\u203F\" || chr === \"\\u2040\";\n\t}\n\t\n\tparseHTML()\n\t{\n\t\tvar rootNode = createNode( Node.DOCUMENT_FRAGMENT_NODE ),\n\t\t\tscopeChain = [rootNode], theChar;\n\t\t\n\t\trootNode[PARSER_OPTIONS] = this.options;\n\t\t\n\t\tif ( this.options.trimWhitespace )\n\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\telse theChar = this.lexer.getChar();\n\t\t\n\t\twhile ( theChar !== EOF && scopeChain.length > 0 )\n\t\t{\n\t\t\tif ( theChar === \"<\" )\n\t\t\t\tthis.parseTag( scopeChain );\n\t\t\telse this.parseText( scopeChain );\n\t\t\t\n\t\t\tif ( this.options.trimWhitespace )\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\telse theChar = this.lexer.getChar();\n\t\t}\n\t\t\n\t\treturn rootNode;\n\t}\n\t\n\tparseTag( scopeChain )\n\t{\n\t\tvar node, name, selfClosing, state = STATE_START_TAG,\n\t\t\ttagStartIdx = this.lexer.index,\n\t\t\ttheChar = this.lexer.getNextChar(),\n\t\t\tstartIdx, endIdx;\n\t\t\n\t\tif ( theChar !== EOF )\n\tMain:\n\t\twhile ( theChar !== \">\" && theChar !== EOF )\n\t\t{\n\t\t\tstartIdx = this.lexer.index;\n\t\t\t\n\t\t\tif ( state === STATE_START_TAG )\n\t\t\t{\n\t\t\t\tif ( theChar === \"!\" || theChar === \"?\" )\n\t\t\t\t{\n\t\t\t\t\tif ( this.options.allowProcessingInstructions && this.lexer.match( \"?\" ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\ttheChar = this.lexer.getChar();\n\t\t\t\t\tPINode:\n\t\t\t\t\t\tif ( Parser.isNameCharStart( theChar ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode = createNode( Node.PROCESSING_INSTRUCTION_NODE );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// Find target's name.\n\t\t\t\t\t\t\twhile ( theChar !== EOF && Parser.isNameChar( theChar ) )\n\t\t\t\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t// If we have a non-whitespace character here that isn't EOF or\n\t\t\t\t\t\t\t// the end '?>', then we've come across an invalid name character\n\t\t\t\t\t\t\t// in the target name and this tag should be treated as a comment.\n\t\t\t\t\t\t\tif ( !this.lexer.isWhiteSpace( theChar ) && theChar !== EOF &&\n\t\t\t\t\t\t\t\t\t!(theChar === \"?\" && this.lexer.peek() === \">\") )\n\t\t\t\t\t\t\t\tbreak PINode;\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tnode.target = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tthis.lexer.skipWhiteSpace();\n\t\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\t\tthis.lexer.goToString( \"?>\" );\n\t\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\t\tthis.lexer.advance( 1 );\n\t\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\t// Go back to before the first '?' to include everything between the\n\t\t\t\t\t\t// angle brackets in the comment we're going to create from this tag.\n\t\t\t\t\t\tthis.lexer.advance( startIdx - this.lexer.index - 1 );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.allowCDATA && this.lexer.match( \"![CDATA[\" ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tnode = createNode( Node.CDATA_SECTION_NODE );\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tthis.lexer.goToString( \"]]>\" );\n\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\tthis.lexer.advance( 2 );\n\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( this.lexer.match( \"!DOCTYPE\", false ) )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.lexer.skipWhiteSpace();\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tthis.lexer.goToString( \">\" );\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet rootNode = scopeChain[scopeChain.length - 1];\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( rootNode.doctype )\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\telse if ( rootNode.childNodes.length > 0 )\n\t\t\t\t\t\t\tfor ( let i = rootNode.childNodes.length - 1; i >= 0; i-- )\n\t\t\t\t\t\t\t\tif ( rootNode.childNodes[i].nodeType < Node.TEXT_NODE || rootNode.childNodes[i].nodeType > Node.COMMENT_NODE )\n\t\t\t\t\t\t\t\t\tbreak Main;\n\t\t\t\t\t\t\n\t\t\t\t\t\tlet params = this.lexer.str.slice( startIdx, this.lexer.index ).split( spacesRE );\n\t\t\t\t\t\tnode = createNode( Node.DOCUMENT_TYPE_NODE );\n\t\t\t\t\t\tnode.name = toLowerCase.call( params.shift() );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( params.length > 1 )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlet idType = toLowerCase.call( params.shift() );\n\t\t\t\t\t\t\tparams = params.join( \" \" ).split( '\"' );\n\t\t\t\t\t\t\tif ( params[0] === \"\" ) switch ( idType )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcase \"public\":\n\t\t\t\t\t\t\t\t\tparams.shift();\n\t\t\t\t\t\t\t\t\tnode.publicId = params.shift();\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tcase \"system\":\n\t\t\t\t\t\t\t\t\tparams.shift();\n\t\t\t\t\t\t\t\t\tnode.systemId = params.shift();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( !node.publicId ) node.publicId = \"\";\n\t\t\t\t\t\tif ( !node.systemId ) node.systemId = \"\";\n\t\t\t\t\t\t\n\t\t\t\t\t\trootNode.childNodes.push( node );\n\t\t\t\t\t\trootNode.doctype = node;\n\t\t\t\t\t\tsetNodeParent( node, rootNode );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tlet endTag;\n\t\t\t\t\t\tif ( this.lexer.match( \"!--\" ) )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( !this.lexer.match( \">\" ) && !this.lexer.match( \"->\" ) )\n\t\t\t\t\t\t\t\tendTag = \"-->\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( theChar === \"!\" ) // Don't skip question marks that show up here.\n\t\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\tendTag = \">\";\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tnode = createNode( Node.COMMENT_NODE );\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\tif ( endTag ) this.lexer.goToString( endTag );\n\t\t\t\t\t\tnode.nodeValue = this.lexer.str.slice( startIdx, this.lexer.index );\n\t\t\t\t\t\tthis.lexer.advance( endTag ? endTag.length - 1 : -1 );\n\t\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( theChar === \"/\" )\n\t\t\t\t{\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tstate = STATE_END_TAG;\n\t\t\t\t\tstartIdx += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\t\n\t\t\tif ( state === STATE_ATTRIBUTE )\n\t\t\t{\n\t\t\t\t// Find an attribute name.\n\t\t\t\twhile ( (this.lexer.index === startIdx && theChar === \"=\") ||\n\t\t\t\t\t\t(!this.lexer.isWhiteSpace( theChar ) &&\n \t\t\t\t\t\t!attributeNameExclusions[theChar] &&\n \t\t\t\t\t\ttheChar !== EOF) )\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\tendIdx = this.lexer.index;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t// Find a tag name.\n\t\t\t\twhile ( ((theChar >= \"a\" && theChar <= \"z\") || (theChar >= \"A\" && theChar <= \"Z\") ||\n\t\t\t\t\t\t(this.lexer.index > startIdx && ((theChar >= \"0\" && theChar <= \"9\") || theChar === \"-\" || theChar === \"_\" || theChar === \":\"))) &&\n\t\t\t\t\t\ttheChar !== EOF )\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\tif ( theChar === EOF )\n\t\t\t\t{\n\t\t\t\t\tthis.addTextNode( scopeChain, tagStartIdx, endIdx, false );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\n\t\t\t\tif ( state === STATE_END_TAG )\n\t\t\t\t\ttheChar = this.lexer.goToString( \">\" );\n\t\t\t}\n\t\t\t\n\t\t\tif ( startIdx === endIdx )\n\t\t\t{\n\t\t\t\t// Found an illegal character while searching for an attribute or tag name.\n\t\t\t\tif ( this.options.allowSelfClosingSyntax && theChar === \"/\" && this.lexer.peek() === \">\" )\n\t\t\t\t{\n\t\t\t\t\t// If self-closing tag syntax is allowed, and we've found \"/>\", then we\n\t\t\t\t\t// need to close the tag at the top of the scope chain.\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tstate = STATE_END_TAG;\n\t\t\t\t\tname = scopeChain[0][TAG_NAME];\n\t\t\t\t}\n\t\t\t\telse if ( state === STATE_START_TAG )\n\t\t\t\t{\n\t\t\t\t\tthis.lexer.goToString( \"<\" );\n\t\t\t\t\tthis.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false );\n\t\t\t\t\ttagStartIdx = this.lexer.index;\n\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\telse if ( state === STATE_END_TAG )\n\t\t\t\t{\n\t\t\t\t\tif ( startIdx === this.lexer.index ) break; // This throws \"\" away.\n\t\t\t\t\tnode = this.addTextNode( scopeChain, startIdx, this.lexer.index );\n\t\t\t\t\tnode[NODE_TYPE] = Node.COMMENT_NODE;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// All other illegal characters are simply skipped over, along with any\n\t\t\t\t\t// following whitespace.\n\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\tname = this.lexer.str.slice( startIdx, endIdx );\n\t\t\t\tif ( state !== STATE_ATTRIBUTE )\n\t\t\t\t\tname = toUpperCase.call( name );\n\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t}\n\t\t\t\n\t\t\tswitch ( state )\n\t\t\t{\n\t\t\t\tcase STATE_START_TAG:\n\t\t\t\t\tnode = createNode( Node.ELEMENT_NODE );\n\t\t\t\t\tnode[TAG_NAME] = name;\n\t\t\t\t\twhile ( tagBoundaries.hasOwnProperty( node[TAG_NAME] ) && tagBoundaries[node[TAG_NAME]][scopeChain[0][TAG_NAME]] )\n\t\t\t\t\t\tscopeChain.splice( 0, 1 );\n\t\t\t\t\tscopeChain[0].childNodes.push( node );\n\t\t\t\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\t\t\tstate = STATE_ATTRIBUTE;\n\t\t\t\t\tselfClosing = selfClosingTags[node[TAG_NAME]];\n\t\t\t\t\tif ( selfClosing !== true ) scopeChain.unshift( node );\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_ATTRIBUTE:\n\t\t\t\t\tlet value = true;\n\t\t\t\t\t\n\t\t\t\t\tif ( this.options.lowerAttributeCase )\n\t\t\t\t\t\tname = toLowerCase.call( name );\n\t\t\t\t\t\n\t\t\t\t\tif ( theChar === \"=\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\tstartIdx = this.lexer.index;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( theChar === '\"' || theChar === \"'\" )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\tthis.lexer.goToString( theChar );\n\t\t\t\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\t\t\t\tstartIdx += 1;\n\t\t\t\t\t\t\tthis.lexer.getNextChar();\n\t\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse // Unquoted attribute value\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twhile ( !this.lexer.isWhiteSpace( theChar ) &&\n\t\t\t\t\t\t\t\t\t//!unquotedAttributeExclusions[theChar] &&\n\t\t\t\t\t\t\t\t\ttheChar !== \">\" &&\n\t\t\t\t\t\t\t\t\t(!this.options.allowSelfClosingSyntax || !(theChar === \"/\" && this.lexer.peek() === \">\")) &&\n\t\t\t\t\t\t\t\t\ttheChar !== EOF )\n\t\t\t\t\t\t\t\ttheChar = this.lexer.getNextChar();\n\t\t\t\t\t\t\tendIdx = this.lexer.index;\n\t\t\t\t\t\t\ttheChar = this.lexer.skipWhiteSpace();\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( node.attributes.hasOwnProperty( name ) ) break;\n\t\t\t\t\t\tvalue = this.lexer.str.slice( startIdx, endIdx );\n\t\t\t\t\t\t\n\t\t\t\t\t\tif ( value === \"\" )\n\t\t\t\t\t\t\tvalue = true;\n\t\t\t\t\t\telse if ( this.options.decodeEntities )\n\t\t\t\t\t\t\tvalue = this.entityEncoder.decode( value );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( node.attributes.hasOwnProperty( name ) ) break;\n\t\t\t\t\t\n\t\t\t\t\tnode.attributes[name] = value;\n\t\t\t\t\tbreak;\n\t\t\t\t\t\n\t\t\t\tcase STATE_END_TAG:\n\t\t\t\t\tfor ( let i = 0; i < scopeChain.length; i++ )\n\t\t\t\t\t\tif ( scopeChain[i][TAG_NAME] === name )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnode = scopeChain[i];\n\t\t\t\t\t\t\twhile ( scopeChain.length > 0 && scopeChain[0] !== node )\n\t\t\t\t\t\t\t\tscopeChain.shift();\n\t\t\t\t\t\t\tscopeChain.shift();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\telse this.addTextNode( scopeChain, tagStartIdx, this.lexer.index, false );\n\t\t\n\t\tthis.lexer.getNextChar();\n\t}\n\t\n\tparseText( scopeChain )\n\t{\n\t\tvar startIdx = this.lexer.index,\n\t\t\tpreserveContent = false;\n\t\t\n\t\tif ( scopeChain[0][TAG_NAME] === \"SCRIPT\" || scopeChain[0][TAG_NAME] === \"STYLE\" )\n\t\t{\n\t\t\tthis.lexer.goToString( \"<\\/\"+ scopeChain[0][TAG_NAME], false );\n\t\t\tpreserveContent = true;\n\t\t}\n\t\telse this.lexer.goToString( \"<\" );\n\t\t\n\t\tthis.addTextNode( scopeChain, startIdx, this.lexer.index, preserveContent );\n\t}\n\t\n\taddTextNode( scopeChain, startIdx, endIdx, preserveContent )\n\t{\n\t\tvar node = createNode( Node.TEXT_NODE ),\n\t\t\tvalue = this.lexer.str.slice( startIdx, endIdx );\n\t\t\n\t\tif ( preserveContent != null )\n\t\t{\n\t\t\tif ( this.options.trimWhitespace )\n\t\t\t\tvalue = value.trim();\n\t\t\telse if ( this.options.collapseWhitespace && !preserveContent )\n\t\t\t\tvalue = value.replace( spacesRE, \" \" );\n\t\t\t\n\t\t\tif ( this.options.decodeEntities && !preserveContent )\n\t\t\t\tvalue = this.entityEncoder.decode( value );\n\t\t}\n\t\t\n\t\tnode.nodeValue = value;\n\t\tscopeChain[0].childNodes.push( node );\n\t\tsetNodeParent( node, scopeChain[0] );\n\t\t\n\t\treturn node;\n\t}\n}","export class ImageData {\n constructor(widthOrData, heightOrWidth, settingsOrHeight, settings) {\n var _a, _b;\n const rgbaArray = (widthOrData instanceof Uint8ClampedArray) ? widthOrData : null;\n let colorSpace = \"srgb\";\n if (rgbaArray) {\n console.log(`[ImageData] Warning: Array initializer support is experimental! ( new ImageData([${rgbaArray.length}b ${(_b = (_a = rgbaArray === null || rgbaArray === void 0 ? void 0 : rgbaArray.constructor) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : \"Array\"}], ${Array.from(arguments).slice(1).join(',')}) )`);\n this.width = heightOrWidth;\n this.height = typeof settingsOrHeight === \"number\" ? settingsOrHeight : undefined;\n colorSpace = (typeof settingsOrHeight === \"object\" ? settingsOrHeight : (typeof settings === \"object\" ? settings : { colorSpace: \"srgb\" })).colorSpace;\n }\n else {\n this.width = widthOrData;\n this.height = heightOrWidth;\n colorSpace = (typeof settingsOrHeight === \"object\" ? settingsOrHeight : { colorSpace: \"srgb\" }).colorSpace;\n }\n if (colorSpace !== \"srgb\") {\n console.log(`[ImageData] Warning: Only the 'srgb' color space is supported! ( new ImageData(${Array.from(arguments).join(',')}) )`);\n throw new Error(`Unsupported colorSpace: ${colorSpace}`);\n }\n // We need to calculate the height based on the array data and width\n if (this.height === undefined) {\n this.height = rgbaArray.length / this.width / 4;\n }\n if (rgbaArray) {\n if (this.width * this.height * 4 !== rgbaArray.length) {\n // TODO: this should be a \"DOMException\"\n throw new Error(`The array dimensions do not match the supplied width or height`);\n }\n this.data = new Uint8ClampedArray(rgbaArray);\n }\n else {\n this.data = new Uint8ClampedArray(this.width * this.height * 4);\n }\n }\n}\n;\n// Export onto the global scope\nif (globalThis && typeof globalThis.ImageData !== \"object\") {\n // @ts-ignore\n globalThis.ImageData = ImageData;\n}\n","// https://html.spec.whatwg.org/multipage/canvas.html#canvasrenderingcontext2d\nimport { CANVAS_DATA } from \"./HTMLCanvasElement.js\";\nimport { ImageData } from \"./ImageData.js\";\nconst FILL_STYLE = Symbol(\"fill-style\");\nexport class CanvasRenderingContext2D {\n get fillStyle() {\n return this[FILL_STYLE];\n }\n set fillStyle(newStyle) {\n console.log(`${this}→fillStyle = ${newStyle}`);\n this[FILL_STYLE] = newStyle;\n }\n // CanvasRect\n clearRect(x, y, w, h) {\n throw new Error(\"Not implemented\");\n }\n fillRect(x, y, w, h) {\n const { r, g, b, a } = this.fillStyleRGBA;\n const alpha = a * 255 | 0;\n const data = this.canvas[CANVAS_DATA];\n // Optimization: full-canvas fill\n if (x === 0 && y === 0 && data.length === w * h * 4) {\n for (let i = 0; i < data.length; i += 4) {\n if (i < 100)\n console.log(`→ fill #${i} rgba(${data[i]},${data[i + 1]},${data[i + 2]} @ ${data[i + 3]}) => rgba(${r},${g},${b} @ ${alpha})`);\n data[i + 0] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = alpha;\n }\n console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) whole canvas with ${r},${g},${b} @ ${alpha}`);\n console.log(data);\n return;\n }\n for (let row = y; row < y + h; ++row) {\n const startIdx = row * 4 + x;\n const endIdx = row * 4 + x + w;\n for (let i = startIdx; i < endIdx; ++i) {\n data[i + 0] = r;\n data[i + 1] = g;\n data[i + 2] = b;\n data[i + 3] = alpha;\n }\n }\n console.log(`${this}→fillRect( ${Array.from(arguments).join(', ')} ) with ${r},${g},${b} @ ${alpha}`);\n }\n strokeRect(x, y, w, h) {\n throw new Error(\"Not implemented\");\n }\n constructor(parentCanvas) {\n this.canvas = parentCanvas;\n // defaults\n this.fillStyle = \"#000\";\n }\n drawImage(image, x1, y1, w1, h1, x2, y2, w2, h2) {\n if (image instanceof globalThis.HTMLCanvasElement) {\n w1 = w1 !== null && w1 !== void 0 ? w1 : image.width;\n h1 = h1 !== null && h1 !== void 0 ? h1 : image.height;\n if (w1 !== w2 || h1 !== h2) {\n console.log(`${this} Not implemented: image scaling in drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n return;\n }\n const srcImage = image.getContext(\"2d\").getImageData(x1, y1, w1, h1);\n const srcPixels = srcImage.data;\n const dstPixels = this.canvas[CANVAS_DATA];\n const rows = h1;\n const cols = w1;\n for (let row = 0; row < rows; ++row) {\n for (let col = 0; col < cols; ++col) {\n // source pixel\n const si = ((y1 + row) * srcImage.width + x1 + col) * 4;\n const sr = srcPixels[si];\n const sg = srcPixels[si + 1];\n const sb = srcPixels[si + 2];\n const sa = srcPixels[si + 3];\n // destination pixel\n const di = ((y2 + row) * srcImage.width + x2 + col) * 4;\n const dr = dstPixels[di];\n const dg = dstPixels[di + 1];\n const db = dstPixels[di + 2];\n const da = dstPixels[di + 3];\n // blend pixels using premultiplied alpha and the default 'source-over' composition\n // https://drafts.fxtf.org/compositing/#porterduffcompositingoperators_srcover\n const dstcontrib = (1 - sa / 255);\n dstPixels[di + 0] = sr * (sa / 255) + dr * (da / 255) * dstcontrib | 0;\n dstPixels[di + 1] = sg * (sa / 255) + dg * (da / 255) * dstcontrib | 0;\n dstPixels[di + 2] = sb * (sa / 255) + db * (da / 255) * dstcontrib | 0;\n dstPixels[di + 3] = sa + da * dstcontrib | 0;\n if (row === col) {\n console.log(`→ [${row},${col}]: imgdata#${si} rgba(${sr},${sg},${sb} @ ${sa}) + canvas#${di} rgba(${dr},${dg},${db} @ ${da}) => rgba(${dstPixels[di]},${dstPixels[di + 1]},${dstPixels[di + 2]} @ ${dstPixels[di + 3]})`);\n }\n }\n }\n console.log(`${this}→drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n return;\n }\n //let dx,dy,dw,dh;\n //let sx,sy,sw,sh;\n console.log(`${this} Not implemented: only canvas sources supported: drawImage( <${image.constructor.name}> ${Array.from(arguments).join(', ')} )`);\n }\n createImageData(widthOrImagedata, height, settings) {\n if (widthOrImagedata instanceof ImageData) {\n return new ImageData(widthOrImagedata.data, widthOrImagedata.width, widthOrImagedata.height);\n }\n return new ImageData(widthOrImagedata, height, settings);\n }\n getImageData(sx, sy, sw, sh, settings) {\n if (sx === 0 && sy === 0 && sw === this.canvas.width && sh === this.canvas.height && !settings) {\n console.log(`${this}→getImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);\n return new ImageData(this.canvas[CANVAS_DATA], this.canvas.width, this.canvas.height);\n }\n console.log(`${this} Not implemented: context2d.getImageData( ${Array.from(arguments).join(', ')} )`);\n const id = new ImageData(sw, sh, settings);\n return id;\n }\n putImageData(imagedata, dx, dy, dirtyX, dirtyY, dirtyWidth, dirtyHeight) {\n let premultWarnLow, premultWarnZero;\n const canvas = this.canvas[CANVAS_DATA];\n if (dirtyX === undefined) {\n if (dx === 0 && dy === 0 && imagedata.width === this.canvas.width && imagedata.height === this.canvas.height) {\n console.log(`${this}→putImageData( ${Array.from(arguments).join(', ')} ) whole canvas ${this.canvas.width}x${this.canvas.height}`);\n for (let col = 0; col < imagedata.height; ++col) {\n for (let row = 0; row < imagedata.width; ++row) {\n const idx = (col * imagedata.width + row) * 4;\n const alpha = imagedata.data[idx + 3], r = imagedata.data[idx + 0], g = imagedata.data[idx + 1], b = imagedata.data[idx + 2];\n // Transparent pixels that are not fully black/white have browser inconsistencies\n // Context for these warnings:\n // https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/putImageData#data_loss_due_to_browser_optimization\n if (alpha === 0 && (r | g | b) !== 0 && (r & g & b) !== 255) {\n premultWarnZero = true;\n }\n else if (alpha < 255 && (r | g | b) !== 0 && (r & g & b) !== 255) {\n premultWarnLow = true;\n }\n canvas[idx + 0] = r;\n canvas[idx + 1] = g;\n canvas[idx + 2] = b;\n canvas[idx + 3] = alpha; //a\n }\n }\n if (premultWarnLow) {\n console.log(`${this} Compat warning: image contained colored non-opaque pixels (alpha<255), the result be inconsistent with observed browser behavior.`);\n }\n if (premultWarnZero) {\n console.log(`${this} Compat warning: image contained fully transparent colored pixels (alpha=0), the result of this operation may differ from browser behavior.`);\n }\n return;\n }\n console.log(`${this} Not implemented: non-whole-canvas putImageData( ${Array.from(arguments).join(', ')} )`);\n return;\n }\n console.log(`${this} Not implemented: context2d.putImageData( ${Array.from(arguments).join(', ')} )`);\n }\n setTransform(matrixOrA, b, c, d, e, f) {\n console.log(`${this} Not implemented: context2d.setTransform( ${Array.from(arguments).join(', ')} )`);\n }\n // Stringifies the context object with its canvas & unique ID to ease debugging\n get [Symbol.toStringTag]() {\n return `${this.canvas[Symbol.toStringTag]}::context2d`;\n }\n // https://developer.mozilla.org/en-US/docs/Web/CSS/color_value\n get fillStyleRGBA() {\n let c;\n let r = 0, g = 0, b = 0, a = 1;\n // Named color ('white', 'black', etc)\n if (CSS_NAMED_COLORS.has(this.fillStyle)) {\n c = HTMLColorToRGBA(CSS_NAMED_COLORS.get(this.fillStyle));\n if (c)\n return c;\n }\n // HTML color (#aaa, #bbccdd, #rrggbbaa)\n c = HTMLColorToRGBA(this.fillStyle);\n if (c)\n return c;\n // rgb() color definition\n c = HTMLColorToRGBA(this.fillStyle);\n if (c)\n return c;\n return { r, g, b, a };\n }\n}\nexport class ImageBitmapRenderingContext {\n}\n// TODO: these are only the basic colors\nconst CSS_NAMED_COLORS = new Map([\n [\"black\", \"#000000\"],\n [\"silver\", \"#c0c0c0\"],\n [\"gray\", \"#808080\"],\n [\"white\", \"#ffffff\"],\n [\"maroon\", \"#800000\"],\n [\"red\", \"#ff0000\"],\n [\"purple\", \"#800080\"],\n [\"fuchsia\", \"#ff00ff\"],\n [\"green\", \"#008000\"],\n [\"lime\", \"#00ff00\"],\n [\"olive\", \"#808000\"],\n [\"yellow\", \"#ffff00\"],\n [\"navy\", \"#000080\"],\n [\"blue\", \"#0000ff\"],\n [\"teal\", \"#008080\"],\n [\"aqua\", \"#00ffff\"],\n]);\nfunction HTMLColorToRGBA(color) {\n var _a, _b;\n let r = 0, g = 0, b = 0, a = 0;\n let matched, wasMatched;\n // Match longform\n matched = (_a = color.match(/^#(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})(?[0-9a-f]{2})?$/)) === null || _a === void 0 ? void 0 : _a.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n r = parseInt(matched.r, 16);\n g = parseInt(matched.g, 16);\n b = parseInt(matched.b, 16);\n a = matched.a ? parseInt(matched.a, 10) : 1.0;\n wasMatched = true;\n }\n // Match short form\n matched = (_b = color.match(/^#(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})(?[0-9a-f]{1})?$/)) === null || _b === void 0 ? void 0 : _b.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n r = parseInt(matched.r, 16);\n g = parseInt(matched.g, 16);\n b = parseInt(matched.b, 16);\n a = matched.a ? parseInt(matched.a, 10) : 1.0;\n wasMatched = true;\n }\n if (!wasMatched) {\n console.log(`Not a HTML color string: ${color}`);\n return null;\n }\n return { r, g, b, a };\n}\nfunction CSSRGBColorToRGBA(color) {\n var _a;\n let matched = (_a = color.match(/rgb\\((?\\d{1,3})\\s+(?\\d{1,3})\\s+(?\\d{1,3})(\\s*\\/\\s*(?\\d{1,3})%)?/)) === null || _a === void 0 ? void 0 : _a.groups;\n if ((matched === null || matched === void 0 ? void 0 : matched.r) && (matched === null || matched === void 0 ? void 0 : matched.g) && (matched === null || matched === void 0 ? void 0 : matched.b)) {\n let r = parseInt(matched.r, 10);\n let g = parseInt(matched.g, 10);\n let b = parseInt(matched.b, 10);\n let a = matched.a ? parseInt(matched.a, 10) / 100 : 1.0;\n return { r, g, b, a };\n }\n console.log(`Not a CSS color definition': ${color}`);\n return null;\n}\n","// https://html.spec.whatwg.org/multipage/canvas.html#the-canvas-element\nimport Node, { EXTEND_NODE } from '../node.js';\nimport { CanvasRenderingContext2D,\n// ImageBitmaps currently unsupported\n// https://developer.mozilla.org/en-US/docs/Web/API/ImageBitmap\n//ImageBitmapRenderingContext, ImageBitmapRenderingContextSettings,\n } from './RenderingContext.js';\n// Implementation\nconst WIDTH = Symbol(\"canvas-width\");\nconst HEIGHT = Symbol(\"canvas-height\");\nconst CONTEXT = Symbol(\"canvas-context\");\nconst EID = Symbol(\"element-id\");\n// Access canvas data (for the Context or testing/debugging)\nexport const CANVAS_DATA = Symbol(\"accesscanvas-data\");\nexport class HTMLCanvasElement extends Node {\n get width() {\n console.debug(`${this}→width? (${this[WIDTH]})`);\n return this[WIDTH];\n }\n get height() {\n console.debug(`${this}→height? (${this[HEIGHT]})`);\n return this[HEIGHT];\n }\n set width(width) {\n console.debug(`${this}→width = ${width}`);\n this[WIDTH] = width;\n this.resize(this[WIDTH], this[HEIGHT]);\n }\n set height(height) {\n console.debug(`${this}→height = ${height}`);\n this[HEIGHT] = height;\n this.resize(this[WIDTH], this[HEIGHT]);\n }\n //getContext(contextId: \"bitmaprenderer\", options?: ImageBitmapRenderingContextSettings): ImageBitmapRenderingContext | null;\n //getContext(contextId: string, options?: any): RenderingContext | null;\n getContext(contextId, _options) {\n if (contextId != \"2d\")\n throw new Error(`Not implemented: ${contextId}`);\n this[CONTEXT] = this[CONTEXT] || new CanvasRenderingContext2D(this);\n if (!(this[CONTEXT] instanceof CanvasRenderingContext2D))\n throw new Error(`Context invalid`);\n return this[CONTEXT];\n }\n toDataURL(_type = \"image/png\", _quality) {\n throw new Error(\"Not implemented\");\n }\n toBlob(_callback, _type = \"image/png\", _quality) {\n throw new Error(\"Not implemented\");\n }\n get clientWidth() {\n return this.width;\n }\n get clientHeight() {\n return this.height;\n }\n constructor() {\n super(EXTEND_NODE);\n // Assign a new pseudo-random element ID\n this[EID] = (Math.random() * (Math.pow(36, 6)) | 0).toString(36);\n // The default size of a new canvas in most implementations\n this.resize(300, 150);\n }\n // Stringifies the object including its unique element tag\n get [Symbol.toStringTag]() {\n return `HTMLCanvasElement#${this[EID]}`;\n }\n resize(width, height) {\n this[WIDTH] = width;\n this[HEIGHT] = height;\n this[CANVAS_DATA] = new Uint8ClampedArray(this[WIDTH] * this[HEIGHT] * 4);\n console.debug(`${this}→reset, new size: ${this[WIDTH]}x${this[HEIGHT]} (${this[CANVAS_DATA].length}b)`);\n }\n}\n;\n// Export onto the global scope\nif (globalThis && typeof globalThis.HTMLCanvasElement !== \"object\") {\n // @ts-ignore\n globalThis.HTMLCanvasElement = HTMLCanvasElement;\n}\n","import Node, {createNode} from \"./node.js\";\nimport {HTMLCanvasElement} from \"./js-canvas/HTMLCanvasElement.js\";\nimport {NODE_TYPE, PARENT_NODE, OWNER, TAG_NAME} from \"./utils.js\";\n\nexport function createCanvasNode( nodeType )\n{\n\tconst node = new HTMLCanvasElement()\n\n\tnode[NODE_TYPE] = nodeType;\n\tnode.nodeValue = null;\n\tnode[PARENT_NODE] = null;\n\tnode[OWNER] = null;\n\t\n\tswitch ( nodeType )\n\t{\n\t\tcase Node.ELEMENT_NODE:\n\t\t\tnode[TAG_NAME] = null;\n\t\t\tnode.attributes = {};\n\t\t\t// fallthrough\n\t\t\t\n\t\tcase Node.DOCUMENT_NODE:\n\t\tcase Node.DOCUMENT_FRAGMENT_NODE:\n\t\t\tnode.childNodes = [];\n\t}\n\t\n\treturn node;\n}\n","import {globalizeRegExp} from \"./utils.js\";\n\nconst decodingRE = /&(#\\d+|#[xX][0-9a-fA-F]+|[0-9a-zA-Z]+);?/g,\n\t\n\t// From 'SyntaxCharacter' in section 21.2.1 (Patterns) of the ECMAScript 6.0 spec.\n\tregExpEscapeRE = /[\\^$\\\\.*+?()[\\]{}|]/g,\n\t\n\t_defaultEntities = processEntities( {\n\t\t\"amp\": \"&\",\n\t\t\"apos\": \"'\",\n\t\t\"copy\": 169,\n\t\t\"gt\": \">\",\n\t\t\"lt\": \"<\",\n\t\t\"nbsp\": 160,\n\t\t\"quot\": '\"'\n\t} );\n\nlet defaultEntities = _defaultEntities;\n\nexport default class EntityEncoder\n{\n\tconstructor( entities )\n\t{\n\t\tthis.entities = entities || \"default\";\n\t}\n\t\n\tencode( string, what )\n\t{\n\t\tif ( !this.encodingReplacements ) return string;\n\t\treturn string.replace( what instanceof RegExp ? globalizeRegExp( what ) : this.encodingRE, chr => this.encodingReplacements[chr] || chr );\n\t}\n\t\n\tdecode( string )\n\t{\n\t\tif ( !this.decodingReplacements ) return string;\n\t\treturn string.replace( decodingRE, ( _, m ) =>\n\t\t{\n\t\t\tif ( m[0] === \"#\" )\n\t\t\t{\n\t\t\t\tif ( m[1] === \"x\" || m[1] === \"X\" )\n\t\t\t\t\tm = parseInt( m.slice( 2 ), 16 ) | 0;\n\t\t\t\telse m = m.slice( 1 ) | 0;\n\t\t\t\treturn String.fromCodePoint( m );\n\t\t\t}\n\t\t\treturn this.decodingReplacements[m] || this.decodingReplacements[m.toLowerCase()] || _;\n\t\t} );\n\t}\n\t\n\tset entities( entities )\n\t{\n\t\tif ( entities === \"default\" )\n\t\t\tentities = defaultEntities;\n\t\telse if ( !entities || !(entities.encodingRE instanceof RegExp) )\n\t\t\tentities = processEntities( entities );\n\t\t\n\t\tthis.encodingRE = entities.encodingRE;\n\t\tthis.encodingReplacements = entities.encodingReplacements;\n\t\tthis.decodingReplacements = entities.decodingReplacements;\n\t}\n\t\n\tstatic set defaultEntities( entities )\n\t{\n\t\tif ( entities && typeof entities === \"object\" )\n\t\t\tdefaultEntities = processEntities( Object.assign( {}, entities ) );\n\t\telse defaultEntities = _defaultEntities;\n\t}\n}\n\nfunction processEntities( entities )\n{\n\tvar result = {\n\t\t\tencodingRE: null,\n\t\t\tencodingReplacements: null,\n\t\t\tdecodingReplacements: null\n\t\t};\n\t\n\tif ( entities && typeof entities === \"object\" )\n\t{\n\t\tconst escapes = {},\n\t\t\tunescapes = {},\n\t\t\tentityList = [];\n\t\t\n\t\tfor ( let k in entities )\n\t\t\tif ( entities.hasOwnProperty( k ) )\n\t\t\t{\n\t\t\t\tlet entity = entities[k];\n\t\t\t\t\n\t\t\t\tif ( Number.isFinite( entity ) )\n\t\t\t\t\tentity = String.fromCodePoint( entity );\n\t\t\t\telse if ( typeof entity !== \"string\" || entity === \"\" )\n\t\t\t\t\tcontinue;\n\t\t\t\t\n\t\t\t\tentityList.push( entity.replace( regExpEscapeRE, \"\\\\$&\" ) );\n\t\t\t\tif ( !escapes.hasOwnProperty( entity ) || (k.length + 2) < escapes[entity].length )\n\t\t\t\t\tescapes[entity] = \"&\"+ k +\";\";\n\t\t\t\tunescapes[k] = entity;\n\t\t\t}\n\t\t\n\t\tif ( entityList.length > 0 )\n\t\t{\n\t\t\tresult.encodingRE = new RegExp( entityList.join( \"|\" ), \"g\" );\n\t\t\tresult.encodingReplacements = escapes;\n\t\t\tresult.decodingReplacements = unescapes;\n\t\t}\n\t}\n\t\n\tif ( !result.encodingRE )\n\t\tresult.encodingRE = new RegExp( \"(?:)\", \"g\" );\n\t\n\treturn result;\n}","import \"./polyfills.js\";\n\nimport Parser from \"./html-parser.js\";\nimport Node, {createNode} from \"./node.js\";\nimport {createCanvasNode} from \"./canvas-node.js\";\nimport {serializeNode} from \"./serializer.js\";\nimport EntityEncoder from \"./entity-encoder.js\";\nimport {DOCTYPE, HEAD, BODY, DOCUMENT_ELEMENT, NODE_TYPE, TAG_NAME, PARSER_OPTIONS,\n\tsetupDocument, detachNodes, setNodeParent} from \"./utils.js\";\n\n/* @START_UNIT_TESTS */\nimport {parseSelector} from \"./selector-parser.js\";\n/* @END_UNIT_TESTS */\n\nconst ENTITY_ENCODER = Symbol( \"entityEncoder\" );\n\nexport default class DOM extends Node\n{\n\tconstructor( html, options )\n\t{\n\t\tconst node = createNode( Node.DOCUMENT_FRAGMENT_NODE, DOM );\n\t\tnode[PARSER_OPTIONS] = Parser.setupOptions( options );\n\t\tnode[ENTITY_ENCODER] = new EntityEncoder( node[PARSER_OPTIONS].entities );\n\t\tnode.innerHTML = html;\n\t\treturn node;\n\t}\n\t\n\tget documentElement() {return this[DOCUMENT_ELEMENT] || null}\n\t\n\tget innerHTML()\n\t{\n\t\tlet html = \"\";\n\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\thtml += serializeNode( this.childNodes[i] );\n\t\treturn html;\n\t}\n\tset innerHTML( html )\n\t{\n\t\tthis[NODE_TYPE] = Node.DOCUMENT_FRAGMENT_NODE;\n\t\tif ( html && typeof html === \"string\" )\n\t\t{\n\t\t\tconst rootNode = new Parser( html, this[PARSER_OPTIONS], this[ENTITY_ENCODER] ).parseHTML();\n\t\t\t\n\t\t\tdetachNodes( this.childNodes );\n\t\t\t\n\t\t\tif ( rootNode.doctype )\n\t\t\t\tthis[DOCTYPE] = rootNode.doctype;\n\t\t\telse this[DOCTYPE] = null;\n\t\t\t\n\t\t\tthis.childNodes = rootNode.childNodes;\n\t\t\tfor ( let i = 0; i < this.childNodes.length; i++ )\n\t\t\t\tsetNodeParent( this.childNodes[i], this );\n\t\t\t\n\t\t\tsetupDocument( this );\n\t\t}\n\t\telse this.childNodes.length = 0;\n\t}\n\t\n\tget outerHTML() {return null}\n\tset outerHTML( v ) {}\n\t\n\tget doctype()\n\t{\n\t\treturn this[DOCTYPE] || null;\n\t}\n\tset doctype( val )\n\t{\n\t\tif ( val )\n\t\t{\n\t\t\tlet doctype = this[DOCTYPE];\n\t\t\tif ( val instanceof Node )\n\t\t\t{\n\t\t\t\tif ( val.nodeType === Node.DOCUMENT_TYPE_NODE && val !== doctype )\n\t\t\t\t{\n\t\t\t\t\tthis[DOCTYPE] = val;\n\t\t\t\t\tif ( doctype ) this.replaceChild( val, doctype );\n\t\t\t\t\telse this.insertBefore( val, this.firstChild );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( typeof val === \"object\" )\n\t\t\t{\n\t\t\t\tif ( !doctype )\n\t\t\t\t\tthis[DOCTYPE] = this.insertBefore( this.createDocumentType( val.name, val.publicId, val.systemId ), this.firstChild );\n\t\t\t\telse setupDocumentType( doctype, val.name, val.publicId, val.systemId );\n\t\t\t}\n\t\t}\n\t\telse if ( val === null && this[DOCTYPE] )\n\t\t{\n\t\t\tthis.removeChild( this[DOCTYPE] );\n\t\t\tthis[DOCTYPE] = null;\n\t\t}\n\t}\n\t\n\tget head()\n\t{\n\t\treturn this[HEAD] || null;\n\t}\n\t\n\tget title()\n\t{\n\t\tconst head = this.head;\n\t\tif ( head )\n\t\t{\n\t\t\tconst title = head.getElementsByTagName( \"title\" );\n\t\t\tif ( title.length > 0 )\n\t\t\t\treturn title[0].textContent;\n\t\t}\n\t\treturn \"\";\n\t}\n\tset title( val )\n\t{\n\t\tconst head = this.head;\n\t\tif ( head )\n\t\t{\n\t\t\tlet title = head.getElementsByTagName( \"title\" );\n\t\t\tif ( title.length <= 0 )\n\t\t\t\ttitle = head.appendChild( this.createElement( \"title\" ) );\n\t\t\telse title = title[0];\n\t\t\ttitle.textContent = val;\n\t\t}\n\t}\n\t\n\tget body()\n\t{\n\t\treturn this[BODY] || null;\n\t}\n\tset body( val )\n\t{\n\t\tif ( val instanceof Node && val.nodeType === Node.ELEMENT_NODE &&\n\t\t\t(val.tagName === \"BODY\" || val.tagName === \"FRAMESET\") &&\n\t\t\tval !== this[BODY] && this[DOCUMENT_ELEMENT] )\n\t\t{\n\t\t\tif ( this[BODY] ) this[BODY].parentNode.replaceChild( val, this[BODY] );\n\t\t\telse this[DOCUMENT_ELEMENT].appendChild( val );\n\t\t}\n\t}\n\n\tget entityEncoder()\n\t{\n\t\treturn this[ENTITY_ENCODER];\n\t}\n\n\tcreateElement( tagName )\n\t{\n\t\tif ( tagName && typeof tagName === \"string\" )\n\t\t{\n\t\t\tconst node = createNodeForTagName( tagName );\n\t\t\tnode[TAG_NAME] = tagName.toUpperCase();\n\t\t\treturn node;\n\t\t}\n\t}\n\n\tcreateTextNode( text )\n\t{\n\t\treturn createTextBasedNode( Node.TEXT_NODE, text );\n\t}\n\n\tcreateComment( data )\n\t{\n\t\treturn createTextBasedNode( Node.COMMENT_NODE, data );\n\t}\n\n\tcreateCDATASection( data )\n\t{\n\t\treturn createTextBasedNode( Node.CDATA_SECTION_NODE, data, \"]]>\" );\n\t}\n\n\tcreateProcessingInstruction( target, data )\n\t{\n\tNewNode:\n\t\tif ( target && typeof target === \"string\" )\n\t\t{\n\t\t\tif ( Parser.isNameCharStart( target[0] ) )\n\t\t\t\tfor ( let i = 1; i < target.length; i++ )\n\t\t\t\t{\n\t\t\t\t\tif ( !Parser.isNameChar( target[i] ) )\n\t\t\t\t\t\tbreak NewNode;\n\t\t\t\t}\n\t\t\telse break NewNode;\n\t\t\t\n\t\t\tconst node = createTextBasedNode( Node.PROCESSING_INSTRUCTION_NODE, data, \"?>\" );\n\t\t\tnode.target = target;\n\t\t\treturn node;\n\t\t}\n\t\tthrow new Error( \"Invalid target name \"+ JSON.stringify( target ) +\".\" );\n\t}\n\n\tcreateDocumentType( name, publicId, systemId )\n\t{\n\t\treturn setupDocumentType( createNode( Node.DOCUMENT_TYPE_NODE ), name, publicId, systemId );\n\t}\n\n\tgetElementsByName( name )\n\t{\n\t\tconst nodeList = [];\n\t\tif ( name && typeof name === \"string\" )\n\t\t\tthis.forEach( node =>\n\t\t\t{\n\t\t\t\tif ( node.attributes && node.attributes.name === name )\n\t\t\t\t\tnodeList.push( node );\n\t\t\t} );\n\t\treturn nodeList;\n\t}\n}\n\nfunction createTextBasedNode( type, text, disallowed = false )\n{\n\tconst node = createNode( type );\n\tnode.nodeValue = \"\";\n\tif ( text && typeof text === \"string\" )\n\t{\n\t\tif ( disallowed && typeof disallowed === \"string\" && text.indexOf( disallowed ) !== -1 )\n\t\t\tthrow new Error( \"The data provided ('\"+ text +\"') contains '\"+ disallowed +\"'.\" );\n\t\tnode.nodeValue += text;\n\t}\n\treturn node;\n}\n\nfunction setupDocumentType( doctype, name, publicId, systemId )\n{\n\tif ( name && typeof name === \"string\" )\n\t{\n\t\tdoctype.name = name.toLowerCase();\n\t\t\n\t\tif ( publicId && typeof publicId === \"string\" )\n\t\t\tdoctype.publicId = publicId;\n\t\telse doctype.publicId = \"\";\n\t\t\n\t\tif ( systemId && typeof systemId === \"string\" )\n\t\t\tdoctype.systemId = systemId;\n\t\telse doctype.systemId = \"\";\n\t}\n\telse doctype.name = doctype.publicId = doctype.systemId = \"\";\n\t\n\treturn doctype;\n}\n\nfunction createNodeForTagName( tagName )\n{\n\tswitch ( tagName.toLowerCase() )\n\t{\n\t\tcase 'canvas':\n\t\t\treturn createCanvasNode( Node.ELEMENT_NODE );\n\t\tdefault:\n\t\t\treturn createNode( Node.ELEMENT_NODE );\n\t}\n}\n\n/* @START_UNIT_TESTS */\nDOM.parseSelector = parseSelector;\n/* @END_UNIT_TESTS */\n\nDOM.Node = Node;\nDOM.EntityEncoder = EntityEncoder;\n"],"names":["ELEMENT"],"mappings":"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"} \ No newline at end of file