1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669467046714672467346744675467646774678467946804681468246834684468546864687468846894690469146924693469446954696469746984699470047014702470347044705470647074708470947104711471247134714471547164717471847194720472147224723472447254726472747284729473047314732473347344735473647374738473947404741474247434744474547464747474847494750475147524753475447554756475747584759476047614762476347644765476647674768476947704771477247734774477547764777477847794780478147824783478447854786478747884789479047914792479347944795479647974798479948004801480248034804480548064807480848094810481148124813481448154816481748184819482048214822482348244825482648274828482948304831483248334834483548364837483848394840484148424843484448454846484748484849485048514852485348544855485648574858485948604861486248634864486548664867486848694870487148724873487448754876487748784879488048814882488348844885488648874888488948904891489248934894489548964897489848994900490149024903490449054906490749084909491049114912491349144915491649174918491949204921492249234924492549264927492849294930493149324933493449354936493749384939494049414942494349444945494649474948494949504951495249534954495549564957495849594960496149624963496449654966496749684969497049714972497349744975497649774978497949804981498249834984498549864987498849894990499149924993499449954996499749984999500050015002500350045005500650075008500950105011501250135014501550165017501850195020502150225023502450255026502750285029503050315032503350345035503650375038503950405041504250435044504550465047504850495050505150525053505450555056505750585059506050615062506350645065506650675068506950705071507250735074507550765077507850795080508150825083508450855086508750885089509050915092509350945095509650975098509951005101510251035104510551065107510851095110511151125113511451155116511751185119512051215122512351245125512651275128512951305131513251335134513551365137513851395140514151425143514451455146514751485149515051515152515351545155515651575158515951605161516251635164516551665167516851695170517151725173517451755176517751785179518051815182518351845185518651875188518951905191519251935194519551965197519851995200520152025203520452055206520752085209521052115212521352145215521652175218521952205221522252235224522552265227522852295230523152325233523452355236523752385239524052415242524352445245524652475248524952505251525252535254525552565257525852595260526152625263526452655266526752685269527052715272527352745275527652775278527952805281528252835284 |
- /**
- * DOMParser
- * @description 使用Env、OpenAPI等兼容方法进行网络请求, 这里使用Env举例
- * @example
- *
- const $ = new Env("ModuleName")
- async function loadDOMParser() {
- return new Promise(async (resolve) => {
- $.getScript(
- 'https://cdn.jsdelivr.net/gh/Yuheng0101/X@main/Utils/DOMParser.js'
- ).then((fn) => {
- eval(fn)
- const DOMParser = createDOMParser()
- console.log(`✅ DOMParser加载成功, 请继续`)
- resolve(DOMParser)
- })
- })
- }
- */
- function createDOMParser() {
- function r(e, n, t) {
- let result = {}
- 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
- )
- }
- // console.log(n[i].exports)
- return n[i].exports
- }
- for (var u = 'function' == typeof require && require, i = 0; i < t.length; i++) {
- Object.assign(result, o(t[i]))
- }
- return result
- }
- const utils = {
- 5: [
- 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
- },
- {}
- ],
- 6: [
- 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': 5, './dom': 7, './entities': 8, './sax': 10 }
- ],
- 7: [
- 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 index >= 0 && index < this.length ? 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)
- __set__(list, 'length', ls.length)
- if (!list.$$length || ls.length < list.$$length) {
- for (var i = ls.length; i in list; i++) {
- if (Object.prototype.hasOwnProperty.call(list, i)) {
- delete list[i]
- }
- }
- }
- copy(ls, list)
- list._inc = inc
- }
- }
- LiveNodeList.prototype.item = function (i) {
- _updateLiveList(this)
- return this[i] || null
- }
- _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.nodeName = 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': 5 }
- ],
- 8: [
- 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': 5 }
- ],
- 9: [
- function (require, module, exports) {
- var dom = require('./dom')
- exports.DOMImplementation = dom.DOMImplementation
- exports.XMLSerializer = dom.XMLSerializer
- exports.DOMParser = require('./dom-parser').DOMParser
- },
- { './dom': 7, './dom-parser': 6 }
- ],
- 10: [
- function (require, module, exports) {
- var NAMESPACE = require('./conventions').NAMESPACE
- 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 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 />
- 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) {
- 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': 5 }
- ]
- }
- return r(utils, {}, [9])
- }
|