(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.parse5 = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i publicId.startsWith(prefix)); } //API function isConforming(token) { return (token.name === VALID_DOCTYPE_NAME && token.publicId === null && (token.systemId === null || token.systemId === VALID_SYSTEM_ID)); } exports.isConforming = isConforming; function getDocumentMode(token) { if (token.name !== VALID_DOCTYPE_NAME) { return html_js_1.DOCUMENT_MODE.QUIRKS; } const { systemId } = token; if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) { return html_js_1.DOCUMENT_MODE.QUIRKS; } let { publicId } = token; if (publicId !== null) { publicId = publicId.toLowerCase(); if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) { return html_js_1.DOCUMENT_MODE.QUIRKS; } let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES; if (hasPrefix(publicId, prefixes)) { return html_js_1.DOCUMENT_MODE.QUIRKS; } prefixes = systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES; if (hasPrefix(publicId, prefixes)) { return html_js_1.DOCUMENT_MODE.LIMITED_QUIRKS; } } return html_js_1.DOCUMENT_MODE.NO_QUIRKS; } exports.getDocumentMode = getDocumentMode; },{"./html.js":4}],2:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ERR = void 0; var ERR; (function (ERR) { ERR["controlCharacterInInputStream"] = "control-character-in-input-stream"; ERR["noncharacterInInputStream"] = "noncharacter-in-input-stream"; ERR["surrogateInInputStream"] = "surrogate-in-input-stream"; ERR["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus"; ERR["endTagWithAttributes"] = "end-tag-with-attributes"; ERR["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus"; ERR["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag"; ERR["unexpectedNullCharacter"] = "unexpected-null-character"; ERR["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name"; ERR["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name"; ERR["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name"; ERR["missingEndTagName"] = "missing-end-tag-name"; ERR["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name"; ERR["unknownNamedCharacterReference"] = "unknown-named-character-reference"; ERR["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference"; ERR["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier"; ERR["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value"; ERR["eofBeforeTagName"] = "eof-before-tag-name"; ERR["eofInTag"] = "eof-in-tag"; ERR["missingAttributeValue"] = "missing-attribute-value"; ERR["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes"; ERR["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword"; ERR["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers"; ERR["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword"; ERR["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier"; ERR["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier"; ERR["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier"; ERR["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier"; ERR["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier"; ERR["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier"; ERR["cdataInHtmlContent"] = "cdata-in-html-content"; ERR["incorrectlyOpenedComment"] = "incorrectly-opened-comment"; ERR["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text"; ERR["eofInDoctype"] = "eof-in-doctype"; ERR["nestedComment"] = "nested-comment"; ERR["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment"; ERR["eofInComment"] = "eof-in-comment"; ERR["incorrectlyClosedComment"] = "incorrectly-closed-comment"; ERR["eofInCdata"] = "eof-in-cdata"; ERR["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference"; ERR["nullCharacterReference"] = "null-character-reference"; ERR["surrogateCharacterReference"] = "surrogate-character-reference"; ERR["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range"; ERR["controlCharacterReference"] = "control-character-reference"; ERR["noncharacterCharacterReference"] = "noncharacter-character-reference"; ERR["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name"; ERR["missingDoctypeName"] = "missing-doctype-name"; ERR["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name"; ERR["duplicateAttribute"] = "duplicate-attribute"; ERR["nonConformingDoctype"] = "non-conforming-doctype"; ERR["missingDoctype"] = "missing-doctype"; ERR["misplacedDoctype"] = "misplaced-doctype"; ERR["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element"; ERR["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements"; ERR["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head"; ERR["openElementsLeftAfterEof"] = "open-elements-left-after-eof"; ERR["abandonedHeadElementChild"] = "abandoned-head-element-child"; ERR["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element"; ERR["nestedNoscriptInHead"] = "nested-noscript-in-head"; ERR["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text"; })(ERR = exports.ERR || (exports.ERR = {})); },{}],3:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isIntegrationPoint = exports.adjustTokenSVGTagName = exports.adjustTokenXMLAttrs = exports.adjustTokenSVGAttrs = exports.adjustTokenMathMLAttrs = exports.causesExit = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = void 0; const html_js_1 = require("./html.js"); //MIME types const MIME_TYPES = { TEXT_HTML: 'text/html', APPLICATION_XML: 'application/xhtml+xml', }; //Attributes const DEFINITION_URL_ATTR = 'definitionurl'; const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL'; const SVG_ATTRS_ADJUSTMENT_MAP = new Map([ 'attributeName', 'attributeType', 'baseFrequency', 'baseProfile', 'calcMode', 'clipPathUnits', 'diffuseConstant', 'edgeMode', 'filterUnits', 'glyphRef', 'gradientTransform', 'gradientUnits', 'kernelMatrix', 'kernelUnitLength', 'keyPoints', 'keySplines', 'keyTimes', 'lengthAdjust', 'limitingConeAngle', 'markerHeight', 'markerUnits', 'markerWidth', 'maskContentUnits', 'maskUnits', 'numOctaves', 'pathLength', 'patternContentUnits', 'patternTransform', 'patternUnits', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'preserveAlpha', 'preserveAspectRatio', 'primitiveUnits', 'refX', 'refY', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'specularConstant', 'specularExponent', 'spreadMethod', 'startOffset', 'stdDeviation', 'stitchTiles', 'surfaceScale', 'systemLanguage', 'tableValues', 'targetX', 'targetY', 'textLength', 'viewBox', 'viewTarget', 'xChannelSelector', 'yChannelSelector', 'zoomAndPan', ].map((attr) => [attr.toLowerCase(), attr])); const XML_ATTRS_ADJUSTMENT_MAP = new Map([ ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: html_js_1.NS.XLINK }], ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: html_js_1.NS.XLINK }], ['xlink:href', { prefix: 'xlink', name: 'href', namespace: html_js_1.NS.XLINK }], ['xlink:role', { prefix: 'xlink', name: 'role', namespace: html_js_1.NS.XLINK }], ['xlink:show', { prefix: 'xlink', name: 'show', namespace: html_js_1.NS.XLINK }], ['xlink:title', { prefix: 'xlink', name: 'title', namespace: html_js_1.NS.XLINK }], ['xlink:type', { prefix: 'xlink', name: 'type', namespace: html_js_1.NS.XLINK }], ['xml:base', { prefix: 'xml', name: 'base', namespace: html_js_1.NS.XML }], ['xml:lang', { prefix: 'xml', name: 'lang', namespace: html_js_1.NS.XML }], ['xml:space', { prefix: 'xml', name: 'space', namespace: html_js_1.NS.XML }], ['xmlns', { prefix: '', name: 'xmlns', namespace: html_js_1.NS.XMLNS }], ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: html_js_1.NS.XMLNS }], ]); //SVG tag names adjustment map exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([ 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animateColor', 'animateMotion', 'animateTransform', 'clipPath', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'foreignObject', 'glyphRef', 'linearGradient', 'radialGradient', 'textPath', ].map((tn) => [tn.toLowerCase(), tn])); //Tags that causes exit from foreign content const EXITS_FOREIGN_CONTENT = new Set([ html_js_1.TAG_ID.B, html_js_1.TAG_ID.BIG, html_js_1.TAG_ID.BLOCKQUOTE, html_js_1.TAG_ID.BODY, html_js_1.TAG_ID.BR, html_js_1.TAG_ID.CENTER, html_js_1.TAG_ID.CODE, html_js_1.TAG_ID.DD, html_js_1.TAG_ID.DIV, html_js_1.TAG_ID.DL, html_js_1.TAG_ID.DT, html_js_1.TAG_ID.EM, html_js_1.TAG_ID.EMBED, html_js_1.TAG_ID.H1, html_js_1.TAG_ID.H2, html_js_1.TAG_ID.H3, html_js_1.TAG_ID.H4, html_js_1.TAG_ID.H5, html_js_1.TAG_ID.H6, html_js_1.TAG_ID.HEAD, html_js_1.TAG_ID.HR, html_js_1.TAG_ID.I, html_js_1.TAG_ID.IMG, html_js_1.TAG_ID.LI, html_js_1.TAG_ID.LISTING, html_js_1.TAG_ID.MENU, html_js_1.TAG_ID.META, html_js_1.TAG_ID.NOBR, html_js_1.TAG_ID.OL, html_js_1.TAG_ID.P, html_js_1.TAG_ID.PRE, html_js_1.TAG_ID.RUBY, html_js_1.TAG_ID.S, html_js_1.TAG_ID.SMALL, html_js_1.TAG_ID.SPAN, html_js_1.TAG_ID.STRONG, html_js_1.TAG_ID.STRIKE, html_js_1.TAG_ID.SUB, html_js_1.TAG_ID.SUP, html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TT, html_js_1.TAG_ID.U, html_js_1.TAG_ID.UL, html_js_1.TAG_ID.VAR, ]); //Check exit from foreign content function causesExit(startTagToken) { const tn = startTagToken.tagID; const isFontWithAttrs = tn === html_js_1.TAG_ID.FONT && startTagToken.attrs.some(({ name }) => name === html_js_1.ATTRS.COLOR || name === html_js_1.ATTRS.SIZE || name === html_js_1.ATTRS.FACE); return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn); } exports.causesExit = causesExit; //Token adjustments function adjustTokenMathMLAttrs(token) { for (let i = 0; i < token.attrs.length; i++) { if (token.attrs[i].name === DEFINITION_URL_ATTR) { token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR; break; } } } exports.adjustTokenMathMLAttrs = adjustTokenMathMLAttrs; function adjustTokenSVGAttrs(token) { for (let i = 0; i < token.attrs.length; i++) { const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); if (adjustedAttrName != null) { token.attrs[i].name = adjustedAttrName; } } } exports.adjustTokenSVGAttrs = adjustTokenSVGAttrs; function adjustTokenXMLAttrs(token) { for (let i = 0; i < token.attrs.length; i++) { const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); if (adjustedAttrEntry) { token.attrs[i].prefix = adjustedAttrEntry.prefix; token.attrs[i].name = adjustedAttrEntry.name; token.attrs[i].namespace = adjustedAttrEntry.namespace; } } } exports.adjustTokenXMLAttrs = adjustTokenXMLAttrs; function adjustTokenSVGTagName(token) { const adjustedTagName = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName); if (adjustedTagName != null) { token.tagName = adjustedTagName; token.tagID = (0, html_js_1.getTagID)(token.tagName); } } exports.adjustTokenSVGTagName = adjustTokenSVGTagName; //Integration points function isMathMLTextIntegrationPoint(tn, ns) { return ns === html_js_1.NS.MATHML && (tn === html_js_1.TAG_ID.MI || tn === html_js_1.TAG_ID.MO || tn === html_js_1.TAG_ID.MN || tn === html_js_1.TAG_ID.MS || tn === html_js_1.TAG_ID.MTEXT); } function isHtmlIntegrationPoint(tn, ns, attrs) { if (ns === html_js_1.NS.MATHML && tn === html_js_1.TAG_ID.ANNOTATION_XML) { for (let i = 0; i < attrs.length; i++) { if (attrs[i].name === html_js_1.ATTRS.ENCODING) { const value = attrs[i].value.toLowerCase(); return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML; } } } return ns === html_js_1.NS.SVG && (tn === html_js_1.TAG_ID.FOREIGN_OBJECT || tn === html_js_1.TAG_ID.DESC || tn === html_js_1.TAG_ID.TITLE); } function isIntegrationPoint(tn, ns, attrs, foreignNS) { return (((!foreignNS || foreignNS === html_js_1.NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) || ((!foreignNS || foreignNS === html_js_1.NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns))); } exports.isIntegrationPoint = isIntegrationPoint; },{"./html.js":4}],4:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.hasUnescapedText = exports.isNumberedHeader = exports.SPECIAL_ELEMENTS = exports.getTagID = exports.TAG_ID = exports.TAG_NAMES = exports.DOCUMENT_MODE = exports.ATTRS = exports.NS = void 0; /** All valid namespaces in HTML. */ var NS; (function (NS) { NS["HTML"] = "http://www.w3.org/1999/xhtml"; NS["MATHML"] = "http://www.w3.org/1998/Math/MathML"; NS["SVG"] = "http://www.w3.org/2000/svg"; NS["XLINK"] = "http://www.w3.org/1999/xlink"; NS["XML"] = "http://www.w3.org/XML/1998/namespace"; NS["XMLNS"] = "http://www.w3.org/2000/xmlns/"; })(NS = exports.NS || (exports.NS = {})); var ATTRS; (function (ATTRS) { ATTRS["TYPE"] = "type"; ATTRS["ACTION"] = "action"; ATTRS["ENCODING"] = "encoding"; ATTRS["PROMPT"] = "prompt"; ATTRS["NAME"] = "name"; ATTRS["COLOR"] = "color"; ATTRS["FACE"] = "face"; ATTRS["SIZE"] = "size"; })(ATTRS = exports.ATTRS || (exports.ATTRS = {})); /** * The mode of the document. * * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks} */ var DOCUMENT_MODE; (function (DOCUMENT_MODE) { DOCUMENT_MODE["NO_QUIRKS"] = "no-quirks"; DOCUMENT_MODE["QUIRKS"] = "quirks"; DOCUMENT_MODE["LIMITED_QUIRKS"] = "limited-quirks"; })(DOCUMENT_MODE = exports.DOCUMENT_MODE || (exports.DOCUMENT_MODE = {})); var TAG_NAMES; (function (TAG_NAMES) { TAG_NAMES["A"] = "a"; TAG_NAMES["ADDRESS"] = "address"; TAG_NAMES["ANNOTATION_XML"] = "annotation-xml"; TAG_NAMES["APPLET"] = "applet"; TAG_NAMES["AREA"] = "area"; TAG_NAMES["ARTICLE"] = "article"; TAG_NAMES["ASIDE"] = "aside"; TAG_NAMES["B"] = "b"; TAG_NAMES["BASE"] = "base"; TAG_NAMES["BASEFONT"] = "basefont"; TAG_NAMES["BGSOUND"] = "bgsound"; TAG_NAMES["BIG"] = "big"; TAG_NAMES["BLOCKQUOTE"] = "blockquote"; TAG_NAMES["BODY"] = "body"; TAG_NAMES["BR"] = "br"; TAG_NAMES["BUTTON"] = "button"; TAG_NAMES["CAPTION"] = "caption"; TAG_NAMES["CENTER"] = "center"; TAG_NAMES["CODE"] = "code"; TAG_NAMES["COL"] = "col"; TAG_NAMES["COLGROUP"] = "colgroup"; TAG_NAMES["DD"] = "dd"; TAG_NAMES["DESC"] = "desc"; TAG_NAMES["DETAILS"] = "details"; TAG_NAMES["DIALOG"] = "dialog"; TAG_NAMES["DIR"] = "dir"; TAG_NAMES["DIV"] = "div"; TAG_NAMES["DL"] = "dl"; TAG_NAMES["DT"] = "dt"; TAG_NAMES["EM"] = "em"; TAG_NAMES["EMBED"] = "embed"; TAG_NAMES["FIELDSET"] = "fieldset"; TAG_NAMES["FIGCAPTION"] = "figcaption"; TAG_NAMES["FIGURE"] = "figure"; TAG_NAMES["FONT"] = "font"; TAG_NAMES["FOOTER"] = "footer"; TAG_NAMES["FOREIGN_OBJECT"] = "foreignObject"; TAG_NAMES["FORM"] = "form"; TAG_NAMES["FRAME"] = "frame"; TAG_NAMES["FRAMESET"] = "frameset"; TAG_NAMES["H1"] = "h1"; TAG_NAMES["H2"] = "h2"; TAG_NAMES["H3"] = "h3"; TAG_NAMES["H4"] = "h4"; TAG_NAMES["H5"] = "h5"; TAG_NAMES["H6"] = "h6"; TAG_NAMES["HEAD"] = "head"; TAG_NAMES["HEADER"] = "header"; TAG_NAMES["HGROUP"] = "hgroup"; TAG_NAMES["HR"] = "hr"; TAG_NAMES["HTML"] = "html"; TAG_NAMES["I"] = "i"; TAG_NAMES["IMG"] = "img"; TAG_NAMES["IMAGE"] = "image"; TAG_NAMES["INPUT"] = "input"; TAG_NAMES["IFRAME"] = "iframe"; TAG_NAMES["KEYGEN"] = "keygen"; TAG_NAMES["LABEL"] = "label"; TAG_NAMES["LI"] = "li"; TAG_NAMES["LINK"] = "link"; TAG_NAMES["LISTING"] = "listing"; TAG_NAMES["MAIN"] = "main"; TAG_NAMES["MALIGNMARK"] = "malignmark"; TAG_NAMES["MARQUEE"] = "marquee"; TAG_NAMES["MATH"] = "math"; TAG_NAMES["MENU"] = "menu"; TAG_NAMES["META"] = "meta"; TAG_NAMES["MGLYPH"] = "mglyph"; TAG_NAMES["MI"] = "mi"; TAG_NAMES["MO"] = "mo"; TAG_NAMES["MN"] = "mn"; TAG_NAMES["MS"] = "ms"; TAG_NAMES["MTEXT"] = "mtext"; TAG_NAMES["NAV"] = "nav"; TAG_NAMES["NOBR"] = "nobr"; TAG_NAMES["NOFRAMES"] = "noframes"; TAG_NAMES["NOEMBED"] = "noembed"; TAG_NAMES["NOSCRIPT"] = "noscript"; TAG_NAMES["OBJECT"] = "object"; TAG_NAMES["OL"] = "ol"; TAG_NAMES["OPTGROUP"] = "optgroup"; TAG_NAMES["OPTION"] = "option"; TAG_NAMES["P"] = "p"; TAG_NAMES["PARAM"] = "param"; TAG_NAMES["PLAINTEXT"] = "plaintext"; TAG_NAMES["PRE"] = "pre"; TAG_NAMES["RB"] = "rb"; TAG_NAMES["RP"] = "rp"; TAG_NAMES["RT"] = "rt"; TAG_NAMES["RTC"] = "rtc"; TAG_NAMES["RUBY"] = "ruby"; TAG_NAMES["S"] = "s"; TAG_NAMES["SCRIPT"] = "script"; TAG_NAMES["SECTION"] = "section"; TAG_NAMES["SELECT"] = "select"; TAG_NAMES["SOURCE"] = "source"; TAG_NAMES["SMALL"] = "small"; TAG_NAMES["SPAN"] = "span"; TAG_NAMES["STRIKE"] = "strike"; TAG_NAMES["STRONG"] = "strong"; TAG_NAMES["STYLE"] = "style"; TAG_NAMES["SUB"] = "sub"; TAG_NAMES["SUMMARY"] = "summary"; TAG_NAMES["SUP"] = "sup"; TAG_NAMES["TABLE"] = "table"; TAG_NAMES["TBODY"] = "tbody"; TAG_NAMES["TEMPLATE"] = "template"; TAG_NAMES["TEXTAREA"] = "textarea"; TAG_NAMES["TFOOT"] = "tfoot"; TAG_NAMES["TD"] = "td"; TAG_NAMES["TH"] = "th"; TAG_NAMES["THEAD"] = "thead"; TAG_NAMES["TITLE"] = "title"; TAG_NAMES["TR"] = "tr"; TAG_NAMES["TRACK"] = "track"; TAG_NAMES["TT"] = "tt"; TAG_NAMES["U"] = "u"; TAG_NAMES["UL"] = "ul"; TAG_NAMES["SVG"] = "svg"; TAG_NAMES["VAR"] = "var"; TAG_NAMES["WBR"] = "wbr"; TAG_NAMES["XMP"] = "xmp"; })(TAG_NAMES = exports.TAG_NAMES || (exports.TAG_NAMES = {})); /** * Tag IDs are numeric IDs for known tag names. * * We use tag IDs to improve the performance of tag name comparisons. */ var TAG_ID; (function (TAG_ID) { TAG_ID[TAG_ID["UNKNOWN"] = 0] = "UNKNOWN"; TAG_ID[TAG_ID["A"] = 1] = "A"; TAG_ID[TAG_ID["ADDRESS"] = 2] = "ADDRESS"; TAG_ID[TAG_ID["ANNOTATION_XML"] = 3] = "ANNOTATION_XML"; TAG_ID[TAG_ID["APPLET"] = 4] = "APPLET"; TAG_ID[TAG_ID["AREA"] = 5] = "AREA"; TAG_ID[TAG_ID["ARTICLE"] = 6] = "ARTICLE"; TAG_ID[TAG_ID["ASIDE"] = 7] = "ASIDE"; TAG_ID[TAG_ID["B"] = 8] = "B"; TAG_ID[TAG_ID["BASE"] = 9] = "BASE"; TAG_ID[TAG_ID["BASEFONT"] = 10] = "BASEFONT"; TAG_ID[TAG_ID["BGSOUND"] = 11] = "BGSOUND"; TAG_ID[TAG_ID["BIG"] = 12] = "BIG"; TAG_ID[TAG_ID["BLOCKQUOTE"] = 13] = "BLOCKQUOTE"; TAG_ID[TAG_ID["BODY"] = 14] = "BODY"; TAG_ID[TAG_ID["BR"] = 15] = "BR"; TAG_ID[TAG_ID["BUTTON"] = 16] = "BUTTON"; TAG_ID[TAG_ID["CAPTION"] = 17] = "CAPTION"; TAG_ID[TAG_ID["CENTER"] = 18] = "CENTER"; TAG_ID[TAG_ID["CODE"] = 19] = "CODE"; TAG_ID[TAG_ID["COL"] = 20] = "COL"; TAG_ID[TAG_ID["COLGROUP"] = 21] = "COLGROUP"; TAG_ID[TAG_ID["DD"] = 22] = "DD"; TAG_ID[TAG_ID["DESC"] = 23] = "DESC"; TAG_ID[TAG_ID["DETAILS"] = 24] = "DETAILS"; TAG_ID[TAG_ID["DIALOG"] = 25] = "DIALOG"; TAG_ID[TAG_ID["DIR"] = 26] = "DIR"; TAG_ID[TAG_ID["DIV"] = 27] = "DIV"; TAG_ID[TAG_ID["DL"] = 28] = "DL"; TAG_ID[TAG_ID["DT"] = 29] = "DT"; TAG_ID[TAG_ID["EM"] = 30] = "EM"; TAG_ID[TAG_ID["EMBED"] = 31] = "EMBED"; TAG_ID[TAG_ID["FIELDSET"] = 32] = "FIELDSET"; TAG_ID[TAG_ID["FIGCAPTION"] = 33] = "FIGCAPTION"; TAG_ID[TAG_ID["FIGURE"] = 34] = "FIGURE"; TAG_ID[TAG_ID["FONT"] = 35] = "FONT"; TAG_ID[TAG_ID["FOOTER"] = 36] = "FOOTER"; TAG_ID[TAG_ID["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT"; TAG_ID[TAG_ID["FORM"] = 38] = "FORM"; TAG_ID[TAG_ID["FRAME"] = 39] = "FRAME"; TAG_ID[TAG_ID["FRAMESET"] = 40] = "FRAMESET"; TAG_ID[TAG_ID["H1"] = 41] = "H1"; TAG_ID[TAG_ID["H2"] = 42] = "H2"; TAG_ID[TAG_ID["H3"] = 43] = "H3"; TAG_ID[TAG_ID["H4"] = 44] = "H4"; TAG_ID[TAG_ID["H5"] = 45] = "H5"; TAG_ID[TAG_ID["H6"] = 46] = "H6"; TAG_ID[TAG_ID["HEAD"] = 47] = "HEAD"; TAG_ID[TAG_ID["HEADER"] = 48] = "HEADER"; TAG_ID[TAG_ID["HGROUP"] = 49] = "HGROUP"; TAG_ID[TAG_ID["HR"] = 50] = "HR"; TAG_ID[TAG_ID["HTML"] = 51] = "HTML"; TAG_ID[TAG_ID["I"] = 52] = "I"; TAG_ID[TAG_ID["IMG"] = 53] = "IMG"; TAG_ID[TAG_ID["IMAGE"] = 54] = "IMAGE"; TAG_ID[TAG_ID["INPUT"] = 55] = "INPUT"; TAG_ID[TAG_ID["IFRAME"] = 56] = "IFRAME"; TAG_ID[TAG_ID["KEYGEN"] = 57] = "KEYGEN"; TAG_ID[TAG_ID["LABEL"] = 58] = "LABEL"; TAG_ID[TAG_ID["LI"] = 59] = "LI"; TAG_ID[TAG_ID["LINK"] = 60] = "LINK"; TAG_ID[TAG_ID["LISTING"] = 61] = "LISTING"; TAG_ID[TAG_ID["MAIN"] = 62] = "MAIN"; TAG_ID[TAG_ID["MALIGNMARK"] = 63] = "MALIGNMARK"; TAG_ID[TAG_ID["MARQUEE"] = 64] = "MARQUEE"; TAG_ID[TAG_ID["MATH"] = 65] = "MATH"; TAG_ID[TAG_ID["MENU"] = 66] = "MENU"; TAG_ID[TAG_ID["META"] = 67] = "META"; TAG_ID[TAG_ID["MGLYPH"] = 68] = "MGLYPH"; TAG_ID[TAG_ID["MI"] = 69] = "MI"; TAG_ID[TAG_ID["MO"] = 70] = "MO"; TAG_ID[TAG_ID["MN"] = 71] = "MN"; TAG_ID[TAG_ID["MS"] = 72] = "MS"; TAG_ID[TAG_ID["MTEXT"] = 73] = "MTEXT"; TAG_ID[TAG_ID["NAV"] = 74] = "NAV"; TAG_ID[TAG_ID["NOBR"] = 75] = "NOBR"; TAG_ID[TAG_ID["NOFRAMES"] = 76] = "NOFRAMES"; TAG_ID[TAG_ID["NOEMBED"] = 77] = "NOEMBED"; TAG_ID[TAG_ID["NOSCRIPT"] = 78] = "NOSCRIPT"; TAG_ID[TAG_ID["OBJECT"] = 79] = "OBJECT"; TAG_ID[TAG_ID["OL"] = 80] = "OL"; TAG_ID[TAG_ID["OPTGROUP"] = 81] = "OPTGROUP"; TAG_ID[TAG_ID["OPTION"] = 82] = "OPTION"; TAG_ID[TAG_ID["P"] = 83] = "P"; TAG_ID[TAG_ID["PARAM"] = 84] = "PARAM"; TAG_ID[TAG_ID["PLAINTEXT"] = 85] = "PLAINTEXT"; TAG_ID[TAG_ID["PRE"] = 86] = "PRE"; TAG_ID[TAG_ID["RB"] = 87] = "RB"; TAG_ID[TAG_ID["RP"] = 88] = "RP"; TAG_ID[TAG_ID["RT"] = 89] = "RT"; TAG_ID[TAG_ID["RTC"] = 90] = "RTC"; TAG_ID[TAG_ID["RUBY"] = 91] = "RUBY"; TAG_ID[TAG_ID["S"] = 92] = "S"; TAG_ID[TAG_ID["SCRIPT"] = 93] = "SCRIPT"; TAG_ID[TAG_ID["SECTION"] = 94] = "SECTION"; TAG_ID[TAG_ID["SELECT"] = 95] = "SELECT"; TAG_ID[TAG_ID["SOURCE"] = 96] = "SOURCE"; TAG_ID[TAG_ID["SMALL"] = 97] = "SMALL"; TAG_ID[TAG_ID["SPAN"] = 98] = "SPAN"; TAG_ID[TAG_ID["STRIKE"] = 99] = "STRIKE"; TAG_ID[TAG_ID["STRONG"] = 100] = "STRONG"; TAG_ID[TAG_ID["STYLE"] = 101] = "STYLE"; TAG_ID[TAG_ID["SUB"] = 102] = "SUB"; TAG_ID[TAG_ID["SUMMARY"] = 103] = "SUMMARY"; TAG_ID[TAG_ID["SUP"] = 104] = "SUP"; TAG_ID[TAG_ID["TABLE"] = 105] = "TABLE"; TAG_ID[TAG_ID["TBODY"] = 106] = "TBODY"; TAG_ID[TAG_ID["TEMPLATE"] = 107] = "TEMPLATE"; TAG_ID[TAG_ID["TEXTAREA"] = 108] = "TEXTAREA"; TAG_ID[TAG_ID["TFOOT"] = 109] = "TFOOT"; TAG_ID[TAG_ID["TD"] = 110] = "TD"; TAG_ID[TAG_ID["TH"] = 111] = "TH"; TAG_ID[TAG_ID["THEAD"] = 112] = "THEAD"; TAG_ID[TAG_ID["TITLE"] = 113] = "TITLE"; TAG_ID[TAG_ID["TR"] = 114] = "TR"; TAG_ID[TAG_ID["TRACK"] = 115] = "TRACK"; TAG_ID[TAG_ID["TT"] = 116] = "TT"; TAG_ID[TAG_ID["U"] = 117] = "U"; TAG_ID[TAG_ID["UL"] = 118] = "UL"; TAG_ID[TAG_ID["SVG"] = 119] = "SVG"; TAG_ID[TAG_ID["VAR"] = 120] = "VAR"; TAG_ID[TAG_ID["WBR"] = 121] = "WBR"; TAG_ID[TAG_ID["XMP"] = 122] = "XMP"; })(TAG_ID = exports.TAG_ID || (exports.TAG_ID = {})); const TAG_NAME_TO_ID = new Map([ [TAG_NAMES.A, TAG_ID.A], [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS], [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML], [TAG_NAMES.APPLET, TAG_ID.APPLET], [TAG_NAMES.AREA, TAG_ID.AREA], [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE], [TAG_NAMES.ASIDE, TAG_ID.ASIDE], [TAG_NAMES.B, TAG_ID.B], [TAG_NAMES.BASE, TAG_ID.BASE], [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT], [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND], [TAG_NAMES.BIG, TAG_ID.BIG], [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE], [TAG_NAMES.BODY, TAG_ID.BODY], [TAG_NAMES.BR, TAG_ID.BR], [TAG_NAMES.BUTTON, TAG_ID.BUTTON], [TAG_NAMES.CAPTION, TAG_ID.CAPTION], [TAG_NAMES.CENTER, TAG_ID.CENTER], [TAG_NAMES.CODE, TAG_ID.CODE], [TAG_NAMES.COL, TAG_ID.COL], [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP], [TAG_NAMES.DD, TAG_ID.DD], [TAG_NAMES.DESC, TAG_ID.DESC], [TAG_NAMES.DETAILS, TAG_ID.DETAILS], [TAG_NAMES.DIALOG, TAG_ID.DIALOG], [TAG_NAMES.DIR, TAG_ID.DIR], [TAG_NAMES.DIV, TAG_ID.DIV], [TAG_NAMES.DL, TAG_ID.DL], [TAG_NAMES.DT, TAG_ID.DT], [TAG_NAMES.EM, TAG_ID.EM], [TAG_NAMES.EMBED, TAG_ID.EMBED], [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET], [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION], [TAG_NAMES.FIGURE, TAG_ID.FIGURE], [TAG_NAMES.FONT, TAG_ID.FONT], [TAG_NAMES.FOOTER, TAG_ID.FOOTER], [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT], [TAG_NAMES.FORM, TAG_ID.FORM], [TAG_NAMES.FRAME, TAG_ID.FRAME], [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET], [TAG_NAMES.H1, TAG_ID.H1], [TAG_NAMES.H2, TAG_ID.H2], [TAG_NAMES.H3, TAG_ID.H3], [TAG_NAMES.H4, TAG_ID.H4], [TAG_NAMES.H5, TAG_ID.H5], [TAG_NAMES.H6, TAG_ID.H6], [TAG_NAMES.HEAD, TAG_ID.HEAD], [TAG_NAMES.HEADER, TAG_ID.HEADER], [TAG_NAMES.HGROUP, TAG_ID.HGROUP], [TAG_NAMES.HR, TAG_ID.HR], [TAG_NAMES.HTML, TAG_ID.HTML], [TAG_NAMES.I, TAG_ID.I], [TAG_NAMES.IMG, TAG_ID.IMG], [TAG_NAMES.IMAGE, TAG_ID.IMAGE], [TAG_NAMES.INPUT, TAG_ID.INPUT], [TAG_NAMES.IFRAME, TAG_ID.IFRAME], [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN], [TAG_NAMES.LABEL, TAG_ID.LABEL], [TAG_NAMES.LI, TAG_ID.LI], [TAG_NAMES.LINK, TAG_ID.LINK], [TAG_NAMES.LISTING, TAG_ID.LISTING], [TAG_NAMES.MAIN, TAG_ID.MAIN], [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK], [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE], [TAG_NAMES.MATH, TAG_ID.MATH], [TAG_NAMES.MENU, TAG_ID.MENU], [TAG_NAMES.META, TAG_ID.META], [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH], [TAG_NAMES.MI, TAG_ID.MI], [TAG_NAMES.MO, TAG_ID.MO], [TAG_NAMES.MN, TAG_ID.MN], [TAG_NAMES.MS, TAG_ID.MS], [TAG_NAMES.MTEXT, TAG_ID.MTEXT], [TAG_NAMES.NAV, TAG_ID.NAV], [TAG_NAMES.NOBR, TAG_ID.NOBR], [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES], [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED], [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT], [TAG_NAMES.OBJECT, TAG_ID.OBJECT], [TAG_NAMES.OL, TAG_ID.OL], [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP], [TAG_NAMES.OPTION, TAG_ID.OPTION], [TAG_NAMES.P, TAG_ID.P], [TAG_NAMES.PARAM, TAG_ID.PARAM], [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT], [TAG_NAMES.PRE, TAG_ID.PRE], [TAG_NAMES.RB, TAG_ID.RB], [TAG_NAMES.RP, TAG_ID.RP], [TAG_NAMES.RT, TAG_ID.RT], [TAG_NAMES.RTC, TAG_ID.RTC], [TAG_NAMES.RUBY, TAG_ID.RUBY], [TAG_NAMES.S, TAG_ID.S], [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT], [TAG_NAMES.SECTION, TAG_ID.SECTION], [TAG_NAMES.SELECT, TAG_ID.SELECT], [TAG_NAMES.SOURCE, TAG_ID.SOURCE], [TAG_NAMES.SMALL, TAG_ID.SMALL], [TAG_NAMES.SPAN, TAG_ID.SPAN], [TAG_NAMES.STRIKE, TAG_ID.STRIKE], [TAG_NAMES.STRONG, TAG_ID.STRONG], [TAG_NAMES.STYLE, TAG_ID.STYLE], [TAG_NAMES.SUB, TAG_ID.SUB], [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY], [TAG_NAMES.SUP, TAG_ID.SUP], [TAG_NAMES.TABLE, TAG_ID.TABLE], [TAG_NAMES.TBODY, TAG_ID.TBODY], [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE], [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA], [TAG_NAMES.TFOOT, TAG_ID.TFOOT], [TAG_NAMES.TD, TAG_ID.TD], [TAG_NAMES.TH, TAG_ID.TH], [TAG_NAMES.THEAD, TAG_ID.THEAD], [TAG_NAMES.TITLE, TAG_ID.TITLE], [TAG_NAMES.TR, TAG_ID.TR], [TAG_NAMES.TRACK, TAG_ID.TRACK], [TAG_NAMES.TT, TAG_ID.TT], [TAG_NAMES.U, TAG_ID.U], [TAG_NAMES.UL, TAG_ID.UL], [TAG_NAMES.SVG, TAG_ID.SVG], [TAG_NAMES.VAR, TAG_ID.VAR], [TAG_NAMES.WBR, TAG_ID.WBR], [TAG_NAMES.XMP, TAG_ID.XMP], ]); function getTagID(tagName) { var _a; return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN; } exports.getTagID = getTagID; const $ = TAG_ID; exports.SPECIAL_ELEMENTS = { [NS.HTML]: new Set([ $.ADDRESS, $.APPLET, $.AREA, $.ARTICLE, $.ASIDE, $.BASE, $.BASEFONT, $.BGSOUND, $.BLOCKQUOTE, $.BODY, $.BR, $.BUTTON, $.CAPTION, $.CENTER, $.COL, $.COLGROUP, $.DD, $.DETAILS, $.DIR, $.DIV, $.DL, $.DT, $.EMBED, $.FIELDSET, $.FIGCAPTION, $.FIGURE, $.FOOTER, $.FORM, $.FRAME, $.FRAMESET, $.H1, $.H2, $.H3, $.H4, $.H5, $.H6, $.HEAD, $.HEADER, $.HGROUP, $.HR, $.HTML, $.IFRAME, $.IMG, $.INPUT, $.LI, $.LINK, $.LISTING, $.MAIN, $.MARQUEE, $.MENU, $.META, $.NAV, $.NOEMBED, $.NOFRAMES, $.NOSCRIPT, $.OBJECT, $.OL, $.P, $.PARAM, $.PLAINTEXT, $.PRE, $.SCRIPT, $.SECTION, $.SELECT, $.SOURCE, $.STYLE, $.SUMMARY, $.TABLE, $.TBODY, $.TD, $.TEMPLATE, $.TEXTAREA, $.TFOOT, $.TH, $.THEAD, $.TITLE, $.TR, $.TRACK, $.UL, $.WBR, $.XMP, ]), [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]), [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]), [NS.XLINK]: new Set(), [NS.XML]: new Set(), [NS.XMLNS]: new Set(), }; function isNumberedHeader(tn) { return tn === $.H1 || tn === $.H2 || tn === $.H3 || tn === $.H4 || tn === $.H5 || tn === $.H6; } exports.isNumberedHeader = isNumberedHeader; const UNESCAPED_TEXT = new Set([ TAG_NAMES.STYLE, TAG_NAMES.SCRIPT, TAG_NAMES.XMP, TAG_NAMES.IFRAME, TAG_NAMES.NOEMBED, TAG_NAMES.NOFRAMES, TAG_NAMES.PLAINTEXT, ]); function hasUnescapedText(tn, scriptingEnabled) { return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT); } exports.hasUnescapedText = hasUnescapedText; },{}],5:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTokenAttr = exports.TokenType = void 0; var TokenType; (function (TokenType) { TokenType[TokenType["CHARACTER"] = 0] = "CHARACTER"; TokenType[TokenType["NULL_CHARACTER"] = 1] = "NULL_CHARACTER"; TokenType[TokenType["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER"; TokenType[TokenType["START_TAG"] = 3] = "START_TAG"; TokenType[TokenType["END_TAG"] = 4] = "END_TAG"; TokenType[TokenType["COMMENT"] = 5] = "COMMENT"; TokenType[TokenType["DOCTYPE"] = 6] = "DOCTYPE"; TokenType[TokenType["EOF"] = 7] = "EOF"; TokenType[TokenType["HIBERNATION"] = 8] = "HIBERNATION"; })(TokenType = exports.TokenType || (exports.TokenType = {})); function getTokenAttr(token, attrName) { for (let i = token.attrs.length - 1; i >= 0; i--) { if (token.attrs[i].name === attrName) { return token.attrs[i].value; } } return null; } exports.getTokenAttr = getTokenAttr; },{}],6:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isUndefinedCodePoint = exports.isControlCodePoint = exports.getSurrogatePairCodePoint = exports.isSurrogatePair = exports.isSurrogate = exports.SEQUENCES = exports.CODE_POINTS = exports.REPLACEMENT_CHARACTER = void 0; const UNDEFINED_CODE_POINTS = new Set([ 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, 1048575, 1114110, 1114111, ]); exports.REPLACEMENT_CHARACTER = '\uFFFD'; var CODE_POINTS; (function (CODE_POINTS) { CODE_POINTS[CODE_POINTS["EOF"] = -1] = "EOF"; CODE_POINTS[CODE_POINTS["NULL"] = 0] = "NULL"; CODE_POINTS[CODE_POINTS["TABULATION"] = 9] = "TABULATION"; CODE_POINTS[CODE_POINTS["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN"; CODE_POINTS[CODE_POINTS["LINE_FEED"] = 10] = "LINE_FEED"; CODE_POINTS[CODE_POINTS["FORM_FEED"] = 12] = "FORM_FEED"; CODE_POINTS[CODE_POINTS["SPACE"] = 32] = "SPACE"; CODE_POINTS[CODE_POINTS["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK"; CODE_POINTS[CODE_POINTS["QUOTATION_MARK"] = 34] = "QUOTATION_MARK"; CODE_POINTS[CODE_POINTS["NUMBER_SIGN"] = 35] = "NUMBER_SIGN"; CODE_POINTS[CODE_POINTS["AMPERSAND"] = 38] = "AMPERSAND"; CODE_POINTS[CODE_POINTS["APOSTROPHE"] = 39] = "APOSTROPHE"; CODE_POINTS[CODE_POINTS["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS"; CODE_POINTS[CODE_POINTS["SOLIDUS"] = 47] = "SOLIDUS"; CODE_POINTS[CODE_POINTS["DIGIT_0"] = 48] = "DIGIT_0"; CODE_POINTS[CODE_POINTS["DIGIT_9"] = 57] = "DIGIT_9"; CODE_POINTS[CODE_POINTS["SEMICOLON"] = 59] = "SEMICOLON"; CODE_POINTS[CODE_POINTS["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN"; CODE_POINTS[CODE_POINTS["EQUALS_SIGN"] = 61] = "EQUALS_SIGN"; CODE_POINTS[CODE_POINTS["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN"; CODE_POINTS[CODE_POINTS["QUESTION_MARK"] = 63] = "QUESTION_MARK"; CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A"; CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_F"] = 70] = "LATIN_CAPITAL_F"; CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_X"] = 88] = "LATIN_CAPITAL_X"; CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z"; CODE_POINTS[CODE_POINTS["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET"; CODE_POINTS[CODE_POINTS["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT"; CODE_POINTS[CODE_POINTS["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A"; CODE_POINTS[CODE_POINTS["LATIN_SMALL_F"] = 102] = "LATIN_SMALL_F"; CODE_POINTS[CODE_POINTS["LATIN_SMALL_X"] = 120] = "LATIN_SMALL_X"; CODE_POINTS[CODE_POINTS["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z"; CODE_POINTS[CODE_POINTS["REPLACEMENT_CHARACTER"] = 65533] = "REPLACEMENT_CHARACTER"; })(CODE_POINTS = exports.CODE_POINTS || (exports.CODE_POINTS = {})); exports.SEQUENCES = { DASH_DASH: '--', CDATA_START: '[CDATA[', DOCTYPE: 'doctype', SCRIPT: 'script', PUBLIC: 'public', SYSTEM: 'system', }; //Surrogates function isSurrogate(cp) { return cp >= 55296 && cp <= 57343; } exports.isSurrogate = isSurrogate; function isSurrogatePair(cp) { return cp >= 56320 && cp <= 57343; } exports.isSurrogatePair = isSurrogatePair; function getSurrogatePairCodePoint(cp1, cp2) { return (cp1 - 55296) * 1024 + 9216 + cp2; } exports.getSurrogatePairCodePoint = getSurrogatePairCodePoint; //NOTE: excluding NULL and ASCII whitespace function isControlCodePoint(cp) { return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) || (cp >= 0x7f && cp <= 0x9f)); } exports.isControlCodePoint = isControlCodePoint; function isUndefinedCodePoint(cp) { return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp); } exports.isUndefinedCodePoint = isUndefinedCodePoint; },{}],7:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseFragment = exports.parse = exports.TokenizerMode = exports.Tokenizer = exports.Token = exports.html = exports.foreignContent = exports.serializeOuter = exports.serialize = exports.Parser = exports.defaultTreeAdapter = void 0; const index_js_1 = require("./parser/index.js"); var default_js_1 = require("./tree-adapters/default.js"); Object.defineProperty(exports, "defaultTreeAdapter", { enumerable: true, get: function () { return default_js_1.defaultTreeAdapter; } }); var index_js_2 = require("./parser/index.js"); Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return index_js_2.Parser; } }); var index_js_3 = require("./serializer/index.js"); Object.defineProperty(exports, "serialize", { enumerable: true, get: function () { return index_js_3.serialize; } }); Object.defineProperty(exports, "serializeOuter", { enumerable: true, get: function () { return index_js_3.serializeOuter; } }); /** @internal */ exports.foreignContent = require("./common/foreign-content.js"); /** @internal */ exports.html = require("./common/html.js"); /** @internal */ exports.Token = require("./common/token.js"); /** @internal */ var index_js_4 = require("./tokenizer/index.js"); Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return index_js_4.Tokenizer; } }); Object.defineProperty(exports, "TokenizerMode", { enumerable: true, get: function () { return index_js_4.TokenizerMode; } }); // Shorthands /** * Parses an HTML string. * * @param html Input HTML string. * @param options Parsing options. * @returns Document * * @example * * ```js * const parse5 = require('parse5'); * * const document = parse5.parse('Hi there!'); * * console.log(document.childNodes[1].tagName); //> 'html' *``` */ function parse(html, options) { return index_js_1.Parser.parse(html, options); } exports.parse = parse; function parseFragment(fragmentContext, html, options) { if (typeof fragmentContext === 'string') { options = html; html = fragmentContext; fragmentContext = null; } const parser = index_js_1.Parser.getFragmentParser(fragmentContext, options); parser.tokenizer.write(html, true); return parser.getFragment(); } exports.parseFragment = parseFragment; },{"./common/foreign-content.js":3,"./common/html.js":4,"./common/token.js":5,"./parser/index.js":9,"./serializer/index.js":11,"./tokenizer/index.js":12,"./tree-adapters/default.js":14}],8:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FormattingElementList = exports.EntryType = void 0; //Const const NOAH_ARK_CAPACITY = 3; var EntryType; (function (EntryType) { EntryType[EntryType["Marker"] = 0] = "Marker"; EntryType[EntryType["Element"] = 1] = "Element"; })(EntryType = exports.EntryType || (exports.EntryType = {})); const MARKER = { type: EntryType.Marker }; //List of formatting elements class FormattingElementList { constructor(treeAdapter) { this.treeAdapter = treeAdapter; this.entries = []; this.bookmark = null; } //Noah Ark's condition //OPTIMIZATION: at first we try to find possible candidates for exclusion using //lightweight heuristics without thorough attributes check. _getNoahArkConditionCandidates(newElement, neAttrs) { const candidates = []; const neAttrsLength = neAttrs.length; const neTagName = this.treeAdapter.getTagName(newElement); const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement); for (let i = 0; i < this.entries.length; i++) { const entry = this.entries[i]; if (entry.type === EntryType.Marker) { break; } const { element } = entry; if (this.treeAdapter.getTagName(element) === neTagName && this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) { const elementAttrs = this.treeAdapter.getAttrList(element); if (elementAttrs.length === neAttrsLength) { candidates.push({ idx: i, attrs: elementAttrs }); } } } return candidates; } _ensureNoahArkCondition(newElement) { if (this.entries.length < NOAH_ARK_CAPACITY) return; const neAttrs = this.treeAdapter.getAttrList(newElement); const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs); if (candidates.length < NOAH_ARK_CAPACITY) return; //NOTE: build attrs map for the new element, so we can perform fast lookups const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value])); let validCandidates = 0; //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met for (let i = 0; i < candidates.length; i++) { const candidate = candidates[i]; // We know that `candidate.attrs.length === neAttrs.length` if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) { validCandidates += 1; if (validCandidates >= NOAH_ARK_CAPACITY) { this.entries.splice(candidate.idx, 1); } } } } //Mutations insertMarker() { this.entries.unshift(MARKER); } pushElement(element, token) { this._ensureNoahArkCondition(element); this.entries.unshift({ type: EntryType.Element, element, token, }); } insertElementAfterBookmark(element, token) { const bookmarkIdx = this.entries.indexOf(this.bookmark); this.entries.splice(bookmarkIdx, 0, { type: EntryType.Element, element, token, }); } removeEntry(entry) { const entryIndex = this.entries.indexOf(entry); if (entryIndex >= 0) { this.entries.splice(entryIndex, 1); } } clearToLastMarker() { const markerIdx = this.entries.indexOf(MARKER); if (markerIdx >= 0) { this.entries.splice(0, markerIdx + 1); } else { this.entries.length = 0; } } //Search getElementEntryInScopeWithTagName(tagName) { const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName); return entry && entry.type === EntryType.Element ? entry : null; } getElementEntry(element) { return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element); } } exports.FormattingElementList = FormattingElementList; },{}],9:[function(require,module,exports){ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Parser = void 0; const index_js_1 = require("../tokenizer/index.js"); const open_element_stack_js_1 = require("./open-element-stack.js"); const formatting_element_list_js_1 = require("./formatting-element-list.js"); const default_js_1 = require("../tree-adapters/default.js"); const doctype = require("../common/doctype.js"); const foreignContent = require("../common/foreign-content.js"); const error_codes_js_1 = require("../common/error-codes.js"); const unicode = require("../common/unicode.js"); const html_js_1 = require("../common/html.js"); const token_js_1 = require("../common/token.js"); //Misc constants const HIDDEN_INPUT_TYPE = 'hidden'; //Adoption agency loops iteration count const AA_OUTER_LOOP_ITER = 8; const AA_INNER_LOOP_ITER = 3; //Insertion modes var InsertionMode; (function (InsertionMode) { InsertionMode[InsertionMode["INITIAL"] = 0] = "INITIAL"; InsertionMode[InsertionMode["BEFORE_HTML"] = 1] = "BEFORE_HTML"; InsertionMode[InsertionMode["BEFORE_HEAD"] = 2] = "BEFORE_HEAD"; InsertionMode[InsertionMode["IN_HEAD"] = 3] = "IN_HEAD"; InsertionMode[InsertionMode["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT"; InsertionMode[InsertionMode["AFTER_HEAD"] = 5] = "AFTER_HEAD"; InsertionMode[InsertionMode["IN_BODY"] = 6] = "IN_BODY"; InsertionMode[InsertionMode["TEXT"] = 7] = "TEXT"; InsertionMode[InsertionMode["IN_TABLE"] = 8] = "IN_TABLE"; InsertionMode[InsertionMode["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT"; InsertionMode[InsertionMode["IN_CAPTION"] = 10] = "IN_CAPTION"; InsertionMode[InsertionMode["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP"; InsertionMode[InsertionMode["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY"; InsertionMode[InsertionMode["IN_ROW"] = 13] = "IN_ROW"; InsertionMode[InsertionMode["IN_CELL"] = 14] = "IN_CELL"; InsertionMode[InsertionMode["IN_SELECT"] = 15] = "IN_SELECT"; InsertionMode[InsertionMode["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE"; InsertionMode[InsertionMode["IN_TEMPLATE"] = 17] = "IN_TEMPLATE"; InsertionMode[InsertionMode["AFTER_BODY"] = 18] = "AFTER_BODY"; InsertionMode[InsertionMode["IN_FRAMESET"] = 19] = "IN_FRAMESET"; InsertionMode[InsertionMode["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET"; InsertionMode[InsertionMode["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY"; InsertionMode[InsertionMode["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET"; })(InsertionMode || (InsertionMode = {})); const BASE_LOC = { startLine: -1, startCol: -1, startOffset: -1, endLine: -1, endCol: -1, endOffset: -1, }; const TABLE_STRUCTURE_TAGS = new Set([html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TR]); const defaultParserOptions = { scriptingEnabled: true, sourceCodeLocationInfo: false, treeAdapter: default_js_1.defaultTreeAdapter, onParseError: null, }; //Parser class Parser { constructor(options, document, fragmentContext = null, scriptHandler = null) { this.fragmentContext = fragmentContext; this.scriptHandler = scriptHandler; this.currentToken = null; this.stopped = false; this.insertionMode = InsertionMode.INITIAL; this.originalInsertionMode = InsertionMode.INITIAL; this.headElement = null; this.formElement = null; /** Indicates that the current node is not an element in the HTML namespace */ this.currentNotInHTML = false; /** * The template insertion mode stack is maintained from the left. * Ie. the topmost element will always have index 0. */ this.tmplInsertionModeStack = []; this.pendingCharacterTokens = []; this.hasNonWhitespacePendingCharacterToken = false; this.framesetOk = true; this.skipNextNewLine = false; this.fosterParentingEnabled = false; this.options = Object.assign(Object.assign({}, defaultParserOptions), options); this.treeAdapter = this.options.treeAdapter; this.onParseError = this.options.onParseError; // Always enable location info if we report parse errors. if (this.onParseError) { this.options.sourceCodeLocationInfo = true; } this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument(); this.tokenizer = new index_js_1.Tokenizer(this.options, this); this.activeFormattingElements = new formatting_element_list_js_1.FormattingElementList(this.treeAdapter); this.fragmentContextID = fragmentContext ? (0, html_js_1.getTagID)(this.treeAdapter.getTagName(fragmentContext)) : html_js_1.TAG_ID.UNKNOWN; this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID); this.openElements = new open_element_stack_js_1.OpenElementStack(this.document, this.treeAdapter, this); } // API static parse(html, options) { const parser = new this(options); parser.tokenizer.write(html, true); return parser.document; } static getFragmentParser(fragmentContext, options) { const opts = Object.assign(Object.assign({}, defaultParserOptions), options); //NOTE: use a