1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284528552865287528852895290529152925293529452955296529752985299530053015302530353045305530653075308530953105311531253135314531553165317531853195320532153225323532453255326532753285329533053315332533353345335533653375338533953405341534253435344534553465347534853495350535153525353535453555356535753585359536053615362536353645365536653675368536953705371537253735374537553765377537853795380538153825383538453855386538753885389539053915392539353945395539653975398539954005401540254035404540554065407540854095410541154125413541454155416541754185419542054215422542354245425542654275428542954305431543254335434543554365437543854395440544154425443544454455446544754485449545054515452545354545455545654575458545954605461546254635464546554665467546854695470547154725473547454755476547754785479548054815482548354845485548654875488548954905491549254935494549554965497549854995500550155025503550455055506550755085509551055115512551355145515551655175518551955205521552255235524552555265527552855295530553155325533553455355536553755385539554055415542554355445545554655475548554955505551555255535554555555565557555855595560556155625563556455655566556755685569557055715572557355745575557655775578557955805581558255835584558555865587558855895590559155925593559455955596559755985599560056015602560356045605560656075608560956105611561256135614561556165617561856195620562156225623562456255626562756285629563056315632563356345635563656375638563956405641564256435644564556465647564856495650565156525653565456555656565756585659566056615662566356645665566656675668566956705671567256735674567556765677567856795680568156825683568456855686568756885689569056915692569356945695569656975698569957005701570257035704570557065707570857095710571157125713571457155716571757185719572057215722572357245725572657275728572957305731573257335734573557365737573857395740574157425743574457455746574757485749575057515752575357545755575657575758575957605761576257635764576557665767576857695770577157725773577457755776577757785779578057815782578357845785578657875788578957905791579257935794579557965797579857995800580158025803580458055806580758085809581058115812581358145815581658175818581958205821582258235824582558265827582858295830583158325833583458355836583758385839584058415842584358445845584658475848584958505851585258535854585558565857585858595860586158625863586458655866586758685869587058715872587358745875587658775878587958805881588258835884588558865887588858895890589158925893589458955896589758985899590059015902590359045905590659075908590959105911591259135914591559165917591859195920592159225923592459255926592759285929593059315932593359345935593659375938593959405941594259435944594559465947594859495950595159525953595459555956595759585959596059615962596359645965596659675968596959705971597259735974597559765977597859795980598159825983598459855986598759885989599059915992599359945995599659975998599960006001600260036004600560066007600860096010601160126013601460156016601760186019602060216022602360246025602660276028602960306031603260336034603560366037603860396040604160426043604460456046604760486049605060516052605360546055605660576058605960606061606260636064606560666067606860696070607160726073607460756076607760786079608060816082608360846085608660876088608960906091609260936094609560966097609860996100610161026103610461056106610761086109611061116112611361146115611661176118611961206121612261236124612561266127612861296130613161326133613461356136613761386139614061416142614361446145614661476148614961506151615261536154615561566157615861596160616161626163616461656166616761686169617061716172617361746175617661776178617961806181618261836184618561866187618861896190619161926193619461956196619761986199620062016202620362046205620662076208620962106211621262136214621562166217621862196220622162226223622462256226622762286229623062316232623362346235623662376238623962406241624262436244624562466247624862496250625162526253625462556256625762586259626062616262626362646265626662676268626962706271627262736274627562766277627862796280628162826283628462856286628762886289629062916292629362946295629662976298629963006301630263036304630563066307630863096310631163126313631463156316631763186319632063216322632363246325632663276328632963306331633263336334633563366337633863396340634163426343634463456346634763486349635063516352635363546355635663576358635963606361636263636364636563666367636863696370637163726373637463756376637763786379638063816382638363846385638663876388638963906391639263936394639563966397639863996400640164026403640464056406640764086409641064116412641364146415641664176418641964206421642264236424642564266427642864296430643164326433643464356436643764386439644064416442644364446445644664476448644964506451645264536454645564566457645864596460646164626463646464656466646764686469647064716472647364746475647664776478647964806481648264836484648564866487648864896490649164926493649464956496649764986499650065016502650365046505650665076508650965106511651265136514651565166517651865196520652165226523652465256526652765286529653065316532653365346535653665376538653965406541654265436544654565466547654865496550655165526553655465556556655765586559656065616562656365646565656665676568656965706571657265736574657565766577657865796580658165826583658465856586658765886589659065916592659365946595659665976598659966006601660266036604660566066607660866096610661166126613661466156616661766186619662066216622662366246625662666276628662966306631663266336634663566366637663866396640664166426643664466456646664766486649665066516652665366546655665666576658665966606661666266636664666566666667666866696670667166726673667466756676667766786679668066816682668366846685668666876688668966906691669266936694669566966697669866996700670167026703670467056706670767086709671067116712671367146715671667176718671967206721672267236724672567266727672867296730673167326733673467356736673767386739674067416742674367446745674667476748674967506751675267536754675567566757675867596760676167626763676467656766676767686769677067716772677367746775677667776778677967806781678267836784678567866787678867896790679167926793679467956796679767986799680068016802680368046805680668076808680968106811681268136814681568166817681868196820682168226823682468256826682768286829683068316832683368346835683668376838683968406841684268436844684568466847684868496850685168526853685468556856685768586859686068616862686368646865686668676868686968706871687268736874687568766877687868796880688168826883688468856886688768886889689068916892689368946895689668976898689969006901690269036904690569066907690869096910691169126913691469156916691769186919692069216922692369246925692669276928692969306931693269336934693569366937693869396940694169426943694469456946694769486949695069516952695369546955695669576958695969606961696269636964696569666967696869696970697169726973697469756976697769786979698069816982698369846985698669876988698969906991699269936994699569966997699869997000700170027003700470057006700770087009701070117012701370147015701670177018701970207021702270237024702570267027702870297030703170327033703470357036703770387039704070417042704370447045704670477048704970507051705270537054705570567057705870597060706170627063706470657066706770687069707070717072707370747075707670777078707970807081708270837084708570867087708870897090709170927093709470957096709770987099710071017102710371047105710671077108710971107111711271137114711571167117711871197120712171227123712471257126712771287129713071317132713371347135713671377138713971407141714271437144714571467147714871497150715171527153715471557156715771587159716071617162716371647165716671677168716971707171717271737174717571767177717871797180718171827183718471857186718771887189719071917192719371947195719671977198719972007201720272037204720572067207720872097210721172127213721472157216721772187219722072217222722372247225722672277228722972307231723272337234723572367237723872397240724172427243724472457246724772487249725072517252725372547255725672577258725972607261726272637264726572667267726872697270727172727273727472757276727772787279728072817282728372847285728672877288728972907291729272937294729572967297729872997300730173027303730473057306730773087309731073117312731373147315731673177318731973207321732273237324732573267327732873297330733173327333733473357336733773387339734073417342734373447345734673477348734973507351735273537354735573567357735873597360736173627363736473657366736773687369737073717372737373747375737673777378737973807381738273837384738573867387738873897390739173927393739473957396739773987399740074017402740374047405740674077408740974107411741274137414741574167417741874197420742174227423742474257426742774287429743074317432743374347435743674377438743974407441744274437444744574467447744874497450745174527453745474557456 |
- (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.plist = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
- (function (Buffer){(function (){
- /**
- * Module dependencies.
- */
-
- const { DOMParser } = require('@xmldom/xmldom');
-
- /**
- * Module exports.
- */
-
- exports.parse = parse;
-
- var TEXT_NODE = 3;
- var CDATA_NODE = 4;
- var COMMENT_NODE = 8;
-
-
- /**
- * We ignore raw text (usually whitespace), <!-- xml comments -->,
- * and raw CDATA nodes.
- *
- * @param {Element} node
- * @returns {Boolean}
- * @api private
- */
-
- function shouldIgnoreNode (node) {
- return node.nodeType === TEXT_NODE
- || node.nodeType === COMMENT_NODE
- || node.nodeType === CDATA_NODE;
- }
-
- /**
- * Check if the node is empty. Some plist file has such node:
- * <key />
- * this node shoud be ignored.
- *
- * @see https://github.com/TooTallNate/plist.js/issues/66
- * @param {Element} node
- * @returns {Boolean}
- * @api private
- */
- function isEmptyNode(node){
- if(!node.childNodes || node.childNodes.length === 0) {
- return true;
- } else {
- return false;
- }
- }
-
- function invariant(test, message) {
- if (!test) {
- throw new Error(message);
- }
- }
-
- /**
- * Parses a Plist XML string. Returns an Object.
- *
- * @param {String} xml - the XML String to decode
- * @returns {Mixed} the decoded value from the Plist XML
- * @api public
- */
-
- function parse (xml) {
- var doc = new DOMParser().parseFromString(xml);
- invariant(
- doc.documentElement.nodeName === 'plist',
- 'malformed document. First element should be <plist>'
- );
- var plist = parsePlistXML(doc.documentElement);
-
- // the root <plist> node gets interpreted as an Array,
- // so pull out the inner data first
- if (plist.length == 1) plist = plist[0];
-
- return plist;
- }
-
- /**
- * Convert an XML based plist document into a JSON representation.
- *
- * @param {Object} xml_node - current XML node in the plist
- * @returns {Mixed} built up JSON object
- * @api private
- */
-
- function parsePlistXML (node) {
- var i, new_obj, key, val, new_arr, res, counter, type;
-
- if (!node)
- return null;
-
- if (node.nodeName === 'plist') {
- new_arr = [];
- if (isEmptyNode(node)) {
- return new_arr;
- }
- for (i=0; i < node.childNodes.length; i++) {
- if (!shouldIgnoreNode(node.childNodes[i])) {
- new_arr.push( parsePlistXML(node.childNodes[i]));
- }
- }
- return new_arr;
- } else if (node.nodeName === 'dict') {
- new_obj = {};
- key = null;
- counter = 0;
- if (isEmptyNode(node)) {
- return new_obj;
- }
- for (i=0; i < node.childNodes.length; i++) {
- if (shouldIgnoreNode(node.childNodes[i])) continue;
- if (counter % 2 === 0) {
- invariant(
- node.childNodes[i].nodeName === 'key',
- 'Missing key while parsing <dict/>.'
- );
- key = parsePlistXML(node.childNodes[i]);
- } else {
- invariant(
- node.childNodes[i].nodeName !== 'key',
- 'Unexpected key "'
- + parsePlistXML(node.childNodes[i])
- + '" while parsing <dict/>.'
- );
- new_obj[key] = parsePlistXML(node.childNodes[i]);
- }
- counter += 1;
- }
- if (counter % 2 === 1) {
- new_obj[key] = '';
- }
-
- return new_obj;
-
- } else if (node.nodeName === 'array') {
- new_arr = [];
- if (isEmptyNode(node)) {
- return new_arr;
- }
- for (i=0; i < node.childNodes.length; i++) {
- if (!shouldIgnoreNode(node.childNodes[i])) {
- res = parsePlistXML(node.childNodes[i]);
- if (null != res) new_arr.push(res);
- }
- }
- return new_arr;
-
- } else if (node.nodeName === '#text') {
- // TODO: what should we do with text types? (CDATA sections)
-
- } else if (node.nodeName === 'key') {
- if (isEmptyNode(node)) {
- return '';
- }
-
- invariant(
- node.childNodes[0].nodeValue !== '__proto__',
- '__proto__ keys can lead to prototype pollution. More details on CVE-2022-22912'
- );
-
- return node.childNodes[0].nodeValue;
- } else if (node.nodeName === 'string') {
- res = '';
- if (isEmptyNode(node)) {
- return res;
- }
- for (i=0; i < node.childNodes.length; i++) {
- var type = node.childNodes[i].nodeType;
- if (type === TEXT_NODE || type === CDATA_NODE) {
- res += node.childNodes[i].nodeValue;
- }
- }
- return res;
-
- } else if (node.nodeName === 'integer') {
- invariant(
- !isEmptyNode(node),
- 'Cannot parse "" as integer.'
- );
- return parseInt(node.childNodes[0].nodeValue, 10);
-
- } else if (node.nodeName === 'real') {
- invariant(
- !isEmptyNode(node),
- 'Cannot parse "" as real.'
- );
- res = '';
- for (i=0; i < node.childNodes.length; i++) {
- if (node.childNodes[i].nodeType === TEXT_NODE) {
- res += node.childNodes[i].nodeValue;
- }
- }
- return parseFloat(res);
-
- } else if (node.nodeName === 'data') {
- res = '';
- if (isEmptyNode(node)) {
- return Buffer.from(res, 'base64');
- }
- for (i=0; i < node.childNodes.length; i++) {
- if (node.childNodes[i].nodeType === TEXT_NODE) {
- res += node.childNodes[i].nodeValue.replace(/\s+/g, '');
- }
- }
- return Buffer.from(res, 'base64');
-
- } else if (node.nodeName === 'date') {
- invariant(
- !isEmptyNode(node),
- 'Cannot parse "" as Date.'
- )
- return new Date(node.childNodes[0].nodeValue);
-
- } else if (node.nodeName === 'null') {
- return null;
-
- } else if (node.nodeName === 'true') {
- return true;
-
- } else if (node.nodeName === 'false') {
- return false;
- } else {
- throw new Error('Invalid PLIST tag ' + node.nodeName);
- }
- }
-
- }).call(this)}).call(this,require("buffer").Buffer)
- },{"@xmldom/xmldom":6,"buffer":9}],2:[function(require,module,exports){
- 'use strict'
-
- /**
- * Ponyfill for `Array.prototype.find` which is only available in ES6 runtimes.
- *
- * Works with anything that has a `length` property and index access properties, including NodeList.
- *
- * @template {unknown} T
- * @param {Array<T> | ({length:number, [number]: T})} list
- * @param {function (item: T, index: number, list:Array<T> | ({length:number, [number]: T})):boolean} predicate
- * @param {Partial<Pick<ArrayConstructor['prototype'], 'find'>>?} ac `Array.prototype` by default,
- * allows injecting a custom implementation in tests
- * @returns {T | undefined}
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find
- * @see https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.find
- */
- function find(list, predicate, ac) {
- if (ac === undefined) {
- ac = Array.prototype;
- }
- if (list && typeof ac.find === 'function') {
- return ac.find.call(list, predicate);
- }
- for (var i = 0; i < list.length; i++) {
- if (Object.prototype.hasOwnProperty.call(list, i)) {
- var item = list[i];
- if (predicate.call(undefined, item, i, list)) {
- return item;
- }
- }
- }
- }
-
- /**
- * "Shallow freezes" an object to render it immutable.
- * Uses `Object.freeze` if available,
- * otherwise the immutability is only in the type.
- *
- * Is used to create "enum like" objects.
- *
- * @template T
- * @param {T} object the object to freeze
- * @param {Pick<ObjectConstructor, 'freeze'> = Object} oc `Object` by default,
- * allows to inject custom object constructor for tests
- * @returns {Readonly<T>}
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
- */
- function freeze(object, oc) {
- if (oc === undefined) {
- oc = Object
- }
- return oc && typeof oc.freeze === 'function' ? oc.freeze(object) : object
- }
-
- /**
- * Since we can not rely on `Object.assign` we provide a simplified version
- * that is sufficient for our needs.
- *
- * @param {Object} target
- * @param {Object | null | undefined} source
- *
- * @returns {Object} target
- * @throws TypeError if target is not an object
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign
- * @see https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.assign
- */
- function assign(target, source) {
- if (target === null || typeof target !== 'object') {
- throw new TypeError('target is not an object')
- }
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key]
- }
- }
- return target
- }
-
- /**
- * All mime types that are allowed as input to `DOMParser.parseFromString`
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString#Argument02 MDN
- * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#domparsersupportedtype WHATWG HTML Spec
- * @see DOMParser.prototype.parseFromString
- */
- var MIME_TYPE = freeze({
- /**
- * `text/html`, the only mime type that triggers treating an XML document as HTML.
- *
- * @see DOMParser.SupportedType.isHTML
- * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
- * @see https://en.wikipedia.org/wiki/HTML Wikipedia
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
- * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring WHATWG HTML Spec
- */
- HTML: 'text/html',
-
- /**
- * Helper method to check a mime type if it indicates an HTML document
- *
- * @param {string} [value]
- * @returns {boolean}
- *
- * @see https://www.iana.org/assignments/media-types/text/html IANA MimeType registration
- * @see https://en.wikipedia.org/wiki/HTML Wikipedia
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser/parseFromString MDN
- * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-domparser-parsefromstring */
- isHTML: function (value) {
- return value === MIME_TYPE.HTML
- },
-
- /**
- * `application/xml`, the standard mime type for XML documents.
- *
- * @see https://www.iana.org/assignments/media-types/application/xml IANA MimeType registration
- * @see https://tools.ietf.org/html/rfc7303#section-9.1 RFC 7303
- * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
- */
- XML_APPLICATION: 'application/xml',
-
- /**
- * `text/html`, an alias for `application/xml`.
- *
- * @see https://tools.ietf.org/html/rfc7303#section-9.2 RFC 7303
- * @see https://www.iana.org/assignments/media-types/text/xml IANA MimeType registration
- * @see https://en.wikipedia.org/wiki/XML_and_MIME Wikipedia
- */
- XML_TEXT: 'text/xml',
-
- /**
- * `application/xhtml+xml`, indicates an XML document that has the default HTML namespace,
- * but is parsed as an XML document.
- *
- * @see https://www.iana.org/assignments/media-types/application/xhtml+xml IANA MimeType registration
- * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument WHATWG DOM Spec
- * @see https://en.wikipedia.org/wiki/XHTML Wikipedia
- */
- XML_XHTML_APPLICATION: 'application/xhtml+xml',
-
- /**
- * `image/svg+xml`,
- *
- * @see https://www.iana.org/assignments/media-types/image/svg+xml IANA MimeType registration
- * @see https://www.w3.org/TR/SVG11/ W3C SVG 1.1
- * @see https://en.wikipedia.org/wiki/Scalable_Vector_Graphics Wikipedia
- */
- XML_SVG_IMAGE: 'image/svg+xml',
- })
-
- /**
- * Namespaces that are used in this code base.
- *
- * @see http://www.w3.org/TR/REC-xml-names
- */
- var NAMESPACE = freeze({
- /**
- * The XHTML namespace.
- *
- * @see http://www.w3.org/1999/xhtml
- */
- HTML: 'http://www.w3.org/1999/xhtml',
-
- /**
- * Checks if `uri` equals `NAMESPACE.HTML`.
- *
- * @param {string} [uri]
- *
- * @see NAMESPACE.HTML
- */
- isHTML: function (uri) {
- return uri === NAMESPACE.HTML
- },
-
- /**
- * The SVG namespace.
- *
- * @see http://www.w3.org/2000/svg
- */
- SVG: 'http://www.w3.org/2000/svg',
-
- /**
- * The `xml:` namespace.
- *
- * @see http://www.w3.org/XML/1998/namespace
- */
- XML: 'http://www.w3.org/XML/1998/namespace',
-
- /**
- * The `xmlns:` namespace
- *
- * @see https://www.w3.org/2000/xmlns/
- */
- XMLNS: 'http://www.w3.org/2000/xmlns/',
- })
-
- exports.assign = assign;
- exports.find = find;
- exports.freeze = freeze;
- exports.MIME_TYPE = MIME_TYPE;
- exports.NAMESPACE = NAMESPACE;
-
- },{}],3:[function(require,module,exports){
- var conventions = require("./conventions");
- var dom = require('./dom')
- var entities = require('./entities');
- var sax = require('./sax');
-
- var DOMImplementation = dom.DOMImplementation;
-
- var NAMESPACE = conventions.NAMESPACE;
-
- var ParseError = sax.ParseError;
- var XMLReader = sax.XMLReader;
-
- /**
- * Normalizes line ending according to https://www.w3.org/TR/xml11/#sec-line-ends:
- *
- * > XML parsed entities are often stored in computer files which,
- * > for editing convenience, are organized into lines.
- * > These lines are typically separated by some combination
- * > of the characters CARRIAGE RETURN (#xD) and LINE FEED (#xA).
- * >
- * > To simplify the tasks of applications, the XML processor must behave
- * > as if it normalized all line breaks in external parsed entities (including the document entity)
- * > on input, before parsing, by translating all of the following to a single #xA character:
- * >
- * > 1. the two-character sequence #xD #xA
- * > 2. the two-character sequence #xD #x85
- * > 3. the single character #x85
- * > 4. the single character #x2028
- * > 5. any #xD character that is not immediately followed by #xA or #x85.
- *
- * @param {string} input
- * @returns {string}
- */
- function normalizeLineEndings(input) {
- return input
- .replace(/\r[\n\u0085]/g, '\n')
- .replace(/[\r\u0085\u2028]/g, '\n')
- }
-
- /**
- * @typedef Locator
- * @property {number} [columnNumber]
- * @property {number} [lineNumber]
- */
-
- /**
- * @typedef DOMParserOptions
- * @property {DOMHandler} [domBuilder]
- * @property {Function} [errorHandler]
- * @property {(string) => string} [normalizeLineEndings] used to replace line endings before parsing
- * defaults to `normalizeLineEndings`
- * @property {Locator} [locator]
- * @property {Record<string, string>} [xmlns]
- *
- * @see normalizeLineEndings
- */
-
- /**
- * The DOMParser interface provides the ability to parse XML or HTML source code
- * from a string into a DOM `Document`.
- *
- * _xmldom is different from the spec in that it allows an `options` parameter,
- * to override the default behavior._
- *
- * @param {DOMParserOptions} [options]
- * @constructor
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMParser
- * @see https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html#dom-parsing-and-serialization
- */
- function DOMParser(options){
- this.options = options ||{locator:{}};
- }
-
- DOMParser.prototype.parseFromString = function(source,mimeType){
- var options = this.options;
- var sax = new XMLReader();
- var domBuilder = options.domBuilder || new DOMHandler();//contentHandler and LexicalHandler
- var errorHandler = options.errorHandler;
- var locator = options.locator;
- var defaultNSMap = options.xmlns||{};
- var isHTML = /\/x?html?$/.test(mimeType);//mimeType.toLowerCase().indexOf('html') > -1;
- var entityMap = isHTML ? entities.HTML_ENTITIES : entities.XML_ENTITIES;
- if(locator){
- domBuilder.setDocumentLocator(locator)
- }
-
- sax.errorHandler = buildErrorHandler(errorHandler,domBuilder,locator);
- sax.domBuilder = options.domBuilder || domBuilder;
- if(isHTML){
- defaultNSMap[''] = NAMESPACE.HTML;
- }
- defaultNSMap.xml = defaultNSMap.xml || NAMESPACE.XML;
- var normalize = options.normalizeLineEndings || normalizeLineEndings;
- if (source && typeof source === 'string') {
- sax.parse(
- normalize(source),
- defaultNSMap,
- entityMap
- )
- } else {
- sax.errorHandler.error('invalid doc source')
- }
- return domBuilder.doc;
- }
- function buildErrorHandler(errorImpl,domBuilder,locator){
- if(!errorImpl){
- if(domBuilder instanceof DOMHandler){
- return domBuilder;
- }
- errorImpl = domBuilder ;
- }
- var errorHandler = {}
- var isCallback = errorImpl instanceof Function;
- locator = locator||{}
- function build(key){
- var fn = errorImpl[key];
- if(!fn && isCallback){
- fn = errorImpl.length == 2?function(msg){errorImpl(key,msg)}:errorImpl;
- }
- errorHandler[key] = fn && function(msg){
- fn('[xmldom '+key+']\t'+msg+_locator(locator));
- }||function(){};
- }
- build('warning');
- build('error');
- build('fatalError');
- return errorHandler;
- }
-
- //console.log('#\n\n\n\n\n\n\n####')
- /**
- * +ContentHandler+ErrorHandler
- * +LexicalHandler+EntityResolver2
- * -DeclHandler-DTDHandler
- *
- * DefaultHandler:EntityResolver, DTDHandler, ContentHandler, ErrorHandler
- * DefaultHandler2:DefaultHandler,LexicalHandler, DeclHandler, EntityResolver2
- * @link http://www.saxproject.org/apidoc/org/xml/sax/helpers/DefaultHandler.html
- */
- function DOMHandler() {
- this.cdata = false;
- }
- function position(locator,node){
- node.lineNumber = locator.lineNumber;
- node.columnNumber = locator.columnNumber;
- }
- /**
- * @see org.xml.sax.ContentHandler#startDocument
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ContentHandler.html
- */
- DOMHandler.prototype = {
- startDocument : function() {
- this.doc = new DOMImplementation().createDocument(null, null, null);
- if (this.locator) {
- this.doc.documentURI = this.locator.systemId;
- }
- },
- startElement:function(namespaceURI, localName, qName, attrs) {
- var doc = this.doc;
- var el = doc.createElementNS(namespaceURI, qName||localName);
- var len = attrs.length;
- appendElement(this, el);
- this.currentElement = el;
-
- this.locator && position(this.locator,el)
- for (var i = 0 ; i < len; i++) {
- var namespaceURI = attrs.getURI(i);
- var value = attrs.getValue(i);
- var qName = attrs.getQName(i);
- var attr = doc.createAttributeNS(namespaceURI, qName);
- this.locator &&position(attrs.getLocator(i),attr);
- attr.value = attr.nodeValue = value;
- el.setAttributeNode(attr)
- }
- },
- endElement:function(namespaceURI, localName, qName) {
- var current = this.currentElement
- var tagName = current.tagName;
- this.currentElement = current.parentNode;
- },
- startPrefixMapping:function(prefix, uri) {
- },
- endPrefixMapping:function(prefix) {
- },
- processingInstruction:function(target, data) {
- var ins = this.doc.createProcessingInstruction(target, data);
- this.locator && position(this.locator,ins)
- appendElement(this, ins);
- },
- ignorableWhitespace:function(ch, start, length) {
- },
- characters:function(chars, start, length) {
- chars = _toString.apply(this,arguments)
- //console.log(chars)
- if(chars){
- if (this.cdata) {
- var charNode = this.doc.createCDATASection(chars);
- } else {
- var charNode = this.doc.createTextNode(chars);
- }
- if(this.currentElement){
- this.currentElement.appendChild(charNode);
- }else if(/^\s*$/.test(chars)){
- this.doc.appendChild(charNode);
- //process xml
- }
- this.locator && position(this.locator,charNode)
- }
- },
- skippedEntity:function(name) {
- },
- endDocument:function() {
- this.doc.normalize();
- },
- setDocumentLocator:function (locator) {
- if(this.locator = locator){// && !('lineNumber' in locator)){
- locator.lineNumber = 0;
- }
- },
- //LexicalHandler
- comment:function(chars, start, length) {
- chars = _toString.apply(this,arguments)
- var comm = this.doc.createComment(chars);
- this.locator && position(this.locator,comm)
- appendElement(this, comm);
- },
-
- startCDATA:function() {
- //used in characters() methods
- this.cdata = true;
- },
- endCDATA:function() {
- this.cdata = false;
- },
-
- startDTD:function(name, publicId, systemId) {
- var impl = this.doc.implementation;
- if (impl && impl.createDocumentType) {
- var dt = impl.createDocumentType(name, publicId, systemId);
- this.locator && position(this.locator,dt)
- appendElement(this, dt);
- this.doc.doctype = dt;
- }
- },
- /**
- * @see org.xml.sax.ErrorHandler
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ErrorHandler.html
- */
- warning:function(error) {
- console.warn('[xmldom warning]\t'+error,_locator(this.locator));
- },
- error:function(error) {
- console.error('[xmldom error]\t'+error,_locator(this.locator));
- },
- fatalError:function(error) {
- throw new ParseError(error, this.locator);
- }
- }
- function _locator(l){
- if(l){
- return '\n@'+(l.systemId ||'')+'#[line:'+l.lineNumber+',col:'+l.columnNumber+']'
- }
- }
- function _toString(chars,start,length){
- if(typeof chars == 'string'){
- return chars.substr(start,length)
- }else{//java sax connect width xmldom on rhino(what about: "? && !(chars instanceof String)")
- if(chars.length >= start+length || start){
- return new java.lang.String(chars,start,length)+'';
- }
- return chars;
- }
- }
-
- /*
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/LexicalHandler.html
- * used method of org.xml.sax.ext.LexicalHandler:
- * #comment(chars, start, length)
- * #startCDATA()
- * #endCDATA()
- * #startDTD(name, publicId, systemId)
- *
- *
- * IGNORED method of org.xml.sax.ext.LexicalHandler:
- * #endDTD()
- * #startEntity(name)
- * #endEntity(name)
- *
- *
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/DeclHandler.html
- * IGNORED method of org.xml.sax.ext.DeclHandler
- * #attributeDecl(eName, aName, type, mode, value)
- * #elementDecl(name, model)
- * #externalEntityDecl(name, publicId, systemId)
- * #internalEntityDecl(name, value)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/ext/EntityResolver2.html
- * IGNORED method of org.xml.sax.EntityResolver2
- * #resolveEntity(String name,String publicId,String baseURI,String systemId)
- * #resolveEntity(publicId, systemId)
- * #getExternalSubset(name, baseURI)
- * @link http://www.saxproject.org/apidoc/org/xml/sax/DTDHandler.html
- * IGNORED method of org.xml.sax.DTDHandler
- * #notationDecl(name, publicId, systemId) {};
- * #unparsedEntityDecl(name, publicId, systemId, notationName) {};
- */
- "endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl".replace(/\w+/g,function(key){
- DOMHandler.prototype[key] = function(){return null}
- })
-
- /* Private static helpers treated below as private instance methods, so don't need to add these to the public API; we might use a Relator to also get rid of non-standard public properties */
- function appendElement (hander,node) {
- if (!hander.currentElement) {
- hander.doc.appendChild(node);
- } else {
- hander.currentElement.appendChild(node);
- }
- }//appendChild and setAttributeNS are preformance key
-
- exports.__DOMHandler = DOMHandler;
- exports.normalizeLineEndings = normalizeLineEndings;
- exports.DOMParser = DOMParser;
-
- },{"./conventions":2,"./dom":4,"./entities":5,"./sax":7}],4:[function(require,module,exports){
- var conventions = require("./conventions");
-
- var find = conventions.find;
- var NAMESPACE = conventions.NAMESPACE;
-
- /**
- * A prerequisite for `[].filter`, to drop elements that are empty
- * @param {string} input
- * @returns {boolean}
- */
- function notEmptyString (input) {
- return input !== ''
- }
- /**
- * @see https://infra.spec.whatwg.org/#split-on-ascii-whitespace
- * @see https://infra.spec.whatwg.org/#ascii-whitespace
- *
- * @param {string} input
- * @returns {string[]} (can be empty)
- */
- function splitOnASCIIWhitespace(input) {
- // U+0009 TAB, U+000A LF, U+000C FF, U+000D CR, U+0020 SPACE
- return input ? input.split(/[\t\n\f\r ]+/).filter(notEmptyString) : []
- }
-
- /**
- * Adds element as a key to current if it is not already present.
- *
- * @param {Record<string, boolean | undefined>} current
- * @param {string} element
- * @returns {Record<string, boolean | undefined>}
- */
- function orderedSetReducer (current, element) {
- if (!current.hasOwnProperty(element)) {
- current[element] = true;
- }
- return current;
- }
-
- /**
- * @see https://infra.spec.whatwg.org/#ordered-set
- * @param {string} input
- * @returns {string[]}
- */
- function toOrderedSet(input) {
- if (!input) return [];
- var list = splitOnASCIIWhitespace(input);
- return Object.keys(list.reduce(orderedSetReducer, {}))
- }
-
- /**
- * Uses `list.indexOf` to implement something like `Array.prototype.includes`,
- * which we can not rely on being available.
- *
- * @param {any[]} list
- * @returns {function(any): boolean}
- */
- function arrayIncludes (list) {
- return function(element) {
- return list && list.indexOf(element) !== -1;
- }
- }
-
- function copy(src,dest){
- for(var p in src){
- if (Object.prototype.hasOwnProperty.call(src, p)) {
- dest[p] = src[p];
- }
- }
- }
-
- /**
- ^\w+\.prototype\.([_\w]+)\s*=\s*((?:.*\{\s*?[\r\n][\s\S]*?^})|\S.*?(?=[;\r\n]));?
- ^\w+\.prototype\.([_\w]+)\s*=\s*(\S.*?(?=[;\r\n]));?
- */
- function _extends(Class,Super){
- var pt = Class.prototype;
- if(!(pt instanceof Super)){
- function t(){};
- t.prototype = Super.prototype;
- t = new t();
- copy(pt,t);
- Class.prototype = pt = t;
- }
- if(pt.constructor != Class){
- if(typeof Class != 'function'){
- console.error("unknown Class:"+Class)
- }
- pt.constructor = Class
- }
- }
-
- // Node Types
- var NodeType = {}
- var ELEMENT_NODE = NodeType.ELEMENT_NODE = 1;
- var ATTRIBUTE_NODE = NodeType.ATTRIBUTE_NODE = 2;
- var TEXT_NODE = NodeType.TEXT_NODE = 3;
- var CDATA_SECTION_NODE = NodeType.CDATA_SECTION_NODE = 4;
- var ENTITY_REFERENCE_NODE = NodeType.ENTITY_REFERENCE_NODE = 5;
- var ENTITY_NODE = NodeType.ENTITY_NODE = 6;
- var PROCESSING_INSTRUCTION_NODE = NodeType.PROCESSING_INSTRUCTION_NODE = 7;
- var COMMENT_NODE = NodeType.COMMENT_NODE = 8;
- var DOCUMENT_NODE = NodeType.DOCUMENT_NODE = 9;
- var DOCUMENT_TYPE_NODE = NodeType.DOCUMENT_TYPE_NODE = 10;
- var DOCUMENT_FRAGMENT_NODE = NodeType.DOCUMENT_FRAGMENT_NODE = 11;
- var NOTATION_NODE = NodeType.NOTATION_NODE = 12;
-
- // ExceptionCode
- var ExceptionCode = {}
- var ExceptionMessage = {};
- var INDEX_SIZE_ERR = ExceptionCode.INDEX_SIZE_ERR = ((ExceptionMessage[1]="Index size error"),1);
- var DOMSTRING_SIZE_ERR = ExceptionCode.DOMSTRING_SIZE_ERR = ((ExceptionMessage[2]="DOMString size error"),2);
- var HIERARCHY_REQUEST_ERR = ExceptionCode.HIERARCHY_REQUEST_ERR = ((ExceptionMessage[3]="Hierarchy request error"),3);
- var WRONG_DOCUMENT_ERR = ExceptionCode.WRONG_DOCUMENT_ERR = ((ExceptionMessage[4]="Wrong document"),4);
- var INVALID_CHARACTER_ERR = ExceptionCode.INVALID_CHARACTER_ERR = ((ExceptionMessage[5]="Invalid character"),5);
- var NO_DATA_ALLOWED_ERR = ExceptionCode.NO_DATA_ALLOWED_ERR = ((ExceptionMessage[6]="No data allowed"),6);
- var NO_MODIFICATION_ALLOWED_ERR = ExceptionCode.NO_MODIFICATION_ALLOWED_ERR = ((ExceptionMessage[7]="No modification allowed"),7);
- var NOT_FOUND_ERR = ExceptionCode.NOT_FOUND_ERR = ((ExceptionMessage[8]="Not found"),8);
- var NOT_SUPPORTED_ERR = ExceptionCode.NOT_SUPPORTED_ERR = ((ExceptionMessage[9]="Not supported"),9);
- var INUSE_ATTRIBUTE_ERR = ExceptionCode.INUSE_ATTRIBUTE_ERR = ((ExceptionMessage[10]="Attribute in use"),10);
- //level2
- var INVALID_STATE_ERR = ExceptionCode.INVALID_STATE_ERR = ((ExceptionMessage[11]="Invalid state"),11);
- var SYNTAX_ERR = ExceptionCode.SYNTAX_ERR = ((ExceptionMessage[12]="Syntax error"),12);
- var INVALID_MODIFICATION_ERR = ExceptionCode.INVALID_MODIFICATION_ERR = ((ExceptionMessage[13]="Invalid modification"),13);
- var NAMESPACE_ERR = ExceptionCode.NAMESPACE_ERR = ((ExceptionMessage[14]="Invalid namespace"),14);
- var INVALID_ACCESS_ERR = ExceptionCode.INVALID_ACCESS_ERR = ((ExceptionMessage[15]="Invalid access"),15);
-
- /**
- * DOM Level 2
- * Object DOMException
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/ecma-script-binding.html
- * @see http://www.w3.org/TR/REC-DOM-Level-1/ecma-script-language-binding.html
- */
- function DOMException(code, message) {
- if(message instanceof Error){
- var error = message;
- }else{
- error = this;
- Error.call(this, ExceptionMessage[code]);
- this.message = ExceptionMessage[code];
- if(Error.captureStackTrace) Error.captureStackTrace(this, DOMException);
- }
- error.code = code;
- if(message) this.message = this.message + ": " + message;
- return error;
- };
- DOMException.prototype = Error.prototype;
- copy(ExceptionCode,DOMException)
-
- /**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-536297177
- * The NodeList interface provides the abstraction of an ordered collection of nodes, without defining or constraining how this collection is implemented. NodeList objects in the DOM are live.
- * The items in the NodeList are accessible via an integral index, starting from 0.
- */
- function NodeList() {
- };
- NodeList.prototype = {
- /**
- * The number of nodes in the list. The range of valid child node indices is 0 to length-1 inclusive.
- * @standard level1
- */
- length:0,
- /**
- * Returns the indexth item in the collection. If index is greater than or equal to the number of nodes in the list, this returns null.
- * @standard level1
- * @param index unsigned long
- * Index into the collection.
- * @return Node
- * The node at the indexth position in the NodeList, or null if that is not a valid index.
- */
- item: function(index) {
- return this[index] || null;
- },
- toString:function(isHTML,nodeFilter){
- for(var buf = [], i = 0;i<this.length;i++){
- serializeToString(this[i],buf,isHTML,nodeFilter);
- }
- return buf.join('');
- },
- /**
- * @private
- * @param {function (Node):boolean} predicate
- * @returns {Node[]}
- */
- filter: function (predicate) {
- return Array.prototype.filter.call(this, predicate);
- },
- /**
- * @private
- * @param {Node} item
- * @returns {number}
- */
- indexOf: function (item) {
- return Array.prototype.indexOf.call(this, item);
- },
- };
-
- function LiveNodeList(node,refresh){
- this._node = node;
- this._refresh = refresh
- _updateLiveList(this);
- }
- function _updateLiveList(list){
- var inc = list._node._inc || list._node.ownerDocument._inc;
- if(list._inc != inc){
- var ls = list._refresh(list._node);
- //console.log(ls.length)
- __set__(list,'length',ls.length);
- copy(ls,list);
- list._inc = inc;
- }
- }
- LiveNodeList.prototype.item = function(i){
- _updateLiveList(this);
- return this[i];
- }
-
- _extends(LiveNodeList,NodeList);
-
- /**
- * Objects implementing the NamedNodeMap interface are used
- * to represent collections of nodes that can be accessed by name.
- * Note that NamedNodeMap does not inherit from NodeList;
- * NamedNodeMaps are not maintained in any particular order.
- * Objects contained in an object implementing NamedNodeMap may also be accessed by an ordinal index,
- * but this is simply to allow convenient enumeration of the contents of a NamedNodeMap,
- * and does not imply that the DOM specifies an order to these Nodes.
- * NamedNodeMap objects in the DOM are live.
- * used for attributes or DocumentType entities
- */
- function NamedNodeMap() {
- };
-
- function _findNodeIndex(list,node){
- var i = list.length;
- while(i--){
- if(list[i] === node){return i}
- }
- }
-
- function _addNamedNode(el,list,newAttr,oldAttr){
- if(oldAttr){
- list[_findNodeIndex(list,oldAttr)] = newAttr;
- }else{
- list[list.length++] = newAttr;
- }
- if(el){
- newAttr.ownerElement = el;
- var doc = el.ownerDocument;
- if(doc){
- oldAttr && _onRemoveAttribute(doc,el,oldAttr);
- _onAddAttribute(doc,el,newAttr);
- }
- }
- }
- function _removeNamedNode(el,list,attr){
- //console.log('remove attr:'+attr)
- var i = _findNodeIndex(list,attr);
- if(i>=0){
- var lastIndex = list.length-1
- while(i<lastIndex){
- list[i] = list[++i]
- }
- list.length = lastIndex;
- if(el){
- var doc = el.ownerDocument;
- if(doc){
- _onRemoveAttribute(doc,el,attr);
- attr.ownerElement = null;
- }
- }
- }else{
- throw new DOMException(NOT_FOUND_ERR,new Error(el.tagName+'@'+attr))
- }
- }
- NamedNodeMap.prototype = {
- length:0,
- item:NodeList.prototype.item,
- getNamedItem: function(key) {
- // if(key.indexOf(':')>0 || key == 'xmlns'){
- // return null;
- // }
- //console.log()
- var i = this.length;
- while(i--){
- var attr = this[i];
- //console.log(attr.nodeName,key)
- if(attr.nodeName == key){
- return attr;
- }
- }
- },
- setNamedItem: function(attr) {
- var el = attr.ownerElement;
- if(el && el!=this._ownerElement){
- throw new DOMException(INUSE_ATTRIBUTE_ERR);
- }
- var oldAttr = this.getNamedItem(attr.nodeName);
- _addNamedNode(this._ownerElement,this,attr,oldAttr);
- return oldAttr;
- },
- /* returns Node */
- setNamedItemNS: function(attr) {// raises: WRONG_DOCUMENT_ERR,NO_MODIFICATION_ALLOWED_ERR,INUSE_ATTRIBUTE_ERR
- var el = attr.ownerElement, oldAttr;
- if(el && el!=this._ownerElement){
- throw new DOMException(INUSE_ATTRIBUTE_ERR);
- }
- oldAttr = this.getNamedItemNS(attr.namespaceURI,attr.localName);
- _addNamedNode(this._ownerElement,this,attr,oldAttr);
- return oldAttr;
- },
-
- /* returns Node */
- removeNamedItem: function(key) {
- var attr = this.getNamedItem(key);
- _removeNamedNode(this._ownerElement,this,attr);
- return attr;
-
-
- },// raises: NOT_FOUND_ERR,NO_MODIFICATION_ALLOWED_ERR
-
- //for level2
- removeNamedItemNS:function(namespaceURI,localName){
- var attr = this.getNamedItemNS(namespaceURI,localName);
- _removeNamedNode(this._ownerElement,this,attr);
- return attr;
- },
- getNamedItemNS: function(namespaceURI, localName) {
- var i = this.length;
- while(i--){
- var node = this[i];
- if(node.localName == localName && node.namespaceURI == namespaceURI){
- return node;
- }
- }
- return null;
- }
- };
-
- /**
- * The DOMImplementation interface represents an object providing methods
- * which are not dependent on any particular document.
- * Such an object is returned by the `Document.implementation` property.
- *
- * __The individual methods describe the differences compared to the specs.__
- *
- * @constructor
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation MDN
- * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-102161490 DOM Level 1 Core (Initial)
- * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#ID-102161490 DOM Level 2 Core
- * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#ID-102161490 DOM Level 3 Core
- * @see https://dom.spec.whatwg.org/#domimplementation DOM Living Standard
- */
- function DOMImplementation() {
- }
-
- DOMImplementation.prototype = {
- /**
- * The DOMImplementation.hasFeature() method returns a Boolean flag indicating if a given feature is supported.
- * The different implementations fairly diverged in what kind of features were reported.
- * The latest version of the spec settled to force this method to always return true, where the functionality was accurate and in use.
- *
- * @deprecated It is deprecated and modern browsers return true in all cases.
- *
- * @param {string} feature
- * @param {string} [version]
- * @returns {boolean} always true
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/hasFeature MDN
- * @see https://www.w3.org/TR/REC-DOM-Level-1/level-one-core.html#ID-5CED94D7 DOM Level 1 Core
- * @see https://dom.spec.whatwg.org/#dom-domimplementation-hasfeature DOM Living Standard
- */
- hasFeature: function(feature, version) {
- return true;
- },
- /**
- * Creates an XML Document object of the specified type with its document element.
- *
- * __It behaves slightly different from the description in the living standard__:
- * - There is no interface/class `XMLDocument`, it returns a `Document` instance.
- * - `contentType`, `encoding`, `mode`, `origin`, `url` fields are currently not declared.
- * - this implementation is not validating names or qualified names
- * (when parsing XML strings, the SAX parser takes care of that)
- *
- * @param {string|null} namespaceURI
- * @param {string} qualifiedName
- * @param {DocumentType=null} doctype
- * @returns {Document}
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocument MDN
- * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocument DOM Level 2 Core (initial)
- * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocument DOM Level 2 Core
- *
- * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
- * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
- * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
- */
- createDocument: function(namespaceURI, qualifiedName, doctype){
- var doc = new Document();
- doc.implementation = this;
- doc.childNodes = new NodeList();
- doc.doctype = doctype || null;
- if (doctype){
- doc.appendChild(doctype);
- }
- if (qualifiedName){
- var root = doc.createElementNS(namespaceURI, qualifiedName);
- doc.appendChild(root);
- }
- return doc;
- },
- /**
- * Returns a doctype, with the given `qualifiedName`, `publicId`, and `systemId`.
- *
- * __This behavior is slightly different from the in the specs__:
- * - this implementation is not validating names or qualified names
- * (when parsing XML strings, the SAX parser takes care of that)
- *
- * @param {string} qualifiedName
- * @param {string} [publicId]
- * @param {string} [systemId]
- * @returns {DocumentType} which can either be used with `DOMImplementation.createDocument` upon document creation
- * or can be put into the document via methods like `Node.insertBefore()` or `Node.replaceChild()`
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/DOMImplementation/createDocumentType MDN
- * @see https://www.w3.org/TR/DOM-Level-2-Core/core.html#Level-2-Core-DOM-createDocType DOM Level 2 Core
- * @see https://dom.spec.whatwg.org/#dom-domimplementation-createdocumenttype DOM Living Standard
- *
- * @see https://dom.spec.whatwg.org/#validate-and-extract DOM: Validate and extract
- * @see https://www.w3.org/TR/xml/#NT-NameStartChar XML Spec: Names
- * @see https://www.w3.org/TR/xml-names/#ns-qualnames XML Namespaces: Qualified names
- */
- createDocumentType: function(qualifiedName, publicId, systemId){
- var node = new DocumentType();
- node.name = qualifiedName;
- node.nodeName = qualifiedName;
- node.publicId = publicId || '';
- node.systemId = systemId || '';
-
- return node;
- }
- };
-
-
- /**
- * @see http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-1950641247
- */
-
- function Node() {
- };
-
- Node.prototype = {
- firstChild : null,
- lastChild : null,
- previousSibling : null,
- nextSibling : null,
- attributes : null,
- parentNode : null,
- childNodes : null,
- ownerDocument : null,
- nodeValue : null,
- namespaceURI : null,
- prefix : null,
- localName : null,
- // Modified in DOM Level 2:
- insertBefore:function(newChild, refChild){//raises
- return _insertBefore(this,newChild,refChild);
- },
- replaceChild:function(newChild, oldChild){//raises
- _insertBefore(this, newChild,oldChild, assertPreReplacementValidityInDocument);
- if(oldChild){
- this.removeChild(oldChild);
- }
- },
- removeChild:function(oldChild){
- return _removeChild(this,oldChild);
- },
- appendChild:function(newChild){
- return this.insertBefore(newChild,null);
- },
- hasChildNodes:function(){
- return this.firstChild != null;
- },
- cloneNode:function(deep){
- return cloneNode(this.ownerDocument||this,this,deep);
- },
- // Modified in DOM Level 2:
- normalize:function(){
- var child = this.firstChild;
- while(child){
- var next = child.nextSibling;
- if(next && next.nodeType == TEXT_NODE && child.nodeType == TEXT_NODE){
- this.removeChild(next);
- child.appendData(next.data);
- }else{
- child.normalize();
- child = next;
- }
- }
- },
- // Introduced in DOM Level 2:
- isSupported:function(feature, version){
- return this.ownerDocument.implementation.hasFeature(feature,version);
- },
- // Introduced in DOM Level 2:
- hasAttributes:function(){
- return this.attributes.length>0;
- },
- /**
- * Look up the prefix associated to the given namespace URI, starting from this node.
- * **The default namespace declarations are ignored by this method.**
- * See Namespace Prefix Lookup for details on the algorithm used by this method.
- *
- * _Note: The implementation seems to be incomplete when compared to the algorithm described in the specs._
- *
- * @param {string | null} namespaceURI
- * @returns {string | null}
- * @see https://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-lookupNamespacePrefix
- * @see https://www.w3.org/TR/DOM-Level-3-Core/namespaces-algorithms.html#lookupNamespacePrefixAlgo
- * @see https://dom.spec.whatwg.org/#dom-node-lookupprefix
- * @see https://github.com/xmldom/xmldom/issues/322
- */
- lookupPrefix:function(namespaceURI){
- var el = this;
- while(el){
- var map = el._nsMap;
- //console.dir(map)
- if(map){
- for(var n in map){
- if (Object.prototype.hasOwnProperty.call(map, n) && map[n] === namespaceURI) {
- return n;
- }
- }
- }
- el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
- }
- return null;
- },
- // Introduced in DOM Level 3:
- lookupNamespaceURI:function(prefix){
- var el = this;
- while(el){
- var map = el._nsMap;
- //console.dir(map)
- if(map){
- if(Object.prototype.hasOwnProperty.call(map, prefix)){
- return map[prefix] ;
- }
- }
- el = el.nodeType == ATTRIBUTE_NODE?el.ownerDocument : el.parentNode;
- }
- return null;
- },
- // Introduced in DOM Level 3:
- isDefaultNamespace:function(namespaceURI){
- var prefix = this.lookupPrefix(namespaceURI);
- return prefix == null;
- }
- };
-
-
- function _xmlEncoder(c){
- return c == '<' && '<' ||
- c == '>' && '>' ||
- c == '&' && '&' ||
- c == '"' && '"' ||
- '&#'+c.charCodeAt()+';'
- }
-
-
- copy(NodeType,Node);
- copy(NodeType,Node.prototype);
-
- /**
- * @param callback return true for continue,false for break
- * @return boolean true: break visit;
- */
- function _visitNode(node,callback){
- if(callback(node)){
- return true;
- }
- if(node = node.firstChild){
- do{
- if(_visitNode(node,callback)){return true}
- }while(node=node.nextSibling)
- }
- }
-
-
-
- function Document(){
- this.ownerDocument = this;
- }
-
- function _onAddAttribute(doc,el,newAttr){
- doc && doc._inc++;
- var ns = newAttr.namespaceURI ;
- if(ns === NAMESPACE.XMLNS){
- //update namespace
- el._nsMap[newAttr.prefix?newAttr.localName:''] = newAttr.value
- }
- }
-
- function _onRemoveAttribute(doc,el,newAttr,remove){
- doc && doc._inc++;
- var ns = newAttr.namespaceURI ;
- if(ns === NAMESPACE.XMLNS){
- //update namespace
- delete el._nsMap[newAttr.prefix?newAttr.localName:'']
- }
- }
-
- /**
- * Updates `el.childNodes`, updating the indexed items and it's `length`.
- * Passing `newChild` means it will be appended.
- * Otherwise it's assumed that an item has been removed,
- * and `el.firstNode` and it's `.nextSibling` are used
- * to walk the current list of child nodes.
- *
- * @param {Document} doc
- * @param {Node} el
- * @param {Node} [newChild]
- * @private
- */
- function _onUpdateChild (doc, el, newChild) {
- if(doc && doc._inc){
- doc._inc++;
- //update childNodes
- var cs = el.childNodes;
- if (newChild) {
- cs[cs.length++] = newChild;
- } else {
- var child = el.firstChild;
- var i = 0;
- while (child) {
- cs[i++] = child;
- child = child.nextSibling;
- }
- cs.length = i;
- delete cs[cs.length];
- }
- }
- }
-
- /**
- * Removes the connections between `parentNode` and `child`
- * and any existing `child.previousSibling` or `child.nextSibling`.
- *
- * @see https://github.com/xmldom/xmldom/issues/135
- * @see https://github.com/xmldom/xmldom/issues/145
- *
- * @param {Node} parentNode
- * @param {Node} child
- * @returns {Node} the child that was removed.
- * @private
- */
- function _removeChild (parentNode, child) {
- var previous = child.previousSibling;
- var next = child.nextSibling;
- if (previous) {
- previous.nextSibling = next;
- } else {
- parentNode.firstChild = next;
- }
- if (next) {
- next.previousSibling = previous;
- } else {
- parentNode.lastChild = previous;
- }
- child.parentNode = null;
- child.previousSibling = null;
- child.nextSibling = null;
- _onUpdateChild(parentNode.ownerDocument, parentNode);
- return child;
- }
-
- /**
- * Returns `true` if `node` can be a parent for insertion.
- * @param {Node} node
- * @returns {boolean}
- */
- function hasValidParentNodeType(node) {
- return (
- node &&
- (node.nodeType === Node.DOCUMENT_NODE || node.nodeType === Node.DOCUMENT_FRAGMENT_NODE || node.nodeType === Node.ELEMENT_NODE)
- );
- }
-
- /**
- * Returns `true` if `node` can be inserted according to it's `nodeType`.
- * @param {Node} node
- * @returns {boolean}
- */
- function hasInsertableNodeType(node) {
- return (
- node &&
- (isElementNode(node) ||
- isTextNode(node) ||
- isDocTypeNode(node) ||
- node.nodeType === Node.DOCUMENT_FRAGMENT_NODE ||
- node.nodeType === Node.COMMENT_NODE ||
- node.nodeType === Node.PROCESSING_INSTRUCTION_NODE)
- );
- }
-
- /**
- * Returns true if `node` is a DOCTYPE node
- * @param {Node} node
- * @returns {boolean}
- */
- function isDocTypeNode(node) {
- return node && node.nodeType === Node.DOCUMENT_TYPE_NODE;
- }
-
- /**
- * Returns true if the node is an element
- * @param {Node} node
- * @returns {boolean}
- */
- function isElementNode(node) {
- return node && node.nodeType === Node.ELEMENT_NODE;
- }
- /**
- * Returns true if `node` is a text node
- * @param {Node} node
- * @returns {boolean}
- */
- function isTextNode(node) {
- return node && node.nodeType === Node.TEXT_NODE;
- }
-
- /**
- * Check if en element node can be inserted before `child`, or at the end if child is falsy,
- * according to the presence and position of a doctype node on the same level.
- *
- * @param {Document} doc The document node
- * @param {Node} child the node that would become the nextSibling if the element would be inserted
- * @returns {boolean} `true` if an element can be inserted before child
- * @private
- * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- */
- function isElementInsertionPossible(doc, child) {
- var parentChildNodes = doc.childNodes || [];
- if (find(parentChildNodes, isElementNode) || isDocTypeNode(child)) {
- return false;
- }
- var docTypeNode = find(parentChildNodes, isDocTypeNode);
- return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));
- }
-
- /**
- * Check if en element node can be inserted before `child`, or at the end if child is falsy,
- * according to the presence and position of a doctype node on the same level.
- *
- * @param {Node} doc The document node
- * @param {Node} child the node that would become the nextSibling if the element would be inserted
- * @returns {boolean} `true` if an element can be inserted before child
- * @private
- * https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- */
- function isElementReplacementPossible(doc, child) {
- var parentChildNodes = doc.childNodes || [];
-
- function hasElementChildThatIsNotChild(node) {
- return isElementNode(node) && node !== child;
- }
-
- if (find(parentChildNodes, hasElementChildThatIsNotChild)) {
- return false;
- }
- var docTypeNode = find(parentChildNodes, isDocTypeNode);
- return !(child && docTypeNode && parentChildNodes.indexOf(docTypeNode) > parentChildNodes.indexOf(child));
- }
-
- /**
- * @private
- * Steps 1-5 of the checks before inserting and before replacing a child are the same.
- *
- * @param {Node} parent the parent node to insert `node` into
- * @param {Node} node the node to insert
- * @param {Node=} child the node that should become the `nextSibling` of `node`
- * @returns {Node}
- * @throws DOMException for several node combinations that would create a DOM that is not well-formed.
- * @throws DOMException if `child` is provided but is not a child of `parent`.
- * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- * @see https://dom.spec.whatwg.org/#concept-node-replace
- */
- function assertPreInsertionValidity1to5(parent, node, child) {
- // 1. If `parent` is not a Document, DocumentFragment, or Element node, then throw a "HierarchyRequestError" DOMException.
- if (!hasValidParentNodeType(parent)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Unexpected parent node type ' + parent.nodeType);
- }
- // 2. If `node` is a host-including inclusive ancestor of `parent`, then throw a "HierarchyRequestError" DOMException.
- // not implemented!
- // 3. If `child` is non-null and its parent is not `parent`, then throw a "NotFoundError" DOMException.
- if (child && child.parentNode !== parent) {
- throw new DOMException(NOT_FOUND_ERR, 'child not in parent');
- }
- if (
- // 4. If `node` is not a DocumentFragment, DocumentType, Element, or CharacterData node, then throw a "HierarchyRequestError" DOMException.
- !hasInsertableNodeType(node) ||
- // 5. If either `node` is a Text node and `parent` is a document,
- // the sax parser currently adds top level text nodes, this will be fixed in 0.9.0
- // || (node.nodeType === Node.TEXT_NODE && parent.nodeType === Node.DOCUMENT_NODE)
- // or `node` is a doctype and `parent` is not a document, then throw a "HierarchyRequestError" DOMException.
- (isDocTypeNode(node) && parent.nodeType !== Node.DOCUMENT_NODE)
- ) {
- throw new DOMException(
- HIERARCHY_REQUEST_ERR,
- 'Unexpected node type ' + node.nodeType + ' for parent node type ' + parent.nodeType
- );
- }
- }
-
- /**
- * @private
- * Step 6 of the checks before inserting and before replacing a child are different.
- *
- * @param {Document} parent the parent node to insert `node` into
- * @param {Node} node the node to insert
- * @param {Node | undefined} child the node that should become the `nextSibling` of `node`
- * @returns {Node}
- * @throws DOMException for several node combinations that would create a DOM that is not well-formed.
- * @throws DOMException if `child` is provided but is not a child of `parent`.
- * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- * @see https://dom.spec.whatwg.org/#concept-node-replace
- */
- function assertPreInsertionValidityInDocument(parent, node, child) {
- var parentChildNodes = parent.childNodes || [];
- var nodeChildNodes = node.childNodes || [];
-
- // DocumentFragment
- if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
- var nodeChildElements = nodeChildNodes.filter(isElementNode);
- // If node has more than one element child or has a Text node child.
- if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');
- }
- // Otherwise, if `node` has one element child and either `parent` has an element child,
- // `child` is a doctype, or `child` is non-null and a doctype is following `child`.
- if (nodeChildElements.length === 1 && !isElementInsertionPossible(parent, child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');
- }
- }
- // Element
- if (isElementNode(node)) {
- // `parent` has an element child, `child` is a doctype,
- // or `child` is non-null and a doctype is following `child`.
- if (!isElementInsertionPossible(parent, child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');
- }
- }
- // DocumentType
- if (isDocTypeNode(node)) {
- // `parent` has a doctype child,
- if (find(parentChildNodes, isDocTypeNode)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');
- }
- var parentElementChild = find(parentChildNodes, isElementNode);
- // `child` is non-null and an element is preceding `child`,
- if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');
- }
- // or `child` is null and `parent` has an element child.
- if (!child && parentElementChild) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can not be appended since element is present');
- }
- }
- }
-
- /**
- * @private
- * Step 6 of the checks before inserting and before replacing a child are different.
- *
- * @param {Document} parent the parent node to insert `node` into
- * @param {Node} node the node to insert
- * @param {Node | undefined} child the node that should become the `nextSibling` of `node`
- * @returns {Node}
- * @throws DOMException for several node combinations that would create a DOM that is not well-formed.
- * @throws DOMException if `child` is provided but is not a child of `parent`.
- * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- * @see https://dom.spec.whatwg.org/#concept-node-replace
- */
- function assertPreReplacementValidityInDocument(parent, node, child) {
- var parentChildNodes = parent.childNodes || [];
- var nodeChildNodes = node.childNodes || [];
-
- // DocumentFragment
- if (node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {
- var nodeChildElements = nodeChildNodes.filter(isElementNode);
- // If `node` has more than one element child or has a Text node child.
- if (nodeChildElements.length > 1 || find(nodeChildNodes, isTextNode)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'More than one element or text in fragment');
- }
- // Otherwise, if `node` has one element child and either `parent` has an element child that is not `child` or a doctype is following `child`.
- if (nodeChildElements.length === 1 && !isElementReplacementPossible(parent, child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Element in fragment can not be inserted before doctype');
- }
- }
- // Element
- if (isElementNode(node)) {
- // `parent` has an element child that is not `child` or a doctype is following `child`.
- if (!isElementReplacementPossible(parent, child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one element can be added and only after doctype');
- }
- }
- // DocumentType
- if (isDocTypeNode(node)) {
- function hasDoctypeChildThatIsNotChild(node) {
- return isDocTypeNode(node) && node !== child;
- }
-
- // `parent` has a doctype child that is not `child`,
- if (find(parentChildNodes, hasDoctypeChildThatIsNotChild)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Only one doctype is allowed');
- }
- var parentElementChild = find(parentChildNodes, isElementNode);
- // or an element is preceding `child`.
- if (child && parentChildNodes.indexOf(parentElementChild) < parentChildNodes.indexOf(child)) {
- throw new DOMException(HIERARCHY_REQUEST_ERR, 'Doctype can only be inserted before an element');
- }
- }
- }
-
- /**
- * @private
- * @param {Node} parent the parent node to insert `node` into
- * @param {Node} node the node to insert
- * @param {Node=} child the node that should become the `nextSibling` of `node`
- * @returns {Node}
- * @throws DOMException for several node combinations that would create a DOM that is not well-formed.
- * @throws DOMException if `child` is provided but is not a child of `parent`.
- * @see https://dom.spec.whatwg.org/#concept-node-ensure-pre-insertion-validity
- */
- function _insertBefore(parent, node, child, _inDocumentAssertion) {
- // To ensure pre-insertion validity of a node into a parent before a child, run these steps:
- assertPreInsertionValidity1to5(parent, node, child);
-
- // If parent is a document, and any of the statements below, switched on the interface node implements,
- // are true, then throw a "HierarchyRequestError" DOMException.
- if (parent.nodeType === Node.DOCUMENT_NODE) {
- (_inDocumentAssertion || assertPreInsertionValidityInDocument)(parent, node, child);
- }
-
- var cp = node.parentNode;
- if(cp){
- cp.removeChild(node);//remove and update
- }
- if(node.nodeType === DOCUMENT_FRAGMENT_NODE){
- var newFirst = node.firstChild;
- if (newFirst == null) {
- return node;
- }
- var newLast = node.lastChild;
- }else{
- newFirst = newLast = node;
- }
- var pre = child ? child.previousSibling : parent.lastChild;
-
- newFirst.previousSibling = pre;
- newLast.nextSibling = child;
-
-
- if(pre){
- pre.nextSibling = newFirst;
- }else{
- parent.firstChild = newFirst;
- }
- if(child == null){
- parent.lastChild = newLast;
- }else{
- child.previousSibling = newLast;
- }
- do{
- newFirst.parentNode = parent;
- }while(newFirst !== newLast && (newFirst= newFirst.nextSibling))
- _onUpdateChild(parent.ownerDocument||parent, parent);
- //console.log(parent.lastChild.nextSibling == null)
- if (node.nodeType == DOCUMENT_FRAGMENT_NODE) {
- node.firstChild = node.lastChild = null;
- }
- return node;
- }
-
- /**
- * Appends `newChild` to `parentNode`.
- * If `newChild` is already connected to a `parentNode` it is first removed from it.
- *
- * @see https://github.com/xmldom/xmldom/issues/135
- * @see https://github.com/xmldom/xmldom/issues/145
- * @param {Node} parentNode
- * @param {Node} newChild
- * @returns {Node}
- * @private
- */
- function _appendSingleChild (parentNode, newChild) {
- if (newChild.parentNode) {
- newChild.parentNode.removeChild(newChild);
- }
- newChild.parentNode = parentNode;
- newChild.previousSibling = parentNode.lastChild;
- newChild.nextSibling = null;
- if (newChild.previousSibling) {
- newChild.previousSibling.nextSibling = newChild;
- } else {
- parentNode.firstChild = newChild;
- }
- parentNode.lastChild = newChild;
- _onUpdateChild(parentNode.ownerDocument, parentNode, newChild);
- return newChild;
- }
-
- Document.prototype = {
- //implementation : null,
- nodeName : '#document',
- nodeType : DOCUMENT_NODE,
- /**
- * The DocumentType node of the document.
- *
- * @readonly
- * @type DocumentType
- */
- doctype : null,
- documentElement : null,
- _inc : 1,
-
- insertBefore : function(newChild, refChild){//raises
- if(newChild.nodeType == DOCUMENT_FRAGMENT_NODE){
- var child = newChild.firstChild;
- while(child){
- var next = child.nextSibling;
- this.insertBefore(child,refChild);
- child = next;
- }
- return newChild;
- }
- _insertBefore(this, newChild, refChild);
- newChild.ownerDocument = this;
- if (this.documentElement === null && newChild.nodeType === ELEMENT_NODE) {
- this.documentElement = newChild;
- }
-
- return newChild;
- },
- removeChild : function(oldChild){
- if(this.documentElement == oldChild){
- this.documentElement = null;
- }
- return _removeChild(this,oldChild);
- },
- replaceChild: function (newChild, oldChild) {
- //raises
- _insertBefore(this, newChild, oldChild, assertPreReplacementValidityInDocument);
- newChild.ownerDocument = this;
- if (oldChild) {
- this.removeChild(oldChild);
- }
- if (isElementNode(newChild)) {
- this.documentElement = newChild;
- }
- },
- // Introduced in DOM Level 2:
- importNode : function(importedNode,deep){
- return importNode(this,importedNode,deep);
- },
- // Introduced in DOM Level 2:
- getElementById : function(id){
- var rtv = null;
- _visitNode(this.documentElement,function(node){
- if(node.nodeType == ELEMENT_NODE){
- if(node.getAttribute('id') == id){
- rtv = node;
- return true;
- }
- }
- })
- return rtv;
- },
-
- /**
- * The `getElementsByClassName` method of `Document` interface returns an array-like object
- * of all child elements which have **all** of the given class name(s).
- *
- * Returns an empty list if `classeNames` is an empty string or only contains HTML white space characters.
- *
- *
- * Warning: This is a live LiveNodeList.
- * Changes in the DOM will reflect in the array as the changes occur.
- * If an element selected by this array no longer qualifies for the selector,
- * it will automatically be removed. Be aware of this for iteration purposes.
- *
- * @param {string} classNames is a string representing the class name(s) to match; multiple class names are separated by (ASCII-)whitespace
- *
- * @see https://developer.mozilla.org/en-US/docs/Web/API/Document/getElementsByClassName
- * @see https://dom.spec.whatwg.org/#concept-getelementsbyclassname
- */
- getElementsByClassName: function(classNames) {
- var classNamesSet = toOrderedSet(classNames)
- return new LiveNodeList(this, function(base) {
- var ls = [];
- if (classNamesSet.length > 0) {
- _visitNode(base.documentElement, function(node) {
- if(node !== base && node.nodeType === ELEMENT_NODE) {
- var nodeClassNames = node.getAttribute('class')
- // can be null if the attribute does not exist
- if (nodeClassNames) {
- // before splitting and iterating just compare them for the most common case
- var matches = classNames === nodeClassNames;
- if (!matches) {
- var nodeClassNamesSet = toOrderedSet(nodeClassNames)
- matches = classNamesSet.every(arrayIncludes(nodeClassNamesSet))
- }
- if(matches) {
- ls.push(node);
- }
- }
- }
- });
- }
- return ls;
- });
- },
-
- //document factory method:
- createElement : function(tagName){
- var node = new Element();
- node.ownerDocument = this;
- node.nodeName = tagName;
- node.tagName = tagName;
- node.localName = tagName;
- node.childNodes = new NodeList();
- var attrs = node.attributes = new NamedNodeMap();
- attrs._ownerElement = node;
- return node;
- },
- createDocumentFragment : function(){
- var node = new DocumentFragment();
- node.ownerDocument = this;
- node.childNodes = new NodeList();
- return node;
- },
- createTextNode : function(data){
- var node = new Text();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createComment : function(data){
- var node = new Comment();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createCDATASection : function(data){
- var node = new CDATASection();
- node.ownerDocument = this;
- node.appendData(data)
- return node;
- },
- createProcessingInstruction : function(target,data){
- var node = new ProcessingInstruction();
- node.ownerDocument = this;
- node.tagName = node.target = target;
- node.nodeValue= node.data = data;
- return node;
- },
- createAttribute : function(name){
- var node = new Attr();
- node.ownerDocument = this;
- node.name = name;
- node.nodeName = name;
- node.localName = name;
- node.specified = true;
- return node;
- },
- createEntityReference : function(name){
- var node = new EntityReference();
- node.ownerDocument = this;
- node.nodeName = name;
- return node;
- },
- // Introduced in DOM Level 2:
- createElementNS : function(namespaceURI,qualifiedName){
- var node = new Element();
- var pl = qualifiedName.split(':');
- var attrs = node.attributes = new NamedNodeMap();
- node.childNodes = new NodeList();
- node.ownerDocument = this;
- node.nodeName = qualifiedName;
- node.tagName = qualifiedName;
- node.namespaceURI = namespaceURI;
- if(pl.length == 2){
- node.prefix = pl[0];
- node.localName = pl[1];
- }else{
- //el.prefix = null;
- node.localName = qualifiedName;
- }
- attrs._ownerElement = node;
- return node;
- },
- // Introduced in DOM Level 2:
- createAttributeNS : function(namespaceURI,qualifiedName){
- var node = new Attr();
- var pl = qualifiedName.split(':');
- node.ownerDocument = this;
- node.nodeName = qualifiedName;
- node.name = qualifiedName;
- node.namespaceURI = namespaceURI;
- node.specified = true;
- if(pl.length == 2){
- node.prefix = pl[0];
- node.localName = pl[1];
- }else{
- //el.prefix = null;
- node.localName = qualifiedName;
- }
- return node;
- }
- };
- _extends(Document,Node);
-
-
- function Element() {
- this._nsMap = {};
- };
- Element.prototype = {
- nodeType : ELEMENT_NODE,
- hasAttribute : function(name){
- return this.getAttributeNode(name)!=null;
- },
- getAttribute : function(name){
- var attr = this.getAttributeNode(name);
- return attr && attr.value || '';
- },
- getAttributeNode : function(name){
- return this.attributes.getNamedItem(name);
- },
- setAttribute : function(name, value){
- var attr = this.ownerDocument.createAttribute(name);
- attr.value = attr.nodeValue = "" + value;
- this.setAttributeNode(attr)
- },
- removeAttribute : function(name){
- var attr = this.getAttributeNode(name)
- attr && this.removeAttributeNode(attr);
- },
-
- //four real opeartion method
- appendChild:function(newChild){
- if(newChild.nodeType === DOCUMENT_FRAGMENT_NODE){
- return this.insertBefore(newChild,null);
- }else{
- return _appendSingleChild(this,newChild);
- }
- },
- setAttributeNode : function(newAttr){
- return this.attributes.setNamedItem(newAttr);
- },
- setAttributeNodeNS : function(newAttr){
- return this.attributes.setNamedItemNS(newAttr);
- },
- removeAttributeNode : function(oldAttr){
- //console.log(this == oldAttr.ownerElement)
- return this.attributes.removeNamedItem(oldAttr.nodeName);
- },
- //get real attribute name,and remove it by removeAttributeNode
- removeAttributeNS : function(namespaceURI, localName){
- var old = this.getAttributeNodeNS(namespaceURI, localName);
- old && this.removeAttributeNode(old);
- },
-
- hasAttributeNS : function(namespaceURI, localName){
- return this.getAttributeNodeNS(namespaceURI, localName)!=null;
- },
- getAttributeNS : function(namespaceURI, localName){
- var attr = this.getAttributeNodeNS(namespaceURI, localName);
- return attr && attr.value || '';
- },
- setAttributeNS : function(namespaceURI, qualifiedName, value){
- var attr = this.ownerDocument.createAttributeNS(namespaceURI, qualifiedName);
- attr.value = attr.nodeValue = "" + value;
- this.setAttributeNode(attr)
- },
- getAttributeNodeNS : function(namespaceURI, localName){
- return this.attributes.getNamedItemNS(namespaceURI, localName);
- },
-
- getElementsByTagName : function(tagName){
- return new LiveNodeList(this,function(base){
- var ls = [];
- _visitNode(base,function(node){
- if(node !== base && node.nodeType == ELEMENT_NODE && (tagName === '*' || node.tagName == tagName)){
- ls.push(node);
- }
- });
- return ls;
- });
- },
- getElementsByTagNameNS : function(namespaceURI, localName){
- return new LiveNodeList(this,function(base){
- var ls = [];
- _visitNode(base,function(node){
- if(node !== base && node.nodeType === ELEMENT_NODE && (namespaceURI === '*' || node.namespaceURI === namespaceURI) && (localName === '*' || node.localName == localName)){
- ls.push(node);
- }
- });
- return ls;
-
- });
- }
- };
- Document.prototype.getElementsByTagName = Element.prototype.getElementsByTagName;
- Document.prototype.getElementsByTagNameNS = Element.prototype.getElementsByTagNameNS;
-
-
- _extends(Element,Node);
- function Attr() {
- };
- Attr.prototype.nodeType = ATTRIBUTE_NODE;
- _extends(Attr,Node);
-
-
- function CharacterData() {
- };
- CharacterData.prototype = {
- data : '',
- substringData : function(offset, count) {
- return this.data.substring(offset, offset+count);
- },
- appendData: function(text) {
- text = this.data+text;
- this.nodeValue = this.data = text;
- this.length = text.length;
- },
- insertData: function(offset,text) {
- this.replaceData(offset,0,text);
-
- },
- appendChild:function(newChild){
- throw new Error(ExceptionMessage[HIERARCHY_REQUEST_ERR])
- },
- deleteData: function(offset, count) {
- this.replaceData(offset,count,"");
- },
- replaceData: function(offset, count, text) {
- var start = this.data.substring(0,offset);
- var end = this.data.substring(offset+count);
- text = start + text + end;
- this.nodeValue = this.data = text;
- this.length = text.length;
- }
- }
- _extends(CharacterData,Node);
- function Text() {
- };
- Text.prototype = {
- nodeName : "#text",
- nodeType : TEXT_NODE,
- splitText : function(offset) {
- var text = this.data;
- var newText = text.substring(offset);
- text = text.substring(0, offset);
- this.data = this.nodeValue = text;
- this.length = text.length;
- var newNode = this.ownerDocument.createTextNode(newText);
- if(this.parentNode){
- this.parentNode.insertBefore(newNode, this.nextSibling);
- }
- return newNode;
- }
- }
- _extends(Text,CharacterData);
- function Comment() {
- };
- Comment.prototype = {
- nodeName : "#comment",
- nodeType : COMMENT_NODE
- }
- _extends(Comment,CharacterData);
-
- function CDATASection() {
- };
- CDATASection.prototype = {
- nodeName : "#cdata-section",
- nodeType : CDATA_SECTION_NODE
- }
- _extends(CDATASection,CharacterData);
-
-
- function DocumentType() {
- };
- DocumentType.prototype.nodeType = DOCUMENT_TYPE_NODE;
- _extends(DocumentType,Node);
-
- function Notation() {
- };
- Notation.prototype.nodeType = NOTATION_NODE;
- _extends(Notation,Node);
-
- function Entity() {
- };
- Entity.prototype.nodeType = ENTITY_NODE;
- _extends(Entity,Node);
-
- function EntityReference() {
- };
- EntityReference.prototype.nodeType = ENTITY_REFERENCE_NODE;
- _extends(EntityReference,Node);
-
- function DocumentFragment() {
- };
- DocumentFragment.prototype.nodeName = "#document-fragment";
- DocumentFragment.prototype.nodeType = DOCUMENT_FRAGMENT_NODE;
- _extends(DocumentFragment,Node);
-
-
- function ProcessingInstruction() {
- }
- ProcessingInstruction.prototype.nodeType = PROCESSING_INSTRUCTION_NODE;
- _extends(ProcessingInstruction,Node);
- function XMLSerializer(){}
- XMLSerializer.prototype.serializeToString = function(node,isHtml,nodeFilter){
- return nodeSerializeToString.call(node,isHtml,nodeFilter);
- }
- Node.prototype.toString = nodeSerializeToString;
- function nodeSerializeToString(isHtml,nodeFilter){
- var buf = [];
- var refNode = this.nodeType == 9 && this.documentElement || this;
- var prefix = refNode.prefix;
- var uri = refNode.namespaceURI;
-
- if(uri && prefix == null){
- //console.log(prefix)
- var prefix = refNode.lookupPrefix(uri);
- if(prefix == null){
- //isHTML = true;
- var visibleNamespaces=[
- {namespace:uri,prefix:null}
- //{namespace:uri,prefix:''}
- ]
- }
- }
- serializeToString(this,buf,isHtml,nodeFilter,visibleNamespaces);
- //console.log('###',this.nodeType,uri,prefix,buf.join(''))
- return buf.join('');
- }
-
- function needNamespaceDefine(node, isHTML, visibleNamespaces) {
- var prefix = node.prefix || '';
- var uri = node.namespaceURI;
- // According to [Namespaces in XML 1.0](https://www.w3.org/TR/REC-xml-names/#ns-using) ,
- // and more specifically https://www.w3.org/TR/REC-xml-names/#nsc-NoPrefixUndecl :
- // > In a namespace declaration for a prefix [...], the attribute value MUST NOT be empty.
- // in a similar manner [Namespaces in XML 1.1](https://www.w3.org/TR/xml-names11/#ns-using)
- // and more specifically https://www.w3.org/TR/xml-names11/#nsc-NSDeclared :
- // > [...] Furthermore, the attribute value [...] must not be an empty string.
- // so serializing empty namespace value like xmlns:ds="" would produce an invalid XML document.
- if (!uri) {
- return false;
- }
- if (prefix === "xml" && uri === NAMESPACE.XML || uri === NAMESPACE.XMLNS) {
- return false;
- }
-
- var i = visibleNamespaces.length
- while (i--) {
- var ns = visibleNamespaces[i];
- // get namespace prefix
- if (ns.prefix === prefix) {
- return ns.namespace !== uri;
- }
- }
- return true;
- }
- /**
- * Well-formed constraint: No < in Attribute Values
- * > The replacement text of any entity referred to directly or indirectly
- * > in an attribute value must not contain a <.
- * @see https://www.w3.org/TR/xml11/#CleanAttrVals
- * @see https://www.w3.org/TR/xml11/#NT-AttValue
- *
- * Literal whitespace other than space that appear in attribute values
- * are serialized as their entity references, so they will be preserved.
- * (In contrast to whitespace literals in the input which are normalized to spaces)
- * @see https://www.w3.org/TR/xml11/#AVNormalize
- * @see https://w3c.github.io/DOM-Parsing/#serializing-an-element-s-attributes
- */
- function addSerializedAttribute(buf, qualifiedName, value) {
- buf.push(' ', qualifiedName, '="', value.replace(/[<>&"\t\n\r]/g, _xmlEncoder), '"')
- }
-
- function serializeToString(node,buf,isHTML,nodeFilter,visibleNamespaces){
- if (!visibleNamespaces) {
- visibleNamespaces = [];
- }
-
- if(nodeFilter){
- node = nodeFilter(node);
- if(node){
- if(typeof node == 'string'){
- buf.push(node);
- return;
- }
- }else{
- return;
- }
- //buf.sort.apply(attrs, attributeSorter);
- }
-
- switch(node.nodeType){
- case ELEMENT_NODE:
- var attrs = node.attributes;
- var len = attrs.length;
- var child = node.firstChild;
- var nodeName = node.tagName;
-
- isHTML = NAMESPACE.isHTML(node.namespaceURI) || isHTML
-
- var prefixedNodeName = nodeName
- if (!isHTML && !node.prefix && node.namespaceURI) {
- var defaultNS
- // lookup current default ns from `xmlns` attribute
- for (var ai = 0; ai < attrs.length; ai++) {
- if (attrs.item(ai).name === 'xmlns') {
- defaultNS = attrs.item(ai).value
- break
- }
- }
- if (!defaultNS) {
- // lookup current default ns in visibleNamespaces
- for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {
- var namespace = visibleNamespaces[nsi]
- if (namespace.prefix === '' && namespace.namespace === node.namespaceURI) {
- defaultNS = namespace.namespace
- break
- }
- }
- }
- if (defaultNS !== node.namespaceURI) {
- for (var nsi = visibleNamespaces.length - 1; nsi >= 0; nsi--) {
- var namespace = visibleNamespaces[nsi]
- if (namespace.namespace === node.namespaceURI) {
- if (namespace.prefix) {
- prefixedNodeName = namespace.prefix + ':' + nodeName
- }
- break
- }
- }
- }
- }
-
- buf.push('<', prefixedNodeName);
-
- for(var i=0;i<len;i++){
- // add namespaces for attributes
- var attr = attrs.item(i);
- if (attr.prefix == 'xmlns') {
- visibleNamespaces.push({ prefix: attr.localName, namespace: attr.value });
- }else if(attr.nodeName == 'xmlns'){
- visibleNamespaces.push({ prefix: '', namespace: attr.value });
- }
- }
-
- for(var i=0;i<len;i++){
- var attr = attrs.item(i);
- if (needNamespaceDefine(attr,isHTML, visibleNamespaces)) {
- var prefix = attr.prefix||'';
- var uri = attr.namespaceURI;
- addSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : "xmlns", uri);
- visibleNamespaces.push({ prefix: prefix, namespace:uri });
- }
- serializeToString(attr,buf,isHTML,nodeFilter,visibleNamespaces);
- }
-
- // add namespace for current node
- if (nodeName === prefixedNodeName && needNamespaceDefine(node, isHTML, visibleNamespaces)) {
- var prefix = node.prefix||'';
- var uri = node.namespaceURI;
- addSerializedAttribute(buf, prefix ? 'xmlns:' + prefix : "xmlns", uri);
- visibleNamespaces.push({ prefix: prefix, namespace:uri });
- }
-
- if(child || isHTML && !/^(?:meta|link|img|br|hr|input)$/i.test(nodeName)){
- buf.push('>');
- //if is cdata child node
- if(isHTML && /^script$/i.test(nodeName)){
- while(child){
- if(child.data){
- buf.push(child.data);
- }else{
- serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());
- }
- child = child.nextSibling;
- }
- }else
- {
- while(child){
- serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());
- child = child.nextSibling;
- }
- }
- buf.push('</',prefixedNodeName,'>');
- }else{
- buf.push('/>');
- }
- // remove added visible namespaces
- //visibleNamespaces.length = startVisibleNamespaces;
- return;
- case DOCUMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- var child = node.firstChild;
- while(child){
- serializeToString(child, buf, isHTML, nodeFilter, visibleNamespaces.slice());
- child = child.nextSibling;
- }
- return;
- case ATTRIBUTE_NODE:
- return addSerializedAttribute(buf, node.name, node.value);
- case TEXT_NODE:
- /**
- * The ampersand character (&) and the left angle bracket (<) must not appear in their literal form,
- * except when used as markup delimiters, or within a comment, a processing instruction, or a CDATA section.
- * If they are needed elsewhere, they must be escaped using either numeric character references or the strings
- * `&` and `<` respectively.
- * The right angle bracket (>) may be represented using the string " > ", and must, for compatibility,
- * be escaped using either `>` or a character reference when it appears in the string `]]>` in content,
- * when that string is not marking the end of a CDATA section.
- *
- * In the content of elements, character data is any string of characters
- * which does not contain the start-delimiter of any markup
- * and does not include the CDATA-section-close delimiter, `]]>`.
- *
- * @see https://www.w3.org/TR/xml/#NT-CharData
- * @see https://w3c.github.io/DOM-Parsing/#xml-serializing-a-text-node
- */
- return buf.push(node.data
- .replace(/[<&>]/g,_xmlEncoder)
- );
- case CDATA_SECTION_NODE:
- return buf.push( '<![CDATA[',node.data,']]>');
- case COMMENT_NODE:
- return buf.push( "<!--",node.data,"-->");
- case DOCUMENT_TYPE_NODE:
- var pubid = node.publicId;
- var sysid = node.systemId;
- buf.push('<!DOCTYPE ',node.name);
- if(pubid){
- buf.push(' PUBLIC ', pubid);
- if (sysid && sysid!='.') {
- buf.push(' ', sysid);
- }
- buf.push('>');
- }else if(sysid && sysid!='.'){
- buf.push(' SYSTEM ', sysid, '>');
- }else{
- var sub = node.internalSubset;
- if(sub){
- buf.push(" [",sub,"]");
- }
- buf.push(">");
- }
- return;
- case PROCESSING_INSTRUCTION_NODE:
- return buf.push( "<?",node.target," ",node.data,"?>");
- case ENTITY_REFERENCE_NODE:
- return buf.push( '&',node.nodeName,';');
- //case ENTITY_NODE:
- //case NOTATION_NODE:
- default:
- buf.push('??',node.nodeName);
- }
- }
- function importNode(doc,node,deep){
- var node2;
- switch (node.nodeType) {
- case ELEMENT_NODE:
- node2 = node.cloneNode(false);
- node2.ownerDocument = doc;
- //var attrs = node2.attributes;
- //var len = attrs.length;
- //for(var i=0;i<len;i++){
- //node2.setAttributeNodeNS(importNode(doc,attrs.item(i),deep));
- //}
- case DOCUMENT_FRAGMENT_NODE:
- break;
- case ATTRIBUTE_NODE:
- deep = true;
- break;
- //case ENTITY_REFERENCE_NODE:
- //case PROCESSING_INSTRUCTION_NODE:
- ////case TEXT_NODE:
- //case CDATA_SECTION_NODE:
- //case COMMENT_NODE:
- // deep = false;
- // break;
- //case DOCUMENT_NODE:
- //case DOCUMENT_TYPE_NODE:
- //cannot be imported.
- //case ENTITY_NODE:
- //case NOTATION_NODE:
- //can not hit in level3
- //default:throw e;
- }
- if(!node2){
- node2 = node.cloneNode(false);//false
- }
- node2.ownerDocument = doc;
- node2.parentNode = null;
- if(deep){
- var child = node.firstChild;
- while(child){
- node2.appendChild(importNode(doc,child,deep));
- child = child.nextSibling;
- }
- }
- return node2;
- }
- //
- //var _relationMap = {firstChild:1,lastChild:1,previousSibling:1,nextSibling:1,
- // attributes:1,childNodes:1,parentNode:1,documentElement:1,doctype,};
- function cloneNode(doc,node,deep){
- var node2 = new node.constructor();
- for (var n in node) {
- if (Object.prototype.hasOwnProperty.call(node, n)) {
- var v = node[n];
- if (typeof v != "object") {
- if (v != node2[n]) {
- node2[n] = v;
- }
- }
- }
- }
- if(node.childNodes){
- node2.childNodes = new NodeList();
- }
- node2.ownerDocument = doc;
- switch (node2.nodeType) {
- case ELEMENT_NODE:
- var attrs = node.attributes;
- var attrs2 = node2.attributes = new NamedNodeMap();
- var len = attrs.length
- attrs2._ownerElement = node2;
- for(var i=0;i<len;i++){
- node2.setAttributeNode(cloneNode(doc,attrs.item(i),true));
- }
- break;;
- case ATTRIBUTE_NODE:
- deep = true;
- }
- if(deep){
- var child = node.firstChild;
- while(child){
- node2.appendChild(cloneNode(doc,child,deep));
- child = child.nextSibling;
- }
- }
- return node2;
- }
-
- function __set__(object,key,value){
- object[key] = value
- }
- //do dynamic
- try{
- if(Object.defineProperty){
- Object.defineProperty(LiveNodeList.prototype,'length',{
- get:function(){
- _updateLiveList(this);
- return this.$$length;
- }
- });
-
- Object.defineProperty(Node.prototype,'textContent',{
- get:function(){
- return getTextContent(this);
- },
-
- set:function(data){
- switch(this.nodeType){
- case ELEMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- while(this.firstChild){
- this.removeChild(this.firstChild);
- }
- if(data || String(data)){
- this.appendChild(this.ownerDocument.createTextNode(data));
- }
- break;
-
- default:
- this.data = data;
- this.value = data;
- this.nodeValue = data;
- }
- }
- })
-
- function getTextContent(node){
- switch(node.nodeType){
- case ELEMENT_NODE:
- case DOCUMENT_FRAGMENT_NODE:
- var buf = [];
- node = node.firstChild;
- while(node){
- if(node.nodeType!==7 && node.nodeType !==8){
- buf.push(getTextContent(node));
- }
- node = node.nextSibling;
- }
- return buf.join('');
- default:
- return node.nodeValue;
- }
- }
-
- __set__ = function(object,key,value){
- //console.log(value)
- object['$$'+key] = value
- }
- }
- }catch(e){//ie8
- }
-
- //if(typeof require == 'function'){
- exports.DocumentType = DocumentType;
- exports.DOMException = DOMException;
- exports.DOMImplementation = DOMImplementation;
- exports.Element = Element;
- exports.Node = Node;
- exports.NodeList = NodeList;
- exports.XMLSerializer = XMLSerializer;
- //}
-
- },{"./conventions":2}],5:[function(require,module,exports){
- 'use strict';
-
- var freeze = require('./conventions').freeze;
-
- /**
- * The entities that are predefined in every XML document.
- *
- * @see https://www.w3.org/TR/2006/REC-xml11-20060816/#sec-predefined-ent W3C XML 1.1
- * @see https://www.w3.org/TR/2008/REC-xml-20081126/#sec-predefined-ent W3C XML 1.0
- * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Predefined_entities_in_XML Wikipedia
- */
- exports.XML_ENTITIES = freeze({
- amp: '&',
- apos: "'",
- gt: '>',
- lt: '<',
- quot: '"',
- });
-
- /**
- * A map of all entities that are detected in an HTML document.
- * They contain all entries from `XML_ENTITIES`.
- *
- * @see XML_ENTITIES
- * @see DOMParser.parseFromString
- * @see DOMImplementation.prototype.createHTMLDocument
- * @see https://html.spec.whatwg.org/#named-character-references WHATWG HTML(5) Spec
- * @see https://html.spec.whatwg.org/entities.json JSON
- * @see https://www.w3.org/TR/xml-entity-names/ W3C XML Entity Names
- * @see https://www.w3.org/TR/html4/sgml/entities.html W3C HTML4/SGML
- * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Character_entity_references_in_HTML Wikipedia (HTML)
- * @see https://en.wikipedia.org/wiki/List_of_XML_and_HTML_character_entity_references#Entities_representing_special_characters_in_XHTML Wikpedia (XHTML)
- */
- exports.HTML_ENTITIES = freeze({
- Aacute: '\u00C1',
- aacute: '\u00E1',
- Abreve: '\u0102',
- abreve: '\u0103',
- ac: '\u223E',
- acd: '\u223F',
- acE: '\u223E\u0333',
- Acirc: '\u00C2',
- acirc: '\u00E2',
- acute: '\u00B4',
- Acy: '\u0410',
- acy: '\u0430',
- AElig: '\u00C6',
- aelig: '\u00E6',
- af: '\u2061',
- Afr: '\uD835\uDD04',
- afr: '\uD835\uDD1E',
- Agrave: '\u00C0',
- agrave: '\u00E0',
- alefsym: '\u2135',
- aleph: '\u2135',
- Alpha: '\u0391',
- alpha: '\u03B1',
- Amacr: '\u0100',
- amacr: '\u0101',
- amalg: '\u2A3F',
- AMP: '\u0026',
- amp: '\u0026',
- And: '\u2A53',
- and: '\u2227',
- andand: '\u2A55',
- andd: '\u2A5C',
- andslope: '\u2A58',
- andv: '\u2A5A',
- ang: '\u2220',
- ange: '\u29A4',
- angle: '\u2220',
- angmsd: '\u2221',
- angmsdaa: '\u29A8',
- angmsdab: '\u29A9',
- angmsdac: '\u29AA',
- angmsdad: '\u29AB',
- angmsdae: '\u29AC',
- angmsdaf: '\u29AD',
- angmsdag: '\u29AE',
- angmsdah: '\u29AF',
- angrt: '\u221F',
- angrtvb: '\u22BE',
- angrtvbd: '\u299D',
- angsph: '\u2222',
- angst: '\u00C5',
- angzarr: '\u237C',
- Aogon: '\u0104',
- aogon: '\u0105',
- Aopf: '\uD835\uDD38',
- aopf: '\uD835\uDD52',
- ap: '\u2248',
- apacir: '\u2A6F',
- apE: '\u2A70',
- ape: '\u224A',
- apid: '\u224B',
- apos: '\u0027',
- ApplyFunction: '\u2061',
- approx: '\u2248',
- approxeq: '\u224A',
- Aring: '\u00C5',
- aring: '\u00E5',
- Ascr: '\uD835\uDC9C',
- ascr: '\uD835\uDCB6',
- Assign: '\u2254',
- ast: '\u002A',
- asymp: '\u2248',
- asympeq: '\u224D',
- Atilde: '\u00C3',
- atilde: '\u00E3',
- Auml: '\u00C4',
- auml: '\u00E4',
- awconint: '\u2233',
- awint: '\u2A11',
- backcong: '\u224C',
- backepsilon: '\u03F6',
- backprime: '\u2035',
- backsim: '\u223D',
- backsimeq: '\u22CD',
- Backslash: '\u2216',
- Barv: '\u2AE7',
- barvee: '\u22BD',
- Barwed: '\u2306',
- barwed: '\u2305',
- barwedge: '\u2305',
- bbrk: '\u23B5',
- bbrktbrk: '\u23B6',
- bcong: '\u224C',
- Bcy: '\u0411',
- bcy: '\u0431',
- bdquo: '\u201E',
- becaus: '\u2235',
- Because: '\u2235',
- because: '\u2235',
- bemptyv: '\u29B0',
- bepsi: '\u03F6',
- bernou: '\u212C',
- Bernoullis: '\u212C',
- Beta: '\u0392',
- beta: '\u03B2',
- beth: '\u2136',
- between: '\u226C',
- Bfr: '\uD835\uDD05',
- bfr: '\uD835\uDD1F',
- bigcap: '\u22C2',
- bigcirc: '\u25EF',
- bigcup: '\u22C3',
- bigodot: '\u2A00',
- bigoplus: '\u2A01',
- bigotimes: '\u2A02',
- bigsqcup: '\u2A06',
- bigstar: '\u2605',
- bigtriangledown: '\u25BD',
- bigtriangleup: '\u25B3',
- biguplus: '\u2A04',
- bigvee: '\u22C1',
- bigwedge: '\u22C0',
- bkarow: '\u290D',
- blacklozenge: '\u29EB',
- blacksquare: '\u25AA',
- blacktriangle: '\u25B4',
- blacktriangledown: '\u25BE',
- blacktriangleleft: '\u25C2',
- blacktriangleright: '\u25B8',
- blank: '\u2423',
- blk12: '\u2592',
- blk14: '\u2591',
- blk34: '\u2593',
- block: '\u2588',
- bne: '\u003D\u20E5',
- bnequiv: '\u2261\u20E5',
- bNot: '\u2AED',
- bnot: '\u2310',
- Bopf: '\uD835\uDD39',
- bopf: '\uD835\uDD53',
- bot: '\u22A5',
- bottom: '\u22A5',
- bowtie: '\u22C8',
- boxbox: '\u29C9',
- boxDL: '\u2557',
- boxDl: '\u2556',
- boxdL: '\u2555',
- boxdl: '\u2510',
- boxDR: '\u2554',
- boxDr: '\u2553',
- boxdR: '\u2552',
- boxdr: '\u250C',
- boxH: '\u2550',
- boxh: '\u2500',
- boxHD: '\u2566',
- boxHd: '\u2564',
- boxhD: '\u2565',
- boxhd: '\u252C',
- boxHU: '\u2569',
- boxHu: '\u2567',
- boxhU: '\u2568',
- boxhu: '\u2534',
- boxminus: '\u229F',
- boxplus: '\u229E',
- boxtimes: '\u22A0',
- boxUL: '\u255D',
- boxUl: '\u255C',
- boxuL: '\u255B',
- boxul: '\u2518',
- boxUR: '\u255A',
- boxUr: '\u2559',
- boxuR: '\u2558',
- boxur: '\u2514',
- boxV: '\u2551',
- boxv: '\u2502',
- boxVH: '\u256C',
- boxVh: '\u256B',
- boxvH: '\u256A',
- boxvh: '\u253C',
- boxVL: '\u2563',
- boxVl: '\u2562',
- boxvL: '\u2561',
- boxvl: '\u2524',
- boxVR: '\u2560',
- boxVr: '\u255F',
- boxvR: '\u255E',
- boxvr: '\u251C',
- bprime: '\u2035',
- Breve: '\u02D8',
- breve: '\u02D8',
- brvbar: '\u00A6',
- Bscr: '\u212C',
- bscr: '\uD835\uDCB7',
- bsemi: '\u204F',
- bsim: '\u223D',
- bsime: '\u22CD',
- bsol: '\u005C',
- bsolb: '\u29C5',
- bsolhsub: '\u27C8',
- bull: '\u2022',
- bullet: '\u2022',
- bump: '\u224E',
- bumpE: '\u2AAE',
- bumpe: '\u224F',
- Bumpeq: '\u224E',
- bumpeq: '\u224F',
- Cacute: '\u0106',
- cacute: '\u0107',
- Cap: '\u22D2',
- cap: '\u2229',
- capand: '\u2A44',
- capbrcup: '\u2A49',
- capcap: '\u2A4B',
- capcup: '\u2A47',
- capdot: '\u2A40',
- CapitalDifferentialD: '\u2145',
- caps: '\u2229\uFE00',
- caret: '\u2041',
- caron: '\u02C7',
- Cayleys: '\u212D',
- ccaps: '\u2A4D',
- Ccaron: '\u010C',
- ccaron: '\u010D',
- Ccedil: '\u00C7',
- ccedil: '\u00E7',
- Ccirc: '\u0108',
- ccirc: '\u0109',
- Cconint: '\u2230',
- ccups: '\u2A4C',
- ccupssm: '\u2A50',
- Cdot: '\u010A',
- cdot: '\u010B',
- cedil: '\u00B8',
- Cedilla: '\u00B8',
- cemptyv: '\u29B2',
- cent: '\u00A2',
- CenterDot: '\u00B7',
- centerdot: '\u00B7',
- Cfr: '\u212D',
- cfr: '\uD835\uDD20',
- CHcy: '\u0427',
- chcy: '\u0447',
- check: '\u2713',
- checkmark: '\u2713',
- Chi: '\u03A7',
- chi: '\u03C7',
- cir: '\u25CB',
- circ: '\u02C6',
- circeq: '\u2257',
- circlearrowleft: '\u21BA',
- circlearrowright: '\u21BB',
- circledast: '\u229B',
- circledcirc: '\u229A',
- circleddash: '\u229D',
- CircleDot: '\u2299',
- circledR: '\u00AE',
- circledS: '\u24C8',
- CircleMinus: '\u2296',
- CirclePlus: '\u2295',
- CircleTimes: '\u2297',
- cirE: '\u29C3',
- cire: '\u2257',
- cirfnint: '\u2A10',
- cirmid: '\u2AEF',
- cirscir: '\u29C2',
- ClockwiseContourIntegral: '\u2232',
- CloseCurlyDoubleQuote: '\u201D',
- CloseCurlyQuote: '\u2019',
- clubs: '\u2663',
- clubsuit: '\u2663',
- Colon: '\u2237',
- colon: '\u003A',
- Colone: '\u2A74',
- colone: '\u2254',
- coloneq: '\u2254',
- comma: '\u002C',
- commat: '\u0040',
- comp: '\u2201',
- compfn: '\u2218',
- complement: '\u2201',
- complexes: '\u2102',
- cong: '\u2245',
- congdot: '\u2A6D',
- Congruent: '\u2261',
- Conint: '\u222F',
- conint: '\u222E',
- ContourIntegral: '\u222E',
- Copf: '\u2102',
- copf: '\uD835\uDD54',
- coprod: '\u2210',
- Coproduct: '\u2210',
- COPY: '\u00A9',
- copy: '\u00A9',
- copysr: '\u2117',
- CounterClockwiseContourIntegral: '\u2233',
- crarr: '\u21B5',
- Cross: '\u2A2F',
- cross: '\u2717',
- Cscr: '\uD835\uDC9E',
- cscr: '\uD835\uDCB8',
- csub: '\u2ACF',
- csube: '\u2AD1',
- csup: '\u2AD0',
- csupe: '\u2AD2',
- ctdot: '\u22EF',
- cudarrl: '\u2938',
- cudarrr: '\u2935',
- cuepr: '\u22DE',
- cuesc: '\u22DF',
- cularr: '\u21B6',
- cularrp: '\u293D',
- Cup: '\u22D3',
- cup: '\u222A',
- cupbrcap: '\u2A48',
- CupCap: '\u224D',
- cupcap: '\u2A46',
- cupcup: '\u2A4A',
- cupdot: '\u228D',
- cupor: '\u2A45',
- cups: '\u222A\uFE00',
- curarr: '\u21B7',
- curarrm: '\u293C',
- curlyeqprec: '\u22DE',
- curlyeqsucc: '\u22DF',
- curlyvee: '\u22CE',
- curlywedge: '\u22CF',
- curren: '\u00A4',
- curvearrowleft: '\u21B6',
- curvearrowright: '\u21B7',
- cuvee: '\u22CE',
- cuwed: '\u22CF',
- cwconint: '\u2232',
- cwint: '\u2231',
- cylcty: '\u232D',
- Dagger: '\u2021',
- dagger: '\u2020',
- daleth: '\u2138',
- Darr: '\u21A1',
- dArr: '\u21D3',
- darr: '\u2193',
- dash: '\u2010',
- Dashv: '\u2AE4',
- dashv: '\u22A3',
- dbkarow: '\u290F',
- dblac: '\u02DD',
- Dcaron: '\u010E',
- dcaron: '\u010F',
- Dcy: '\u0414',
- dcy: '\u0434',
- DD: '\u2145',
- dd: '\u2146',
- ddagger: '\u2021',
- ddarr: '\u21CA',
- DDotrahd: '\u2911',
- ddotseq: '\u2A77',
- deg: '\u00B0',
- Del: '\u2207',
- Delta: '\u0394',
- delta: '\u03B4',
- demptyv: '\u29B1',
- dfisht: '\u297F',
- Dfr: '\uD835\uDD07',
- dfr: '\uD835\uDD21',
- dHar: '\u2965',
- dharl: '\u21C3',
- dharr: '\u21C2',
- DiacriticalAcute: '\u00B4',
- DiacriticalDot: '\u02D9',
- DiacriticalDoubleAcute: '\u02DD',
- DiacriticalGrave: '\u0060',
- DiacriticalTilde: '\u02DC',
- diam: '\u22C4',
- Diamond: '\u22C4',
- diamond: '\u22C4',
- diamondsuit: '\u2666',
- diams: '\u2666',
- die: '\u00A8',
- DifferentialD: '\u2146',
- digamma: '\u03DD',
- disin: '\u22F2',
- div: '\u00F7',
- divide: '\u00F7',
- divideontimes: '\u22C7',
- divonx: '\u22C7',
- DJcy: '\u0402',
- djcy: '\u0452',
- dlcorn: '\u231E',
- dlcrop: '\u230D',
- dollar: '\u0024',
- Dopf: '\uD835\uDD3B',
- dopf: '\uD835\uDD55',
- Dot: '\u00A8',
- dot: '\u02D9',
- DotDot: '\u20DC',
- doteq: '\u2250',
- doteqdot: '\u2251',
- DotEqual: '\u2250',
- dotminus: '\u2238',
- dotplus: '\u2214',
- dotsquare: '\u22A1',
- doublebarwedge: '\u2306',
- DoubleContourIntegral: '\u222F',
- DoubleDot: '\u00A8',
- DoubleDownArrow: '\u21D3',
- DoubleLeftArrow: '\u21D0',
- DoubleLeftRightArrow: '\u21D4',
- DoubleLeftTee: '\u2AE4',
- DoubleLongLeftArrow: '\u27F8',
- DoubleLongLeftRightArrow: '\u27FA',
- DoubleLongRightArrow: '\u27F9',
- DoubleRightArrow: '\u21D2',
- DoubleRightTee: '\u22A8',
- DoubleUpArrow: '\u21D1',
- DoubleUpDownArrow: '\u21D5',
- DoubleVerticalBar: '\u2225',
- DownArrow: '\u2193',
- Downarrow: '\u21D3',
- downarrow: '\u2193',
- DownArrowBar: '\u2913',
- DownArrowUpArrow: '\u21F5',
- DownBreve: '\u0311',
- downdownarrows: '\u21CA',
- downharpoonleft: '\u21C3',
- downharpoonright: '\u21C2',
- DownLeftRightVector: '\u2950',
- DownLeftTeeVector: '\u295E',
- DownLeftVector: '\u21BD',
- DownLeftVectorBar: '\u2956',
- DownRightTeeVector: '\u295F',
- DownRightVector: '\u21C1',
- DownRightVectorBar: '\u2957',
- DownTee: '\u22A4',
- DownTeeArrow: '\u21A7',
- drbkarow: '\u2910',
- drcorn: '\u231F',
- drcrop: '\u230C',
- Dscr: '\uD835\uDC9F',
- dscr: '\uD835\uDCB9',
- DScy: '\u0405',
- dscy: '\u0455',
- dsol: '\u29F6',
- Dstrok: '\u0110',
- dstrok: '\u0111',
- dtdot: '\u22F1',
- dtri: '\u25BF',
- dtrif: '\u25BE',
- duarr: '\u21F5',
- duhar: '\u296F',
- dwangle: '\u29A6',
- DZcy: '\u040F',
- dzcy: '\u045F',
- dzigrarr: '\u27FF',
- Eacute: '\u00C9',
- eacute: '\u00E9',
- easter: '\u2A6E',
- Ecaron: '\u011A',
- ecaron: '\u011B',
- ecir: '\u2256',
- Ecirc: '\u00CA',
- ecirc: '\u00EA',
- ecolon: '\u2255',
- Ecy: '\u042D',
- ecy: '\u044D',
- eDDot: '\u2A77',
- Edot: '\u0116',
- eDot: '\u2251',
- edot: '\u0117',
- ee: '\u2147',
- efDot: '\u2252',
- Efr: '\uD835\uDD08',
- efr: '\uD835\uDD22',
- eg: '\u2A9A',
- Egrave: '\u00C8',
- egrave: '\u00E8',
- egs: '\u2A96',
- egsdot: '\u2A98',
- el: '\u2A99',
- Element: '\u2208',
- elinters: '\u23E7',
- ell: '\u2113',
- els: '\u2A95',
- elsdot: '\u2A97',
- Emacr: '\u0112',
- emacr: '\u0113',
- empty: '\u2205',
- emptyset: '\u2205',
- EmptySmallSquare: '\u25FB',
- emptyv: '\u2205',
- EmptyVerySmallSquare: '\u25AB',
- emsp: '\u2003',
- emsp13: '\u2004',
- emsp14: '\u2005',
- ENG: '\u014A',
- eng: '\u014B',
- ensp: '\u2002',
- Eogon: '\u0118',
- eogon: '\u0119',
- Eopf: '\uD835\uDD3C',
- eopf: '\uD835\uDD56',
- epar: '\u22D5',
- eparsl: '\u29E3',
- eplus: '\u2A71',
- epsi: '\u03B5',
- Epsilon: '\u0395',
- epsilon: '\u03B5',
- epsiv: '\u03F5',
- eqcirc: '\u2256',
- eqcolon: '\u2255',
- eqsim: '\u2242',
- eqslantgtr: '\u2A96',
- eqslantless: '\u2A95',
- Equal: '\u2A75',
- equals: '\u003D',
- EqualTilde: '\u2242',
- equest: '\u225F',
- Equilibrium: '\u21CC',
- equiv: '\u2261',
- equivDD: '\u2A78',
- eqvparsl: '\u29E5',
- erarr: '\u2971',
- erDot: '\u2253',
- Escr: '\u2130',
- escr: '\u212F',
- esdot: '\u2250',
- Esim: '\u2A73',
- esim: '\u2242',
- Eta: '\u0397',
- eta: '\u03B7',
- ETH: '\u00D0',
- eth: '\u00F0',
- Euml: '\u00CB',
- euml: '\u00EB',
- euro: '\u20AC',
- excl: '\u0021',
- exist: '\u2203',
- Exists: '\u2203',
- expectation: '\u2130',
- ExponentialE: '\u2147',
- exponentiale: '\u2147',
- fallingdotseq: '\u2252',
- Fcy: '\u0424',
- fcy: '\u0444',
- female: '\u2640',
- ffilig: '\uFB03',
- fflig: '\uFB00',
- ffllig: '\uFB04',
- Ffr: '\uD835\uDD09',
- ffr: '\uD835\uDD23',
- filig: '\uFB01',
- FilledSmallSquare: '\u25FC',
- FilledVerySmallSquare: '\u25AA',
- fjlig: '\u0066\u006A',
- flat: '\u266D',
- fllig: '\uFB02',
- fltns: '\u25B1',
- fnof: '\u0192',
- Fopf: '\uD835\uDD3D',
- fopf: '\uD835\uDD57',
- ForAll: '\u2200',
- forall: '\u2200',
- fork: '\u22D4',
- forkv: '\u2AD9',
- Fouriertrf: '\u2131',
- fpartint: '\u2A0D',
- frac12: '\u00BD',
- frac13: '\u2153',
- frac14: '\u00BC',
- frac15: '\u2155',
- frac16: '\u2159',
- frac18: '\u215B',
- frac23: '\u2154',
- frac25: '\u2156',
- frac34: '\u00BE',
- frac35: '\u2157',
- frac38: '\u215C',
- frac45: '\u2158',
- frac56: '\u215A',
- frac58: '\u215D',
- frac78: '\u215E',
- frasl: '\u2044',
- frown: '\u2322',
- Fscr: '\u2131',
- fscr: '\uD835\uDCBB',
- gacute: '\u01F5',
- Gamma: '\u0393',
- gamma: '\u03B3',
- Gammad: '\u03DC',
- gammad: '\u03DD',
- gap: '\u2A86',
- Gbreve: '\u011E',
- gbreve: '\u011F',
- Gcedil: '\u0122',
- Gcirc: '\u011C',
- gcirc: '\u011D',
- Gcy: '\u0413',
- gcy: '\u0433',
- Gdot: '\u0120',
- gdot: '\u0121',
- gE: '\u2267',
- ge: '\u2265',
- gEl: '\u2A8C',
- gel: '\u22DB',
- geq: '\u2265',
- geqq: '\u2267',
- geqslant: '\u2A7E',
- ges: '\u2A7E',
- gescc: '\u2AA9',
- gesdot: '\u2A80',
- gesdoto: '\u2A82',
- gesdotol: '\u2A84',
- gesl: '\u22DB\uFE00',
- gesles: '\u2A94',
- Gfr: '\uD835\uDD0A',
- gfr: '\uD835\uDD24',
- Gg: '\u22D9',
- gg: '\u226B',
- ggg: '\u22D9',
- gimel: '\u2137',
- GJcy: '\u0403',
- gjcy: '\u0453',
- gl: '\u2277',
- gla: '\u2AA5',
- glE: '\u2A92',
- glj: '\u2AA4',
- gnap: '\u2A8A',
- gnapprox: '\u2A8A',
- gnE: '\u2269',
- gne: '\u2A88',
- gneq: '\u2A88',
- gneqq: '\u2269',
- gnsim: '\u22E7',
- Gopf: '\uD835\uDD3E',
- gopf: '\uD835\uDD58',
- grave: '\u0060',
- GreaterEqual: '\u2265',
- GreaterEqualLess: '\u22DB',
- GreaterFullEqual: '\u2267',
- GreaterGreater: '\u2AA2',
- GreaterLess: '\u2277',
- GreaterSlantEqual: '\u2A7E',
- GreaterTilde: '\u2273',
- Gscr: '\uD835\uDCA2',
- gscr: '\u210A',
- gsim: '\u2273',
- gsime: '\u2A8E',
- gsiml: '\u2A90',
- Gt: '\u226B',
- GT: '\u003E',
- gt: '\u003E',
- gtcc: '\u2AA7',
- gtcir: '\u2A7A',
- gtdot: '\u22D7',
- gtlPar: '\u2995',
- gtquest: '\u2A7C',
- gtrapprox: '\u2A86',
- gtrarr: '\u2978',
- gtrdot: '\u22D7',
- gtreqless: '\u22DB',
- gtreqqless: '\u2A8C',
- gtrless: '\u2277',
- gtrsim: '\u2273',
- gvertneqq: '\u2269\uFE00',
- gvnE: '\u2269\uFE00',
- Hacek: '\u02C7',
- hairsp: '\u200A',
- half: '\u00BD',
- hamilt: '\u210B',
- HARDcy: '\u042A',
- hardcy: '\u044A',
- hArr: '\u21D4',
- harr: '\u2194',
- harrcir: '\u2948',
- harrw: '\u21AD',
- Hat: '\u005E',
- hbar: '\u210F',
- Hcirc: '\u0124',
- hcirc: '\u0125',
- hearts: '\u2665',
- heartsuit: '\u2665',
- hellip: '\u2026',
- hercon: '\u22B9',
- Hfr: '\u210C',
- hfr: '\uD835\uDD25',
- HilbertSpace: '\u210B',
- hksearow: '\u2925',
- hkswarow: '\u2926',
- hoarr: '\u21FF',
- homtht: '\u223B',
- hookleftarrow: '\u21A9',
- hookrightarrow: '\u21AA',
- Hopf: '\u210D',
- hopf: '\uD835\uDD59',
- horbar: '\u2015',
- HorizontalLine: '\u2500',
- Hscr: '\u210B',
- hscr: '\uD835\uDCBD',
- hslash: '\u210F',
- Hstrok: '\u0126',
- hstrok: '\u0127',
- HumpDownHump: '\u224E',
- HumpEqual: '\u224F',
- hybull: '\u2043',
- hyphen: '\u2010',
- Iacute: '\u00CD',
- iacute: '\u00ED',
- ic: '\u2063',
- Icirc: '\u00CE',
- icirc: '\u00EE',
- Icy: '\u0418',
- icy: '\u0438',
- Idot: '\u0130',
- IEcy: '\u0415',
- iecy: '\u0435',
- iexcl: '\u00A1',
- iff: '\u21D4',
- Ifr: '\u2111',
- ifr: '\uD835\uDD26',
- Igrave: '\u00CC',
- igrave: '\u00EC',
- ii: '\u2148',
- iiiint: '\u2A0C',
- iiint: '\u222D',
- iinfin: '\u29DC',
- iiota: '\u2129',
- IJlig: '\u0132',
- ijlig: '\u0133',
- Im: '\u2111',
- Imacr: '\u012A',
- imacr: '\u012B',
- image: '\u2111',
- ImaginaryI: '\u2148',
- imagline: '\u2110',
- imagpart: '\u2111',
- imath: '\u0131',
- imof: '\u22B7',
- imped: '\u01B5',
- Implies: '\u21D2',
- in: '\u2208',
- incare: '\u2105',
- infin: '\u221E',
- infintie: '\u29DD',
- inodot: '\u0131',
- Int: '\u222C',
- int: '\u222B',
- intcal: '\u22BA',
- integers: '\u2124',
- Integral: '\u222B',
- intercal: '\u22BA',
- Intersection: '\u22C2',
- intlarhk: '\u2A17',
- intprod: '\u2A3C',
- InvisibleComma: '\u2063',
- InvisibleTimes: '\u2062',
- IOcy: '\u0401',
- iocy: '\u0451',
- Iogon: '\u012E',
- iogon: '\u012F',
- Iopf: '\uD835\uDD40',
- iopf: '\uD835\uDD5A',
- Iota: '\u0399',
- iota: '\u03B9',
- iprod: '\u2A3C',
- iquest: '\u00BF',
- Iscr: '\u2110',
- iscr: '\uD835\uDCBE',
- isin: '\u2208',
- isindot: '\u22F5',
- isinE: '\u22F9',
- isins: '\u22F4',
- isinsv: '\u22F3',
- isinv: '\u2208',
- it: '\u2062',
- Itilde: '\u0128',
- itilde: '\u0129',
- Iukcy: '\u0406',
- iukcy: '\u0456',
- Iuml: '\u00CF',
- iuml: '\u00EF',
- Jcirc: '\u0134',
- jcirc: '\u0135',
- Jcy: '\u0419',
- jcy: '\u0439',
- Jfr: '\uD835\uDD0D',
- jfr: '\uD835\uDD27',
- jmath: '\u0237',
- Jopf: '\uD835\uDD41',
- jopf: '\uD835\uDD5B',
- Jscr: '\uD835\uDCA5',
- jscr: '\uD835\uDCBF',
- Jsercy: '\u0408',
- jsercy: '\u0458',
- Jukcy: '\u0404',
- jukcy: '\u0454',
- Kappa: '\u039A',
- kappa: '\u03BA',
- kappav: '\u03F0',
- Kcedil: '\u0136',
- kcedil: '\u0137',
- Kcy: '\u041A',
- kcy: '\u043A',
- Kfr: '\uD835\uDD0E',
- kfr: '\uD835\uDD28',
- kgreen: '\u0138',
- KHcy: '\u0425',
- khcy: '\u0445',
- KJcy: '\u040C',
- kjcy: '\u045C',
- Kopf: '\uD835\uDD42',
- kopf: '\uD835\uDD5C',
- Kscr: '\uD835\uDCA6',
- kscr: '\uD835\uDCC0',
- lAarr: '\u21DA',
- Lacute: '\u0139',
- lacute: '\u013A',
- laemptyv: '\u29B4',
- lagran: '\u2112',
- Lambda: '\u039B',
- lambda: '\u03BB',
- Lang: '\u27EA',
- lang: '\u27E8',
- langd: '\u2991',
- langle: '\u27E8',
- lap: '\u2A85',
- Laplacetrf: '\u2112',
- laquo: '\u00AB',
- Larr: '\u219E',
- lArr: '\u21D0',
- larr: '\u2190',
- larrb: '\u21E4',
- larrbfs: '\u291F',
- larrfs: '\u291D',
- larrhk: '\u21A9',
- larrlp: '\u21AB',
- larrpl: '\u2939',
- larrsim: '\u2973',
- larrtl: '\u21A2',
- lat: '\u2AAB',
- lAtail: '\u291B',
- latail: '\u2919',
- late: '\u2AAD',
- lates: '\u2AAD\uFE00',
- lBarr: '\u290E',
- lbarr: '\u290C',
- lbbrk: '\u2772',
- lbrace: '\u007B',
- lbrack: '\u005B',
- lbrke: '\u298B',
- lbrksld: '\u298F',
- lbrkslu: '\u298D',
- Lcaron: '\u013D',
- lcaron: '\u013E',
- Lcedil: '\u013B',
- lcedil: '\u013C',
- lceil: '\u2308',
- lcub: '\u007B',
- Lcy: '\u041B',
- lcy: '\u043B',
- ldca: '\u2936',
- ldquo: '\u201C',
- ldquor: '\u201E',
- ldrdhar: '\u2967',
- ldrushar: '\u294B',
- ldsh: '\u21B2',
- lE: '\u2266',
- le: '\u2264',
- LeftAngleBracket: '\u27E8',
- LeftArrow: '\u2190',
- Leftarrow: '\u21D0',
- leftarrow: '\u2190',
- LeftArrowBar: '\u21E4',
- LeftArrowRightArrow: '\u21C6',
- leftarrowtail: '\u21A2',
- LeftCeiling: '\u2308',
- LeftDoubleBracket: '\u27E6',
- LeftDownTeeVector: '\u2961',
- LeftDownVector: '\u21C3',
- LeftDownVectorBar: '\u2959',
- LeftFloor: '\u230A',
- leftharpoondown: '\u21BD',
- leftharpoonup: '\u21BC',
- leftleftarrows: '\u21C7',
- LeftRightArrow: '\u2194',
- Leftrightarrow: '\u21D4',
- leftrightarrow: '\u2194',
- leftrightarrows: '\u21C6',
- leftrightharpoons: '\u21CB',
- leftrightsquigarrow: '\u21AD',
- LeftRightVector: '\u294E',
- LeftTee: '\u22A3',
- LeftTeeArrow: '\u21A4',
- LeftTeeVector: '\u295A',
- leftthreetimes: '\u22CB',
- LeftTriangle: '\u22B2',
- LeftTriangleBar: '\u29CF',
- LeftTriangleEqual: '\u22B4',
- LeftUpDownVector: '\u2951',
- LeftUpTeeVector: '\u2960',
- LeftUpVector: '\u21BF',
- LeftUpVectorBar: '\u2958',
- LeftVector: '\u21BC',
- LeftVectorBar: '\u2952',
- lEg: '\u2A8B',
- leg: '\u22DA',
- leq: '\u2264',
- leqq: '\u2266',
- leqslant: '\u2A7D',
- les: '\u2A7D',
- lescc: '\u2AA8',
- lesdot: '\u2A7F',
- lesdoto: '\u2A81',
- lesdotor: '\u2A83',
- lesg: '\u22DA\uFE00',
- lesges: '\u2A93',
- lessapprox: '\u2A85',
- lessdot: '\u22D6',
- lesseqgtr: '\u22DA',
- lesseqqgtr: '\u2A8B',
- LessEqualGreater: '\u22DA',
- LessFullEqual: '\u2266',
- LessGreater: '\u2276',
- lessgtr: '\u2276',
- LessLess: '\u2AA1',
- lesssim: '\u2272',
- LessSlantEqual: '\u2A7D',
- LessTilde: '\u2272',
- lfisht: '\u297C',
- lfloor: '\u230A',
- Lfr: '\uD835\uDD0F',
- lfr: '\uD835\uDD29',
- lg: '\u2276',
- lgE: '\u2A91',
- lHar: '\u2962',
- lhard: '\u21BD',
- lharu: '\u21BC',
- lharul: '\u296A',
- lhblk: '\u2584',
- LJcy: '\u0409',
- ljcy: '\u0459',
- Ll: '\u22D8',
- ll: '\u226A',
- llarr: '\u21C7',
- llcorner: '\u231E',
- Lleftarrow: '\u21DA',
- llhard: '\u296B',
- lltri: '\u25FA',
- Lmidot: '\u013F',
- lmidot: '\u0140',
- lmoust: '\u23B0',
- lmoustache: '\u23B0',
- lnap: '\u2A89',
- lnapprox: '\u2A89',
- lnE: '\u2268',
- lne: '\u2A87',
- lneq: '\u2A87',
- lneqq: '\u2268',
- lnsim: '\u22E6',
- loang: '\u27EC',
- loarr: '\u21FD',
- lobrk: '\u27E6',
- LongLeftArrow: '\u27F5',
- Longleftarrow: '\u27F8',
- longleftarrow: '\u27F5',
- LongLeftRightArrow: '\u27F7',
- Longleftrightarrow: '\u27FA',
- longleftrightarrow: '\u27F7',
- longmapsto: '\u27FC',
- LongRightArrow: '\u27F6',
- Longrightarrow: '\u27F9',
- longrightarrow: '\u27F6',
- looparrowleft: '\u21AB',
- looparrowright: '\u21AC',
- lopar: '\u2985',
- Lopf: '\uD835\uDD43',
- lopf: '\uD835\uDD5D',
- loplus: '\u2A2D',
- lotimes: '\u2A34',
- lowast: '\u2217',
- lowbar: '\u005F',
- LowerLeftArrow: '\u2199',
- LowerRightArrow: '\u2198',
- loz: '\u25CA',
- lozenge: '\u25CA',
- lozf: '\u29EB',
- lpar: '\u0028',
- lparlt: '\u2993',
- lrarr: '\u21C6',
- lrcorner: '\u231F',
- lrhar: '\u21CB',
- lrhard: '\u296D',
- lrm: '\u200E',
- lrtri: '\u22BF',
- lsaquo: '\u2039',
- Lscr: '\u2112',
- lscr: '\uD835\uDCC1',
- Lsh: '\u21B0',
- lsh: '\u21B0',
- lsim: '\u2272',
- lsime: '\u2A8D',
- lsimg: '\u2A8F',
- lsqb: '\u005B',
- lsquo: '\u2018',
- lsquor: '\u201A',
- Lstrok: '\u0141',
- lstrok: '\u0142',
- Lt: '\u226A',
- LT: '\u003C',
- lt: '\u003C',
- ltcc: '\u2AA6',
- ltcir: '\u2A79',
- ltdot: '\u22D6',
- lthree: '\u22CB',
- ltimes: '\u22C9',
- ltlarr: '\u2976',
- ltquest: '\u2A7B',
- ltri: '\u25C3',
- ltrie: '\u22B4',
- ltrif: '\u25C2',
- ltrPar: '\u2996',
- lurdshar: '\u294A',
- luruhar: '\u2966',
- lvertneqq: '\u2268\uFE00',
- lvnE: '\u2268\uFE00',
- macr: '\u00AF',
- male: '\u2642',
- malt: '\u2720',
- maltese: '\u2720',
- Map: '\u2905',
- map: '\u21A6',
- mapsto: '\u21A6',
- mapstodown: '\u21A7',
- mapstoleft: '\u21A4',
- mapstoup: '\u21A5',
- marker: '\u25AE',
- mcomma: '\u2A29',
- Mcy: '\u041C',
- mcy: '\u043C',
- mdash: '\u2014',
- mDDot: '\u223A',
- measuredangle: '\u2221',
- MediumSpace: '\u205F',
- Mellintrf: '\u2133',
- Mfr: '\uD835\uDD10',
- mfr: '\uD835\uDD2A',
- mho: '\u2127',
- micro: '\u00B5',
- mid: '\u2223',
- midast: '\u002A',
- midcir: '\u2AF0',
- middot: '\u00B7',
- minus: '\u2212',
- minusb: '\u229F',
- minusd: '\u2238',
- minusdu: '\u2A2A',
- MinusPlus: '\u2213',
- mlcp: '\u2ADB',
- mldr: '\u2026',
- mnplus: '\u2213',
- models: '\u22A7',
- Mopf: '\uD835\uDD44',
- mopf: '\uD835\uDD5E',
- mp: '\u2213',
- Mscr: '\u2133',
- mscr: '\uD835\uDCC2',
- mstpos: '\u223E',
- Mu: '\u039C',
- mu: '\u03BC',
- multimap: '\u22B8',
- mumap: '\u22B8',
- nabla: '\u2207',
- Nacute: '\u0143',
- nacute: '\u0144',
- nang: '\u2220\u20D2',
- nap: '\u2249',
- napE: '\u2A70\u0338',
- napid: '\u224B\u0338',
- napos: '\u0149',
- napprox: '\u2249',
- natur: '\u266E',
- natural: '\u266E',
- naturals: '\u2115',
- nbsp: '\u00A0',
- nbump: '\u224E\u0338',
- nbumpe: '\u224F\u0338',
- ncap: '\u2A43',
- Ncaron: '\u0147',
- ncaron: '\u0148',
- Ncedil: '\u0145',
- ncedil: '\u0146',
- ncong: '\u2247',
- ncongdot: '\u2A6D\u0338',
- ncup: '\u2A42',
- Ncy: '\u041D',
- ncy: '\u043D',
- ndash: '\u2013',
- ne: '\u2260',
- nearhk: '\u2924',
- neArr: '\u21D7',
- nearr: '\u2197',
- nearrow: '\u2197',
- nedot: '\u2250\u0338',
- NegativeMediumSpace: '\u200B',
- NegativeThickSpace: '\u200B',
- NegativeThinSpace: '\u200B',
- NegativeVeryThinSpace: '\u200B',
- nequiv: '\u2262',
- nesear: '\u2928',
- nesim: '\u2242\u0338',
- NestedGreaterGreater: '\u226B',
- NestedLessLess: '\u226A',
- NewLine: '\u000A',
- nexist: '\u2204',
- nexists: '\u2204',
- Nfr: '\uD835\uDD11',
- nfr: '\uD835\uDD2B',
- ngE: '\u2267\u0338',
- nge: '\u2271',
- ngeq: '\u2271',
- ngeqq: '\u2267\u0338',
- ngeqslant: '\u2A7E\u0338',
- nges: '\u2A7E\u0338',
- nGg: '\u22D9\u0338',
- ngsim: '\u2275',
- nGt: '\u226B\u20D2',
- ngt: '\u226F',
- ngtr: '\u226F',
- nGtv: '\u226B\u0338',
- nhArr: '\u21CE',
- nharr: '\u21AE',
- nhpar: '\u2AF2',
- ni: '\u220B',
- nis: '\u22FC',
- nisd: '\u22FA',
- niv: '\u220B',
- NJcy: '\u040A',
- njcy: '\u045A',
- nlArr: '\u21CD',
- nlarr: '\u219A',
- nldr: '\u2025',
- nlE: '\u2266\u0338',
- nle: '\u2270',
- nLeftarrow: '\u21CD',
- nleftarrow: '\u219A',
- nLeftrightarrow: '\u21CE',
- nleftrightarrow: '\u21AE',
- nleq: '\u2270',
- nleqq: '\u2266\u0338',
- nleqslant: '\u2A7D\u0338',
- nles: '\u2A7D\u0338',
- nless: '\u226E',
- nLl: '\u22D8\u0338',
- nlsim: '\u2274',
- nLt: '\u226A\u20D2',
- nlt: '\u226E',
- nltri: '\u22EA',
- nltrie: '\u22EC',
- nLtv: '\u226A\u0338',
- nmid: '\u2224',
- NoBreak: '\u2060',
- NonBreakingSpace: '\u00A0',
- Nopf: '\u2115',
- nopf: '\uD835\uDD5F',
- Not: '\u2AEC',
- not: '\u00AC',
- NotCongruent: '\u2262',
- NotCupCap: '\u226D',
- NotDoubleVerticalBar: '\u2226',
- NotElement: '\u2209',
- NotEqual: '\u2260',
- NotEqualTilde: '\u2242\u0338',
- NotExists: '\u2204',
- NotGreater: '\u226F',
- NotGreaterEqual: '\u2271',
- NotGreaterFullEqual: '\u2267\u0338',
- NotGreaterGreater: '\u226B\u0338',
- NotGreaterLess: '\u2279',
- NotGreaterSlantEqual: '\u2A7E\u0338',
- NotGreaterTilde: '\u2275',
- NotHumpDownHump: '\u224E\u0338',
- NotHumpEqual: '\u224F\u0338',
- notin: '\u2209',
- notindot: '\u22F5\u0338',
- notinE: '\u22F9\u0338',
- notinva: '\u2209',
- notinvb: '\u22F7',
- notinvc: '\u22F6',
- NotLeftTriangle: '\u22EA',
- NotLeftTriangleBar: '\u29CF\u0338',
- NotLeftTriangleEqual: '\u22EC',
- NotLess: '\u226E',
- NotLessEqual: '\u2270',
- NotLessGreater: '\u2278',
- NotLessLess: '\u226A\u0338',
- NotLessSlantEqual: '\u2A7D\u0338',
- NotLessTilde: '\u2274',
- NotNestedGreaterGreater: '\u2AA2\u0338',
- NotNestedLessLess: '\u2AA1\u0338',
- notni: '\u220C',
- notniva: '\u220C',
- notnivb: '\u22FE',
- notnivc: '\u22FD',
- NotPrecedes: '\u2280',
- NotPrecedesEqual: '\u2AAF\u0338',
- NotPrecedesSlantEqual: '\u22E0',
- NotReverseElement: '\u220C',
- NotRightTriangle: '\u22EB',
- NotRightTriangleBar: '\u29D0\u0338',
- NotRightTriangleEqual: '\u22ED',
- NotSquareSubset: '\u228F\u0338',
- NotSquareSubsetEqual: '\u22E2',
- NotSquareSuperset: '\u2290\u0338',
- NotSquareSupersetEqual: '\u22E3',
- NotSubset: '\u2282\u20D2',
- NotSubsetEqual: '\u2288',
- NotSucceeds: '\u2281',
- NotSucceedsEqual: '\u2AB0\u0338',
- NotSucceedsSlantEqual: '\u22E1',
- NotSucceedsTilde: '\u227F\u0338',
- NotSuperset: '\u2283\u20D2',
- NotSupersetEqual: '\u2289',
- NotTilde: '\u2241',
- NotTildeEqual: '\u2244',
- NotTildeFullEqual: '\u2247',
- NotTildeTilde: '\u2249',
- NotVerticalBar: '\u2224',
- npar: '\u2226',
- nparallel: '\u2226',
- nparsl: '\u2AFD\u20E5',
- npart: '\u2202\u0338',
- npolint: '\u2A14',
- npr: '\u2280',
- nprcue: '\u22E0',
- npre: '\u2AAF\u0338',
- nprec: '\u2280',
- npreceq: '\u2AAF\u0338',
- nrArr: '\u21CF',
- nrarr: '\u219B',
- nrarrc: '\u2933\u0338',
- nrarrw: '\u219D\u0338',
- nRightarrow: '\u21CF',
- nrightarrow: '\u219B',
- nrtri: '\u22EB',
- nrtrie: '\u22ED',
- nsc: '\u2281',
- nsccue: '\u22E1',
- nsce: '\u2AB0\u0338',
- Nscr: '\uD835\uDCA9',
- nscr: '\uD835\uDCC3',
- nshortmid: '\u2224',
- nshortparallel: '\u2226',
- nsim: '\u2241',
- nsime: '\u2244',
- nsimeq: '\u2244',
- nsmid: '\u2224',
- nspar: '\u2226',
- nsqsube: '\u22E2',
- nsqsupe: '\u22E3',
- nsub: '\u2284',
- nsubE: '\u2AC5\u0338',
- nsube: '\u2288',
- nsubset: '\u2282\u20D2',
- nsubseteq: '\u2288',
- nsubseteqq: '\u2AC5\u0338',
- nsucc: '\u2281',
- nsucceq: '\u2AB0\u0338',
- nsup: '\u2285',
- nsupE: '\u2AC6\u0338',
- nsupe: '\u2289',
- nsupset: '\u2283\u20D2',
- nsupseteq: '\u2289',
- nsupseteqq: '\u2AC6\u0338',
- ntgl: '\u2279',
- Ntilde: '\u00D1',
- ntilde: '\u00F1',
- ntlg: '\u2278',
- ntriangleleft: '\u22EA',
- ntrianglelefteq: '\u22EC',
- ntriangleright: '\u22EB',
- ntrianglerighteq: '\u22ED',
- Nu: '\u039D',
- nu: '\u03BD',
- num: '\u0023',
- numero: '\u2116',
- numsp: '\u2007',
- nvap: '\u224D\u20D2',
- nVDash: '\u22AF',
- nVdash: '\u22AE',
- nvDash: '\u22AD',
- nvdash: '\u22AC',
- nvge: '\u2265\u20D2',
- nvgt: '\u003E\u20D2',
- nvHarr: '\u2904',
- nvinfin: '\u29DE',
- nvlArr: '\u2902',
- nvle: '\u2264\u20D2',
- nvlt: '\u003C\u20D2',
- nvltrie: '\u22B4\u20D2',
- nvrArr: '\u2903',
- nvrtrie: '\u22B5\u20D2',
- nvsim: '\u223C\u20D2',
- nwarhk: '\u2923',
- nwArr: '\u21D6',
- nwarr: '\u2196',
- nwarrow: '\u2196',
- nwnear: '\u2927',
- Oacute: '\u00D3',
- oacute: '\u00F3',
- oast: '\u229B',
- ocir: '\u229A',
- Ocirc: '\u00D4',
- ocirc: '\u00F4',
- Ocy: '\u041E',
- ocy: '\u043E',
- odash: '\u229D',
- Odblac: '\u0150',
- odblac: '\u0151',
- odiv: '\u2A38',
- odot: '\u2299',
- odsold: '\u29BC',
- OElig: '\u0152',
- oelig: '\u0153',
- ofcir: '\u29BF',
- Ofr: '\uD835\uDD12',
- ofr: '\uD835\uDD2C',
- ogon: '\u02DB',
- Ograve: '\u00D2',
- ograve: '\u00F2',
- ogt: '\u29C1',
- ohbar: '\u29B5',
- ohm: '\u03A9',
- oint: '\u222E',
- olarr: '\u21BA',
- olcir: '\u29BE',
- olcross: '\u29BB',
- oline: '\u203E',
- olt: '\u29C0',
- Omacr: '\u014C',
- omacr: '\u014D',
- Omega: '\u03A9',
- omega: '\u03C9',
- Omicron: '\u039F',
- omicron: '\u03BF',
- omid: '\u29B6',
- ominus: '\u2296',
- Oopf: '\uD835\uDD46',
- oopf: '\uD835\uDD60',
- opar: '\u29B7',
- OpenCurlyDoubleQuote: '\u201C',
- OpenCurlyQuote: '\u2018',
- operp: '\u29B9',
- oplus: '\u2295',
- Or: '\u2A54',
- or: '\u2228',
- orarr: '\u21BB',
- ord: '\u2A5D',
- order: '\u2134',
- orderof: '\u2134',
- ordf: '\u00AA',
- ordm: '\u00BA',
- origof: '\u22B6',
- oror: '\u2A56',
- orslope: '\u2A57',
- orv: '\u2A5B',
- oS: '\u24C8',
- Oscr: '\uD835\uDCAA',
- oscr: '\u2134',
- Oslash: '\u00D8',
- oslash: '\u00F8',
- osol: '\u2298',
- Otilde: '\u00D5',
- otilde: '\u00F5',
- Otimes: '\u2A37',
- otimes: '\u2297',
- otimesas: '\u2A36',
- Ouml: '\u00D6',
- ouml: '\u00F6',
- ovbar: '\u233D',
- OverBar: '\u203E',
- OverBrace: '\u23DE',
- OverBracket: '\u23B4',
- OverParenthesis: '\u23DC',
- par: '\u2225',
- para: '\u00B6',
- parallel: '\u2225',
- parsim: '\u2AF3',
- parsl: '\u2AFD',
- part: '\u2202',
- PartialD: '\u2202',
- Pcy: '\u041F',
- pcy: '\u043F',
- percnt: '\u0025',
- period: '\u002E',
- permil: '\u2030',
- perp: '\u22A5',
- pertenk: '\u2031',
- Pfr: '\uD835\uDD13',
- pfr: '\uD835\uDD2D',
- Phi: '\u03A6',
- phi: '\u03C6',
- phiv: '\u03D5',
- phmmat: '\u2133',
- phone: '\u260E',
- Pi: '\u03A0',
- pi: '\u03C0',
- pitchfork: '\u22D4',
- piv: '\u03D6',
- planck: '\u210F',
- planckh: '\u210E',
- plankv: '\u210F',
- plus: '\u002B',
- plusacir: '\u2A23',
- plusb: '\u229E',
- pluscir: '\u2A22',
- plusdo: '\u2214',
- plusdu: '\u2A25',
- pluse: '\u2A72',
- PlusMinus: '\u00B1',
- plusmn: '\u00B1',
- plussim: '\u2A26',
- plustwo: '\u2A27',
- pm: '\u00B1',
- Poincareplane: '\u210C',
- pointint: '\u2A15',
- Popf: '\u2119',
- popf: '\uD835\uDD61',
- pound: '\u00A3',
- Pr: '\u2ABB',
- pr: '\u227A',
- prap: '\u2AB7',
- prcue: '\u227C',
- prE: '\u2AB3',
- pre: '\u2AAF',
- prec: '\u227A',
- precapprox: '\u2AB7',
- preccurlyeq: '\u227C',
- Precedes: '\u227A',
- PrecedesEqual: '\u2AAF',
- PrecedesSlantEqual: '\u227C',
- PrecedesTilde: '\u227E',
- preceq: '\u2AAF',
- precnapprox: '\u2AB9',
- precneqq: '\u2AB5',
- precnsim: '\u22E8',
- precsim: '\u227E',
- Prime: '\u2033',
- prime: '\u2032',
- primes: '\u2119',
- prnap: '\u2AB9',
- prnE: '\u2AB5',
- prnsim: '\u22E8',
- prod: '\u220F',
- Product: '\u220F',
- profalar: '\u232E',
- profline: '\u2312',
- profsurf: '\u2313',
- prop: '\u221D',
- Proportion: '\u2237',
- Proportional: '\u221D',
- propto: '\u221D',
- prsim: '\u227E',
- prurel: '\u22B0',
- Pscr: '\uD835\uDCAB',
- pscr: '\uD835\uDCC5',
- Psi: '\u03A8',
- psi: '\u03C8',
- puncsp: '\u2008',
- Qfr: '\uD835\uDD14',
- qfr: '\uD835\uDD2E',
- qint: '\u2A0C',
- Qopf: '\u211A',
- qopf: '\uD835\uDD62',
- qprime: '\u2057',
- Qscr: '\uD835\uDCAC',
- qscr: '\uD835\uDCC6',
- quaternions: '\u210D',
- quatint: '\u2A16',
- quest: '\u003F',
- questeq: '\u225F',
- QUOT: '\u0022',
- quot: '\u0022',
- rAarr: '\u21DB',
- race: '\u223D\u0331',
- Racute: '\u0154',
- racute: '\u0155',
- radic: '\u221A',
- raemptyv: '\u29B3',
- Rang: '\u27EB',
- rang: '\u27E9',
- rangd: '\u2992',
- range: '\u29A5',
- rangle: '\u27E9',
- raquo: '\u00BB',
- Rarr: '\u21A0',
- rArr: '\u21D2',
- rarr: '\u2192',
- rarrap: '\u2975',
- rarrb: '\u21E5',
- rarrbfs: '\u2920',
- rarrc: '\u2933',
- rarrfs: '\u291E',
- rarrhk: '\u21AA',
- rarrlp: '\u21AC',
- rarrpl: '\u2945',
- rarrsim: '\u2974',
- Rarrtl: '\u2916',
- rarrtl: '\u21A3',
- rarrw: '\u219D',
- rAtail: '\u291C',
- ratail: '\u291A',
- ratio: '\u2236',
- rationals: '\u211A',
- RBarr: '\u2910',
- rBarr: '\u290F',
- rbarr: '\u290D',
- rbbrk: '\u2773',
- rbrace: '\u007D',
- rbrack: '\u005D',
- rbrke: '\u298C',
- rbrksld: '\u298E',
- rbrkslu: '\u2990',
- Rcaron: '\u0158',
- rcaron: '\u0159',
- Rcedil: '\u0156',
- rcedil: '\u0157',
- rceil: '\u2309',
- rcub: '\u007D',
- Rcy: '\u0420',
- rcy: '\u0440',
- rdca: '\u2937',
- rdldhar: '\u2969',
- rdquo: '\u201D',
- rdquor: '\u201D',
- rdsh: '\u21B3',
- Re: '\u211C',
- real: '\u211C',
- realine: '\u211B',
- realpart: '\u211C',
- reals: '\u211D',
- rect: '\u25AD',
- REG: '\u00AE',
- reg: '\u00AE',
- ReverseElement: '\u220B',
- ReverseEquilibrium: '\u21CB',
- ReverseUpEquilibrium: '\u296F',
- rfisht: '\u297D',
- rfloor: '\u230B',
- Rfr: '\u211C',
- rfr: '\uD835\uDD2F',
- rHar: '\u2964',
- rhard: '\u21C1',
- rharu: '\u21C0',
- rharul: '\u296C',
- Rho: '\u03A1',
- rho: '\u03C1',
- rhov: '\u03F1',
- RightAngleBracket: '\u27E9',
- RightArrow: '\u2192',
- Rightarrow: '\u21D2',
- rightarrow: '\u2192',
- RightArrowBar: '\u21E5',
- RightArrowLeftArrow: '\u21C4',
- rightarrowtail: '\u21A3',
- RightCeiling: '\u2309',
- RightDoubleBracket: '\u27E7',
- RightDownTeeVector: '\u295D',
- RightDownVector: '\u21C2',
- RightDownVectorBar: '\u2955',
- RightFloor: '\u230B',
- rightharpoondown: '\u21C1',
- rightharpoonup: '\u21C0',
- rightleftarrows: '\u21C4',
- rightleftharpoons: '\u21CC',
- rightrightarrows: '\u21C9',
- rightsquigarrow: '\u219D',
- RightTee: '\u22A2',
- RightTeeArrow: '\u21A6',
- RightTeeVector: '\u295B',
- rightthreetimes: '\u22CC',
- RightTriangle: '\u22B3',
- RightTriangleBar: '\u29D0',
- RightTriangleEqual: '\u22B5',
- RightUpDownVector: '\u294F',
- RightUpTeeVector: '\u295C',
- RightUpVector: '\u21BE',
- RightUpVectorBar: '\u2954',
- RightVector: '\u21C0',
- RightVectorBar: '\u2953',
- ring: '\u02DA',
- risingdotseq: '\u2253',
- rlarr: '\u21C4',
- rlhar: '\u21CC',
- rlm: '\u200F',
- rmoust: '\u23B1',
- rmoustache: '\u23B1',
- rnmid: '\u2AEE',
- roang: '\u27ED',
- roarr: '\u21FE',
- robrk: '\u27E7',
- ropar: '\u2986',
- Ropf: '\u211D',
- ropf: '\uD835\uDD63',
- roplus: '\u2A2E',
- rotimes: '\u2A35',
- RoundImplies: '\u2970',
- rpar: '\u0029',
- rpargt: '\u2994',
- rppolint: '\u2A12',
- rrarr: '\u21C9',
- Rrightarrow: '\u21DB',
- rsaquo: '\u203A',
- Rscr: '\u211B',
- rscr: '\uD835\uDCC7',
- Rsh: '\u21B1',
- rsh: '\u21B1',
- rsqb: '\u005D',
- rsquo: '\u2019',
- rsquor: '\u2019',
- rthree: '\u22CC',
- rtimes: '\u22CA',
- rtri: '\u25B9',
- rtrie: '\u22B5',
- rtrif: '\u25B8',
- rtriltri: '\u29CE',
- RuleDelayed: '\u29F4',
- ruluhar: '\u2968',
- rx: '\u211E',
- Sacute: '\u015A',
- sacute: '\u015B',
- sbquo: '\u201A',
- Sc: '\u2ABC',
- sc: '\u227B',
- scap: '\u2AB8',
- Scaron: '\u0160',
- scaron: '\u0161',
- sccue: '\u227D',
- scE: '\u2AB4',
- sce: '\u2AB0',
- Scedil: '\u015E',
- scedil: '\u015F',
- Scirc: '\u015C',
- scirc: '\u015D',
- scnap: '\u2ABA',
- scnE: '\u2AB6',
- scnsim: '\u22E9',
- scpolint: '\u2A13',
- scsim: '\u227F',
- Scy: '\u0421',
- scy: '\u0441',
- sdot: '\u22C5',
- sdotb: '\u22A1',
- sdote: '\u2A66',
- searhk: '\u2925',
- seArr: '\u21D8',
- searr: '\u2198',
- searrow: '\u2198',
- sect: '\u00A7',
- semi: '\u003B',
- seswar: '\u2929',
- setminus: '\u2216',
- setmn: '\u2216',
- sext: '\u2736',
- Sfr: '\uD835\uDD16',
- sfr: '\uD835\uDD30',
- sfrown: '\u2322',
- sharp: '\u266F',
- SHCHcy: '\u0429',
- shchcy: '\u0449',
- SHcy: '\u0428',
- shcy: '\u0448',
- ShortDownArrow: '\u2193',
- ShortLeftArrow: '\u2190',
- shortmid: '\u2223',
- shortparallel: '\u2225',
- ShortRightArrow: '\u2192',
- ShortUpArrow: '\u2191',
- shy: '\u00AD',
- Sigma: '\u03A3',
- sigma: '\u03C3',
- sigmaf: '\u03C2',
- sigmav: '\u03C2',
- sim: '\u223C',
- simdot: '\u2A6A',
- sime: '\u2243',
- simeq: '\u2243',
- simg: '\u2A9E',
- simgE: '\u2AA0',
- siml: '\u2A9D',
- simlE: '\u2A9F',
- simne: '\u2246',
- simplus: '\u2A24',
- simrarr: '\u2972',
- slarr: '\u2190',
- SmallCircle: '\u2218',
- smallsetminus: '\u2216',
- smashp: '\u2A33',
- smeparsl: '\u29E4',
- smid: '\u2223',
- smile: '\u2323',
- smt: '\u2AAA',
- smte: '\u2AAC',
- smtes: '\u2AAC\uFE00',
- SOFTcy: '\u042C',
- softcy: '\u044C',
- sol: '\u002F',
- solb: '\u29C4',
- solbar: '\u233F',
- Sopf: '\uD835\uDD4A',
- sopf: '\uD835\uDD64',
- spades: '\u2660',
- spadesuit: '\u2660',
- spar: '\u2225',
- sqcap: '\u2293',
- sqcaps: '\u2293\uFE00',
- sqcup: '\u2294',
- sqcups: '\u2294\uFE00',
- Sqrt: '\u221A',
- sqsub: '\u228F',
- sqsube: '\u2291',
- sqsubset: '\u228F',
- sqsubseteq: '\u2291',
- sqsup: '\u2290',
- sqsupe: '\u2292',
- sqsupset: '\u2290',
- sqsupseteq: '\u2292',
- squ: '\u25A1',
- Square: '\u25A1',
- square: '\u25A1',
- SquareIntersection: '\u2293',
- SquareSubset: '\u228F',
- SquareSubsetEqual: '\u2291',
- SquareSuperset: '\u2290',
- SquareSupersetEqual: '\u2292',
- SquareUnion: '\u2294',
- squarf: '\u25AA',
- squf: '\u25AA',
- srarr: '\u2192',
- Sscr: '\uD835\uDCAE',
- sscr: '\uD835\uDCC8',
- ssetmn: '\u2216',
- ssmile: '\u2323',
- sstarf: '\u22C6',
- Star: '\u22C6',
- star: '\u2606',
- starf: '\u2605',
- straightepsilon: '\u03F5',
- straightphi: '\u03D5',
- strns: '\u00AF',
- Sub: '\u22D0',
- sub: '\u2282',
- subdot: '\u2ABD',
- subE: '\u2AC5',
- sube: '\u2286',
- subedot: '\u2AC3',
- submult: '\u2AC1',
- subnE: '\u2ACB',
- subne: '\u228A',
- subplus: '\u2ABF',
- subrarr: '\u2979',
- Subset: '\u22D0',
- subset: '\u2282',
- subseteq: '\u2286',
- subseteqq: '\u2AC5',
- SubsetEqual: '\u2286',
- subsetneq: '\u228A',
- subsetneqq: '\u2ACB',
- subsim: '\u2AC7',
- subsub: '\u2AD5',
- subsup: '\u2AD3',
- succ: '\u227B',
- succapprox: '\u2AB8',
- succcurlyeq: '\u227D',
- Succeeds: '\u227B',
- SucceedsEqual: '\u2AB0',
- SucceedsSlantEqual: '\u227D',
- SucceedsTilde: '\u227F',
- succeq: '\u2AB0',
- succnapprox: '\u2ABA',
- succneqq: '\u2AB6',
- succnsim: '\u22E9',
- succsim: '\u227F',
- SuchThat: '\u220B',
- Sum: '\u2211',
- sum: '\u2211',
- sung: '\u266A',
- Sup: '\u22D1',
- sup: '\u2283',
- sup1: '\u00B9',
- sup2: '\u00B2',
- sup3: '\u00B3',
- supdot: '\u2ABE',
- supdsub: '\u2AD8',
- supE: '\u2AC6',
- supe: '\u2287',
- supedot: '\u2AC4',
- Superset: '\u2283',
- SupersetEqual: '\u2287',
- suphsol: '\u27C9',
- suphsub: '\u2AD7',
- suplarr: '\u297B',
- supmult: '\u2AC2',
- supnE: '\u2ACC',
- supne: '\u228B',
- supplus: '\u2AC0',
- Supset: '\u22D1',
- supset: '\u2283',
- supseteq: '\u2287',
- supseteqq: '\u2AC6',
- supsetneq: '\u228B',
- supsetneqq: '\u2ACC',
- supsim: '\u2AC8',
- supsub: '\u2AD4',
- supsup: '\u2AD6',
- swarhk: '\u2926',
- swArr: '\u21D9',
- swarr: '\u2199',
- swarrow: '\u2199',
- swnwar: '\u292A',
- szlig: '\u00DF',
- Tab: '\u0009',
- target: '\u2316',
- Tau: '\u03A4',
- tau: '\u03C4',
- tbrk: '\u23B4',
- Tcaron: '\u0164',
- tcaron: '\u0165',
- Tcedil: '\u0162',
- tcedil: '\u0163',
- Tcy: '\u0422',
- tcy: '\u0442',
- tdot: '\u20DB',
- telrec: '\u2315',
- Tfr: '\uD835\uDD17',
- tfr: '\uD835\uDD31',
- there4: '\u2234',
- Therefore: '\u2234',
- therefore: '\u2234',
- Theta: '\u0398',
- theta: '\u03B8',
- thetasym: '\u03D1',
- thetav: '\u03D1',
- thickapprox: '\u2248',
- thicksim: '\u223C',
- ThickSpace: '\u205F\u200A',
- thinsp: '\u2009',
- ThinSpace: '\u2009',
- thkap: '\u2248',
- thksim: '\u223C',
- THORN: '\u00DE',
- thorn: '\u00FE',
- Tilde: '\u223C',
- tilde: '\u02DC',
- TildeEqual: '\u2243',
- TildeFullEqual: '\u2245',
- TildeTilde: '\u2248',
- times: '\u00D7',
- timesb: '\u22A0',
- timesbar: '\u2A31',
- timesd: '\u2A30',
- tint: '\u222D',
- toea: '\u2928',
- top: '\u22A4',
- topbot: '\u2336',
- topcir: '\u2AF1',
- Topf: '\uD835\uDD4B',
- topf: '\uD835\uDD65',
- topfork: '\u2ADA',
- tosa: '\u2929',
- tprime: '\u2034',
- TRADE: '\u2122',
- trade: '\u2122',
- triangle: '\u25B5',
- triangledown: '\u25BF',
- triangleleft: '\u25C3',
- trianglelefteq: '\u22B4',
- triangleq: '\u225C',
- triangleright: '\u25B9',
- trianglerighteq: '\u22B5',
- tridot: '\u25EC',
- trie: '\u225C',
- triminus: '\u2A3A',
- TripleDot: '\u20DB',
- triplus: '\u2A39',
- trisb: '\u29CD',
- tritime: '\u2A3B',
- trpezium: '\u23E2',
- Tscr: '\uD835\uDCAF',
- tscr: '\uD835\uDCC9',
- TScy: '\u0426',
- tscy: '\u0446',
- TSHcy: '\u040B',
- tshcy: '\u045B',
- Tstrok: '\u0166',
- tstrok: '\u0167',
- twixt: '\u226C',
- twoheadleftarrow: '\u219E',
- twoheadrightarrow: '\u21A0',
- Uacute: '\u00DA',
- uacute: '\u00FA',
- Uarr: '\u219F',
- uArr: '\u21D1',
- uarr: '\u2191',
- Uarrocir: '\u2949',
- Ubrcy: '\u040E',
- ubrcy: '\u045E',
- Ubreve: '\u016C',
- ubreve: '\u016D',
- Ucirc: '\u00DB',
- ucirc: '\u00FB',
- Ucy: '\u0423',
- ucy: '\u0443',
- udarr: '\u21C5',
- Udblac: '\u0170',
- udblac: '\u0171',
- udhar: '\u296E',
- ufisht: '\u297E',
- Ufr: '\uD835\uDD18',
- ufr: '\uD835\uDD32',
- Ugrave: '\u00D9',
- ugrave: '\u00F9',
- uHar: '\u2963',
- uharl: '\u21BF',
- uharr: '\u21BE',
- uhblk: '\u2580',
- ulcorn: '\u231C',
- ulcorner: '\u231C',
- ulcrop: '\u230F',
- ultri: '\u25F8',
- Umacr: '\u016A',
- umacr: '\u016B',
- uml: '\u00A8',
- UnderBar: '\u005F',
- UnderBrace: '\u23DF',
- UnderBracket: '\u23B5',
- UnderParenthesis: '\u23DD',
- Union: '\u22C3',
- UnionPlus: '\u228E',
- Uogon: '\u0172',
- uogon: '\u0173',
- Uopf: '\uD835\uDD4C',
- uopf: '\uD835\uDD66',
- UpArrow: '\u2191',
- Uparrow: '\u21D1',
- uparrow: '\u2191',
- UpArrowBar: '\u2912',
- UpArrowDownArrow: '\u21C5',
- UpDownArrow: '\u2195',
- Updownarrow: '\u21D5',
- updownarrow: '\u2195',
- UpEquilibrium: '\u296E',
- upharpoonleft: '\u21BF',
- upharpoonright: '\u21BE',
- uplus: '\u228E',
- UpperLeftArrow: '\u2196',
- UpperRightArrow: '\u2197',
- Upsi: '\u03D2',
- upsi: '\u03C5',
- upsih: '\u03D2',
- Upsilon: '\u03A5',
- upsilon: '\u03C5',
- UpTee: '\u22A5',
- UpTeeArrow: '\u21A5',
- upuparrows: '\u21C8',
- urcorn: '\u231D',
- urcorner: '\u231D',
- urcrop: '\u230E',
- Uring: '\u016E',
- uring: '\u016F',
- urtri: '\u25F9',
- Uscr: '\uD835\uDCB0',
- uscr: '\uD835\uDCCA',
- utdot: '\u22F0',
- Utilde: '\u0168',
- utilde: '\u0169',
- utri: '\u25B5',
- utrif: '\u25B4',
- uuarr: '\u21C8',
- Uuml: '\u00DC',
- uuml: '\u00FC',
- uwangle: '\u29A7',
- vangrt: '\u299C',
- varepsilon: '\u03F5',
- varkappa: '\u03F0',
- varnothing: '\u2205',
- varphi: '\u03D5',
- varpi: '\u03D6',
- varpropto: '\u221D',
- vArr: '\u21D5',
- varr: '\u2195',
- varrho: '\u03F1',
- varsigma: '\u03C2',
- varsubsetneq: '\u228A\uFE00',
- varsubsetneqq: '\u2ACB\uFE00',
- varsupsetneq: '\u228B\uFE00',
- varsupsetneqq: '\u2ACC\uFE00',
- vartheta: '\u03D1',
- vartriangleleft: '\u22B2',
- vartriangleright: '\u22B3',
- Vbar: '\u2AEB',
- vBar: '\u2AE8',
- vBarv: '\u2AE9',
- Vcy: '\u0412',
- vcy: '\u0432',
- VDash: '\u22AB',
- Vdash: '\u22A9',
- vDash: '\u22A8',
- vdash: '\u22A2',
- Vdashl: '\u2AE6',
- Vee: '\u22C1',
- vee: '\u2228',
- veebar: '\u22BB',
- veeeq: '\u225A',
- vellip: '\u22EE',
- Verbar: '\u2016',
- verbar: '\u007C',
- Vert: '\u2016',
- vert: '\u007C',
- VerticalBar: '\u2223',
- VerticalLine: '\u007C',
- VerticalSeparator: '\u2758',
- VerticalTilde: '\u2240',
- VeryThinSpace: '\u200A',
- Vfr: '\uD835\uDD19',
- vfr: '\uD835\uDD33',
- vltri: '\u22B2',
- vnsub: '\u2282\u20D2',
- vnsup: '\u2283\u20D2',
- Vopf: '\uD835\uDD4D',
- vopf: '\uD835\uDD67',
- vprop: '\u221D',
- vrtri: '\u22B3',
- Vscr: '\uD835\uDCB1',
- vscr: '\uD835\uDCCB',
- vsubnE: '\u2ACB\uFE00',
- vsubne: '\u228A\uFE00',
- vsupnE: '\u2ACC\uFE00',
- vsupne: '\u228B\uFE00',
- Vvdash: '\u22AA',
- vzigzag: '\u299A',
- Wcirc: '\u0174',
- wcirc: '\u0175',
- wedbar: '\u2A5F',
- Wedge: '\u22C0',
- wedge: '\u2227',
- wedgeq: '\u2259',
- weierp: '\u2118',
- Wfr: '\uD835\uDD1A',
- wfr: '\uD835\uDD34',
- Wopf: '\uD835\uDD4E',
- wopf: '\uD835\uDD68',
- wp: '\u2118',
- wr: '\u2240',
- wreath: '\u2240',
- Wscr: '\uD835\uDCB2',
- wscr: '\uD835\uDCCC',
- xcap: '\u22C2',
- xcirc: '\u25EF',
- xcup: '\u22C3',
- xdtri: '\u25BD',
- Xfr: '\uD835\uDD1B',
- xfr: '\uD835\uDD35',
- xhArr: '\u27FA',
- xharr: '\u27F7',
- Xi: '\u039E',
- xi: '\u03BE',
- xlArr: '\u27F8',
- xlarr: '\u27F5',
- xmap: '\u27FC',
- xnis: '\u22FB',
- xodot: '\u2A00',
- Xopf: '\uD835\uDD4F',
- xopf: '\uD835\uDD69',
- xoplus: '\u2A01',
- xotime: '\u2A02',
- xrArr: '\u27F9',
- xrarr: '\u27F6',
- Xscr: '\uD835\uDCB3',
- xscr: '\uD835\uDCCD',
- xsqcup: '\u2A06',
- xuplus: '\u2A04',
- xutri: '\u25B3',
- xvee: '\u22C1',
- xwedge: '\u22C0',
- Yacute: '\u00DD',
- yacute: '\u00FD',
- YAcy: '\u042F',
- yacy: '\u044F',
- Ycirc: '\u0176',
- ycirc: '\u0177',
- Ycy: '\u042B',
- ycy: '\u044B',
- yen: '\u00A5',
- Yfr: '\uD835\uDD1C',
- yfr: '\uD835\uDD36',
- YIcy: '\u0407',
- yicy: '\u0457',
- Yopf: '\uD835\uDD50',
- yopf: '\uD835\uDD6A',
- Yscr: '\uD835\uDCB4',
- yscr: '\uD835\uDCCE',
- YUcy: '\u042E',
- yucy: '\u044E',
- Yuml: '\u0178',
- yuml: '\u00FF',
- Zacute: '\u0179',
- zacute: '\u017A',
- Zcaron: '\u017D',
- zcaron: '\u017E',
- Zcy: '\u0417',
- zcy: '\u0437',
- Zdot: '\u017B',
- zdot: '\u017C',
- zeetrf: '\u2128',
- ZeroWidthSpace: '\u200B',
- Zeta: '\u0396',
- zeta: '\u03B6',
- Zfr: '\u2128',
- zfr: '\uD835\uDD37',
- ZHcy: '\u0416',
- zhcy: '\u0436',
- zigrarr: '\u21DD',
- Zopf: '\u2124',
- zopf: '\uD835\uDD6B',
- Zscr: '\uD835\uDCB5',
- zscr: '\uD835\uDCCF',
- zwj: '\u200D',
- zwnj: '\u200C',
- });
-
- /**
- * @deprecated use `HTML_ENTITIES` instead
- * @see HTML_ENTITIES
- */
- exports.entityMap = exports.HTML_ENTITIES;
-
- },{"./conventions":2}],6:[function(require,module,exports){
- var dom = require('./dom')
- exports.DOMImplementation = dom.DOMImplementation
- exports.XMLSerializer = dom.XMLSerializer
- exports.DOMParser = require('./dom-parser').DOMParser
-
- },{"./dom":4,"./dom-parser":3}],7:[function(require,module,exports){
- var NAMESPACE = require("./conventions").NAMESPACE;
-
- //[4] NameStartChar ::= ":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]
- //[4a] NameChar ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
- //[5] Name ::= NameStartChar (NameChar)*
- var nameStartChar = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]///\u10000-\uEFFFF
- var nameChar = new RegExp("[\\-\\.0-9"+nameStartChar.source.slice(1,-1)+"\\u00B7\\u0300-\\u036F\\u203F-\\u2040]");
- var tagNamePattern = new RegExp('^'+nameStartChar.source+nameChar.source+'*(?:\:'+nameStartChar.source+nameChar.source+'*)?$');
- //var tagNamePattern = /^[a-zA-Z_][\w\-\.]*(?:\:[a-zA-Z_][\w\-\.]*)?$/
- //var handlers = 'resolveEntity,getExternalSubset,characters,endDocument,endElement,endPrefixMapping,ignorableWhitespace,processingInstruction,setDocumentLocator,skippedEntity,startDocument,startElement,startPrefixMapping,notationDecl,unparsedEntityDecl,error,fatalError,warning,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,comment,endCDATA,endDTD,endEntity,startCDATA,startDTD,startEntity'.split(',')
-
- //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
- //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
- var S_TAG = 0;//tag name offerring
- var S_ATTR = 1;//attr name offerring
- var S_ATTR_SPACE=2;//attr name end and space offer
- var S_EQ = 3;//=space?
- var S_ATTR_NOQUOT_VALUE = 4;//attr value(no quot value only)
- var S_ATTR_END = 5;//attr value end and no space(quot end)
- var S_TAG_SPACE = 6;//(attr value end || tag end ) && (space offer)
- var S_TAG_CLOSE = 7;//closed el<el />
-
- /**
- * Creates an error that will not be caught by XMLReader aka the SAX parser.
- *
- * @param {string} message
- * @param {any?} locator Optional, can provide details about the location in the source
- * @constructor
- */
- function ParseError(message, locator) {
- this.message = message
- this.locator = locator
- if(Error.captureStackTrace) Error.captureStackTrace(this, ParseError);
- }
- ParseError.prototype = new Error();
- ParseError.prototype.name = ParseError.name
-
- function XMLReader(){
-
- }
-
- XMLReader.prototype = {
- parse:function(source,defaultNSMap,entityMap){
- var domBuilder = this.domBuilder;
- domBuilder.startDocument();
- _copy(defaultNSMap ,defaultNSMap = {})
- parse(source,defaultNSMap,entityMap,
- domBuilder,this.errorHandler);
- domBuilder.endDocument();
- }
- }
- function parse(source,defaultNSMapCopy,entityMap,domBuilder,errorHandler){
- function fixedFromCharCode(code) {
- // String.prototype.fromCharCode does not supports
- // > 2 bytes unicode chars directly
- if (code > 0xffff) {
- code -= 0x10000;
- var surrogate1 = 0xd800 + (code >> 10)
- , surrogate2 = 0xdc00 + (code & 0x3ff);
-
- return String.fromCharCode(surrogate1, surrogate2);
- } else {
- return String.fromCharCode(code);
- }
- }
- function entityReplacer(a){
- var k = a.slice(1,-1);
- if (Object.hasOwnProperty.call(entityMap, k)) {
- return entityMap[k];
- }else if(k.charAt(0) === '#'){
- return fixedFromCharCode(parseInt(k.substr(1).replace('x','0x')))
- }else{
- errorHandler.error('entity not found:'+a);
- return a;
- }
- }
- function appendText(end){//has some bugs
- if(end>start){
- var xt = source.substring(start,end).replace(/&#?\w+;/g,entityReplacer);
- locator&&position(start);
- domBuilder.characters(xt,0,end-start);
- start = end
- }
- }
- function position(p,m){
- while(p>=lineEnd && (m = linePattern.exec(source))){
- lineStart = m.index;
- lineEnd = lineStart + m[0].length;
- locator.lineNumber++;
- //console.log('line++:',locator,startPos,endPos)
- }
- locator.columnNumber = p-lineStart+1;
- }
- var lineStart = 0;
- var lineEnd = 0;
- var linePattern = /.*(?:\r\n?|\n)|.*$/g
- var locator = domBuilder.locator;
-
- var parseStack = [{currentNSMap:defaultNSMapCopy}]
- var closeMap = {};
- var start = 0;
- while(true){
- try{
- var tagStart = source.indexOf('<',start);
- if(tagStart<0){
- if(!source.substr(start).match(/^\s*$/)){
- var doc = domBuilder.doc;
- var text = doc.createTextNode(source.substr(start));
- doc.appendChild(text);
- domBuilder.currentElement = text;
- }
- return;
- }
- if(tagStart>start){
- appendText(tagStart);
- }
- switch(source.charAt(tagStart+1)){
- case '/':
- var end = source.indexOf('>',tagStart+3);
- var tagName = source.substring(tagStart + 2, end).replace(/[ \t\n\r]+$/g, '');
- var config = parseStack.pop();
- if(end<0){
-
- tagName = source.substring(tagStart+2).replace(/[\s<].*/,'');
- errorHandler.error("end tag name: "+tagName+' is not complete:'+config.tagName);
- end = tagStart+1+tagName.length;
- }else if(tagName.match(/\s</)){
- tagName = tagName.replace(/[\s<].*/,'');
- errorHandler.error("end tag name: "+tagName+' maybe not complete');
- end = tagStart+1+tagName.length;
- }
- var localNSMap = config.localNSMap;
- var endMatch = config.tagName == tagName;
- var endIgnoreCaseMach = endMatch || config.tagName&&config.tagName.toLowerCase() == tagName.toLowerCase()
- if(endIgnoreCaseMach){
- domBuilder.endElement(config.uri,config.localName,tagName);
- if(localNSMap){
- for (var prefix in localNSMap) {
- if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
- domBuilder.endPrefixMapping(prefix);
- }
- }
- }
- if(!endMatch){
- errorHandler.fatalError("end tag name: "+tagName+' is not match the current start tagName:'+config.tagName ); // No known test case
- }
- }else{
- parseStack.push(config)
- }
-
- end++;
- break;
- // end elment
- case '?':// <?...?>
- locator&&position(tagStart);
- end = parseInstruction(source,tagStart,domBuilder);
- break;
- case '!':// <!doctype,<![CDATA,<!--
- locator&&position(tagStart);
- end = parseDCC(source,tagStart,domBuilder,errorHandler);
- break;
- default:
- locator&&position(tagStart);
- var el = new ElementAttributes();
- var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
- //elStartEnd
- var end = parseElementStartPart(source,tagStart,el,currentNSMap,entityReplacer,errorHandler);
- var len = el.length;
-
-
- if(!el.closed && fixSelfClosed(source,end,el.tagName,closeMap)){
- el.closed = true;
- if(!entityMap.nbsp){
- errorHandler.warning('unclosed xml attribute');
- }
- }
- if(locator && len){
- var locator2 = copyLocator(locator,{});
- //try{//attribute position fixed
- for(var i = 0;i<len;i++){
- var a = el[i];
- position(a.offset);
- a.locator = copyLocator(locator,{});
- }
- domBuilder.locator = locator2
- if(appendElement(el,domBuilder,currentNSMap)){
- parseStack.push(el)
- }
- domBuilder.locator = locator;
- }else{
- if(appendElement(el,domBuilder,currentNSMap)){
- parseStack.push(el)
- }
- }
-
- if (NAMESPACE.isHTML(el.uri) && !el.closed) {
- end = parseHtmlSpecialContent(source,end,el.tagName,entityReplacer,domBuilder)
- } else {
- end++;
- }
- }
- }catch(e){
- if (e instanceof ParseError) {
- throw e;
- }
- errorHandler.error('element parse error: '+e)
- end = -1;
- }
- if(end>start){
- start = end;
- }else{
- //TODO: 这里有可能sax回退,有位置错误风险
- appendText(Math.max(tagStart,start)+1);
- }
- }
- }
- function copyLocator(f,t){
- t.lineNumber = f.lineNumber;
- t.columnNumber = f.columnNumber;
- return t;
- }
-
- /**
- * @see #appendElement(source,elStartEnd,el,selfClosed,entityReplacer,domBuilder,parseStack);
- * @return end of the elementStartPart(end of elementEndPart for selfClosed el)
- */
- function parseElementStartPart(source,start,el,currentNSMap,entityReplacer,errorHandler){
-
- /**
- * @param {string} qname
- * @param {string} value
- * @param {number} startIndex
- */
- function addAttribute(qname, value, startIndex) {
- if (el.attributeNames.hasOwnProperty(qname)) {
- errorHandler.fatalError('Attribute ' + qname + ' redefined')
- }
- el.addValue(
- qname,
- // @see https://www.w3.org/TR/xml/#AVNormalize
- // since the xmldom sax parser does not "interpret" DTD the following is not implemented:
- // - recursive replacement of (DTD) entity references
- // - trimming and collapsing multiple spaces into a single one for attributes that are not of type CDATA
- value.replace(/[\t\n\r]/g, ' ').replace(/&#?\w+;/g, entityReplacer),
- startIndex
- )
- }
- var attrName;
- var value;
- var p = ++start;
- var s = S_TAG;//status
- while(true){
- var c = source.charAt(p);
- switch(c){
- case '=':
- if(s === S_ATTR){//attrName
- attrName = source.slice(start,p);
- s = S_EQ;
- }else if(s === S_ATTR_SPACE){
- s = S_EQ;
- }else{
- //fatalError: equal must after attrName or space after attrName
- throw new Error('attribute equal must after attrName'); // No known test case
- }
- break;
- case '\'':
- case '"':
- if(s === S_EQ || s === S_ATTR //|| s == S_ATTR_SPACE
- ){//equal
- if(s === S_ATTR){
- errorHandler.warning('attribute value must after "="')
- attrName = source.slice(start,p)
- }
- start = p+1;
- p = source.indexOf(c,start)
- if(p>0){
- value = source.slice(start, p);
- addAttribute(attrName, value, start-1);
- s = S_ATTR_END;
- }else{
- //fatalError: no end quot match
- throw new Error('attribute value no end \''+c+'\' match');
- }
- }else if(s == S_ATTR_NOQUOT_VALUE){
- value = source.slice(start, p);
- addAttribute(attrName, value, start);
- errorHandler.warning('attribute "'+attrName+'" missed start quot('+c+')!!');
- start = p+1;
- s = S_ATTR_END
- }else{
- //fatalError: no equal before
- throw new Error('attribute value must after "="'); // No known test case
- }
- break;
- case '/':
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));
- case S_ATTR_END:
- case S_TAG_SPACE:
- case S_TAG_CLOSE:
- s =S_TAG_CLOSE;
- el.closed = true;
- case S_ATTR_NOQUOT_VALUE:
- case S_ATTR:
- break;
- case S_ATTR_SPACE:
- el.closed = true;
- break;
- //case S_EQ:
- default:
- throw new Error("attribute invalid close char('/')") // No known test case
- }
- break;
- case ''://end document
- errorHandler.error('unexpected end of input');
- if(s == S_TAG){
- el.setTagName(source.slice(start,p));
- }
- return p;
- case '>':
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));
- case S_ATTR_END:
- case S_TAG_SPACE:
- case S_TAG_CLOSE:
- break;//normal
- case S_ATTR_NOQUOT_VALUE://Compatible state
- case S_ATTR:
- value = source.slice(start,p);
- if(value.slice(-1) === '/'){
- el.closed = true;
- value = value.slice(0,-1)
- }
- case S_ATTR_SPACE:
- if(s === S_ATTR_SPACE){
- value = attrName;
- }
- if(s == S_ATTR_NOQUOT_VALUE){
- errorHandler.warning('attribute "'+value+'" missed quot(")!');
- addAttribute(attrName, value, start)
- }else{
- if(!NAMESPACE.isHTML(currentNSMap['']) || !value.match(/^(?:disabled|checked|selected)$/i)){
- errorHandler.warning('attribute "'+value+'" missed value!! "'+value+'" instead!!')
- }
- addAttribute(value, value, start)
- }
- break;
- case S_EQ:
- throw new Error('attribute value missed!!');
- }
- // console.log(tagName,tagNamePattern,tagNamePattern.test(tagName))
- return p;
- /*xml space '\x20' | #x9 | #xD | #xA; */
- case '\u0080':
- c = ' ';
- default:
- if(c<= ' '){//space
- switch(s){
- case S_TAG:
- el.setTagName(source.slice(start,p));//tagName
- s = S_TAG_SPACE;
- break;
- case S_ATTR:
- attrName = source.slice(start,p)
- s = S_ATTR_SPACE;
- break;
- case S_ATTR_NOQUOT_VALUE:
- var value = source.slice(start, p);
- errorHandler.warning('attribute "'+value+'" missed quot(")!!');
- addAttribute(attrName, value, start)
- case S_ATTR_END:
- s = S_TAG_SPACE;
- break;
- //case S_TAG_SPACE:
- //case S_EQ:
- //case S_ATTR_SPACE:
- // void();break;
- //case S_TAG_CLOSE:
- //ignore warning
- }
- }else{//not space
- //S_TAG, S_ATTR, S_EQ, S_ATTR_NOQUOT_VALUE
- //S_ATTR_SPACE, S_ATTR_END, S_TAG_SPACE, S_TAG_CLOSE
- switch(s){
- //case S_TAG:void();break;
- //case S_ATTR:void();break;
- //case S_ATTR_NOQUOT_VALUE:void();break;
- case S_ATTR_SPACE:
- var tagName = el.tagName;
- if (!NAMESPACE.isHTML(currentNSMap['']) || !attrName.match(/^(?:disabled|checked|selected)$/i)) {
- errorHandler.warning('attribute "'+attrName+'" missed value!! "'+attrName+'" instead2!!')
- }
- addAttribute(attrName, attrName, start);
- start = p;
- s = S_ATTR;
- break;
- case S_ATTR_END:
- errorHandler.warning('attribute space is required"'+attrName+'"!!')
- case S_TAG_SPACE:
- s = S_ATTR;
- start = p;
- break;
- case S_EQ:
- s = S_ATTR_NOQUOT_VALUE;
- start = p;
- break;
- case S_TAG_CLOSE:
- throw new Error("elements closed character '/' and '>' must be connected to");
- }
- }
- }//end outer switch
- //console.log('p++',p)
- p++;
- }
- }
- /**
- * @return true if has new namespace define
- */
- function appendElement(el,domBuilder,currentNSMap){
- var tagName = el.tagName;
- var localNSMap = null;
- //var currentNSMap = parseStack[parseStack.length-1].currentNSMap;
- var i = el.length;
- while(i--){
- var a = el[i];
- var qName = a.qName;
- var value = a.value;
- var nsp = qName.indexOf(':');
- if(nsp>0){
- var prefix = a.prefix = qName.slice(0,nsp);
- var localName = qName.slice(nsp+1);
- var nsPrefix = prefix === 'xmlns' && localName
- }else{
- localName = qName;
- prefix = null
- nsPrefix = qName === 'xmlns' && ''
- }
- //can not set prefix,because prefix !== ''
- a.localName = localName ;
- //prefix == null for no ns prefix attribute
- if(nsPrefix !== false){//hack!!
- if(localNSMap == null){
- localNSMap = {}
- //console.log(currentNSMap,0)
- _copy(currentNSMap,currentNSMap={})
- //console.log(currentNSMap,1)
- }
- currentNSMap[nsPrefix] = localNSMap[nsPrefix] = value;
- a.uri = NAMESPACE.XMLNS
- domBuilder.startPrefixMapping(nsPrefix, value)
- }
- }
- var i = el.length;
- while(i--){
- a = el[i];
- var prefix = a.prefix;
- if(prefix){//no prefix attribute has no namespace
- if(prefix === 'xml'){
- a.uri = NAMESPACE.XML;
- }if(prefix !== 'xmlns'){
- a.uri = currentNSMap[prefix || '']
-
- //{console.log('###'+a.qName,domBuilder.locator.systemId+'',currentNSMap,a.uri)}
- }
- }
- }
- var nsp = tagName.indexOf(':');
- if(nsp>0){
- prefix = el.prefix = tagName.slice(0,nsp);
- localName = el.localName = tagName.slice(nsp+1);
- }else{
- prefix = null;//important!!
- localName = el.localName = tagName;
- }
- //no prefix element has default namespace
- var ns = el.uri = currentNSMap[prefix || ''];
- domBuilder.startElement(ns,localName,tagName,el);
- //endPrefixMapping and startPrefixMapping have not any help for dom builder
- //localNSMap = null
- if(el.closed){
- domBuilder.endElement(ns,localName,tagName);
- if(localNSMap){
- for (prefix in localNSMap) {
- if (Object.prototype.hasOwnProperty.call(localNSMap, prefix)) {
- domBuilder.endPrefixMapping(prefix);
- }
- }
- }
- }else{
- el.currentNSMap = currentNSMap;
- el.localNSMap = localNSMap;
- //parseStack.push(el);
- return true;
- }
- }
- function parseHtmlSpecialContent(source,elStartEnd,tagName,entityReplacer,domBuilder){
- if(/^(?:script|textarea)$/i.test(tagName)){
- var elEndStart = source.indexOf('</'+tagName+'>',elStartEnd);
- var text = source.substring(elStartEnd+1,elEndStart);
- if(/[&<]/.test(text)){
- if(/^script$/i.test(tagName)){
- //if(!/\]\]>/.test(text)){
- //lexHandler.startCDATA();
- domBuilder.characters(text,0,text.length);
- //lexHandler.endCDATA();
- return elEndStart;
- //}
- }//}else{//text area
- text = text.replace(/&#?\w+;/g,entityReplacer);
- domBuilder.characters(text,0,text.length);
- return elEndStart;
- //}
-
- }
- }
- return elStartEnd+1;
- }
- function fixSelfClosed(source,elStartEnd,tagName,closeMap){
- //if(tagName in closeMap){
- var pos = closeMap[tagName];
- if(pos == null){
- //console.log(tagName)
- pos = source.lastIndexOf('</'+tagName+'>')
- if(pos<elStartEnd){//忘记闭合
- pos = source.lastIndexOf('</'+tagName)
- }
- closeMap[tagName] =pos
- }
- return pos<elStartEnd;
- //}
- }
-
- function _copy (source, target) {
- for (var n in source) {
- if (Object.prototype.hasOwnProperty.call(source, n)) {
- target[n] = source[n];
- }
- }
- }
-
- function parseDCC(source,start,domBuilder,errorHandler){//sure start with '<!'
- var next= source.charAt(start+2)
- switch(next){
- case '-':
- if(source.charAt(start + 3) === '-'){
- var end = source.indexOf('-->',start+4);
- //append comment source.substring(4,end)//<!--
- if(end>start){
- domBuilder.comment(source,start+4,end-start-4);
- return end+3;
- }else{
- errorHandler.error("Unclosed comment");
- return -1;
- }
- }else{
- //error
- return -1;
- }
- default:
- if(source.substr(start+3,6) == 'CDATA['){
- var end = source.indexOf(']]>',start+9);
- domBuilder.startCDATA();
- domBuilder.characters(source,start+9,end-start-9);
- domBuilder.endCDATA()
- return end+3;
- }
- //<!DOCTYPE
- //startDTD(java.lang.String name, java.lang.String publicId, java.lang.String systemId)
- var matchs = split(source,start);
- var len = matchs.length;
- if(len>1 && /!doctype/i.test(matchs[0][0])){
- var name = matchs[1][0];
- var pubid = false;
- var sysid = false;
- if(len>3){
- if(/^public$/i.test(matchs[2][0])){
- pubid = matchs[3][0];
- sysid = len>4 && matchs[4][0];
- }else if(/^system$/i.test(matchs[2][0])){
- sysid = matchs[3][0];
- }
- }
- var lastMatch = matchs[len-1]
- domBuilder.startDTD(name, pubid, sysid);
- domBuilder.endDTD();
-
- return lastMatch.index+lastMatch[0].length
- }
- }
- return -1;
- }
-
-
-
- function parseInstruction(source,start,domBuilder){
- var end = source.indexOf('?>',start);
- if(end){
- var match = source.substring(start,end).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
- if(match){
- var len = match[0].length;
- domBuilder.processingInstruction(match[1], match[2]) ;
- return end+2;
- }else{//error
- return -1;
- }
- }
- return -1;
- }
-
- function ElementAttributes(){
- this.attributeNames = {}
- }
- ElementAttributes.prototype = {
- setTagName:function(tagName){
- if(!tagNamePattern.test(tagName)){
- throw new Error('invalid tagName:'+tagName)
- }
- this.tagName = tagName
- },
- addValue:function(qName, value, offset) {
- if(!tagNamePattern.test(qName)){
- throw new Error('invalid attribute:'+qName)
- }
- this.attributeNames[qName] = this.length;
- this[this.length++] = {qName:qName,value:value,offset:offset}
- },
- length:0,
- getLocalName:function(i){return this[i].localName},
- getLocator:function(i){return this[i].locator},
- getQName:function(i){return this[i].qName},
- getURI:function(i){return this[i].uri},
- getValue:function(i){return this[i].value}
- // ,getIndex:function(uri, localName)){
- // if(localName){
- //
- // }else{
- // var qName = uri
- // }
- // },
- // getValue:function(){return this.getValue(this.getIndex.apply(this,arguments))},
- // getType:function(uri,localName){}
- // getType:function(i){},
- }
-
-
-
- function split(source,start){
- var match;
- var buf = [];
- var reg = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g;
- reg.lastIndex = start;
- reg.exec(source);//skip <
- while(match = reg.exec(source)){
- buf.push(match);
- if(match[1])return buf;
- }
- }
-
- exports.XMLReader = XMLReader;
- exports.ParseError = ParseError;
-
- },{"./conventions":2}],8:[function(require,module,exports){
- 'use strict'
-
- exports.byteLength = byteLength
- exports.toByteArray = toByteArray
- exports.fromByteArray = fromByteArray
-
- var lookup = []
- var revLookup = []
- var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array
-
- var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- for (var i = 0, len = code.length; i < len; ++i) {
- lookup[i] = code[i]
- revLookup[code.charCodeAt(i)] = i
- }
-
- // Support decoding URL-safe base64 strings, as Node.js does.
- // See: https://en.wikipedia.org/wiki/Base64#URL_applications
- revLookup['-'.charCodeAt(0)] = 62
- revLookup['_'.charCodeAt(0)] = 63
-
- function getLens (b64) {
- var len = b64.length
-
- if (len % 4 > 0) {
- throw new Error('Invalid string. Length must be a multiple of 4')
- }
-
- // Trim off extra bytes after placeholder bytes are found
- // See: https://github.com/beatgammit/base64-js/issues/42
- var validLen = b64.indexOf('=')
- if (validLen === -1) validLen = len
-
- var placeHoldersLen = validLen === len
- ? 0
- : 4 - (validLen % 4)
-
- return [validLen, placeHoldersLen]
- }
-
- // base64 is 4/3 + up to two characters of the original data
- function byteLength (b64) {
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
- }
-
- function _byteLength (b64, validLen, placeHoldersLen) {
- return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen
- }
-
- function toByteArray (b64) {
- var tmp
- var lens = getLens(b64)
- var validLen = lens[0]
- var placeHoldersLen = lens[1]
-
- var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))
-
- var curByte = 0
-
- // if there are placeholders, only get up to the last complete 4 chars
- var len = placeHoldersLen > 0
- ? validLen - 4
- : validLen
-
- var i
- for (i = 0; i < len; i += 4) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 18) |
- (revLookup[b64.charCodeAt(i + 1)] << 12) |
- (revLookup[b64.charCodeAt(i + 2)] << 6) |
- revLookup[b64.charCodeAt(i + 3)]
- arr[curByte++] = (tmp >> 16) & 0xFF
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
- }
-
- if (placeHoldersLen === 2) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 2) |
- (revLookup[b64.charCodeAt(i + 1)] >> 4)
- arr[curByte++] = tmp & 0xFF
- }
-
- if (placeHoldersLen === 1) {
- tmp =
- (revLookup[b64.charCodeAt(i)] << 10) |
- (revLookup[b64.charCodeAt(i + 1)] << 4) |
- (revLookup[b64.charCodeAt(i + 2)] >> 2)
- arr[curByte++] = (tmp >> 8) & 0xFF
- arr[curByte++] = tmp & 0xFF
- }
-
- return arr
- }
-
- function tripletToBase64 (num) {
- return lookup[num >> 18 & 0x3F] +
- lookup[num >> 12 & 0x3F] +
- lookup[num >> 6 & 0x3F] +
- lookup[num & 0x3F]
- }
-
- function encodeChunk (uint8, start, end) {
- var tmp
- var output = []
- for (var i = start; i < end; i += 3) {
- tmp =
- ((uint8[i] << 16) & 0xFF0000) +
- ((uint8[i + 1] << 8) & 0xFF00) +
- (uint8[i + 2] & 0xFF)
- output.push(tripletToBase64(tmp))
- }
- return output.join('')
- }
-
- function fromByteArray (uint8) {
- var tmp
- var len = uint8.length
- var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes
- var parts = []
- var maxChunkLength = 16383 // must be multiple of 3
-
- // go through the array every three bytes, we'll deal with trailing stuff later
- for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {
- parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))
- }
-
- // pad the end with zeros, but make sure to not forget the extra bytes
- if (extraBytes === 1) {
- tmp = uint8[len - 1]
- parts.push(
- lookup[tmp >> 2] +
- lookup[(tmp << 4) & 0x3F] +
- '=='
- )
- } else if (extraBytes === 2) {
- tmp = (uint8[len - 2] << 8) + uint8[len - 1]
- parts.push(
- lookup[tmp >> 10] +
- lookup[(tmp >> 4) & 0x3F] +
- lookup[(tmp << 2) & 0x3F] +
- '='
- )
- }
-
- return parts.join('')
- }
-
- },{}],9:[function(require,module,exports){
- (function (Buffer){(function (){
- /*!
- * The buffer module from node.js, for the browser.
- *
- * @author Feross Aboukhadijeh <https://feross.org>
- * @license MIT
- */
- /* eslint-disable no-proto */
-
- 'use strict'
-
- var base64 = require('base64-js')
- var ieee754 = require('ieee754')
-
- exports.Buffer = Buffer
- exports.SlowBuffer = SlowBuffer
- exports.INSPECT_MAX_BYTES = 50
-
- var K_MAX_LENGTH = 0x7fffffff
- exports.kMaxLength = K_MAX_LENGTH
-
- /**
- * If `Buffer.TYPED_ARRAY_SUPPORT`:
- * === true Use Uint8Array implementation (fastest)
- * === false Print warning and recommend using `buffer` v4.x which has an Object
- * implementation (most compatible, even IE6)
- *
- * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,
- * Opera 11.6+, iOS 4.2+.
- *
- * We report that the browser does not support typed arrays if the are not subclassable
- * using __proto__. Firefox 4-29 lacks support for adding new properties to `Uint8Array`
- * (See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438). IE 10 lacks support
- * for __proto__ and has a buggy typed array implementation.
- */
- Buffer.TYPED_ARRAY_SUPPORT = typedArraySupport()
-
- if (!Buffer.TYPED_ARRAY_SUPPORT && typeof console !== 'undefined' &&
- typeof console.error === 'function') {
- console.error(
- 'This browser lacks typed array (Uint8Array) support which is required by ' +
- '`buffer` v5.x. Use `buffer` v4.x if you require old browser support.'
- )
- }
-
- function typedArraySupport () {
- // Can typed array instances can be augmented?
- try {
- var arr = new Uint8Array(1)
- arr.__proto__ = { __proto__: Uint8Array.prototype, foo: function () { return 42 } }
- return arr.foo() === 42
- } catch (e) {
- return false
- }
- }
-
- Object.defineProperty(Buffer.prototype, 'parent', {
- enumerable: true,
- get: function () {
- if (!Buffer.isBuffer(this)) return undefined
- return this.buffer
- }
- })
-
- Object.defineProperty(Buffer.prototype, 'offset', {
- enumerable: true,
- get: function () {
- if (!Buffer.isBuffer(this)) return undefined
- return this.byteOffset
- }
- })
-
- function createBuffer (length) {
- if (length > K_MAX_LENGTH) {
- throw new RangeError('The value "' + length + '" is invalid for option "size"')
- }
- // Return an augmented `Uint8Array` instance
- var buf = new Uint8Array(length)
- buf.__proto__ = Buffer.prototype
- return buf
- }
-
- /**
- * The Buffer constructor returns instances of `Uint8Array` that have their
- * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of
- * `Uint8Array`, so the returned instances will have all the node `Buffer` methods
- * and the `Uint8Array` methods. Square bracket notation works as expected -- it
- * returns a single octet.
- *
- * The `Uint8Array` prototype remains unmodified.
- */
-
- function Buffer (arg, encodingOrOffset, length) {
- // Common case.
- if (typeof arg === 'number') {
- if (typeof encodingOrOffset === 'string') {
- throw new TypeError(
- 'The "string" argument must be of type string. Received type number'
- )
- }
- return allocUnsafe(arg)
- }
- return from(arg, encodingOrOffset, length)
- }
-
- // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97
- if (typeof Symbol !== 'undefined' && Symbol.species != null &&
- Buffer[Symbol.species] === Buffer) {
- Object.defineProperty(Buffer, Symbol.species, {
- value: null,
- configurable: true,
- enumerable: false,
- writable: false
- })
- }
-
- Buffer.poolSize = 8192 // not used by this implementation
-
- function from (value, encodingOrOffset, length) {
- if (typeof value === 'string') {
- return fromString(value, encodingOrOffset)
- }
-
- if (ArrayBuffer.isView(value)) {
- return fromArrayLike(value)
- }
-
- if (value == null) {
- throw TypeError(
- 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
- 'or Array-like Object. Received type ' + (typeof value)
- )
- }
-
- if (isInstance(value, ArrayBuffer) ||
- (value && isInstance(value.buffer, ArrayBuffer))) {
- return fromArrayBuffer(value, encodingOrOffset, length)
- }
-
- if (typeof value === 'number') {
- throw new TypeError(
- 'The "value" argument must not be of type number. Received type number'
- )
- }
-
- var valueOf = value.valueOf && value.valueOf()
- if (valueOf != null && valueOf !== value) {
- return Buffer.from(valueOf, encodingOrOffset, length)
- }
-
- var b = fromObject(value)
- if (b) return b
-
- if (typeof Symbol !== 'undefined' && Symbol.toPrimitive != null &&
- typeof value[Symbol.toPrimitive] === 'function') {
- return Buffer.from(
- value[Symbol.toPrimitive]('string'), encodingOrOffset, length
- )
- }
-
- throw new TypeError(
- 'The first argument must be one of type string, Buffer, ArrayBuffer, Array, ' +
- 'or Array-like Object. Received type ' + (typeof value)
- )
- }
-
- /**
- * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError
- * if value is a number.
- * Buffer.from(str[, encoding])
- * Buffer.from(array)
- * Buffer.from(buffer)
- * Buffer.from(arrayBuffer[, byteOffset[, length]])
- **/
- Buffer.from = function (value, encodingOrOffset, length) {
- return from(value, encodingOrOffset, length)
- }
-
- // Note: Change prototype *after* Buffer.from is defined to workaround Chrome bug:
- // https://github.com/feross/buffer/pull/148
- Buffer.prototype.__proto__ = Uint8Array.prototype
- Buffer.__proto__ = Uint8Array
-
- function assertSize (size) {
- if (typeof size !== 'number') {
- throw new TypeError('"size" argument must be of type number')
- } else if (size < 0) {
- throw new RangeError('The value "' + size + '" is invalid for option "size"')
- }
- }
-
- function alloc (size, fill, encoding) {
- assertSize(size)
- if (size <= 0) {
- return createBuffer(size)
- }
- if (fill !== undefined) {
- // Only pay attention to encoding if it's a string. This
- // prevents accidentally sending in a number that would
- // be interpretted as a start offset.
- return typeof encoding === 'string'
- ? createBuffer(size).fill(fill, encoding)
- : createBuffer(size).fill(fill)
- }
- return createBuffer(size)
- }
-
- /**
- * Creates a new filled Buffer instance.
- * alloc(size[, fill[, encoding]])
- **/
- Buffer.alloc = function (size, fill, encoding) {
- return alloc(size, fill, encoding)
- }
-
- function allocUnsafe (size) {
- assertSize(size)
- return createBuffer(size < 0 ? 0 : checked(size) | 0)
- }
-
- /**
- * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.
- * */
- Buffer.allocUnsafe = function (size) {
- return allocUnsafe(size)
- }
- /**
- * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.
- */
- Buffer.allocUnsafeSlow = function (size) {
- return allocUnsafe(size)
- }
-
- function fromString (string, encoding) {
- if (typeof encoding !== 'string' || encoding === '') {
- encoding = 'utf8'
- }
-
- if (!Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
- }
-
- var length = byteLength(string, encoding) | 0
- var buf = createBuffer(length)
-
- var actual = buf.write(string, encoding)
-
- if (actual !== length) {
- // Writing a hex string, for example, that contains invalid characters will
- // cause everything after the first invalid character to be ignored. (e.g.
- // 'abxxcd' will be treated as 'ab')
- buf = buf.slice(0, actual)
- }
-
- return buf
- }
-
- function fromArrayLike (array) {
- var length = array.length < 0 ? 0 : checked(array.length) | 0
- var buf = createBuffer(length)
- for (var i = 0; i < length; i += 1) {
- buf[i] = array[i] & 255
- }
- return buf
- }
-
- function fromArrayBuffer (array, byteOffset, length) {
- if (byteOffset < 0 || array.byteLength < byteOffset) {
- throw new RangeError('"offset" is outside of buffer bounds')
- }
-
- if (array.byteLength < byteOffset + (length || 0)) {
- throw new RangeError('"length" is outside of buffer bounds')
- }
-
- var buf
- if (byteOffset === undefined && length === undefined) {
- buf = new Uint8Array(array)
- } else if (length === undefined) {
- buf = new Uint8Array(array, byteOffset)
- } else {
- buf = new Uint8Array(array, byteOffset, length)
- }
-
- // Return an augmented `Uint8Array` instance
- buf.__proto__ = Buffer.prototype
- return buf
- }
-
- function fromObject (obj) {
- if (Buffer.isBuffer(obj)) {
- var len = checked(obj.length) | 0
- var buf = createBuffer(len)
-
- if (buf.length === 0) {
- return buf
- }
-
- obj.copy(buf, 0, 0, len)
- return buf
- }
-
- if (obj.length !== undefined) {
- if (typeof obj.length !== 'number' || numberIsNaN(obj.length)) {
- return createBuffer(0)
- }
- return fromArrayLike(obj)
- }
-
- if (obj.type === 'Buffer' && Array.isArray(obj.data)) {
- return fromArrayLike(obj.data)
- }
- }
-
- function checked (length) {
- // Note: cannot use `length < K_MAX_LENGTH` here because that fails when
- // length is NaN (which is otherwise coerced to zero.)
- if (length >= K_MAX_LENGTH) {
- throw new RangeError('Attempt to allocate Buffer larger than maximum ' +
- 'size: 0x' + K_MAX_LENGTH.toString(16) + ' bytes')
- }
- return length | 0
- }
-
- function SlowBuffer (length) {
- if (+length != length) { // eslint-disable-line eqeqeq
- length = 0
- }
- return Buffer.alloc(+length)
- }
-
- Buffer.isBuffer = function isBuffer (b) {
- return b != null && b._isBuffer === true &&
- b !== Buffer.prototype // so Buffer.isBuffer(Buffer.prototype) will be false
- }
-
- Buffer.compare = function compare (a, b) {
- if (isInstance(a, Uint8Array)) a = Buffer.from(a, a.offset, a.byteLength)
- if (isInstance(b, Uint8Array)) b = Buffer.from(b, b.offset, b.byteLength)
- if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {
- throw new TypeError(
- 'The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array'
- )
- }
-
- if (a === b) return 0
-
- var x = a.length
- var y = b.length
-
- for (var i = 0, len = Math.min(x, y); i < len; ++i) {
- if (a[i] !== b[i]) {
- x = a[i]
- y = b[i]
- break
- }
- }
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
- }
-
- Buffer.isEncoding = function isEncoding (encoding) {
- switch (String(encoding).toLowerCase()) {
- case 'hex':
- case 'utf8':
- case 'utf-8':
- case 'ascii':
- case 'latin1':
- case 'binary':
- case 'base64':
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return true
- default:
- return false
- }
- }
-
- Buffer.concat = function concat (list, length) {
- if (!Array.isArray(list)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
-
- if (list.length === 0) {
- return Buffer.alloc(0)
- }
-
- var i
- if (length === undefined) {
- length = 0
- for (i = 0; i < list.length; ++i) {
- length += list[i].length
- }
- }
-
- var buffer = Buffer.allocUnsafe(length)
- var pos = 0
- for (i = 0; i < list.length; ++i) {
- var buf = list[i]
- if (isInstance(buf, Uint8Array)) {
- buf = Buffer.from(buf)
- }
- if (!Buffer.isBuffer(buf)) {
- throw new TypeError('"list" argument must be an Array of Buffers')
- }
- buf.copy(buffer, pos)
- pos += buf.length
- }
- return buffer
- }
-
- function byteLength (string, encoding) {
- if (Buffer.isBuffer(string)) {
- return string.length
- }
- if (ArrayBuffer.isView(string) || isInstance(string, ArrayBuffer)) {
- return string.byteLength
- }
- if (typeof string !== 'string') {
- throw new TypeError(
- 'The "string" argument must be one of type string, Buffer, or ArrayBuffer. ' +
- 'Received type ' + typeof string
- )
- }
-
- var len = string.length
- var mustMatch = (arguments.length > 2 && arguments[2] === true)
- if (!mustMatch && len === 0) return 0
-
- // Use a for loop to avoid recursion
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'ascii':
- case 'latin1':
- case 'binary':
- return len
- case 'utf8':
- case 'utf-8':
- return utf8ToBytes(string).length
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return len * 2
- case 'hex':
- return len >>> 1
- case 'base64':
- return base64ToBytes(string).length
- default:
- if (loweredCase) {
- return mustMatch ? -1 : utf8ToBytes(string).length // assume utf8
- }
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
- }
- Buffer.byteLength = byteLength
-
- function slowToString (encoding, start, end) {
- var loweredCase = false
-
- // No need to verify that "this.length <= MAX_UINT32" since it's a read-only
- // property of a typed array.
-
- // This behaves neither like String nor Uint8Array in that we set start/end
- // to their upper/lower bounds if the value passed is out of range.
- // undefined is handled specially as per ECMA-262 6th Edition,
- // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.
- if (start === undefined || start < 0) {
- start = 0
- }
- // Return early if start > this.length. Done here to prevent potential uint32
- // coercion fail below.
- if (start > this.length) {
- return ''
- }
-
- if (end === undefined || end > this.length) {
- end = this.length
- }
-
- if (end <= 0) {
- return ''
- }
-
- // Force coersion to uint32. This will also coerce falsey/NaN values to 0.
- end >>>= 0
- start >>>= 0
-
- if (end <= start) {
- return ''
- }
-
- if (!encoding) encoding = 'utf8'
-
- while (true) {
- switch (encoding) {
- case 'hex':
- return hexSlice(this, start, end)
-
- case 'utf8':
- case 'utf-8':
- return utf8Slice(this, start, end)
-
- case 'ascii':
- return asciiSlice(this, start, end)
-
- case 'latin1':
- case 'binary':
- return latin1Slice(this, start, end)
-
- case 'base64':
- return base64Slice(this, start, end)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return utf16leSlice(this, start, end)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = (encoding + '').toLowerCase()
- loweredCase = true
- }
- }
- }
-
- // This property is used by `Buffer.isBuffer` (and the `is-buffer` npm package)
- // to detect a Buffer instance. It's not possible to use `instanceof Buffer`
- // reliably in a browserify context because there could be multiple different
- // copies of the 'buffer' package in use. This method works even for Buffer
- // instances that were created from another copy of the `buffer` package.
- // See: https://github.com/feross/buffer/issues/154
- Buffer.prototype._isBuffer = true
-
- function swap (b, n, m) {
- var i = b[n]
- b[n] = b[m]
- b[m] = i
- }
-
- Buffer.prototype.swap16 = function swap16 () {
- var len = this.length
- if (len % 2 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 16-bits')
- }
- for (var i = 0; i < len; i += 2) {
- swap(this, i, i + 1)
- }
- return this
- }
-
- Buffer.prototype.swap32 = function swap32 () {
- var len = this.length
- if (len % 4 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 32-bits')
- }
- for (var i = 0; i < len; i += 4) {
- swap(this, i, i + 3)
- swap(this, i + 1, i + 2)
- }
- return this
- }
-
- Buffer.prototype.swap64 = function swap64 () {
- var len = this.length
- if (len % 8 !== 0) {
- throw new RangeError('Buffer size must be a multiple of 64-bits')
- }
- for (var i = 0; i < len; i += 8) {
- swap(this, i, i + 7)
- swap(this, i + 1, i + 6)
- swap(this, i + 2, i + 5)
- swap(this, i + 3, i + 4)
- }
- return this
- }
-
- Buffer.prototype.toString = function toString () {
- var length = this.length
- if (length === 0) return ''
- if (arguments.length === 0) return utf8Slice(this, 0, length)
- return slowToString.apply(this, arguments)
- }
-
- Buffer.prototype.toLocaleString = Buffer.prototype.toString
-
- Buffer.prototype.equals = function equals (b) {
- if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')
- if (this === b) return true
- return Buffer.compare(this, b) === 0
- }
-
- Buffer.prototype.inspect = function inspect () {
- var str = ''
- var max = exports.INSPECT_MAX_BYTES
- str = this.toString('hex', 0, max).replace(/(.{2})/g, '$1 ').trim()
- if (this.length > max) str += ' ... '
- return '<Buffer ' + str + '>'
- }
-
- Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {
- if (isInstance(target, Uint8Array)) {
- target = Buffer.from(target, target.offset, target.byteLength)
- }
- if (!Buffer.isBuffer(target)) {
- throw new TypeError(
- 'The "target" argument must be one of type Buffer or Uint8Array. ' +
- 'Received type ' + (typeof target)
- )
- }
-
- if (start === undefined) {
- start = 0
- }
- if (end === undefined) {
- end = target ? target.length : 0
- }
- if (thisStart === undefined) {
- thisStart = 0
- }
- if (thisEnd === undefined) {
- thisEnd = this.length
- }
-
- if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {
- throw new RangeError('out of range index')
- }
-
- if (thisStart >= thisEnd && start >= end) {
- return 0
- }
- if (thisStart >= thisEnd) {
- return -1
- }
- if (start >= end) {
- return 1
- }
-
- start >>>= 0
- end >>>= 0
- thisStart >>>= 0
- thisEnd >>>= 0
-
- if (this === target) return 0
-
- var x = thisEnd - thisStart
- var y = end - start
- var len = Math.min(x, y)
-
- var thisCopy = this.slice(thisStart, thisEnd)
- var targetCopy = target.slice(start, end)
-
- for (var i = 0; i < len; ++i) {
- if (thisCopy[i] !== targetCopy[i]) {
- x = thisCopy[i]
- y = targetCopy[i]
- break
- }
- }
-
- if (x < y) return -1
- if (y < x) return 1
- return 0
- }
-
- // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,
- // OR the last index of `val` in `buffer` at offset <= `byteOffset`.
- //
- // Arguments:
- // - buffer - a Buffer to search
- // - val - a string, Buffer, or number
- // - byteOffset - an index into `buffer`; will be clamped to an int32
- // - encoding - an optional encoding, relevant is val is a string
- // - dir - true for indexOf, false for lastIndexOf
- function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {
- // Empty buffer means no match
- if (buffer.length === 0) return -1
-
- // Normalize byteOffset
- if (typeof byteOffset === 'string') {
- encoding = byteOffset
- byteOffset = 0
- } else if (byteOffset > 0x7fffffff) {
- byteOffset = 0x7fffffff
- } else if (byteOffset < -0x80000000) {
- byteOffset = -0x80000000
- }
- byteOffset = +byteOffset // Coerce to Number.
- if (numberIsNaN(byteOffset)) {
- // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer
- byteOffset = dir ? 0 : (buffer.length - 1)
- }
-
- // Normalize byteOffset: negative offsets start from the end of the buffer
- if (byteOffset < 0) byteOffset = buffer.length + byteOffset
- if (byteOffset >= buffer.length) {
- if (dir) return -1
- else byteOffset = buffer.length - 1
- } else if (byteOffset < 0) {
- if (dir) byteOffset = 0
- else return -1
- }
-
- // Normalize val
- if (typeof val === 'string') {
- val = Buffer.from(val, encoding)
- }
-
- // Finally, search either indexOf (if dir is true) or lastIndexOf
- if (Buffer.isBuffer(val)) {
- // Special case: looking for empty string/buffer always fails
- if (val.length === 0) {
- return -1
- }
- return arrayIndexOf(buffer, val, byteOffset, encoding, dir)
- } else if (typeof val === 'number') {
- val = val & 0xFF // Search for a byte value [0-255]
- if (typeof Uint8Array.prototype.indexOf === 'function') {
- if (dir) {
- return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)
- } else {
- return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)
- }
- }
- return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)
- }
-
- throw new TypeError('val must be string, number or Buffer')
- }
-
- function arrayIndexOf (arr, val, byteOffset, encoding, dir) {
- var indexSize = 1
- var arrLength = arr.length
- var valLength = val.length
-
- if (encoding !== undefined) {
- encoding = String(encoding).toLowerCase()
- if (encoding === 'ucs2' || encoding === 'ucs-2' ||
- encoding === 'utf16le' || encoding === 'utf-16le') {
- if (arr.length < 2 || val.length < 2) {
- return -1
- }
- indexSize = 2
- arrLength /= 2
- valLength /= 2
- byteOffset /= 2
- }
- }
-
- function read (buf, i) {
- if (indexSize === 1) {
- return buf[i]
- } else {
- return buf.readUInt16BE(i * indexSize)
- }
- }
-
- var i
- if (dir) {
- var foundIndex = -1
- for (i = byteOffset; i < arrLength; i++) {
- if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {
- if (foundIndex === -1) foundIndex = i
- if (i - foundIndex + 1 === valLength) return foundIndex * indexSize
- } else {
- if (foundIndex !== -1) i -= i - foundIndex
- foundIndex = -1
- }
- }
- } else {
- if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength
- for (i = byteOffset; i >= 0; i--) {
- var found = true
- for (var j = 0; j < valLength; j++) {
- if (read(arr, i + j) !== read(val, j)) {
- found = false
- break
- }
- }
- if (found) return i
- }
- }
-
- return -1
- }
-
- Buffer.prototype.includes = function includes (val, byteOffset, encoding) {
- return this.indexOf(val, byteOffset, encoding) !== -1
- }
-
- Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, true)
- }
-
- Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {
- return bidirectionalIndexOf(this, val, byteOffset, encoding, false)
- }
-
- function hexWrite (buf, string, offset, length) {
- offset = Number(offset) || 0
- var remaining = buf.length - offset
- if (!length) {
- length = remaining
- } else {
- length = Number(length)
- if (length > remaining) {
- length = remaining
- }
- }
-
- var strLen = string.length
-
- if (length > strLen / 2) {
- length = strLen / 2
- }
- for (var i = 0; i < length; ++i) {
- var parsed = parseInt(string.substr(i * 2, 2), 16)
- if (numberIsNaN(parsed)) return i
- buf[offset + i] = parsed
- }
- return i
- }
-
- function utf8Write (buf, string, offset, length) {
- return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)
- }
-
- function asciiWrite (buf, string, offset, length) {
- return blitBuffer(asciiToBytes(string), buf, offset, length)
- }
-
- function latin1Write (buf, string, offset, length) {
- return asciiWrite(buf, string, offset, length)
- }
-
- function base64Write (buf, string, offset, length) {
- return blitBuffer(base64ToBytes(string), buf, offset, length)
- }
-
- function ucs2Write (buf, string, offset, length) {
- return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)
- }
-
- Buffer.prototype.write = function write (string, offset, length, encoding) {
- // Buffer#write(string)
- if (offset === undefined) {
- encoding = 'utf8'
- length = this.length
- offset = 0
- // Buffer#write(string, encoding)
- } else if (length === undefined && typeof offset === 'string') {
- encoding = offset
- length = this.length
- offset = 0
- // Buffer#write(string, offset[, length][, encoding])
- } else if (isFinite(offset)) {
- offset = offset >>> 0
- if (isFinite(length)) {
- length = length >>> 0
- if (encoding === undefined) encoding = 'utf8'
- } else {
- encoding = length
- length = undefined
- }
- } else {
- throw new Error(
- 'Buffer.write(string, encoding, offset[, length]) is no longer supported'
- )
- }
-
- var remaining = this.length - offset
- if (length === undefined || length > remaining) length = remaining
-
- if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {
- throw new RangeError('Attempt to write outside buffer bounds')
- }
-
- if (!encoding) encoding = 'utf8'
-
- var loweredCase = false
- for (;;) {
- switch (encoding) {
- case 'hex':
- return hexWrite(this, string, offset, length)
-
- case 'utf8':
- case 'utf-8':
- return utf8Write(this, string, offset, length)
-
- case 'ascii':
- return asciiWrite(this, string, offset, length)
-
- case 'latin1':
- case 'binary':
- return latin1Write(this, string, offset, length)
-
- case 'base64':
- // Warning: maxLength not taken into account in base64Write
- return base64Write(this, string, offset, length)
-
- case 'ucs2':
- case 'ucs-2':
- case 'utf16le':
- case 'utf-16le':
- return ucs2Write(this, string, offset, length)
-
- default:
- if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)
- encoding = ('' + encoding).toLowerCase()
- loweredCase = true
- }
- }
- }
-
- Buffer.prototype.toJSON = function toJSON () {
- return {
- type: 'Buffer',
- data: Array.prototype.slice.call(this._arr || this, 0)
- }
- }
-
- function base64Slice (buf, start, end) {
- if (start === 0 && end === buf.length) {
- return base64.fromByteArray(buf)
- } else {
- return base64.fromByteArray(buf.slice(start, end))
- }
- }
-
- function utf8Slice (buf, start, end) {
- end = Math.min(buf.length, end)
- var res = []
-
- var i = start
- while (i < end) {
- var firstByte = buf[i]
- var codePoint = null
- var bytesPerSequence = (firstByte > 0xEF) ? 4
- : (firstByte > 0xDF) ? 3
- : (firstByte > 0xBF) ? 2
- : 1
-
- if (i + bytesPerSequence <= end) {
- var secondByte, thirdByte, fourthByte, tempCodePoint
-
- switch (bytesPerSequence) {
- case 1:
- if (firstByte < 0x80) {
- codePoint = firstByte
- }
- break
- case 2:
- secondByte = buf[i + 1]
- if ((secondByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)
- if (tempCodePoint > 0x7F) {
- codePoint = tempCodePoint
- }
- }
- break
- case 3:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)
- if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {
- codePoint = tempCodePoint
- }
- }
- break
- case 4:
- secondByte = buf[i + 1]
- thirdByte = buf[i + 2]
- fourthByte = buf[i + 3]
- if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {
- tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)
- if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {
- codePoint = tempCodePoint
- }
- }
- }
- }
-
- if (codePoint === null) {
- // we did not generate a valid codePoint so insert a
- // replacement char (U+FFFD) and advance only 1 byte
- codePoint = 0xFFFD
- bytesPerSequence = 1
- } else if (codePoint > 0xFFFF) {
- // encode to utf16 (surrogate pair dance)
- codePoint -= 0x10000
- res.push(codePoint >>> 10 & 0x3FF | 0xD800)
- codePoint = 0xDC00 | codePoint & 0x3FF
- }
-
- res.push(codePoint)
- i += bytesPerSequence
- }
-
- return decodeCodePointsArray(res)
- }
-
- // Based on http://stackoverflow.com/a/22747272/680742, the browser with
- // the lowest limit is Chrome, with 0x10000 args.
- // We go 1 magnitude less, for safety
- var MAX_ARGUMENTS_LENGTH = 0x1000
-
- function decodeCodePointsArray (codePoints) {
- var len = codePoints.length
- if (len <= MAX_ARGUMENTS_LENGTH) {
- return String.fromCharCode.apply(String, codePoints) // avoid extra slice()
- }
-
- // Decode in chunks to avoid "call stack size exceeded".
- var res = ''
- var i = 0
- while (i < len) {
- res += String.fromCharCode.apply(
- String,
- codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)
- )
- }
- return res
- }
-
- function asciiSlice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
-
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i] & 0x7F)
- }
- return ret
- }
-
- function latin1Slice (buf, start, end) {
- var ret = ''
- end = Math.min(buf.length, end)
-
- for (var i = start; i < end; ++i) {
- ret += String.fromCharCode(buf[i])
- }
- return ret
- }
-
- function hexSlice (buf, start, end) {
- var len = buf.length
-
- if (!start || start < 0) start = 0
- if (!end || end < 0 || end > len) end = len
-
- var out = ''
- for (var i = start; i < end; ++i) {
- out += toHex(buf[i])
- }
- return out
- }
-
- function utf16leSlice (buf, start, end) {
- var bytes = buf.slice(start, end)
- var res = ''
- for (var i = 0; i < bytes.length; i += 2) {
- res += String.fromCharCode(bytes[i] + (bytes[i + 1] * 256))
- }
- return res
- }
-
- Buffer.prototype.slice = function slice (start, end) {
- var len = this.length
- start = ~~start
- end = end === undefined ? len : ~~end
-
- if (start < 0) {
- start += len
- if (start < 0) start = 0
- } else if (start > len) {
- start = len
- }
-
- if (end < 0) {
- end += len
- if (end < 0) end = 0
- } else if (end > len) {
- end = len
- }
-
- if (end < start) end = start
-
- var newBuf = this.subarray(start, end)
- // Return an augmented `Uint8Array` instance
- newBuf.__proto__ = Buffer.prototype
- return newBuf
- }
-
- /*
- * Need to make sure that buffer isn't trying to write out of bounds.
- */
- function checkOffset (offset, ext, length) {
- if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')
- if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')
- }
-
- Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
-
- return val
- }
-
- Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- checkOffset(offset, byteLength, this.length)
- }
-
- var val = this[offset + --byteLength]
- var mul = 1
- while (byteLength > 0 && (mul *= 0x100)) {
- val += this[offset + --byteLength] * mul
- }
-
- return val
- }
-
- Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 1, this.length)
- return this[offset]
- }
-
- Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- return this[offset] | (this[offset + 1] << 8)
- }
-
- Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- return (this[offset] << 8) | this[offset + 1]
- }
-
- Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return ((this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16)) +
- (this[offset + 3] * 0x1000000)
- }
-
- Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset] * 0x1000000) +
- ((this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- this[offset + 3])
- }
-
- Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var val = this[offset]
- var mul = 1
- var i = 0
- while (++i < byteLength && (mul *= 0x100)) {
- val += this[offset + i] * mul
- }
- mul *= 0x80
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
-
- return val
- }
-
- Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) checkOffset(offset, byteLength, this.length)
-
- var i = byteLength
- var mul = 1
- var val = this[offset + --i]
- while (i > 0 && (mul *= 0x100)) {
- val += this[offset + --i] * mul
- }
- mul *= 0x80
-
- if (val >= mul) val -= Math.pow(2, 8 * byteLength)
-
- return val
- }
-
- Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 1, this.length)
- if (!(this[offset] & 0x80)) return (this[offset])
- return ((0xff - this[offset] + 1) * -1)
- }
-
- Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset] | (this[offset + 1] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- }
-
- Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 2, this.length)
- var val = this[offset + 1] | (this[offset] << 8)
- return (val & 0x8000) ? val | 0xFFFF0000 : val
- }
-
- Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset]) |
- (this[offset + 1] << 8) |
- (this[offset + 2] << 16) |
- (this[offset + 3] << 24)
- }
-
- Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
-
- return (this[offset] << 24) |
- (this[offset + 1] << 16) |
- (this[offset + 2] << 8) |
- (this[offset + 3])
- }
-
- Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, true, 23, 4)
- }
-
- Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 4, this.length)
- return ieee754.read(this, offset, false, 23, 4)
- }
-
- Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, true, 52, 8)
- }
-
- Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {
- offset = offset >>> 0
- if (!noAssert) checkOffset(offset, 8, this.length)
- return ieee754.read(this, offset, false, 52, 8)
- }
-
- function checkInt (buf, value, offset, ext, max, min) {
- if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance')
- if (value > max || value < min) throw new RangeError('"value" argument is out of bounds')
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- }
-
- Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
- }
-
- var mul = 1
- var i = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
-
- return offset + byteLength
- }
-
- Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- byteLength = byteLength >>> 0
- if (!noAssert) {
- var maxBytes = Math.pow(2, 8 * byteLength) - 1
- checkInt(this, value, offset, byteLength, maxBytes, 0)
- }
-
- var i = byteLength - 1
- var mul = 1
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- this[offset + i] = (value / mul) & 0xFF
- }
-
- return offset + byteLength
- }
-
- Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)
- this[offset] = (value & 0xff)
- return offset + 1
- }
-
- Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- return offset + 2
- }
-
- Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- return offset + 2
- }
-
- Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- this[offset + 3] = (value >>> 24)
- this[offset + 2] = (value >>> 16)
- this[offset + 1] = (value >>> 8)
- this[offset] = (value & 0xff)
- return offset + 4
- }
-
- Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- return offset + 4
- }
-
- Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- var limit = Math.pow(2, (8 * byteLength) - 1)
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
-
- var i = 0
- var mul = 1
- var sub = 0
- this[offset] = value & 0xFF
- while (++i < byteLength && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {
- sub = 1
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
-
- return offset + byteLength
- }
-
- Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- var limit = Math.pow(2, (8 * byteLength) - 1)
-
- checkInt(this, value, offset, byteLength, limit - 1, -limit)
- }
-
- var i = byteLength - 1
- var mul = 1
- var sub = 0
- this[offset + i] = value & 0xFF
- while (--i >= 0 && (mul *= 0x100)) {
- if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {
- sub = 1
- }
- this[offset + i] = ((value / mul) >> 0) - sub & 0xFF
- }
-
- return offset + byteLength
- }
-
- Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)
- if (value < 0) value = 0xff + value + 1
- this[offset] = (value & 0xff)
- return offset + 1
- }
-
- Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- return offset + 2
- }
-
- Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)
- this[offset] = (value >>> 8)
- this[offset + 1] = (value & 0xff)
- return offset + 2
- }
-
- Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- this[offset] = (value & 0xff)
- this[offset + 1] = (value >>> 8)
- this[offset + 2] = (value >>> 16)
- this[offset + 3] = (value >>> 24)
- return offset + 4
- }
-
- Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)
- if (value < 0) value = 0xffffffff + value + 1
- this[offset] = (value >>> 24)
- this[offset + 1] = (value >>> 16)
- this[offset + 2] = (value >>> 8)
- this[offset + 3] = (value & 0xff)
- return offset + 4
- }
-
- function checkIEEE754 (buf, value, offset, ext, max, min) {
- if (offset + ext > buf.length) throw new RangeError('Index out of range')
- if (offset < 0) throw new RangeError('Index out of range')
- }
-
- function writeFloat (buf, value, offset, littleEndian, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)
- }
- ieee754.write(buf, value, offset, littleEndian, 23, 4)
- return offset + 4
- }
-
- Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {
- return writeFloat(this, value, offset, true, noAssert)
- }
-
- Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {
- return writeFloat(this, value, offset, false, noAssert)
- }
-
- function writeDouble (buf, value, offset, littleEndian, noAssert) {
- value = +value
- offset = offset >>> 0
- if (!noAssert) {
- checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)
- }
- ieee754.write(buf, value, offset, littleEndian, 52, 8)
- return offset + 8
- }
-
- Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {
- return writeDouble(this, value, offset, true, noAssert)
- }
-
- Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {
- return writeDouble(this, value, offset, false, noAssert)
- }
-
- // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)
- Buffer.prototype.copy = function copy (target, targetStart, start, end) {
- if (!Buffer.isBuffer(target)) throw new TypeError('argument should be a Buffer')
- if (!start) start = 0
- if (!end && end !== 0) end = this.length
- if (targetStart >= target.length) targetStart = target.length
- if (!targetStart) targetStart = 0
- if (end > 0 && end < start) end = start
-
- // Copy 0 bytes; we're done
- if (end === start) return 0
- if (target.length === 0 || this.length === 0) return 0
-
- // Fatal error conditions
- if (targetStart < 0) {
- throw new RangeError('targetStart out of bounds')
- }
- if (start < 0 || start >= this.length) throw new RangeError('Index out of range')
- if (end < 0) throw new RangeError('sourceEnd out of bounds')
-
- // Are we oob?
- if (end > this.length) end = this.length
- if (target.length - targetStart < end - start) {
- end = target.length - targetStart + start
- }
-
- var len = end - start
-
- if (this === target && typeof Uint8Array.prototype.copyWithin === 'function') {
- // Use built-in when available, missing from IE11
- this.copyWithin(targetStart, start, end)
- } else if (this === target && start < targetStart && targetStart < end) {
- // descending copy from end
- for (var i = len - 1; i >= 0; --i) {
- target[i + targetStart] = this[i + start]
- }
- } else {
- Uint8Array.prototype.set.call(
- target,
- this.subarray(start, end),
- targetStart
- )
- }
-
- return len
- }
-
- // Usage:
- // buffer.fill(number[, offset[, end]])
- // buffer.fill(buffer[, offset[, end]])
- // buffer.fill(string[, offset[, end]][, encoding])
- Buffer.prototype.fill = function fill (val, start, end, encoding) {
- // Handle string cases:
- if (typeof val === 'string') {
- if (typeof start === 'string') {
- encoding = start
- start = 0
- end = this.length
- } else if (typeof end === 'string') {
- encoding = end
- end = this.length
- }
- if (encoding !== undefined && typeof encoding !== 'string') {
- throw new TypeError('encoding must be a string')
- }
- if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {
- throw new TypeError('Unknown encoding: ' + encoding)
- }
- if (val.length === 1) {
- var code = val.charCodeAt(0)
- if ((encoding === 'utf8' && code < 128) ||
- encoding === 'latin1') {
- // Fast path: If `val` fits into a single byte, use that numeric value.
- val = code
- }
- }
- } else if (typeof val === 'number') {
- val = val & 255
- }
-
- // Invalid ranges are not set to a default, so can range check early.
- if (start < 0 || this.length < start || this.length < end) {
- throw new RangeError('Out of range index')
- }
-
- if (end <= start) {
- return this
- }
-
- start = start >>> 0
- end = end === undefined ? this.length : end >>> 0
-
- if (!val) val = 0
-
- var i
- if (typeof val === 'number') {
- for (i = start; i < end; ++i) {
- this[i] = val
- }
- } else {
- var bytes = Buffer.isBuffer(val)
- ? val
- : Buffer.from(val, encoding)
- var len = bytes.length
- if (len === 0) {
- throw new TypeError('The value "' + val +
- '" is invalid for argument "value"')
- }
- for (i = 0; i < end - start; ++i) {
- this[i + start] = bytes[i % len]
- }
- }
-
- return this
- }
-
- // HELPER FUNCTIONS
- // ================
-
- var INVALID_BASE64_RE = /[^+/0-9A-Za-z-_]/g
-
- function base64clean (str) {
- // Node takes equal signs as end of the Base64 encoding
- str = str.split('=')[0]
- // Node strips out invalid characters like \n and \t from the string, base64-js does not
- str = str.trim().replace(INVALID_BASE64_RE, '')
- // Node converts strings with length < 2 to ''
- if (str.length < 2) return ''
- // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not
- while (str.length % 4 !== 0) {
- str = str + '='
- }
- return str
- }
-
- function toHex (n) {
- if (n < 16) return '0' + n.toString(16)
- return n.toString(16)
- }
-
- function utf8ToBytes (string, units) {
- units = units || Infinity
- var codePoint
- var length = string.length
- var leadSurrogate = null
- var bytes = []
-
- for (var i = 0; i < length; ++i) {
- codePoint = string.charCodeAt(i)
-
- // is surrogate component
- if (codePoint > 0xD7FF && codePoint < 0xE000) {
- // last char was a lead
- if (!leadSurrogate) {
- // no lead yet
- if (codePoint > 0xDBFF) {
- // unexpected trail
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- } else if (i + 1 === length) {
- // unpaired lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- continue
- }
-
- // valid lead
- leadSurrogate = codePoint
-
- continue
- }
-
- // 2 leads in a row
- if (codePoint < 0xDC00) {
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- leadSurrogate = codePoint
- continue
- }
-
- // valid surrogate pair
- codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000
- } else if (leadSurrogate) {
- // valid bmp char, but last char was a lead
- if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)
- }
-
- leadSurrogate = null
-
- // encode utf8
- if (codePoint < 0x80) {
- if ((units -= 1) < 0) break
- bytes.push(codePoint)
- } else if (codePoint < 0x800) {
- if ((units -= 2) < 0) break
- bytes.push(
- codePoint >> 0x6 | 0xC0,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x10000) {
- if ((units -= 3) < 0) break
- bytes.push(
- codePoint >> 0xC | 0xE0,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else if (codePoint < 0x110000) {
- if ((units -= 4) < 0) break
- bytes.push(
- codePoint >> 0x12 | 0xF0,
- codePoint >> 0xC & 0x3F | 0x80,
- codePoint >> 0x6 & 0x3F | 0x80,
- codePoint & 0x3F | 0x80
- )
- } else {
- throw new Error('Invalid code point')
- }
- }
-
- return bytes
- }
-
- function asciiToBytes (str) {
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- // Node's code seems to be doing this and not & 0x7F..
- byteArray.push(str.charCodeAt(i) & 0xFF)
- }
- return byteArray
- }
-
- function utf16leToBytes (str, units) {
- var c, hi, lo
- var byteArray = []
- for (var i = 0; i < str.length; ++i) {
- if ((units -= 2) < 0) break
-
- c = str.charCodeAt(i)
- hi = c >> 8
- lo = c % 256
- byteArray.push(lo)
- byteArray.push(hi)
- }
-
- return byteArray
- }
-
- function base64ToBytes (str) {
- return base64.toByteArray(base64clean(str))
- }
-
- function blitBuffer (src, dst, offset, length) {
- for (var i = 0; i < length; ++i) {
- if ((i + offset >= dst.length) || (i >= src.length)) break
- dst[i + offset] = src[i]
- }
- return i
- }
-
- // ArrayBuffer or Uint8Array objects from other contexts (i.e. iframes) do not pass
- // the `instanceof` check but they should be treated as of that type.
- // See: https://github.com/feross/buffer/issues/166
- function isInstance (obj, type) {
- return obj instanceof type ||
- (obj != null && obj.constructor != null && obj.constructor.name != null &&
- obj.constructor.name === type.name)
- }
- function numberIsNaN (obj) {
- // For IE11 support
- return obj !== obj // eslint-disable-line no-self-compare
- }
-
- }).call(this)}).call(this,require("buffer").Buffer)
- },{"base64-js":8,"buffer":9,"ieee754":10}],10:[function(require,module,exports){
- /*! ieee754. BSD-3-Clause License. Feross Aboukhadijeh <https://feross.org/opensource> */
- exports.read = function (buffer, offset, isLE, mLen, nBytes) {
- var e, m
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var nBits = -7
- var i = isLE ? (nBytes - 1) : 0
- var d = isLE ? -1 : 1
- var s = buffer[offset + i]
-
- i += d
-
- e = s & ((1 << (-nBits)) - 1)
- s >>= (-nBits)
- nBits += eLen
- for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}
-
- m = e & ((1 << (-nBits)) - 1)
- e >>= (-nBits)
- nBits += mLen
- for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}
-
- if (e === 0) {
- e = 1 - eBias
- } else if (e === eMax) {
- return m ? NaN : ((s ? -1 : 1) * Infinity)
- } else {
- m = m + Math.pow(2, mLen)
- e = e - eBias
- }
- return (s ? -1 : 1) * m * Math.pow(2, e - mLen)
- }
-
- exports.write = function (buffer, value, offset, isLE, mLen, nBytes) {
- var e, m, c
- var eLen = (nBytes * 8) - mLen - 1
- var eMax = (1 << eLen) - 1
- var eBias = eMax >> 1
- var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)
- var i = isLE ? 0 : (nBytes - 1)
- var d = isLE ? 1 : -1
- var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0
-
- value = Math.abs(value)
-
- if (isNaN(value) || value === Infinity) {
- m = isNaN(value) ? 1 : 0
- e = eMax
- } else {
- e = Math.floor(Math.log(value) / Math.LN2)
- if (value * (c = Math.pow(2, -e)) < 1) {
- e--
- c *= 2
- }
- if (e + eBias >= 1) {
- value += rt / c
- } else {
- value += rt * Math.pow(2, 1 - eBias)
- }
- if (value * c >= 2) {
- e++
- c /= 2
- }
-
- if (e + eBias >= eMax) {
- m = 0
- e = eMax
- } else if (e + eBias >= 1) {
- m = ((value * c) - 1) * Math.pow(2, mLen)
- e = e + eBias
- } else {
- m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)
- e = 0
- }
- }
-
- for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}
-
- e = (e << mLen) | m
- eLen += mLen
- for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}
-
- buffer[offset + i - d] |= s * 128
- }
-
- },{}]},{},[1])(1)
- });
|