@scalar/code-highlight 0.3.3 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/chunks/code.js +124 -0
  3. package/dist/chunks/code.js.map +1 -0
  4. package/dist/chunks/languages.js +12720 -0
  5. package/dist/chunks/languages.js.map +1 -0
  6. package/dist/chunks/lib.js +13688 -0
  7. package/dist/chunks/lib.js.map +1 -0
  8. package/dist/chunks/lib2.js +731 -0
  9. package/dist/chunks/lib2.js.map +1 -0
  10. package/dist/chunks/markdown.js +20921 -0
  11. package/dist/chunks/markdown.js.map +1 -0
  12. package/dist/chunks/rehype-alert.js +74 -0
  13. package/dist/chunks/rehype-alert.js.map +1 -0
  14. package/dist/chunks/rehype-highlight.js +2987 -0
  15. package/dist/chunks/rehype-highlight.js.map +1 -0
  16. package/dist/code/index.d.ts +1 -1
  17. package/dist/code/index.js +3 -1
  18. package/dist/index.d.ts +1 -1
  19. package/dist/index.js +6 -5
  20. package/dist/languages/index.d.ts +3 -3
  21. package/dist/languages/index.js +2 -3
  22. package/dist/markdown/index.d.ts +1 -1
  23. package/dist/markdown/index.js +3 -1
  24. package/dist/markdown/markdown.d.ts.map +1 -1
  25. package/dist/rehype-alert/index.d.ts +1 -1
  26. package/dist/rehype-alert/index.js +2 -1
  27. package/dist/rehype-highlight/index.d.ts +1 -1
  28. package/dist/rehype-highlight/index.js +2 -1
  29. package/package.json +4 -4
  30. package/dist/code/highlight.js +0 -62
  31. package/dist/code/line-numbers.js +0 -94
  32. package/dist/constants.js +0 -11
  33. package/dist/languages/basic.js +0 -30
  34. package/dist/languages/curl.js +0 -86
  35. package/dist/languages/json-yaml.js +0 -9
  36. package/dist/languages/standard.js +0 -115
  37. package/dist/markdown/markdown.js +0 -162
  38. package/dist/rehype-alert/rehype-alert.js +0 -102
  39. package/dist/rehype-highlight/rehype-highlight.js +0 -98
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","names":["normalize","types","normalize","html","svg","normalize","camelcase","html","htmlBase","svgBase","parse","stringify","search","parse","own","spaces","commas","normalize","html","own","one","html","all","element","position","point","$","isAsciiAlphaNumeric","$","$$","$","$","$","TN","foreignContent.isIntegrationPoint","doctype.getDocumentMode","doctype.isConforming","foreignContent.causesExit","$","assertPath","isUint8Array","emptyOptions","own","own","emptyChildren","own","html","body","tbody","commas","spaces","html","isPlainObj"],"sources":["../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/schema.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/merge.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/normalize.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/info.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/types.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/defined-info.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/create.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/aria.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-sensitive-transform.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/util/case-insensitive-transform.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/html.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/svg.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xlink.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xmlns.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/xml.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/lib/find.js","../../../../node_modules/.pnpm/property-information@7.1.0/node_modules/property-information/index.js","../../../../node_modules/.pnpm/comma-separated-tokens@2.0.3/node_modules/comma-separated-tokens/index.js","../../../../node_modules/.pnpm/hast-util-parse-selector@4.0.0/node_modules/hast-util-parse-selector/lib/index.js","../../../../node_modules/.pnpm/space-separated-tokens@2.0.2/node_modules/space-separated-tokens/index.js","../../../../node_modules/.pnpm/hastscript@8.0.0/node_modules/hastscript/lib/create-h.js","../../../../node_modules/.pnpm/hastscript@8.0.0/node_modules/hastscript/lib/svg-case-sensitive-tag-names.js","../../../../node_modules/.pnpm/hastscript@8.0.0/node_modules/hastscript/lib/index.js","../../../../node_modules/.pnpm/vfile-location@5.0.2/node_modules/vfile-location/lib/index.js","../../../../node_modules/.pnpm/web-namespaces@2.0.1/node_modules/web-namespaces/index.js","../../../../node_modules/.pnpm/hast-util-from-parse5@8.0.1/node_modules/hast-util-from-parse5/lib/index.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/unicode.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/error-codes.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/preprocessor.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/token.js","../../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/generated/decode-data-html.js","../../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode-codepoint.js","../../../../node_modules/.pnpm/entities@6.0.1/node_modules/entities/dist/esm/decode.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/html.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tokenizer/index.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/open-element-stack.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/formatting-element-list.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/tree-adapters/default.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/doctype.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/common/foreign-content.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/parser/index.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/serializer/index.js","../../../../node_modules/.pnpm/parse5@7.3.0/node_modules/parse5/dist/index.js","../../../../node_modules/.pnpm/unist-util-stringify-position@4.0.0/node_modules/unist-util-stringify-position/lib/index.js","../../../../node_modules/.pnpm/vfile-message@4.0.2/node_modules/vfile-message/lib/index.js","../../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minpath.browser.js","../../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minproc.browser.js","../../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minurl.shared.js","../../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/minurl.browser.js","../../../../node_modules/.pnpm/vfile@6.0.3/node_modules/vfile/lib/index.js","../../../../node_modules/.pnpm/hast-util-from-html@2.0.3/node_modules/hast-util-from-html/lib/errors.js","../../../../node_modules/.pnpm/hast-util-from-html@2.0.3/node_modules/hast-util-from-html/lib/index.js","../../../../node_modules/.pnpm/rehype-parse@9.0.1/node_modules/rehype-parse/lib/index.js","../../../../node_modules/.pnpm/html-void-elements@3.0.0/node_modules/html-void-elements/index.js","../../../../node_modules/.pnpm/zwitch@2.0.4/node_modules/zwitch/index.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/core.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-hexadecimal.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-decimal.js","../../../../node_modules/.pnpm/character-entities-legacy@3.0.0/node_modules/character-entities-legacy/index.js","../../../../node_modules/.pnpm/character-entities-html4@2.1.0/node_modules/character-entities-html4/index.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/constant/dangerous.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/to-named.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/util/format-smart.js","../../../../node_modules/.pnpm/stringify-entities@4.0.4/node_modules/stringify-entities/lib/index.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/comment.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/doctype.js","../../../../node_modules/.pnpm/ccount@2.0.1/node_modules/ccount/index.js","../../../../node_modules/.pnpm/hast-util-whitespace@3.0.0/node_modules/hast-util-whitespace/lib/index.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/util/siblings.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/omission.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/closing.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/omission/opening.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/text.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/raw.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/root.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/index.js","../../../../node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.js","../../../../node_modules/.pnpm/rehype-stringify@10.0.1/node_modules/rehype-stringify/lib/index.js","../../../../node_modules/.pnpm/bail@2.0.2/node_modules/bail/index.js","../../../../node_modules/.pnpm/extend@3.0.2/node_modules/extend/index.js","../../../../node_modules/.pnpm/is-plain-obj@4.1.0/node_modules/is-plain-obj/index.js","../../../../node_modules/.pnpm/trough@2.2.0/node_modules/trough/lib/index.js","../../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/callable-instance.js","../../../../node_modules/.pnpm/unified@11.0.5/node_modules/unified/lib/index.js"],"sourcesContent":["/**\n * @import {Schema as SchemaType, Space} from 'property-information'\n */\n\n/** @type {SchemaType} */\nexport class Schema {\n /**\n * @param {SchemaType['property']} property\n * Property.\n * @param {SchemaType['normal']} normal\n * Normal.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Schema.\n */\n constructor(property, normal, space) {\n this.normal = normal\n this.property = property\n\n if (space) {\n this.space = space\n }\n }\n}\n\nSchema.prototype.normal = {}\nSchema.prototype.property = {}\nSchema.prototype.space = undefined\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\nimport {Schema} from './schema.js'\n\n/**\n * @param {ReadonlyArray<Schema>} definitions\n * Definitions.\n * @param {Space | undefined} [space]\n * Space.\n * @returns {Schema}\n * Schema.\n */\nexport function merge(definitions, space) {\n /** @type {Record<string, Info>} */\n const property = {}\n /** @type {Record<string, string>} */\n const normal = {}\n\n for (const definition of definitions) {\n Object.assign(property, definition.property)\n Object.assign(normal, definition.normal)\n }\n\n return new Schema(property, normal, space)\n}\n","/**\n * Get the cleaned case insensitive form of an attribute or property.\n *\n * @param {string} value\n * An attribute-like or property-like name.\n * @returns {string}\n * Value that can be used to look up the properly cased property on a\n * `Schema`.\n */\nexport function normalize(value) {\n return value.toLowerCase()\n}\n","/**\n * @import {Info as InfoType} from 'property-information'\n */\n\n/** @type {InfoType} */\nexport class Info {\n /**\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @returns\n * Info.\n */\n constructor(property, attribute) {\n this.attribute = attribute\n this.property = property\n }\n}\n\nInfo.prototype.attribute = ''\nInfo.prototype.booleanish = false\nInfo.prototype.boolean = false\nInfo.prototype.commaOrSpaceSeparated = false\nInfo.prototype.commaSeparated = false\nInfo.prototype.defined = false\nInfo.prototype.mustUseProperty = false\nInfo.prototype.number = false\nInfo.prototype.overloadedBoolean = false\nInfo.prototype.property = ''\nInfo.prototype.spaceSeparated = false\nInfo.prototype.space = undefined\n","let powers = 0\n\nexport const boolean = increment()\nexport const booleanish = increment()\nexport const overloadedBoolean = increment()\nexport const number = increment()\nexport const spaceSeparated = increment()\nexport const commaSeparated = increment()\nexport const commaOrSpaceSeparated = increment()\n\nfunction increment() {\n return 2 ** ++powers\n}\n","/**\n * @import {Space} from 'property-information'\n */\n\nimport {Info} from './info.js'\nimport * as types from './types.js'\n\nconst checks = /** @type {ReadonlyArray<keyof typeof types>} */ (\n Object.keys(types)\n)\n\nexport class DefinedInfo extends Info {\n /**\n * @constructor\n * @param {string} property\n * Property.\n * @param {string} attribute\n * Attribute.\n * @param {number | null | undefined} [mask]\n * Mask.\n * @param {Space | undefined} [space]\n * Space.\n * @returns\n * Info.\n */\n constructor(property, attribute, mask, space) {\n let index = -1\n\n super(property, attribute)\n\n mark(this, 'space', space)\n\n if (typeof mask === 'number') {\n while (++index < checks.length) {\n const check = checks[index]\n mark(this, checks[index], (mask & types[check]) === types[check])\n }\n }\n }\n}\n\nDefinedInfo.prototype.defined = true\n\n/**\n * @template {keyof DefinedInfo} Key\n * Key type.\n * @param {DefinedInfo} values\n * Info.\n * @param {Key} key\n * Key.\n * @param {DefinedInfo[Key]} value\n * Value.\n * @returns {undefined}\n * Nothing.\n */\nfunction mark(values, key, value) {\n if (value) {\n values[key] = value\n }\n}\n","/**\n * @import {Info, Space} from 'property-information'\n */\n\n/**\n * @typedef Definition\n * Definition of a schema.\n * @property {Record<string, string> | undefined} [attributes]\n * Normalzed names to special attribute case.\n * @property {ReadonlyArray<string> | undefined} [mustUseProperty]\n * Normalized names that must be set as properties.\n * @property {Record<string, number | null>} properties\n * Property names to their types.\n * @property {Space | undefined} [space]\n * Space.\n * @property {Transform} transform\n * Transform a property name.\n */\n\n/**\n * @callback Transform\n * Transform.\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Attribute.\n */\n\nimport {normalize} from '../normalize.js'\nimport {DefinedInfo} from './defined-info.js'\nimport {Schema} from './schema.js'\n\n/**\n * @param {Definition} definition\n * Definition.\n * @returns {Schema}\n * Schema.\n */\nexport function create(definition) {\n /** @type {Record<string, Info>} */\n const properties = {}\n /** @type {Record<string, string>} */\n const normals = {}\n\n for (const [property, value] of Object.entries(definition.properties)) {\n const info = new DefinedInfo(\n property,\n definition.transform(definition.attributes || {}, property),\n value,\n definition.space\n )\n\n if (\n definition.mustUseProperty &&\n definition.mustUseProperty.includes(property)\n ) {\n info.mustUseProperty = true\n }\n\n properties[property] = info\n\n normals[normalize(property)] = property\n normals[normalize(info.attribute)] = property\n }\n\n return new Schema(properties, normals, definition.space)\n}\n","import {create} from './util/create.js'\nimport {booleanish, number, spaceSeparated} from './util/types.js'\n\nexport const aria = create({\n properties: {\n ariaActiveDescendant: null,\n ariaAtomic: booleanish,\n ariaAutoComplete: null,\n ariaBusy: booleanish,\n ariaChecked: booleanish,\n ariaColCount: number,\n ariaColIndex: number,\n ariaColSpan: number,\n ariaControls: spaceSeparated,\n ariaCurrent: null,\n ariaDescribedBy: spaceSeparated,\n ariaDetails: null,\n ariaDisabled: booleanish,\n ariaDropEffect: spaceSeparated,\n ariaErrorMessage: null,\n ariaExpanded: booleanish,\n ariaFlowTo: spaceSeparated,\n ariaGrabbed: booleanish,\n ariaHasPopup: null,\n ariaHidden: booleanish,\n ariaInvalid: null,\n ariaKeyShortcuts: null,\n ariaLabel: null,\n ariaLabelledBy: spaceSeparated,\n ariaLevel: number,\n ariaLive: null,\n ariaModal: booleanish,\n ariaMultiLine: booleanish,\n ariaMultiSelectable: booleanish,\n ariaOrientation: null,\n ariaOwns: spaceSeparated,\n ariaPlaceholder: null,\n ariaPosInSet: number,\n ariaPressed: booleanish,\n ariaReadOnly: booleanish,\n ariaRelevant: null,\n ariaRequired: booleanish,\n ariaRoleDescription: spaceSeparated,\n ariaRowCount: number,\n ariaRowIndex: number,\n ariaRowSpan: number,\n ariaSelected: booleanish,\n ariaSetSize: number,\n ariaSort: null,\n ariaValueMax: number,\n ariaValueMin: number,\n ariaValueNow: number,\n ariaValueText: null,\n role: null\n },\n transform(_, property) {\n return property === 'role'\n ? property\n : 'aria-' + property.slice(4).toLowerCase()\n }\n})\n","/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} attribute\n * Attribute.\n * @returns {string}\n * Transformed attribute.\n */\nexport function caseSensitiveTransform(attributes, attribute) {\n return attribute in attributes ? attributes[attribute] : attribute\n}\n","import {caseSensitiveTransform} from './case-sensitive-transform.js'\n\n/**\n * @param {Record<string, string>} attributes\n * Attributes.\n * @param {string} property\n * Property.\n * @returns {string}\n * Transformed property.\n */\nexport function caseInsensitiveTransform(attributes, property) {\n return caseSensitiveTransform(attributes, property.toLowerCase())\n}\n","import {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n booleanish,\n boolean,\n commaSeparated,\n number,\n overloadedBoolean,\n spaceSeparated\n} from './util/types.js'\n\nexport const html = create({\n attributes: {\n acceptcharset: 'accept-charset',\n classname: 'class',\n htmlfor: 'for',\n httpequiv: 'http-equiv'\n },\n mustUseProperty: ['checked', 'multiple', 'muted', 'selected'],\n properties: {\n // Standard Properties.\n abbr: null,\n accept: commaSeparated,\n acceptCharset: spaceSeparated,\n accessKey: spaceSeparated,\n action: null,\n allow: null,\n allowFullScreen: boolean,\n allowPaymentRequest: boolean,\n allowUserMedia: boolean,\n alt: null,\n as: null,\n async: boolean,\n autoCapitalize: null,\n autoComplete: spaceSeparated,\n autoFocus: boolean,\n autoPlay: boolean,\n blocking: spaceSeparated,\n capture: null,\n charSet: null,\n checked: boolean,\n cite: null,\n className: spaceSeparated,\n cols: number,\n colSpan: null,\n content: null,\n contentEditable: booleanish,\n controls: boolean,\n controlsList: spaceSeparated,\n coords: number | commaSeparated,\n crossOrigin: null,\n data: null,\n dateTime: null,\n decoding: null,\n default: boolean,\n defer: boolean,\n dir: null,\n dirName: null,\n disabled: boolean,\n download: overloadedBoolean,\n draggable: booleanish,\n encType: null,\n enterKeyHint: null,\n fetchPriority: null,\n form: null,\n formAction: null,\n formEncType: null,\n formMethod: null,\n formNoValidate: boolean,\n formTarget: null,\n headers: spaceSeparated,\n height: number,\n hidden: overloadedBoolean,\n high: number,\n href: null,\n hrefLang: null,\n htmlFor: spaceSeparated,\n httpEquiv: spaceSeparated,\n id: null,\n imageSizes: null,\n imageSrcSet: null,\n inert: boolean,\n inputMode: null,\n integrity: null,\n is: null,\n isMap: boolean,\n itemId: null,\n itemProp: spaceSeparated,\n itemRef: spaceSeparated,\n itemScope: boolean,\n itemType: spaceSeparated,\n kind: null,\n label: null,\n lang: null,\n language: null,\n list: null,\n loading: null,\n loop: boolean,\n low: number,\n manifest: null,\n max: null,\n maxLength: number,\n media: null,\n method: null,\n min: null,\n minLength: number,\n multiple: boolean,\n muted: boolean,\n name: null,\n nonce: null,\n noModule: boolean,\n noValidate: boolean,\n onAbort: null,\n onAfterPrint: null,\n onAuxClick: null,\n onBeforeMatch: null,\n onBeforePrint: null,\n onBeforeToggle: null,\n onBeforeUnload: null,\n onBlur: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onContextLost: null,\n onContextMenu: null,\n onContextRestored: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFormData: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLanguageChange: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadEnd: null,\n onLoadStart: null,\n onMessage: null,\n onMessageError: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRejectionHandled: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onScrollEnd: null,\n onSecurityPolicyViolation: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onSlotChange: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnhandledRejection: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onWheel: null,\n open: boolean,\n optimum: number,\n pattern: null,\n ping: spaceSeparated,\n placeholder: null,\n playsInline: boolean,\n popover: null,\n popoverTarget: null,\n popoverTargetAction: null,\n poster: null,\n preload: null,\n readOnly: boolean,\n referrerPolicy: null,\n rel: spaceSeparated,\n required: boolean,\n reversed: boolean,\n rows: number,\n rowSpan: number,\n sandbox: spaceSeparated,\n scope: null,\n scoped: boolean,\n seamless: boolean,\n selected: boolean,\n shadowRootClonable: boolean,\n shadowRootDelegatesFocus: boolean,\n shadowRootMode: null,\n shape: null,\n size: number,\n sizes: null,\n slot: null,\n span: number,\n spellCheck: booleanish,\n src: null,\n srcDoc: null,\n srcLang: null,\n srcSet: null,\n start: number,\n step: null,\n style: null,\n tabIndex: number,\n target: null,\n title: null,\n translate: null,\n type: null,\n typeMustMatch: boolean,\n useMap: null,\n value: booleanish,\n width: number,\n wrap: null,\n writingSuggestions: null,\n\n // Legacy.\n // See: https://html.spec.whatwg.org/#other-elements,-attributes-and-apis\n align: null, // Several. Use CSS `text-align` instead,\n aLink: null, // `<body>`. Use CSS `a:active {color}` instead\n archive: spaceSeparated, // `<object>`. List of URIs to archives\n axis: null, // `<td>` and `<th>`. Use `scope` on `<th>`\n background: null, // `<body>`. Use CSS `background-image` instead\n bgColor: null, // `<body>` and table elements. Use CSS `background-color` instead\n border: number, // `<table>`. Use CSS `border-width` instead,\n borderColor: null, // `<table>`. Use CSS `border-color` instead,\n bottomMargin: number, // `<body>`\n cellPadding: null, // `<table>`\n cellSpacing: null, // `<table>`\n char: null, // Several table elements. When `align=char`, sets the character to align on\n charOff: null, // Several table elements. When `char`, offsets the alignment\n classId: null, // `<object>`\n clear: null, // `<br>`. Use CSS `clear` instead\n code: null, // `<object>`\n codeBase: null, // `<object>`\n codeType: null, // `<object>`\n color: null, // `<font>` and `<hr>`. Use CSS instead\n compact: boolean, // Lists. Use CSS to reduce space between items instead\n declare: boolean, // `<object>`\n event: null, // `<script>`\n face: null, // `<font>`. Use CSS instead\n frame: null, // `<table>`\n frameBorder: null, // `<iframe>`. Use CSS `border` instead\n hSpace: number, // `<img>` and `<object>`\n leftMargin: number, // `<body>`\n link: null, // `<body>`. Use CSS `a:link {color: *}` instead\n longDesc: null, // `<frame>`, `<iframe>`, and `<img>`. Use an `<a>`\n lowSrc: null, // `<img>`. Use a `<picture>`\n marginHeight: number, // `<body>`\n marginWidth: number, // `<body>`\n noResize: boolean, // `<frame>`\n noHref: boolean, // `<area>`. Use no href instead of an explicit `nohref`\n noShade: boolean, // `<hr>`. Use background-color and height instead of borders\n noWrap: boolean, // `<td>` and `<th>`\n object: null, // `<applet>`\n profile: null, // `<head>`\n prompt: null, // `<isindex>`\n rev: null, // `<link>`\n rightMargin: number, // `<body>`\n rules: null, // `<table>`\n scheme: null, // `<meta>`\n scrolling: booleanish, // `<frame>`. Use overflow in the child context\n standby: null, // `<object>`\n summary: null, // `<table>`\n text: null, // `<body>`. Use CSS `color` instead\n topMargin: number, // `<body>`\n valueType: null, // `<param>`\n version: null, // `<html>`. Use a doctype.\n vAlign: null, // Several. Use CSS `vertical-align` instead\n vLink: null, // `<body>`. Use CSS `a:visited {color}` instead\n vSpace: number, // `<img>` and `<object>`\n\n // Non-standard Properties.\n allowTransparency: null,\n autoCorrect: null,\n autoSave: null,\n disablePictureInPicture: boolean,\n disableRemotePlayback: boolean,\n prefix: null,\n property: null,\n results: number,\n security: null,\n unselectable: null\n },\n space: 'html',\n transform: caseInsensitiveTransform\n})\n","import {caseSensitiveTransform} from './util/case-sensitive-transform.js'\nimport {create} from './util/create.js'\nimport {\n boolean,\n commaOrSpaceSeparated,\n commaSeparated,\n number,\n spaceSeparated\n} from './util/types.js'\n\nexport const svg = create({\n attributes: {\n accentHeight: 'accent-height',\n alignmentBaseline: 'alignment-baseline',\n arabicForm: 'arabic-form',\n baselineShift: 'baseline-shift',\n capHeight: 'cap-height',\n className: 'class',\n clipPath: 'clip-path',\n clipRule: 'clip-rule',\n colorInterpolation: 'color-interpolation',\n colorInterpolationFilters: 'color-interpolation-filters',\n colorProfile: 'color-profile',\n colorRendering: 'color-rendering',\n crossOrigin: 'crossorigin',\n dataType: 'datatype',\n dominantBaseline: 'dominant-baseline',\n enableBackground: 'enable-background',\n fillOpacity: 'fill-opacity',\n fillRule: 'fill-rule',\n floodColor: 'flood-color',\n floodOpacity: 'flood-opacity',\n fontFamily: 'font-family',\n fontSize: 'font-size',\n fontSizeAdjust: 'font-size-adjust',\n fontStretch: 'font-stretch',\n fontStyle: 'font-style',\n fontVariant: 'font-variant',\n fontWeight: 'font-weight',\n glyphName: 'glyph-name',\n glyphOrientationHorizontal: 'glyph-orientation-horizontal',\n glyphOrientationVertical: 'glyph-orientation-vertical',\n hrefLang: 'hreflang',\n horizAdvX: 'horiz-adv-x',\n horizOriginX: 'horiz-origin-x',\n horizOriginY: 'horiz-origin-y',\n imageRendering: 'image-rendering',\n letterSpacing: 'letter-spacing',\n lightingColor: 'lighting-color',\n markerEnd: 'marker-end',\n markerMid: 'marker-mid',\n markerStart: 'marker-start',\n navDown: 'nav-down',\n navDownLeft: 'nav-down-left',\n navDownRight: 'nav-down-right',\n navLeft: 'nav-left',\n navNext: 'nav-next',\n navPrev: 'nav-prev',\n navRight: 'nav-right',\n navUp: 'nav-up',\n navUpLeft: 'nav-up-left',\n navUpRight: 'nav-up-right',\n onAbort: 'onabort',\n onActivate: 'onactivate',\n onAfterPrint: 'onafterprint',\n onBeforePrint: 'onbeforeprint',\n onBegin: 'onbegin',\n onCancel: 'oncancel',\n onCanPlay: 'oncanplay',\n onCanPlayThrough: 'oncanplaythrough',\n onChange: 'onchange',\n onClick: 'onclick',\n onClose: 'onclose',\n onCopy: 'oncopy',\n onCueChange: 'oncuechange',\n onCut: 'oncut',\n onDblClick: 'ondblclick',\n onDrag: 'ondrag',\n onDragEnd: 'ondragend',\n onDragEnter: 'ondragenter',\n onDragExit: 'ondragexit',\n onDragLeave: 'ondragleave',\n onDragOver: 'ondragover',\n onDragStart: 'ondragstart',\n onDrop: 'ondrop',\n onDurationChange: 'ondurationchange',\n onEmptied: 'onemptied',\n onEnd: 'onend',\n onEnded: 'onended',\n onError: 'onerror',\n onFocus: 'onfocus',\n onFocusIn: 'onfocusin',\n onFocusOut: 'onfocusout',\n onHashChange: 'onhashchange',\n onInput: 'oninput',\n onInvalid: 'oninvalid',\n onKeyDown: 'onkeydown',\n onKeyPress: 'onkeypress',\n onKeyUp: 'onkeyup',\n onLoad: 'onload',\n onLoadedData: 'onloadeddata',\n onLoadedMetadata: 'onloadedmetadata',\n onLoadStart: 'onloadstart',\n onMessage: 'onmessage',\n onMouseDown: 'onmousedown',\n onMouseEnter: 'onmouseenter',\n onMouseLeave: 'onmouseleave',\n onMouseMove: 'onmousemove',\n onMouseOut: 'onmouseout',\n onMouseOver: 'onmouseover',\n onMouseUp: 'onmouseup',\n onMouseWheel: 'onmousewheel',\n onOffline: 'onoffline',\n onOnline: 'ononline',\n onPageHide: 'onpagehide',\n onPageShow: 'onpageshow',\n onPaste: 'onpaste',\n onPause: 'onpause',\n onPlay: 'onplay',\n onPlaying: 'onplaying',\n onPopState: 'onpopstate',\n onProgress: 'onprogress',\n onRateChange: 'onratechange',\n onRepeat: 'onrepeat',\n onReset: 'onreset',\n onResize: 'onresize',\n onScroll: 'onscroll',\n onSeeked: 'onseeked',\n onSeeking: 'onseeking',\n onSelect: 'onselect',\n onShow: 'onshow',\n onStalled: 'onstalled',\n onStorage: 'onstorage',\n onSubmit: 'onsubmit',\n onSuspend: 'onsuspend',\n onTimeUpdate: 'ontimeupdate',\n onToggle: 'ontoggle',\n onUnload: 'onunload',\n onVolumeChange: 'onvolumechange',\n onWaiting: 'onwaiting',\n onZoom: 'onzoom',\n overlinePosition: 'overline-position',\n overlineThickness: 'overline-thickness',\n paintOrder: 'paint-order',\n panose1: 'panose-1',\n pointerEvents: 'pointer-events',\n referrerPolicy: 'referrerpolicy',\n renderingIntent: 'rendering-intent',\n shapeRendering: 'shape-rendering',\n stopColor: 'stop-color',\n stopOpacity: 'stop-opacity',\n strikethroughPosition: 'strikethrough-position',\n strikethroughThickness: 'strikethrough-thickness',\n strokeDashArray: 'stroke-dasharray',\n strokeDashOffset: 'stroke-dashoffset',\n strokeLineCap: 'stroke-linecap',\n strokeLineJoin: 'stroke-linejoin',\n strokeMiterLimit: 'stroke-miterlimit',\n strokeOpacity: 'stroke-opacity',\n strokeWidth: 'stroke-width',\n tabIndex: 'tabindex',\n textAnchor: 'text-anchor',\n textDecoration: 'text-decoration',\n textRendering: 'text-rendering',\n transformOrigin: 'transform-origin',\n typeOf: 'typeof',\n underlinePosition: 'underline-position',\n underlineThickness: 'underline-thickness',\n unicodeBidi: 'unicode-bidi',\n unicodeRange: 'unicode-range',\n unitsPerEm: 'units-per-em',\n vAlphabetic: 'v-alphabetic',\n vHanging: 'v-hanging',\n vIdeographic: 'v-ideographic',\n vMathematical: 'v-mathematical',\n vectorEffect: 'vector-effect',\n vertAdvY: 'vert-adv-y',\n vertOriginX: 'vert-origin-x',\n vertOriginY: 'vert-origin-y',\n wordSpacing: 'word-spacing',\n writingMode: 'writing-mode',\n xHeight: 'x-height',\n // These were camelcased in Tiny. Now lowercased in SVG 2\n playbackOrder: 'playbackorder',\n timelineBegin: 'timelinebegin'\n },\n properties: {\n about: commaOrSpaceSeparated,\n accentHeight: number,\n accumulate: null,\n additive: null,\n alignmentBaseline: null,\n alphabetic: number,\n amplitude: number,\n arabicForm: null,\n ascent: number,\n attributeName: null,\n attributeType: null,\n azimuth: number,\n bandwidth: null,\n baselineShift: null,\n baseFrequency: null,\n baseProfile: null,\n bbox: null,\n begin: null,\n bias: number,\n by: null,\n calcMode: null,\n capHeight: number,\n className: spaceSeparated,\n clip: null,\n clipPath: null,\n clipPathUnits: null,\n clipRule: null,\n color: null,\n colorInterpolation: null,\n colorInterpolationFilters: null,\n colorProfile: null,\n colorRendering: null,\n content: null,\n contentScriptType: null,\n contentStyleType: null,\n crossOrigin: null,\n cursor: null,\n cx: null,\n cy: null,\n d: null,\n dataType: null,\n defaultAction: null,\n descent: number,\n diffuseConstant: number,\n direction: null,\n display: null,\n dur: null,\n divisor: number,\n dominantBaseline: null,\n download: boolean,\n dx: null,\n dy: null,\n edgeMode: null,\n editable: null,\n elevation: number,\n enableBackground: null,\n end: null,\n event: null,\n exponent: number,\n externalResourcesRequired: null,\n fill: null,\n fillOpacity: number,\n fillRule: null,\n filter: null,\n filterRes: null,\n filterUnits: null,\n floodColor: null,\n floodOpacity: null,\n focusable: null,\n focusHighlight: null,\n fontFamily: null,\n fontSize: null,\n fontSizeAdjust: null,\n fontStretch: null,\n fontStyle: null,\n fontVariant: null,\n fontWeight: null,\n format: null,\n fr: null,\n from: null,\n fx: null,\n fy: null,\n g1: commaSeparated,\n g2: commaSeparated,\n glyphName: commaSeparated,\n glyphOrientationHorizontal: null,\n glyphOrientationVertical: null,\n glyphRef: null,\n gradientTransform: null,\n gradientUnits: null,\n handler: null,\n hanging: number,\n hatchContentUnits: null,\n hatchUnits: null,\n height: null,\n href: null,\n hrefLang: null,\n horizAdvX: number,\n horizOriginX: number,\n horizOriginY: number,\n id: null,\n ideographic: number,\n imageRendering: null,\n initialVisibility: null,\n in: null,\n in2: null,\n intercept: number,\n k: number,\n k1: number,\n k2: number,\n k3: number,\n k4: number,\n kernelMatrix: commaOrSpaceSeparated,\n kernelUnitLength: null,\n keyPoints: null, // SEMI_COLON_SEPARATED\n keySplines: null, // SEMI_COLON_SEPARATED\n keyTimes: null, // SEMI_COLON_SEPARATED\n kerning: null,\n lang: null,\n lengthAdjust: null,\n letterSpacing: null,\n lightingColor: null,\n limitingConeAngle: number,\n local: null,\n markerEnd: null,\n markerMid: null,\n markerStart: null,\n markerHeight: null,\n markerUnits: null,\n markerWidth: null,\n mask: null,\n maskContentUnits: null,\n maskUnits: null,\n mathematical: null,\n max: null,\n media: null,\n mediaCharacterEncoding: null,\n mediaContentEncodings: null,\n mediaSize: number,\n mediaTime: null,\n method: null,\n min: null,\n mode: null,\n name: null,\n navDown: null,\n navDownLeft: null,\n navDownRight: null,\n navLeft: null,\n navNext: null,\n navPrev: null,\n navRight: null,\n navUp: null,\n navUpLeft: null,\n navUpRight: null,\n numOctaves: null,\n observer: null,\n offset: null,\n onAbort: null,\n onActivate: null,\n onAfterPrint: null,\n onBeforePrint: null,\n onBegin: null,\n onCancel: null,\n onCanPlay: null,\n onCanPlayThrough: null,\n onChange: null,\n onClick: null,\n onClose: null,\n onCopy: null,\n onCueChange: null,\n onCut: null,\n onDblClick: null,\n onDrag: null,\n onDragEnd: null,\n onDragEnter: null,\n onDragExit: null,\n onDragLeave: null,\n onDragOver: null,\n onDragStart: null,\n onDrop: null,\n onDurationChange: null,\n onEmptied: null,\n onEnd: null,\n onEnded: null,\n onError: null,\n onFocus: null,\n onFocusIn: null,\n onFocusOut: null,\n onHashChange: null,\n onInput: null,\n onInvalid: null,\n onKeyDown: null,\n onKeyPress: null,\n onKeyUp: null,\n onLoad: null,\n onLoadedData: null,\n onLoadedMetadata: null,\n onLoadStart: null,\n onMessage: null,\n onMouseDown: null,\n onMouseEnter: null,\n onMouseLeave: null,\n onMouseMove: null,\n onMouseOut: null,\n onMouseOver: null,\n onMouseUp: null,\n onMouseWheel: null,\n onOffline: null,\n onOnline: null,\n onPageHide: null,\n onPageShow: null,\n onPaste: null,\n onPause: null,\n onPlay: null,\n onPlaying: null,\n onPopState: null,\n onProgress: null,\n onRateChange: null,\n onRepeat: null,\n onReset: null,\n onResize: null,\n onScroll: null,\n onSeeked: null,\n onSeeking: null,\n onSelect: null,\n onShow: null,\n onStalled: null,\n onStorage: null,\n onSubmit: null,\n onSuspend: null,\n onTimeUpdate: null,\n onToggle: null,\n onUnload: null,\n onVolumeChange: null,\n onWaiting: null,\n onZoom: null,\n opacity: null,\n operator: null,\n order: null,\n orient: null,\n orientation: null,\n origin: null,\n overflow: null,\n overlay: null,\n overlinePosition: number,\n overlineThickness: number,\n paintOrder: null,\n panose1: null,\n path: null,\n pathLength: number,\n patternContentUnits: null,\n patternTransform: null,\n patternUnits: null,\n phase: null,\n ping: spaceSeparated,\n pitch: null,\n playbackOrder: null,\n pointerEvents: null,\n points: null,\n pointsAtX: number,\n pointsAtY: number,\n pointsAtZ: number,\n preserveAlpha: null,\n preserveAspectRatio: null,\n primitiveUnits: null,\n propagate: null,\n property: commaOrSpaceSeparated,\n r: null,\n radius: null,\n referrerPolicy: null,\n refX: null,\n refY: null,\n rel: commaOrSpaceSeparated,\n rev: commaOrSpaceSeparated,\n renderingIntent: null,\n repeatCount: null,\n repeatDur: null,\n requiredExtensions: commaOrSpaceSeparated,\n requiredFeatures: commaOrSpaceSeparated,\n requiredFonts: commaOrSpaceSeparated,\n requiredFormats: commaOrSpaceSeparated,\n resource: null,\n restart: null,\n result: null,\n rotate: null,\n rx: null,\n ry: null,\n scale: null,\n seed: null,\n shapeRendering: null,\n side: null,\n slope: null,\n snapshotTime: null,\n specularConstant: number,\n specularExponent: number,\n spreadMethod: null,\n spacing: null,\n startOffset: null,\n stdDeviation: null,\n stemh: null,\n stemv: null,\n stitchTiles: null,\n stopColor: null,\n stopOpacity: null,\n strikethroughPosition: number,\n strikethroughThickness: number,\n string: null,\n stroke: null,\n strokeDashArray: commaOrSpaceSeparated,\n strokeDashOffset: null,\n strokeLineCap: null,\n strokeLineJoin: null,\n strokeMiterLimit: number,\n strokeOpacity: number,\n strokeWidth: null,\n style: null,\n surfaceScale: number,\n syncBehavior: null,\n syncBehaviorDefault: null,\n syncMaster: null,\n syncTolerance: null,\n syncToleranceDefault: null,\n systemLanguage: commaOrSpaceSeparated,\n tabIndex: number,\n tableValues: null,\n target: null,\n targetX: number,\n targetY: number,\n textAnchor: null,\n textDecoration: null,\n textRendering: null,\n textLength: null,\n timelineBegin: null,\n title: null,\n transformBehavior: null,\n type: null,\n typeOf: commaOrSpaceSeparated,\n to: null,\n transform: null,\n transformOrigin: null,\n u1: null,\n u2: null,\n underlinePosition: number,\n underlineThickness: number,\n unicode: null,\n unicodeBidi: null,\n unicodeRange: null,\n unitsPerEm: number,\n values: null,\n vAlphabetic: number,\n vMathematical: number,\n vectorEffect: null,\n vHanging: number,\n vIdeographic: number,\n version: null,\n vertAdvY: number,\n vertOriginX: number,\n vertOriginY: number,\n viewBox: null,\n viewTarget: null,\n visibility: null,\n width: null,\n widths: null,\n wordSpacing: null,\n writingMode: null,\n x: null,\n x1: null,\n x2: null,\n xChannelSelector: null,\n xHeight: number,\n y: null,\n y1: null,\n y2: null,\n yChannelSelector: null,\n z: null,\n zoomAndPan: null\n },\n space: 'svg',\n transform: caseSensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xlink = create({\n properties: {\n xLinkActuate: null,\n xLinkArcRole: null,\n xLinkHref: null,\n xLinkRole: null,\n xLinkShow: null,\n xLinkTitle: null,\n xLinkType: null\n },\n space: 'xlink',\n transform(_, property) {\n return 'xlink:' + property.slice(5).toLowerCase()\n }\n})\n","import {create} from './util/create.js'\nimport {caseInsensitiveTransform} from './util/case-insensitive-transform.js'\n\nexport const xmlns = create({\n attributes: {xmlnsxlink: 'xmlns:xlink'},\n properties: {xmlnsXLink: null, xmlns: null},\n space: 'xmlns',\n transform: caseInsensitiveTransform\n})\n","import {create} from './util/create.js'\n\nexport const xml = create({\n properties: {xmlBase: null, xmlLang: null, xmlSpace: null},\n space: 'xml',\n transform(_, property) {\n return 'xml:' + property.slice(3).toLowerCase()\n }\n})\n","/**\n * @import {Schema} from 'property-information'\n */\n\nimport {DefinedInfo} from './util/defined-info.js'\nimport {Info} from './util/info.js'\nimport {normalize} from './normalize.js'\n\nconst cap = /[A-Z]/g\nconst dash = /-[a-z]/g\nconst valid = /^data[-\\w.:]+$/i\n\n/**\n * Look up info on a property.\n *\n * In most cases the given `schema` contains info on the property.\n * All standard,\n * most legacy,\n * and some non-standard properties are supported.\n * For these cases,\n * the returned `Info` has hints about the value of the property.\n *\n * `name` can also be a valid data attribute or property,\n * in which case an `Info` object with the correctly cased `attribute` and\n * `property` is returned.\n *\n * `name` can be an unknown attribute,\n * in which case an `Info` object with `attribute` and `property` set to the\n * given name is returned.\n * It is not recommended to provide unsupported legacy or recently specced\n * properties.\n *\n *\n * @param {Schema} schema\n * Schema;\n * either the `html` or `svg` export.\n * @param {string} value\n * An attribute-like or property-like name;\n * it will be passed through `normalize` to hopefully find the correct info.\n * @returns {Info}\n * Info.\n */\nexport function find(schema, value) {\n const normal = normalize(value)\n let property = value\n let Type = Info\n\n if (normal in schema.normal) {\n return schema.property[schema.normal[normal]]\n }\n\n if (normal.length > 4 && normal.slice(0, 4) === 'data' && valid.test(value)) {\n // Attribute or property.\n if (value.charAt(4) === '-') {\n // Turn it into a property.\n const rest = value.slice(5).replace(dash, camelcase)\n property = 'data' + rest.charAt(0).toUpperCase() + rest.slice(1)\n } else {\n // Turn it into an attribute.\n const rest = value.slice(4)\n\n if (!dash.test(rest)) {\n let dashes = rest.replace(cap, kebab)\n\n if (dashes.charAt(0) !== '-') {\n dashes = '-' + dashes\n }\n\n value = 'data' + dashes\n }\n }\n\n Type = DefinedInfo\n }\n\n return new Type(property, value)\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Kebab.\n */\nfunction kebab($0) {\n return '-' + $0.toLowerCase()\n}\n\n/**\n * @param {string} $0\n * Value.\n * @returns {string}\n * Camel.\n */\nfunction camelcase($0) {\n return $0.charAt(1).toUpperCase()\n}\n","// Note: types exposed from `index.d.ts`.\nimport {merge} from './lib/util/merge.js'\nimport {aria} from './lib/aria.js'\nimport {html as htmlBase} from './lib/html.js'\nimport {svg as svgBase} from './lib/svg.js'\nimport {xlink} from './lib/xlink.js'\nimport {xmlns} from './lib/xmlns.js'\nimport {xml} from './lib/xml.js'\n\nexport {hastToReact} from './lib/hast-to-react.js'\n\nexport const html = merge([aria, htmlBase, xlink, xmlns, xml], 'html')\n\nexport {find} from './lib/find.js'\nexport {normalize} from './lib/normalize.js'\n\nexport const svg = merge([aria, svgBase, xlink, xmlns, xml], 'svg')\n","/**\n * @typedef Options\n * Configuration for `stringify`.\n * @property {boolean} [padLeft=true]\n * Whether to pad a space before a token.\n * @property {boolean} [padRight=false]\n * Whether to pad a space after a token.\n */\n\n/**\n * @typedef {Options} StringifyOptions\n * Please use `StringifyOptions` instead.\n */\n\n/**\n * Parse comma-separated tokens to an array.\n *\n * @param {string} value\n * Comma-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n /** @type {Array<string>} */\n const tokens = []\n const input = String(value || '')\n let index = input.indexOf(',')\n let start = 0\n /** @type {boolean} */\n let end = false\n\n while (!end) {\n if (index === -1) {\n index = input.length\n end = true\n }\n\n const token = input.slice(start, index).trim()\n\n if (token || !end) {\n tokens.push(token)\n }\n\n start = index + 1\n index = input.indexOf(',', start)\n }\n\n return tokens\n}\n\n/**\n * Serialize an array of strings or numbers to comma-separated tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @param {Options} [options]\n * Configuration for `stringify` (optional).\n * @returns {string}\n * Comma-separated tokens.\n */\nexport function stringify(values, options) {\n const settings = options || {}\n\n // Ensure the last empty entry is seen.\n const input = values[values.length - 1] === '' ? [...values, ''] : values\n\n return input\n .join(\n (settings.padRight ? ' ' : '') +\n ',' +\n (settings.padLeft === false ? '' : ' ')\n )\n .trim()\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Properties} Properties\n */\n\n/**\n * @template {string} SimpleSelector\n * Selector type.\n * @template {string} DefaultTagName\n * Default tag name.\n * @typedef {(\n * SimpleSelector extends ''\n * ? DefaultTagName\n * : SimpleSelector extends `${infer TagName}.${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends `${infer TagName}#${infer Rest}`\n * ? ExtractTagName<TagName, DefaultTagName>\n * : SimpleSelector extends string\n * ? SimpleSelector\n * : DefaultTagName\n * )} ExtractTagName\n * Extract tag name from a simple selector.\n */\n\nconst search = /[#.]/g\n\n/**\n * Create a hast element from a simple CSS selector.\n *\n * @template {string} Selector\n * Type of selector.\n * @template {string} [DefaultTagName='div']\n * Type of default tag name (default: `'div'`).\n * @param {Selector | null | undefined} [selector]\n * Simple CSS selector (optional).\n *\n * Can contain a tag name (`foo`), classes (`.bar`), and an ID (`#baz`).\n * Multiple classes are allowed.\n * Uses the last ID if multiple IDs are found.\n * @param {DefaultTagName | null | undefined} [defaultTagName='div']\n * Tag name to use if `selector` does not specify one (default: `'div'`).\n * @returns {Element & {tagName: ExtractTagName<Selector, DefaultTagName>}}\n * Built element.\n */\nexport function parseSelector(selector, defaultTagName) {\n const value = selector || ''\n /** @type {Properties} */\n const props = {}\n let start = 0\n /** @type {string | undefined} */\n let previous\n /** @type {string | undefined} */\n let tagName\n\n while (start < value.length) {\n search.lastIndex = start\n const match = search.exec(value)\n const subvalue = value.slice(start, match ? match.index : value.length)\n\n if (subvalue) {\n if (!previous) {\n tagName = subvalue\n } else if (previous === '#') {\n props.id = subvalue\n } else if (Array.isArray(props.className)) {\n props.className.push(subvalue)\n } else {\n props.className = [subvalue]\n }\n\n start += subvalue.length\n }\n\n if (match) {\n previous = match[0]\n start++\n }\n }\n\n return {\n type: 'element',\n // @ts-expect-error: tag name is parsed.\n tagName: tagName || defaultTagName || 'div',\n properties: props,\n children: []\n }\n}\n","/**\n * Parse space-separated tokens to an array of strings.\n *\n * @param {string} value\n * Space-separated tokens.\n * @returns {Array<string>}\n * List of tokens.\n */\nexport function parse(value) {\n const input = String(value || '').trim()\n return input ? input.split(/[ \\t\\n\\r\\f]+/g) : []\n}\n\n/**\n * Serialize an array of strings as space separated-tokens.\n *\n * @param {Array<string|number>} values\n * List of tokens.\n * @returns {string}\n * Space-separated tokens.\n */\nexport function stringify(values) {\n return values.join(' ').trim()\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n *\n * @typedef {import('property-information').Info} Info\n * @typedef {import('property-information').Schema} Schema\n */\n\n/**\n * @typedef {Element | Root} Result\n * Result from a `h` (or `s`) call.\n *\n * @typedef {number | string} StyleValue\n * Value for a CSS style field.\n * @typedef {Record<string, StyleValue>} Style\n * Supported value of a `style` prop.\n * @typedef {boolean | number | string | null | undefined} PrimitiveValue\n * Primitive property value.\n * @typedef {Array<number | string>} ArrayValue\n * List of property values for space- or comma separated values (such as `className`).\n * @typedef {ArrayValue | PrimitiveValue} PropertyValue\n * Primitive value or list value.\n * @typedef {{[property: string]: PropertyValue | Style}} Properties\n * Acceptable value for element properties.\n *\n * @typedef {number | string | null | undefined} PrimitiveChild\n * Primitive children, either ignored (nullish), or turned into text nodes.\n * @typedef {Array<ArrayChildNested | Nodes | PrimitiveChild>} ArrayChild\n * List of children.\n * @typedef {Array<Nodes | PrimitiveChild>} ArrayChildNested\n * List of children (deep).\n * @typedef {ArrayChild | Nodes | PrimitiveChild} Child\n * Acceptable child value.\n */\n\nimport {parse as commas} from 'comma-separated-tokens'\nimport {parseSelector} from 'hast-util-parse-selector'\nimport {find, normalize} from 'property-information'\nimport {parse as spaces} from 'space-separated-tokens'\n\nconst buttonTypes = new Set(['button', 'menu', 'reset', 'submit'])\n\nconst own = {}.hasOwnProperty\n\n/**\n * @param {Schema} schema\n * Schema to use.\n * @param {string} defaultTagName\n * Default tag name.\n * @param {Array<string> | undefined} [caseSensitive]\n * Case-sensitive tag names (default: `undefined`).\n * @returns\n * `h`.\n */\nexport function createH(schema, defaultTagName, caseSensitive) {\n const adjust = caseSensitive && createAdjustMap(caseSensitive)\n\n /**\n * Hyperscript compatible DSL for creating virtual hast trees.\n *\n * @overload\n * @param {null | undefined} [selector]\n * @param {...Child} children\n * @returns {Root}\n *\n * @overload\n * @param {string} selector\n * @param {Properties} properties\n * @param {...Child} children\n * @returns {Element}\n *\n * @overload\n * @param {string} selector\n * @param {...Child} children\n * @returns {Element}\n *\n * @param {string | null | undefined} [selector]\n * Selector.\n * @param {Child | Properties | null | undefined} [properties]\n * Properties (or first child) (default: `undefined`).\n * @param {...Child} children\n * Children.\n * @returns {Result}\n * Result.\n */\n function h(selector, properties, ...children) {\n let index = -1\n /** @type {Result} */\n let node\n\n if (selector === undefined || selector === null) {\n node = {type: 'root', children: []}\n // Properties are not supported for roots.\n const child = /** @type {Child} */ (properties)\n children.unshift(child)\n } else {\n node = parseSelector(selector, defaultTagName)\n // Normalize the name.\n node.tagName = node.tagName.toLowerCase()\n if (adjust && own.call(adjust, node.tagName)) {\n node.tagName = adjust[node.tagName]\n }\n\n // Handle props.\n if (isProperties(properties, node.tagName)) {\n /** @type {string} */\n let key\n\n for (key in properties) {\n if (own.call(properties, key)) {\n addProperty(schema, node.properties, key, properties[key])\n }\n }\n } else {\n children.unshift(properties)\n }\n }\n\n // Handle children.\n while (++index < children.length) {\n addChild(node.children, children[index])\n }\n\n if (node.type === 'element' && node.tagName === 'template') {\n node.content = {type: 'root', children: node.children}\n node.children = []\n }\n\n return node\n }\n\n return h\n}\n\n/**\n * Check if something is properties or a child.\n *\n * @param {Child | Properties} value\n * Value to check.\n * @param {string} name\n * Tag name.\n * @returns {value is Properties}\n * Whether `value` is a properties object.\n */\nfunction isProperties(value, name) {\n if (\n value === null ||\n value === undefined ||\n typeof value !== 'object' ||\n Array.isArray(value)\n ) {\n return false\n }\n\n if (name === 'input' || !value.type || typeof value.type !== 'string') {\n return true\n }\n\n if ('children' in value && Array.isArray(value.children)) {\n return false\n }\n\n if (name === 'button') {\n return buttonTypes.has(value.type.toLowerCase())\n }\n\n return !('value' in value)\n}\n\n/**\n * @param {Schema} schema\n * Schema.\n * @param {Properties} properties\n * Properties object.\n * @param {string} key\n * Property name.\n * @param {PropertyValue | Style} value\n * Property value.\n * @returns {undefined}\n * Nothing.\n */\nfunction addProperty(schema, properties, key, value) {\n const info = find(schema, key)\n let index = -1\n /** @type {PropertyValue} */\n let result\n\n // Ignore nullish and NaN values.\n if (value === undefined || value === null) return\n\n if (typeof value === 'number') {\n // Ignore NaN.\n if (Number.isNaN(value)) return\n\n result = value\n }\n // Booleans.\n else if (typeof value === 'boolean') {\n result = value\n }\n // Handle list values.\n else if (typeof value === 'string') {\n if (info.spaceSeparated) {\n result = spaces(value)\n } else if (info.commaSeparated) {\n result = commas(value)\n } else if (info.commaOrSpaceSeparated) {\n result = spaces(commas(value).join(' '))\n } else {\n result = parsePrimitive(info, info.property, value)\n }\n } else if (Array.isArray(value)) {\n result = value.concat()\n } else {\n result = info.property === 'style' ? style(value) : String(value)\n }\n\n if (Array.isArray(result)) {\n /** @type {Array<number | string>} */\n const finalResult = []\n\n while (++index < result.length) {\n // Assume no booleans in array.\n const value = /** @type {number | string} */ (\n parsePrimitive(info, info.property, result[index])\n )\n finalResult[index] = value\n }\n\n result = finalResult\n }\n\n // Class names (which can be added both on the `selector` and here).\n if (info.property === 'className' && Array.isArray(properties.className)) {\n // Assume no booleans in `className`.\n const value = /** @type {number | string} */ (result)\n result = properties.className.concat(value)\n }\n\n properties[info.property] = result\n}\n\n/**\n * @param {Array<RootContent>} nodes\n * Children.\n * @param {Child} value\n * Child.\n * @returns {undefined}\n * Nothing.\n */\nfunction addChild(nodes, value) {\n let index = -1\n\n if (value === undefined || value === null) {\n // Empty.\n } else if (typeof value === 'string' || typeof value === 'number') {\n nodes.push({type: 'text', value: String(value)})\n } else if (Array.isArray(value)) {\n while (++index < value.length) {\n addChild(nodes, value[index])\n }\n } else if (typeof value === 'object' && 'type' in value) {\n if (value.type === 'root') {\n addChild(nodes, value.children)\n } else {\n nodes.push(value)\n }\n } else {\n throw new Error('Expected node, nodes, or string, got `' + value + '`')\n }\n}\n\n/**\n * Parse a single primitives.\n *\n * @param {Info} info\n * Property information.\n * @param {string} name\n * Property name.\n * @param {PrimitiveValue} value\n * Property value.\n * @returns {PrimitiveValue}\n * Property value.\n */\nfunction parsePrimitive(info, name, value) {\n if (typeof value === 'string') {\n if (info.number && value && !Number.isNaN(Number(value))) {\n return Number(value)\n }\n\n if (\n (info.boolean || info.overloadedBoolean) &&\n (value === '' || normalize(value) === normalize(name))\n ) {\n return true\n }\n }\n\n return value\n}\n\n/**\n * Serialize a `style` object as a string.\n *\n * @param {Style} value\n * Style object.\n * @returns {string}\n * CSS string.\n */\nfunction style(value) {\n /** @type {Array<string>} */\n const result = []\n /** @type {string} */\n let key\n\n for (key in value) {\n if (own.call(value, key)) {\n result.push([key, value[key]].join(': '))\n }\n }\n\n return result.join('; ')\n}\n\n/**\n * Create a map to adjust casing.\n *\n * @param {Array<string>} values\n * List of properly cased keys.\n * @returns {Record<string, string>}\n * Map of lowercase keys to uppercase keys.\n */\nfunction createAdjustMap(values) {\n /** @type {Record<string, string>} */\n const result = {}\n let index = -1\n\n while (++index < values.length) {\n result[values[index].toLowerCase()] = values[index]\n }\n\n return result\n}\n","export const svgCaseSensitiveTagNames = [\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feDropShadow',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'solidColor',\n 'textArea',\n 'textPath'\n]\n","/**\n * @typedef {import('./create-h.js').Child} Child\n * Acceptable child value.\n * @typedef {import('./create-h.js').Properties} Properties\n * Acceptable value for element properties.\n * @typedef {import('./create-h.js').Result} Result\n * Result from a `h` (or `s`) call.\n */\n\n// Register the JSX namespace on `h`.\n/**\n * @typedef {import('./jsx-classic.js').Element} h.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} h.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} h.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} h.JSX.IntrinsicElements\n */\n\n// Register the JSX namespace on `s`.\n/**\n * @typedef {import('./jsx-classic.js').Element} s.JSX.Element\n * @typedef {import('./jsx-classic.js').ElementChildrenAttribute} s.JSX.ElementChildrenAttribute\n * @typedef {import('./jsx-classic.js').IntrinsicAttributes} s.JSX.IntrinsicAttributes\n * @typedef {import('./jsx-classic.js').IntrinsicElements} s.JSX.IntrinsicElements\n */\n\nimport {html, svg} from 'property-information'\nimport {createH} from './create-h.js'\nimport {svgCaseSensitiveTagNames} from './svg-case-sensitive-tag-names.js'\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const h = createH(html, 'div')\n\n// Note: this explicit type is needed, otherwise TS creates broken types.\n/** @type {ReturnType<createH>} */\nexport const s = createH(svg, 'g', svgCaseSensitiveTagNames)\n","/**\n * @typedef {import('vfile').VFile} VFile\n * @typedef {import('vfile').Value} Value\n * @typedef {import('unist').Point} UnistPoint\n */\n\n/**\n *\n * @typedef PointLike\n * unist point, allowed as input.\n * @property {number | null | undefined} [line]\n * Line.\n * @property {number | null | undefined} [column]\n * Column.\n * @property {number | null | undefined} [offset]\n * Offset.\n *\n * @callback ToPoint\n * Get the line/column based `Point` for `offset` in the bound indices.\n *\n * Returns `undefined` when given out of bounds input.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n * @param {number | null | undefined} [offset]\n * Something that should be an `offset.\n * @returns {UnistPoint | undefined}\n * Point, if `offset` is valid and in-bounds input.\n *\n * @callback ToOffset\n * Get the `offset` from a line/column based `Point` in the bound indices.\n * @param {PointLike | null | undefined} [point]\n * Something that should be a `point.\n * @returns {number | undefined}\n * Offset (`number`) or `undefined` for invalid or out of bounds input.\n *\n * @typedef Location\n * Accessors for index.\n * @property {ToPoint} toPoint\n * Get the line/column based `Point` for `offset` in the bound indices.\n * @property {ToOffset} toOffset\n * Get the `offset` from a line/column based `Point` in the bound indices.\n */\n\nconst search = /\\r?\\n|\\r/g\n\n/**\n * Create an index of the given document to translate between line/column and\n * offset based positional info.\n *\n * Also implemented in Rust in [`wooorm/markdown-rs`][markdown-rs].\n *\n * [markdown-rs]: https://github.com/wooorm/markdown-rs/blob/main/src/util/location.rs\n *\n * @param {VFile | Value} file\n * File to index.\n * @returns {Location}\n * Accessors for index.\n */\nexport function location(file) {\n const value = String(file)\n /**\n * List, where each index is a line number (0-based), and each value is the\n * byte index *after* where the line ends.\n *\n * @type {Array<number>}\n */\n const indices = []\n\n search.lastIndex = 0\n\n while (search.test(value)) {\n indices.push(search.lastIndex)\n }\n\n indices.push(value.length + 1)\n\n return {toPoint, toOffset}\n\n /** @type {ToPoint} */\n function toPoint(offset) {\n let index = -1\n\n if (\n typeof offset === 'number' &&\n offset > -1 &&\n offset < indices[indices.length - 1]\n ) {\n while (++index < indices.length) {\n if (indices[index] > offset) {\n return {\n line: index + 1,\n column: offset - (index > 0 ? indices[index - 1] : 0) + 1,\n offset\n }\n }\n }\n }\n }\n\n /** @type {ToOffset} */\n function toOffset(point) {\n const line = point && point.line\n const column = point && point.column\n\n if (\n typeof line === 'number' &&\n typeof column === 'number' &&\n !Number.isNaN(line) &&\n !Number.isNaN(column) &&\n line - 1 in indices\n ) {\n const offset = (indices[line - 2] || 0) + column - 1 || 0\n\n if (offset > -1 && offset < indices[indices.length - 1]) {\n return offset\n }\n }\n }\n}\n","/**\n * Map of web namespaces.\n *\n * @type {Record<string, string>}\n */\nexport const webNamespaces = {\n html: 'http://www.w3.org/1999/xhtml',\n mathml: 'http://www.w3.org/1998/Math/MathML',\n svg: 'http://www.w3.org/2000/svg',\n xlink: 'http://www.w3.org/1999/xlink',\n xml: 'http://www.w3.org/XML/1998/namespace',\n xmlns: 'http://www.w3.org/2000/xmlns/'\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementData} ElementData\n * @typedef {import('hast').Nodes} Nodes\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').RootContent} RootContent\n *\n * @typedef {import('parse5').DefaultTreeAdapterMap} DefaultTreeAdapterMap\n * @typedef {import('parse5').Token.ElementLocation} P5ElementLocation\n * @typedef {import('parse5').Token.Location} P5Location\n *\n * @typedef {import('property-information').Schema} Schema\n *\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n *\n * @typedef {import('vfile').VFile} VFile\n */\n\n/**\n * @typedef {DefaultTreeAdapterMap['document']} P5Document\n * @typedef {DefaultTreeAdapterMap['documentFragment']} P5DocumentFragment\n * @typedef {DefaultTreeAdapterMap['documentType']} P5DocumentType\n * @typedef {DefaultTreeAdapterMap['commentNode']} P5Comment\n * @typedef {DefaultTreeAdapterMap['textNode']} P5Text\n * @typedef {DefaultTreeAdapterMap['element']} P5Element\n * @typedef {DefaultTreeAdapterMap['node']} P5Node\n * @typedef {DefaultTreeAdapterMap['template']} P5Template\n */\n\n/**\n * @typedef Options\n * Configuration.\n * @property {Space | null | undefined} [space='html']\n * Which space the document is in (default: `'html'`).\n *\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it.\n * @property {VFile | null | undefined} [file]\n * File used to add positional info to nodes (optional).\n *\n * If given, the file should represent the original HTML source.\n * @property {boolean | null | undefined} [verbose=false]\n * Whether to add extra positional info about starting tags, closing tags,\n * and attributes to elements (default: `false`).\n *\n * > 👉 **Note**: only used when `file` is given.\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {VFile | undefined} file\n * Corresponding file.\n * @property {boolean} location\n * Whether location info was found.\n * @property {Schema} schema\n * Current schema.\n * @property {boolean | undefined} verbose\n * Add extra positional info.\n */\n\nimport {ok as assert} from 'devlop'\nimport {h, s} from 'hastscript'\nimport {find, html, svg} from 'property-information'\nimport {location} from 'vfile-location'\nimport {webNamespaces} from 'web-namespaces'\n\nconst own = {}.hasOwnProperty\n/** @type {unknown} */\n// type-coverage:ignore-next-line\nconst proto = Object.prototype\n\n/**\n * Transform a `parse5` AST to hast.\n *\n * @param {P5Node} tree\n * `parse5` tree to transform.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {Nodes}\n * hast tree.\n */\nexport function fromParse5(tree, options) {\n const settings = options || {}\n\n return one(\n {\n file: settings.file || undefined,\n location: false,\n schema: settings.space === 'svg' ? svg : html,\n verbose: settings.verbose || false\n },\n tree\n )\n}\n\n/**\n * Transform a node.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Node} node\n * p5 node.\n * @returns {Nodes}\n * hast node.\n */\nfunction one(state, node) {\n /** @type {Nodes} */\n let result\n\n switch (node.nodeName) {\n case '#comment': {\n const reference = /** @type {P5Comment} */ (node)\n result = {type: 'comment', value: reference.data}\n patch(state, reference, result)\n return result\n }\n\n case '#document':\n case '#document-fragment': {\n const reference = /** @type {P5Document | P5DocumentFragment} */ (node)\n const quirksMode =\n 'mode' in reference\n ? reference.mode === 'quirks' || reference.mode === 'limited-quirks'\n : false\n\n result = {\n type: 'root',\n children: all(state, node.childNodes),\n data: {quirksMode}\n }\n\n if (state.file && state.location) {\n const doc = String(state.file)\n const loc = location(doc)\n const start = loc.toPoint(0)\n const end = loc.toPoint(doc.length)\n // Always defined as we give valid input.\n assert(start, 'expected `start`')\n assert(end, 'expected `end`')\n result.position = {start, end}\n }\n\n return result\n }\n\n case '#documentType': {\n const reference = /** @type {P5DocumentType} */ (node)\n result = {type: 'doctype'}\n patch(state, reference, result)\n return result\n }\n\n case '#text': {\n const reference = /** @type {P5Text} */ (node)\n result = {type: 'text', value: reference.value}\n patch(state, reference, result)\n return result\n }\n\n // Element.\n default: {\n const reference = /** @type {P5Element} */ (node)\n result = element(state, reference)\n return result\n }\n }\n}\n\n/**\n * Transform children.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Array<P5Node>} nodes\n * Nodes.\n * @returns {Array<RootContent>}\n * hast nodes.\n */\nfunction all(state, nodes) {\n let index = -1\n /** @type {Array<RootContent>} */\n const results = []\n\n while (++index < nodes.length) {\n // Assume no roots in `nodes`.\n const result = /** @type {RootContent} */ (one(state, nodes[index]))\n results.push(result)\n }\n\n return results\n}\n\n/**\n * Transform an element.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Element} node\n * `parse5` node to transform.\n * @returns {Element}\n * hast node.\n */\nfunction element(state, node) {\n const schema = state.schema\n\n state.schema = node.namespaceURI === webNamespaces.svg ? svg : html\n\n // Props.\n let index = -1\n /** @type {Record<string, string>} */\n const props = {}\n\n while (++index < node.attrs.length) {\n const attribute = node.attrs[index]\n const name =\n (attribute.prefix ? attribute.prefix + ':' : '') + attribute.name\n if (!own.call(proto, name)) {\n props[name] = attribute.value\n }\n }\n\n // Build.\n const fn = state.schema.space === 'svg' ? s : h\n const result = fn(node.tagName, props, all(state, node.childNodes))\n patch(state, node, result)\n\n // Switch content.\n if (result.tagName === 'template') {\n const reference = /** @type {P5Template} */ (node)\n const pos = reference.sourceCodeLocation\n const startTag = pos && pos.startTag && position(pos.startTag)\n const endTag = pos && pos.endTag && position(pos.endTag)\n\n // Root in, root out.\n const content = /** @type {Root} */ (one(state, reference.content))\n\n if (startTag && endTag && state.file) {\n content.position = {start: startTag.end, end: endTag.start}\n }\n\n result.content = content\n }\n\n state.schema = schema\n\n return result\n}\n\n/**\n * Patch positional info from `from` onto `to`.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {P5Node} from\n * p5 node.\n * @param {Nodes} to\n * hast node.\n * @returns {undefined}\n * Nothing.\n */\nfunction patch(state, from, to) {\n if ('sourceCodeLocation' in from && from.sourceCodeLocation && state.file) {\n const position = createLocation(state, to, from.sourceCodeLocation)\n\n if (position) {\n state.location = true\n to.position = position\n }\n }\n}\n\n/**\n * Create clean positional information.\n *\n * @param {State} state\n * Info passed around about the current state.\n * @param {Nodes} node\n * hast node.\n * @param {P5ElementLocation} location\n * p5 location info.\n * @returns {Position | undefined}\n * Position, or nothing.\n */\nfunction createLocation(state, node, location) {\n const result = position(location)\n\n if (node.type === 'element') {\n const tail = node.children[node.children.length - 1]\n\n // Bug for unclosed with children.\n // See: <https://github.com/inikulin/parse5/issues/109>.\n if (\n result &&\n !location.endTag &&\n tail &&\n tail.position &&\n tail.position.end\n ) {\n result.end = Object.assign({}, tail.position.end)\n }\n\n if (state.verbose) {\n /** @type {Record<string, Position | undefined>} */\n const props = {}\n /** @type {string} */\n let key\n\n if (location.attrs) {\n for (key in location.attrs) {\n if (own.call(location.attrs, key)) {\n props[find(state.schema, key).property] = position(\n location.attrs[key]\n )\n }\n }\n }\n\n assert(location.startTag, 'a start tag should exist')\n const opening = position(location.startTag)\n const closing = location.endTag ? position(location.endTag) : undefined\n /** @type {ElementData['position']} */\n const data = {opening}\n if (closing) data.closing = closing\n data.properties = props\n\n node.data = {position: data}\n }\n }\n\n return result\n}\n\n/**\n * Turn a p5 location into a position.\n *\n * @param {P5Location} loc\n * Location.\n * @returns {Position | undefined}\n * Position or nothing.\n */\nfunction position(loc) {\n const start = point({\n line: loc.startLine,\n column: loc.startCol,\n offset: loc.startOffset\n })\n const end = point({\n line: loc.endLine,\n column: loc.endCol,\n offset: loc.endOffset\n })\n\n // @ts-expect-error: we do use `undefined` for points if one or the other\n // exists.\n return start || end ? {start, end} : undefined\n}\n\n/**\n * Filter out invalid points.\n *\n * @param {Point} point\n * Point with potentially `undefined` values.\n * @returns {Point | undefined}\n * Point or nothing.\n */\nfunction point(point) {\n return point.line && point.column ? point : undefined\n}\n","const UNDEFINED_CODE_POINTS = new Set([\n 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214,\n 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894,\n 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574,\n 1048575, 1114110, 1114111,\n]);\nexport const REPLACEMENT_CHARACTER = '\\uFFFD';\nexport var CODE_POINTS;\n(function (CODE_POINTS) {\n CODE_POINTS[CODE_POINTS[\"EOF\"] = -1] = \"EOF\";\n CODE_POINTS[CODE_POINTS[\"NULL\"] = 0] = \"NULL\";\n CODE_POINTS[CODE_POINTS[\"TABULATION\"] = 9] = \"TABULATION\";\n CODE_POINTS[CODE_POINTS[\"CARRIAGE_RETURN\"] = 13] = \"CARRIAGE_RETURN\";\n CODE_POINTS[CODE_POINTS[\"LINE_FEED\"] = 10] = \"LINE_FEED\";\n CODE_POINTS[CODE_POINTS[\"FORM_FEED\"] = 12] = \"FORM_FEED\";\n CODE_POINTS[CODE_POINTS[\"SPACE\"] = 32] = \"SPACE\";\n CODE_POINTS[CODE_POINTS[\"EXCLAMATION_MARK\"] = 33] = \"EXCLAMATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"QUOTATION_MARK\"] = 34] = \"QUOTATION_MARK\";\n CODE_POINTS[CODE_POINTS[\"AMPERSAND\"] = 38] = \"AMPERSAND\";\n CODE_POINTS[CODE_POINTS[\"APOSTROPHE\"] = 39] = \"APOSTROPHE\";\n CODE_POINTS[CODE_POINTS[\"HYPHEN_MINUS\"] = 45] = \"HYPHEN_MINUS\";\n CODE_POINTS[CODE_POINTS[\"SOLIDUS\"] = 47] = \"SOLIDUS\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_0\"] = 48] = \"DIGIT_0\";\n CODE_POINTS[CODE_POINTS[\"DIGIT_9\"] = 57] = \"DIGIT_9\";\n CODE_POINTS[CODE_POINTS[\"SEMICOLON\"] = 59] = \"SEMICOLON\";\n CODE_POINTS[CODE_POINTS[\"LESS_THAN_SIGN\"] = 60] = \"LESS_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"EQUALS_SIGN\"] = 61] = \"EQUALS_SIGN\";\n CODE_POINTS[CODE_POINTS[\"GREATER_THAN_SIGN\"] = 62] = \"GREATER_THAN_SIGN\";\n CODE_POINTS[CODE_POINTS[\"QUESTION_MARK\"] = 63] = \"QUESTION_MARK\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_A\"] = 65] = \"LATIN_CAPITAL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_CAPITAL_Z\"] = 90] = \"LATIN_CAPITAL_Z\";\n CODE_POINTS[CODE_POINTS[\"RIGHT_SQUARE_BRACKET\"] = 93] = \"RIGHT_SQUARE_BRACKET\";\n CODE_POINTS[CODE_POINTS[\"GRAVE_ACCENT\"] = 96] = \"GRAVE_ACCENT\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_A\"] = 97] = \"LATIN_SMALL_A\";\n CODE_POINTS[CODE_POINTS[\"LATIN_SMALL_Z\"] = 122] = \"LATIN_SMALL_Z\";\n})(CODE_POINTS || (CODE_POINTS = {}));\nexport const SEQUENCES = {\n DASH_DASH: '--',\n CDATA_START: '[CDATA[',\n DOCTYPE: 'doctype',\n SCRIPT: 'script',\n PUBLIC: 'public',\n SYSTEM: 'system',\n};\n//Surrogates\nexport function isSurrogate(cp) {\n return cp >= 55296 && cp <= 57343;\n}\nexport function isSurrogatePair(cp) {\n return cp >= 56320 && cp <= 57343;\n}\nexport function getSurrogatePairCodePoint(cp1, cp2) {\n return (cp1 - 55296) * 1024 + 9216 + cp2;\n}\n//NOTE: excluding NULL and ASCII whitespace\nexport function isControlCodePoint(cp) {\n return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) ||\n (cp >= 0x7f && cp <= 0x9f));\n}\nexport function isUndefinedCodePoint(cp) {\n return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp);\n}\n","export var ERR;\n(function (ERR) {\n ERR[\"controlCharacterInInputStream\"] = \"control-character-in-input-stream\";\n ERR[\"noncharacterInInputStream\"] = \"noncharacter-in-input-stream\";\n ERR[\"surrogateInInputStream\"] = \"surrogate-in-input-stream\";\n ERR[\"nonVoidHtmlElementStartTagWithTrailingSolidus\"] = \"non-void-html-element-start-tag-with-trailing-solidus\";\n ERR[\"endTagWithAttributes\"] = \"end-tag-with-attributes\";\n ERR[\"endTagWithTrailingSolidus\"] = \"end-tag-with-trailing-solidus\";\n ERR[\"unexpectedSolidusInTag\"] = \"unexpected-solidus-in-tag\";\n ERR[\"unexpectedNullCharacter\"] = \"unexpected-null-character\";\n ERR[\"unexpectedQuestionMarkInsteadOfTagName\"] = \"unexpected-question-mark-instead-of-tag-name\";\n ERR[\"invalidFirstCharacterOfTagName\"] = \"invalid-first-character-of-tag-name\";\n ERR[\"unexpectedEqualsSignBeforeAttributeName\"] = \"unexpected-equals-sign-before-attribute-name\";\n ERR[\"missingEndTagName\"] = \"missing-end-tag-name\";\n ERR[\"unexpectedCharacterInAttributeName\"] = \"unexpected-character-in-attribute-name\";\n ERR[\"unknownNamedCharacterReference\"] = \"unknown-named-character-reference\";\n ERR[\"missingSemicolonAfterCharacterReference\"] = \"missing-semicolon-after-character-reference\";\n ERR[\"unexpectedCharacterAfterDoctypeSystemIdentifier\"] = \"unexpected-character-after-doctype-system-identifier\";\n ERR[\"unexpectedCharacterInUnquotedAttributeValue\"] = \"unexpected-character-in-unquoted-attribute-value\";\n ERR[\"eofBeforeTagName\"] = \"eof-before-tag-name\";\n ERR[\"eofInTag\"] = \"eof-in-tag\";\n ERR[\"missingAttributeValue\"] = \"missing-attribute-value\";\n ERR[\"missingWhitespaceBetweenAttributes\"] = \"missing-whitespace-between-attributes\";\n ERR[\"missingWhitespaceAfterDoctypePublicKeyword\"] = \"missing-whitespace-after-doctype-public-keyword\";\n ERR[\"missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers\"] = \"missing-whitespace-between-doctype-public-and-system-identifiers\";\n ERR[\"missingWhitespaceAfterDoctypeSystemKeyword\"] = \"missing-whitespace-after-doctype-system-keyword\";\n ERR[\"missingQuoteBeforeDoctypePublicIdentifier\"] = \"missing-quote-before-doctype-public-identifier\";\n ERR[\"missingQuoteBeforeDoctypeSystemIdentifier\"] = \"missing-quote-before-doctype-system-identifier\";\n ERR[\"missingDoctypePublicIdentifier\"] = \"missing-doctype-public-identifier\";\n ERR[\"missingDoctypeSystemIdentifier\"] = \"missing-doctype-system-identifier\";\n ERR[\"abruptDoctypePublicIdentifier\"] = \"abrupt-doctype-public-identifier\";\n ERR[\"abruptDoctypeSystemIdentifier\"] = \"abrupt-doctype-system-identifier\";\n ERR[\"cdataInHtmlContent\"] = \"cdata-in-html-content\";\n ERR[\"incorrectlyOpenedComment\"] = \"incorrectly-opened-comment\";\n ERR[\"eofInScriptHtmlCommentLikeText\"] = \"eof-in-script-html-comment-like-text\";\n ERR[\"eofInDoctype\"] = \"eof-in-doctype\";\n ERR[\"nestedComment\"] = \"nested-comment\";\n ERR[\"abruptClosingOfEmptyComment\"] = \"abrupt-closing-of-empty-comment\";\n ERR[\"eofInComment\"] = \"eof-in-comment\";\n ERR[\"incorrectlyClosedComment\"] = \"incorrectly-closed-comment\";\n ERR[\"eofInCdata\"] = \"eof-in-cdata\";\n ERR[\"absenceOfDigitsInNumericCharacterReference\"] = \"absence-of-digits-in-numeric-character-reference\";\n ERR[\"nullCharacterReference\"] = \"null-character-reference\";\n ERR[\"surrogateCharacterReference\"] = \"surrogate-character-reference\";\n ERR[\"characterReferenceOutsideUnicodeRange\"] = \"character-reference-outside-unicode-range\";\n ERR[\"controlCharacterReference\"] = \"control-character-reference\";\n ERR[\"noncharacterCharacterReference\"] = \"noncharacter-character-reference\";\n ERR[\"missingWhitespaceBeforeDoctypeName\"] = \"missing-whitespace-before-doctype-name\";\n ERR[\"missingDoctypeName\"] = \"missing-doctype-name\";\n ERR[\"invalidCharacterSequenceAfterDoctypeName\"] = \"invalid-character-sequence-after-doctype-name\";\n ERR[\"duplicateAttribute\"] = \"duplicate-attribute\";\n ERR[\"nonConformingDoctype\"] = \"non-conforming-doctype\";\n ERR[\"missingDoctype\"] = \"missing-doctype\";\n ERR[\"misplacedDoctype\"] = \"misplaced-doctype\";\n ERR[\"endTagWithoutMatchingOpenElement\"] = \"end-tag-without-matching-open-element\";\n ERR[\"closingOfElementWithOpenChildElements\"] = \"closing-of-element-with-open-child-elements\";\n ERR[\"disallowedContentInNoscriptInHead\"] = \"disallowed-content-in-noscript-in-head\";\n ERR[\"openElementsLeftAfterEof\"] = \"open-elements-left-after-eof\";\n ERR[\"abandonedHeadElementChild\"] = \"abandoned-head-element-child\";\n ERR[\"misplacedStartTagForHeadElement\"] = \"misplaced-start-tag-for-head-element\";\n ERR[\"nestedNoscriptInHead\"] = \"nested-noscript-in-head\";\n ERR[\"eofInElementThatCanContainOnlyText\"] = \"eof-in-element-that-can-contain-only-text\";\n})(ERR || (ERR = {}));\n","import { CODE_POINTS as $, getSurrogatePairCodePoint, isControlCodePoint, isSurrogate, isSurrogatePair, isUndefinedCodePoint, } from '../common/unicode.js';\nimport { ERR } from '../common/error-codes.js';\n//Const\nconst DEFAULT_BUFFER_WATERLINE = 1 << 16;\n//Preprocessor\n//NOTE: HTML input preprocessing\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#preprocessing-the-input-stream)\nexport class Preprocessor {\n constructor(handler) {\n this.handler = handler;\n this.html = '';\n this.pos = -1;\n // NOTE: Initial `lastGapPos` is -2, to ensure `col` on initialisation is 0\n this.lastGapPos = -2;\n this.gapStack = [];\n this.skipNextNewLine = false;\n this.lastChunkWritten = false;\n this.endOfChunkHit = false;\n this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;\n this.isEol = false;\n this.lineStartPos = 0;\n this.droppedBufferSize = 0;\n this.line = 1;\n //NOTE: avoid reporting errors twice on advance/retreat\n this.lastErrOffset = -1;\n }\n /** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */\n get col() {\n return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);\n }\n get offset() {\n return this.droppedBufferSize + this.pos;\n }\n getError(code, cpOffset) {\n const { line, col, offset } = this;\n const startCol = col + cpOffset;\n const startOffset = offset + cpOffset;\n return {\n code,\n startLine: line,\n endLine: line,\n startCol,\n endCol: startCol,\n startOffset,\n endOffset: startOffset,\n };\n }\n _err(code) {\n if (this.handler.onParseError && this.lastErrOffset !== this.offset) {\n this.lastErrOffset = this.offset;\n this.handler.onParseError(this.getError(code, 0));\n }\n }\n _addGap() {\n this.gapStack.push(this.lastGapPos);\n this.lastGapPos = this.pos;\n }\n _processSurrogate(cp) {\n //NOTE: try to peek a surrogate pair\n if (this.pos !== this.html.length - 1) {\n const nextCp = this.html.charCodeAt(this.pos + 1);\n if (isSurrogatePair(nextCp)) {\n //NOTE: we have a surrogate pair. Peek pair character and recalculate code point.\n this.pos++;\n //NOTE: add a gap that should be avoided during retreat\n this._addGap();\n return getSurrogatePairCodePoint(cp, nextCp);\n }\n }\n //NOTE: we are at the end of a chunk, therefore we can't infer the surrogate pair yet.\n else if (!this.lastChunkWritten) {\n this.endOfChunkHit = true;\n return $.EOF;\n }\n //NOTE: isolated surrogate\n this._err(ERR.surrogateInInputStream);\n return cp;\n }\n willDropParsedChunk() {\n return this.pos > this.bufferWaterline;\n }\n dropParsedChunk() {\n if (this.willDropParsedChunk()) {\n this.html = this.html.substring(this.pos);\n this.lineStartPos -= this.pos;\n this.droppedBufferSize += this.pos;\n this.pos = 0;\n this.lastGapPos = -2;\n this.gapStack.length = 0;\n }\n }\n write(chunk, isLastChunk) {\n if (this.html.length > 0) {\n this.html += chunk;\n }\n else {\n this.html = chunk;\n }\n this.endOfChunkHit = false;\n this.lastChunkWritten = isLastChunk;\n }\n insertHtmlAtCurrentPos(chunk) {\n this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);\n this.endOfChunkHit = false;\n }\n startsWith(pattern, caseSensitive) {\n // Check if our buffer has enough characters\n if (this.pos + pattern.length > this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return false;\n }\n if (caseSensitive) {\n return this.html.startsWith(pattern, this.pos);\n }\n for (let i = 0; i < pattern.length; i++) {\n const cp = this.html.charCodeAt(this.pos + i) | 0x20;\n if (cp !== pattern.charCodeAt(i)) {\n return false;\n }\n }\n return true;\n }\n peek(offset) {\n const pos = this.pos + offset;\n if (pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n const code = this.html.charCodeAt(pos);\n return code === $.CARRIAGE_RETURN ? $.LINE_FEED : code;\n }\n advance() {\n this.pos++;\n //NOTE: LF should be in the last column of the line\n if (this.isEol) {\n this.isEol = false;\n this.line++;\n this.lineStartPos = this.pos;\n }\n if (this.pos >= this.html.length) {\n this.endOfChunkHit = !this.lastChunkWritten;\n return $.EOF;\n }\n let cp = this.html.charCodeAt(this.pos);\n //NOTE: all U+000D CARRIAGE RETURN (CR) characters must be converted to U+000A LINE FEED (LF) characters\n if (cp === $.CARRIAGE_RETURN) {\n this.isEol = true;\n this.skipNextNewLine = true;\n return $.LINE_FEED;\n }\n //NOTE: any U+000A LINE FEED (LF) characters that immediately follow a U+000D CARRIAGE RETURN (CR) character\n //must be ignored.\n if (cp === $.LINE_FEED) {\n this.isEol = true;\n if (this.skipNextNewLine) {\n // `line` will be bumped again in the recursive call.\n this.line--;\n this.skipNextNewLine = false;\n this._addGap();\n return this.advance();\n }\n }\n this.skipNextNewLine = false;\n if (isSurrogate(cp)) {\n cp = this._processSurrogate(cp);\n }\n //OPTIMIZATION: first check if code point is in the common allowed\n //range (ASCII alphanumeric, whitespaces, big chunk of BMP)\n //before going into detailed performance cost validation.\n const isCommonValidRange = this.handler.onParseError === null ||\n (cp > 0x1f && cp < 0x7f) ||\n cp === $.LINE_FEED ||\n cp === $.CARRIAGE_RETURN ||\n (cp > 0x9f && cp < 64976);\n if (!isCommonValidRange) {\n this._checkForProblematicCharacters(cp);\n }\n return cp;\n }\n _checkForProblematicCharacters(cp) {\n if (isControlCodePoint(cp)) {\n this._err(ERR.controlCharacterInInputStream);\n }\n else if (isUndefinedCodePoint(cp)) {\n this._err(ERR.noncharacterInInputStream);\n }\n }\n retreat(count) {\n this.pos -= count;\n while (this.pos < this.lastGapPos) {\n this.lastGapPos = this.gapStack.pop();\n this.pos--;\n }\n this.isEol = false;\n }\n}\n","export var TokenType;\n(function (TokenType) {\n TokenType[TokenType[\"CHARACTER\"] = 0] = \"CHARACTER\";\n TokenType[TokenType[\"NULL_CHARACTER\"] = 1] = \"NULL_CHARACTER\";\n TokenType[TokenType[\"WHITESPACE_CHARACTER\"] = 2] = \"WHITESPACE_CHARACTER\";\n TokenType[TokenType[\"START_TAG\"] = 3] = \"START_TAG\";\n TokenType[TokenType[\"END_TAG\"] = 4] = \"END_TAG\";\n TokenType[TokenType[\"COMMENT\"] = 5] = \"COMMENT\";\n TokenType[TokenType[\"DOCTYPE\"] = 6] = \"DOCTYPE\";\n TokenType[TokenType[\"EOF\"] = 7] = \"EOF\";\n TokenType[TokenType[\"HIBERNATION\"] = 8] = \"HIBERNATION\";\n})(TokenType || (TokenType = {}));\nexport function getTokenAttr(token, attrName) {\n for (let i = token.attrs.length - 1; i >= 0; i--) {\n if (token.attrs[i].name === attrName) {\n return token.attrs[i].value;\n }\n }\n return null;\n}\n","// Generated using scripts/write-decode-map.ts\nexport const htmlDecodeTree = /* #__PURE__ */ new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */ \"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\"\n .split(\"\")\n .map((c) => c.charCodeAt(0)));\n//# sourceMappingURL=decode-data-html.js.map","// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = new Map([\n [0, 65533],\n // C1 Unicode control character reference replacements\n [128, 8364],\n [130, 8218],\n [131, 402],\n [132, 8222],\n [133, 8230],\n [134, 8224],\n [135, 8225],\n [136, 710],\n [137, 8240],\n [138, 352],\n [139, 8249],\n [140, 338],\n [142, 381],\n [145, 8216],\n [146, 8217],\n [147, 8220],\n [148, 8221],\n [149, 8226],\n [150, 8211],\n [151, 8212],\n [152, 732],\n [153, 8482],\n [154, 353],\n [155, 8250],\n [156, 339],\n [158, 382],\n [159, 376],\n]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nexport const fromCodePoint = \n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n let output = \"\";\n if (codePoint > 65535) {\n codePoint -= 65536;\n output += String.fromCharCode(((codePoint >>> 10) & 1023) | 55296);\n codePoint = 56320 | (codePoint & 1023);\n }\n output += String.fromCharCode(codePoint);\n return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nexport function replaceCodePoint(codePoint) {\n var _a;\n if ((codePoint >= 55296 && codePoint <= 57343) ||\n codePoint > 1114111) {\n return 65533;\n }\n return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\n/**\n * Replace the code point if relevant, then convert it to a string.\n *\n * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead.\n * @param codePoint The code point to decode.\n * @returns The decoded code point.\n */\nexport function decodeCodePoint(codePoint) {\n return fromCodePoint(replaceCodePoint(codePoint));\n}\n//# sourceMappingURL=decode-codepoint.js.map","import { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nimport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nimport { replaceCodePoint, fromCodePoint } from \"./decode-codepoint.js\";\nvar CharCodes;\n(function (CharCodes) {\n CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n})(CharCodes || (CharCodes = {}));\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nexport var BinTrieFlags;\n(function (BinTrieFlags) {\n BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n})(BinTrieFlags || (BinTrieFlags = {}));\nfunction isNumber(code) {\n return code >= CharCodes.ZERO && code <= CharCodes.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F));\n}\nfunction isAsciiAlphaNumeric(code) {\n return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) ||\n (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) ||\n isNumber(code));\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState;\n(function (EntityDecoderState) {\n EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n})(EntityDecoderState || (EntityDecoderState = {}));\nexport var DecodingMode;\n(function (DecodingMode) {\n /** Entities in text nodes that can end with any character. */\n DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n /** Only allow entities terminated with a semicolon. */\n DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n /** Entities in attributes have limitations on ending characters. */\n DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n})(DecodingMode || (DecodingMode = {}));\n/**\n * Token decoder with support of writing partial entities.\n */\nexport class EntityDecoder {\n constructor(\n /** The tree used to decode entities. */\n decodeTree, \n /**\n * The function that is called when a codepoint is decoded.\n *\n * For multi-byte named entities, this will be called multiple times,\n * with the second codepoint, and the same `consumed` value.\n *\n * @param codepoint The decoded codepoint.\n * @param consumed The number of bytes consumed by the decoder.\n */\n emitCodePoint, \n /** An object that is used to produce errors. */\n errors) {\n this.decodeTree = decodeTree;\n this.emitCodePoint = emitCodePoint;\n this.errors = errors;\n /** The current state of the decoder. */\n this.state = EntityDecoderState.EntityStart;\n /** Characters that were consumed while parsing an entity. */\n this.consumed = 1;\n /**\n * The result of the entity.\n *\n * Either the result index of a numeric entity, or the codepoint of a\n * numeric entity.\n */\n this.result = 0;\n /** The current index in the decode tree. */\n this.treeIndex = 0;\n /** The number of characters that were consumed in excess. */\n this.excess = 1;\n /** The mode in which the decoder is operating. */\n this.decodeMode = DecodingMode.Strict;\n }\n /** Resets the instance to make it reusable. */\n startEntity(decodeMode) {\n this.decodeMode = decodeMode;\n this.state = EntityDecoderState.EntityStart;\n this.result = 0;\n this.treeIndex = 0;\n this.excess = 1;\n this.consumed = 1;\n }\n /**\n * Write an entity to the decoder. This can be called multiple times with partial entities.\n * If the entity is incomplete, the decoder will return -1.\n *\n * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n * entity is incomplete, and resume when the next string is written.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n write(input, offset) {\n switch (this.state) {\n case EntityDecoderState.EntityStart: {\n if (input.charCodeAt(offset) === CharCodes.NUM) {\n this.state = EntityDecoderState.NumericStart;\n this.consumed += 1;\n return this.stateNumericStart(input, offset + 1);\n }\n this.state = EntityDecoderState.NamedEntity;\n return this.stateNamedEntity(input, offset);\n }\n case EntityDecoderState.NumericStart: {\n return this.stateNumericStart(input, offset);\n }\n case EntityDecoderState.NumericDecimal: {\n return this.stateNumericDecimal(input, offset);\n }\n case EntityDecoderState.NumericHex: {\n return this.stateNumericHex(input, offset);\n }\n case EntityDecoderState.NamedEntity: {\n return this.stateNamedEntity(input, offset);\n }\n }\n }\n /**\n * Switches between the numeric decimal and hexadecimal states.\n *\n * Equivalent to the `Numeric character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericStart(input, offset) {\n if (offset >= input.length) {\n return -1;\n }\n if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {\n this.state = EntityDecoderState.NumericHex;\n this.consumed += 1;\n return this.stateNumericHex(input, offset + 1);\n }\n this.state = EntityDecoderState.NumericDecimal;\n return this.stateNumericDecimal(input, offset);\n }\n addToNumericResult(input, start, end, base) {\n if (start !== end) {\n const digitCount = end - start;\n this.result =\n this.result * Math.pow(base, digitCount) +\n Number.parseInt(input.substr(start, digitCount), base);\n this.consumed += digitCount;\n }\n }\n /**\n * Parses a hexadecimal numeric entity.\n *\n * Equivalent to the `Hexademical character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericHex(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char) || isHexadecimalCharacter(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 16);\n return this.emitNumericEntity(char, 3);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 16);\n return -1;\n }\n /**\n * Parses a decimal numeric entity.\n *\n * Equivalent to the `Decimal character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNumericDecimal(input, offset) {\n const startIndex = offset;\n while (offset < input.length) {\n const char = input.charCodeAt(offset);\n if (isNumber(char)) {\n offset += 1;\n }\n else {\n this.addToNumericResult(input, startIndex, offset, 10);\n return this.emitNumericEntity(char, 2);\n }\n }\n this.addToNumericResult(input, startIndex, offset, 10);\n return -1;\n }\n /**\n * Validate and emit a numeric entity.\n *\n * Implements the logic from the `Hexademical character reference start\n * state` and `Numeric character reference end state` in the HTML spec.\n *\n * @param lastCp The last code point of the entity. Used to see if the\n * entity was terminated with a semicolon.\n * @param expectedLength The minimum number of characters that should be\n * consumed. Used to validate that at least one digit\n * was consumed.\n * @returns The number of characters that were consumed.\n */\n emitNumericEntity(lastCp, expectedLength) {\n var _a;\n // Ensure we consumed at least one digit.\n if (this.consumed <= expectedLength) {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n // Figure out if this is a legit end of the entity\n if (lastCp === CharCodes.SEMI) {\n this.consumed += 1;\n }\n else if (this.decodeMode === DecodingMode.Strict) {\n return 0;\n }\n this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n if (this.errors) {\n if (lastCp !== CharCodes.SEMI) {\n this.errors.missingSemicolonAfterCharacterReference();\n }\n this.errors.validateNumericCharacterReference(this.result);\n }\n return this.consumed;\n }\n /**\n * Parses a named entity.\n *\n * Equivalent to the `Named character reference state` in the HTML spec.\n *\n * @param input The string containing the entity (or a continuation of the entity).\n * @param offset The current offset.\n * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n */\n stateNamedEntity(input, offset) {\n const { decodeTree } = this;\n let current = decodeTree[this.treeIndex];\n // The mask is the number of bytes of the value, including the current byte.\n let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n for (; offset < input.length; offset++, this.excess++) {\n const char = input.charCodeAt(offset);\n this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n if (this.treeIndex < 0) {\n return this.result === 0 ||\n // If we are parsing an attribute\n (this.decodeMode === DecodingMode.Attribute &&\n // We shouldn't have consumed any characters after the entity,\n (valueLength === 0 ||\n // And there should be no invalid characters.\n isEntityInAttributeInvalidEnd(char)))\n ? 0\n : this.emitNotTerminatedNamedEntity();\n }\n current = decodeTree[this.treeIndex];\n valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n // If the branch is a value, store it and continue\n if (valueLength !== 0) {\n // If the entity is terminated by a semicolon, we are done.\n if (char === CharCodes.SEMI) {\n return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n }\n // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n if (this.decodeMode !== DecodingMode.Strict) {\n this.result = this.treeIndex;\n this.consumed += this.excess;\n this.excess = 0;\n }\n }\n }\n return -1;\n }\n /**\n * Emit a named entity that was not terminated with a semicolon.\n *\n * @returns The number of characters consumed.\n */\n emitNotTerminatedNamedEntity() {\n var _a;\n const { result, decodeTree } = this;\n const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n this.emitNamedEntityData(result, valueLength, this.consumed);\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n return this.consumed;\n }\n /**\n * Emit a named entity.\n *\n * @param result The index of the entity in the decode tree.\n * @param valueLength The number of bytes in the entity.\n * @param consumed The number of characters consumed.\n *\n * @returns The number of characters consumed.\n */\n emitNamedEntityData(result, valueLength, consumed) {\n const { decodeTree } = this;\n this.emitCodePoint(valueLength === 1\n ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH\n : decodeTree[result + 1], consumed);\n if (valueLength === 3) {\n // For multi-byte values, we need to emit the second byte.\n this.emitCodePoint(decodeTree[result + 2], consumed);\n }\n return consumed;\n }\n /**\n * Signal to the parser that the end of the input was reached.\n *\n * Remaining data will be emitted and relevant errors will be produced.\n *\n * @returns The number of characters consumed.\n */\n end() {\n var _a;\n switch (this.state) {\n case EntityDecoderState.NamedEntity: {\n // Emit a named entity if we have one.\n return this.result !== 0 &&\n (this.decodeMode !== DecodingMode.Attribute ||\n this.result === this.treeIndex)\n ? this.emitNotTerminatedNamedEntity()\n : 0;\n }\n // Otherwise, emit a numeric entity if we have one.\n case EntityDecoderState.NumericDecimal: {\n return this.emitNumericEntity(0, 2);\n }\n case EntityDecoderState.NumericHex: {\n return this.emitNumericEntity(0, 3);\n }\n case EntityDecoderState.NumericStart: {\n (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n return 0;\n }\n case EntityDecoderState.EntityStart: {\n // Return 0 if we have no entity.\n return 0;\n }\n }\n }\n}\n/**\n * Creates a function that decodes entities in a string.\n *\n * @param decodeTree The decode tree.\n * @returns A function that decodes entities in a string.\n */\nfunction getDecoder(decodeTree) {\n let returnValue = \"\";\n const decoder = new EntityDecoder(decodeTree, (data) => (returnValue += fromCodePoint(data)));\n return function decodeWithTrie(input, decodeMode) {\n let lastIndex = 0;\n let offset = 0;\n while ((offset = input.indexOf(\"&\", offset)) >= 0) {\n returnValue += input.slice(lastIndex, offset);\n decoder.startEntity(decodeMode);\n const length = decoder.write(input, \n // Skip the \"&\"\n offset + 1);\n if (length < 0) {\n lastIndex = offset + decoder.end();\n break;\n }\n lastIndex = offset + length;\n // If `length` is 0, skip the current `&` and continue.\n offset = length === 0 ? lastIndex + 1 : lastIndex;\n }\n const result = returnValue + input.slice(lastIndex);\n // Make sure we don't keep a reference to the final string.\n returnValue = \"\";\n return result;\n };\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nexport function determineBranch(decodeTree, current, nodeIndex, char) {\n const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n // Case 1: Single branch encoded in jump offset\n if (branchCount === 0) {\n return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n }\n // Case 2: Multiple branches encoded in jump table\n if (jumpOffset) {\n const value = char - jumpOffset;\n return value < 0 || value >= branchCount\n ? -1\n : decodeTree[nodeIndex + value] - 1;\n }\n // Case 3: Multiple branches encoded in dictionary\n // Binary search for the character.\n let lo = nodeIndex;\n let hi = lo + branchCount - 1;\n while (lo <= hi) {\n const mid = (lo + hi) >>> 1;\n const midValue = decodeTree[mid];\n if (midValue < char) {\n lo = mid + 1;\n }\n else if (midValue > char) {\n hi = mid - 1;\n }\n else {\n return decodeTree[mid + branchCount];\n }\n }\n return -1;\n}\nconst htmlDecoder = /* #__PURE__ */ getDecoder(htmlDecodeTree);\nconst xmlDecoder = /* #__PURE__ */ getDecoder(xmlDecodeTree);\n/**\n * Decodes an HTML string.\n *\n * @param htmlString The string to decode.\n * @param mode The decoding mode.\n * @returns The decoded string.\n */\nexport function decodeHTML(htmlString, mode = DecodingMode.Legacy) {\n return htmlDecoder(htmlString, mode);\n}\n/**\n * Decodes an HTML string in an attribute.\n *\n * @param htmlAttribute The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLAttribute(htmlAttribute) {\n return htmlDecoder(htmlAttribute, DecodingMode.Attribute);\n}\n/**\n * Decodes an HTML string, requiring all entities to be terminated by a semicolon.\n *\n * @param htmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeHTMLStrict(htmlString) {\n return htmlDecoder(htmlString, DecodingMode.Strict);\n}\n/**\n * Decodes an XML string, requiring all entities to be terminated by a semicolon.\n *\n * @param xmlString The string to decode.\n * @returns The decoded string.\n */\nexport function decodeXML(xmlString) {\n return xmlDecoder(xmlString, DecodingMode.Strict);\n}\n// Re-export for use by eg. htmlparser2\nexport { htmlDecodeTree } from \"./generated/decode-data-html.js\";\nexport { xmlDecodeTree } from \"./generated/decode-data-xml.js\";\nexport { decodeCodePoint, replaceCodePoint, fromCodePoint, } from \"./decode-codepoint.js\";\n//# sourceMappingURL=decode.js.map","/** All valid namespaces in HTML. */\nexport var NS;\n(function (NS) {\n NS[\"HTML\"] = \"http://www.w3.org/1999/xhtml\";\n NS[\"MATHML\"] = \"http://www.w3.org/1998/Math/MathML\";\n NS[\"SVG\"] = \"http://www.w3.org/2000/svg\";\n NS[\"XLINK\"] = \"http://www.w3.org/1999/xlink\";\n NS[\"XML\"] = \"http://www.w3.org/XML/1998/namespace\";\n NS[\"XMLNS\"] = \"http://www.w3.org/2000/xmlns/\";\n})(NS || (NS = {}));\nexport var ATTRS;\n(function (ATTRS) {\n ATTRS[\"TYPE\"] = \"type\";\n ATTRS[\"ACTION\"] = \"action\";\n ATTRS[\"ENCODING\"] = \"encoding\";\n ATTRS[\"PROMPT\"] = \"prompt\";\n ATTRS[\"NAME\"] = \"name\";\n ATTRS[\"COLOR\"] = \"color\";\n ATTRS[\"FACE\"] = \"face\";\n ATTRS[\"SIZE\"] = \"size\";\n})(ATTRS || (ATTRS = {}));\n/**\n * The mode of the document.\n *\n * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks}\n */\nexport var DOCUMENT_MODE;\n(function (DOCUMENT_MODE) {\n DOCUMENT_MODE[\"NO_QUIRKS\"] = \"no-quirks\";\n DOCUMENT_MODE[\"QUIRKS\"] = \"quirks\";\n DOCUMENT_MODE[\"LIMITED_QUIRKS\"] = \"limited-quirks\";\n})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));\nexport var TAG_NAMES;\n(function (TAG_NAMES) {\n TAG_NAMES[\"A\"] = \"a\";\n TAG_NAMES[\"ADDRESS\"] = \"address\";\n TAG_NAMES[\"ANNOTATION_XML\"] = \"annotation-xml\";\n TAG_NAMES[\"APPLET\"] = \"applet\";\n TAG_NAMES[\"AREA\"] = \"area\";\n TAG_NAMES[\"ARTICLE\"] = \"article\";\n TAG_NAMES[\"ASIDE\"] = \"aside\";\n TAG_NAMES[\"B\"] = \"b\";\n TAG_NAMES[\"BASE\"] = \"base\";\n TAG_NAMES[\"BASEFONT\"] = \"basefont\";\n TAG_NAMES[\"BGSOUND\"] = \"bgsound\";\n TAG_NAMES[\"BIG\"] = \"big\";\n TAG_NAMES[\"BLOCKQUOTE\"] = \"blockquote\";\n TAG_NAMES[\"BODY\"] = \"body\";\n TAG_NAMES[\"BR\"] = \"br\";\n TAG_NAMES[\"BUTTON\"] = \"button\";\n TAG_NAMES[\"CAPTION\"] = \"caption\";\n TAG_NAMES[\"CENTER\"] = \"center\";\n TAG_NAMES[\"CODE\"] = \"code\";\n TAG_NAMES[\"COL\"] = \"col\";\n TAG_NAMES[\"COLGROUP\"] = \"colgroup\";\n TAG_NAMES[\"DD\"] = \"dd\";\n TAG_NAMES[\"DESC\"] = \"desc\";\n TAG_NAMES[\"DETAILS\"] = \"details\";\n TAG_NAMES[\"DIALOG\"] = \"dialog\";\n TAG_NAMES[\"DIR\"] = \"dir\";\n TAG_NAMES[\"DIV\"] = \"div\";\n TAG_NAMES[\"DL\"] = \"dl\";\n TAG_NAMES[\"DT\"] = \"dt\";\n TAG_NAMES[\"EM\"] = \"em\";\n TAG_NAMES[\"EMBED\"] = \"embed\";\n TAG_NAMES[\"FIELDSET\"] = \"fieldset\";\n TAG_NAMES[\"FIGCAPTION\"] = \"figcaption\";\n TAG_NAMES[\"FIGURE\"] = \"figure\";\n TAG_NAMES[\"FONT\"] = \"font\";\n TAG_NAMES[\"FOOTER\"] = \"footer\";\n TAG_NAMES[\"FOREIGN_OBJECT\"] = \"foreignObject\";\n TAG_NAMES[\"FORM\"] = \"form\";\n TAG_NAMES[\"FRAME\"] = \"frame\";\n TAG_NAMES[\"FRAMESET\"] = \"frameset\";\n TAG_NAMES[\"H1\"] = \"h1\";\n TAG_NAMES[\"H2\"] = \"h2\";\n TAG_NAMES[\"H3\"] = \"h3\";\n TAG_NAMES[\"H4\"] = \"h4\";\n TAG_NAMES[\"H5\"] = \"h5\";\n TAG_NAMES[\"H6\"] = \"h6\";\n TAG_NAMES[\"HEAD\"] = \"head\";\n TAG_NAMES[\"HEADER\"] = \"header\";\n TAG_NAMES[\"HGROUP\"] = \"hgroup\";\n TAG_NAMES[\"HR\"] = \"hr\";\n TAG_NAMES[\"HTML\"] = \"html\";\n TAG_NAMES[\"I\"] = \"i\";\n TAG_NAMES[\"IMG\"] = \"img\";\n TAG_NAMES[\"IMAGE\"] = \"image\";\n TAG_NAMES[\"INPUT\"] = \"input\";\n TAG_NAMES[\"IFRAME\"] = \"iframe\";\n TAG_NAMES[\"KEYGEN\"] = \"keygen\";\n TAG_NAMES[\"LABEL\"] = \"label\";\n TAG_NAMES[\"LI\"] = \"li\";\n TAG_NAMES[\"LINK\"] = \"link\";\n TAG_NAMES[\"LISTING\"] = \"listing\";\n TAG_NAMES[\"MAIN\"] = \"main\";\n TAG_NAMES[\"MALIGNMARK\"] = \"malignmark\";\n TAG_NAMES[\"MARQUEE\"] = \"marquee\";\n TAG_NAMES[\"MATH\"] = \"math\";\n TAG_NAMES[\"MENU\"] = \"menu\";\n TAG_NAMES[\"META\"] = \"meta\";\n TAG_NAMES[\"MGLYPH\"] = \"mglyph\";\n TAG_NAMES[\"MI\"] = \"mi\";\n TAG_NAMES[\"MO\"] = \"mo\";\n TAG_NAMES[\"MN\"] = \"mn\";\n TAG_NAMES[\"MS\"] = \"ms\";\n TAG_NAMES[\"MTEXT\"] = \"mtext\";\n TAG_NAMES[\"NAV\"] = \"nav\";\n TAG_NAMES[\"NOBR\"] = \"nobr\";\n TAG_NAMES[\"NOFRAMES\"] = \"noframes\";\n TAG_NAMES[\"NOEMBED\"] = \"noembed\";\n TAG_NAMES[\"NOSCRIPT\"] = \"noscript\";\n TAG_NAMES[\"OBJECT\"] = \"object\";\n TAG_NAMES[\"OL\"] = \"ol\";\n TAG_NAMES[\"OPTGROUP\"] = \"optgroup\";\n TAG_NAMES[\"OPTION\"] = \"option\";\n TAG_NAMES[\"P\"] = \"p\";\n TAG_NAMES[\"PARAM\"] = \"param\";\n TAG_NAMES[\"PLAINTEXT\"] = \"plaintext\";\n TAG_NAMES[\"PRE\"] = \"pre\";\n TAG_NAMES[\"RB\"] = \"rb\";\n TAG_NAMES[\"RP\"] = \"rp\";\n TAG_NAMES[\"RT\"] = \"rt\";\n TAG_NAMES[\"RTC\"] = \"rtc\";\n TAG_NAMES[\"RUBY\"] = \"ruby\";\n TAG_NAMES[\"S\"] = \"s\";\n TAG_NAMES[\"SCRIPT\"] = \"script\";\n TAG_NAMES[\"SEARCH\"] = \"search\";\n TAG_NAMES[\"SECTION\"] = \"section\";\n TAG_NAMES[\"SELECT\"] = \"select\";\n TAG_NAMES[\"SOURCE\"] = \"source\";\n TAG_NAMES[\"SMALL\"] = \"small\";\n TAG_NAMES[\"SPAN\"] = \"span\";\n TAG_NAMES[\"STRIKE\"] = \"strike\";\n TAG_NAMES[\"STRONG\"] = \"strong\";\n TAG_NAMES[\"STYLE\"] = \"style\";\n TAG_NAMES[\"SUB\"] = \"sub\";\n TAG_NAMES[\"SUMMARY\"] = \"summary\";\n TAG_NAMES[\"SUP\"] = \"sup\";\n TAG_NAMES[\"TABLE\"] = \"table\";\n TAG_NAMES[\"TBODY\"] = \"tbody\";\n TAG_NAMES[\"TEMPLATE\"] = \"template\";\n TAG_NAMES[\"TEXTAREA\"] = \"textarea\";\n TAG_NAMES[\"TFOOT\"] = \"tfoot\";\n TAG_NAMES[\"TD\"] = \"td\";\n TAG_NAMES[\"TH\"] = \"th\";\n TAG_NAMES[\"THEAD\"] = \"thead\";\n TAG_NAMES[\"TITLE\"] = \"title\";\n TAG_NAMES[\"TR\"] = \"tr\";\n TAG_NAMES[\"TRACK\"] = \"track\";\n TAG_NAMES[\"TT\"] = \"tt\";\n TAG_NAMES[\"U\"] = \"u\";\n TAG_NAMES[\"UL\"] = \"ul\";\n TAG_NAMES[\"SVG\"] = \"svg\";\n TAG_NAMES[\"VAR\"] = \"var\";\n TAG_NAMES[\"WBR\"] = \"wbr\";\n TAG_NAMES[\"XMP\"] = \"xmp\";\n})(TAG_NAMES || (TAG_NAMES = {}));\n/**\n * Tag IDs are numeric IDs for known tag names.\n *\n * We use tag IDs to improve the performance of tag name comparisons.\n */\nexport var TAG_ID;\n(function (TAG_ID) {\n TAG_ID[TAG_ID[\"UNKNOWN\"] = 0] = \"UNKNOWN\";\n TAG_ID[TAG_ID[\"A\"] = 1] = \"A\";\n TAG_ID[TAG_ID[\"ADDRESS\"] = 2] = \"ADDRESS\";\n TAG_ID[TAG_ID[\"ANNOTATION_XML\"] = 3] = \"ANNOTATION_XML\";\n TAG_ID[TAG_ID[\"APPLET\"] = 4] = \"APPLET\";\n TAG_ID[TAG_ID[\"AREA\"] = 5] = \"AREA\";\n TAG_ID[TAG_ID[\"ARTICLE\"] = 6] = \"ARTICLE\";\n TAG_ID[TAG_ID[\"ASIDE\"] = 7] = \"ASIDE\";\n TAG_ID[TAG_ID[\"B\"] = 8] = \"B\";\n TAG_ID[TAG_ID[\"BASE\"] = 9] = \"BASE\";\n TAG_ID[TAG_ID[\"BASEFONT\"] = 10] = \"BASEFONT\";\n TAG_ID[TAG_ID[\"BGSOUND\"] = 11] = \"BGSOUND\";\n TAG_ID[TAG_ID[\"BIG\"] = 12] = \"BIG\";\n TAG_ID[TAG_ID[\"BLOCKQUOTE\"] = 13] = \"BLOCKQUOTE\";\n TAG_ID[TAG_ID[\"BODY\"] = 14] = \"BODY\";\n TAG_ID[TAG_ID[\"BR\"] = 15] = \"BR\";\n TAG_ID[TAG_ID[\"BUTTON\"] = 16] = \"BUTTON\";\n TAG_ID[TAG_ID[\"CAPTION\"] = 17] = \"CAPTION\";\n TAG_ID[TAG_ID[\"CENTER\"] = 18] = \"CENTER\";\n TAG_ID[TAG_ID[\"CODE\"] = 19] = \"CODE\";\n TAG_ID[TAG_ID[\"COL\"] = 20] = \"COL\";\n TAG_ID[TAG_ID[\"COLGROUP\"] = 21] = \"COLGROUP\";\n TAG_ID[TAG_ID[\"DD\"] = 22] = \"DD\";\n TAG_ID[TAG_ID[\"DESC\"] = 23] = \"DESC\";\n TAG_ID[TAG_ID[\"DETAILS\"] = 24] = \"DETAILS\";\n TAG_ID[TAG_ID[\"DIALOG\"] = 25] = \"DIALOG\";\n TAG_ID[TAG_ID[\"DIR\"] = 26] = \"DIR\";\n TAG_ID[TAG_ID[\"DIV\"] = 27] = \"DIV\";\n TAG_ID[TAG_ID[\"DL\"] = 28] = \"DL\";\n TAG_ID[TAG_ID[\"DT\"] = 29] = \"DT\";\n TAG_ID[TAG_ID[\"EM\"] = 30] = \"EM\";\n TAG_ID[TAG_ID[\"EMBED\"] = 31] = \"EMBED\";\n TAG_ID[TAG_ID[\"FIELDSET\"] = 32] = \"FIELDSET\";\n TAG_ID[TAG_ID[\"FIGCAPTION\"] = 33] = \"FIGCAPTION\";\n TAG_ID[TAG_ID[\"FIGURE\"] = 34] = \"FIGURE\";\n TAG_ID[TAG_ID[\"FONT\"] = 35] = \"FONT\";\n TAG_ID[TAG_ID[\"FOOTER\"] = 36] = \"FOOTER\";\n TAG_ID[TAG_ID[\"FOREIGN_OBJECT\"] = 37] = \"FOREIGN_OBJECT\";\n TAG_ID[TAG_ID[\"FORM\"] = 38] = \"FORM\";\n TAG_ID[TAG_ID[\"FRAME\"] = 39] = \"FRAME\";\n TAG_ID[TAG_ID[\"FRAMESET\"] = 40] = \"FRAMESET\";\n TAG_ID[TAG_ID[\"H1\"] = 41] = \"H1\";\n TAG_ID[TAG_ID[\"H2\"] = 42] = \"H2\";\n TAG_ID[TAG_ID[\"H3\"] = 43] = \"H3\";\n TAG_ID[TAG_ID[\"H4\"] = 44] = \"H4\";\n TAG_ID[TAG_ID[\"H5\"] = 45] = \"H5\";\n TAG_ID[TAG_ID[\"H6\"] = 46] = \"H6\";\n TAG_ID[TAG_ID[\"HEAD\"] = 47] = \"HEAD\";\n TAG_ID[TAG_ID[\"HEADER\"] = 48] = \"HEADER\";\n TAG_ID[TAG_ID[\"HGROUP\"] = 49] = \"HGROUP\";\n TAG_ID[TAG_ID[\"HR\"] = 50] = \"HR\";\n TAG_ID[TAG_ID[\"HTML\"] = 51] = \"HTML\";\n TAG_ID[TAG_ID[\"I\"] = 52] = \"I\";\n TAG_ID[TAG_ID[\"IMG\"] = 53] = \"IMG\";\n TAG_ID[TAG_ID[\"IMAGE\"] = 54] = \"IMAGE\";\n TAG_ID[TAG_ID[\"INPUT\"] = 55] = \"INPUT\";\n TAG_ID[TAG_ID[\"IFRAME\"] = 56] = \"IFRAME\";\n TAG_ID[TAG_ID[\"KEYGEN\"] = 57] = \"KEYGEN\";\n TAG_ID[TAG_ID[\"LABEL\"] = 58] = \"LABEL\";\n TAG_ID[TAG_ID[\"LI\"] = 59] = \"LI\";\n TAG_ID[TAG_ID[\"LINK\"] = 60] = \"LINK\";\n TAG_ID[TAG_ID[\"LISTING\"] = 61] = \"LISTING\";\n TAG_ID[TAG_ID[\"MAIN\"] = 62] = \"MAIN\";\n TAG_ID[TAG_ID[\"MALIGNMARK\"] = 63] = \"MALIGNMARK\";\n TAG_ID[TAG_ID[\"MARQUEE\"] = 64] = \"MARQUEE\";\n TAG_ID[TAG_ID[\"MATH\"] = 65] = \"MATH\";\n TAG_ID[TAG_ID[\"MENU\"] = 66] = \"MENU\";\n TAG_ID[TAG_ID[\"META\"] = 67] = \"META\";\n TAG_ID[TAG_ID[\"MGLYPH\"] = 68] = \"MGLYPH\";\n TAG_ID[TAG_ID[\"MI\"] = 69] = \"MI\";\n TAG_ID[TAG_ID[\"MO\"] = 70] = \"MO\";\n TAG_ID[TAG_ID[\"MN\"] = 71] = \"MN\";\n TAG_ID[TAG_ID[\"MS\"] = 72] = \"MS\";\n TAG_ID[TAG_ID[\"MTEXT\"] = 73] = \"MTEXT\";\n TAG_ID[TAG_ID[\"NAV\"] = 74] = \"NAV\";\n TAG_ID[TAG_ID[\"NOBR\"] = 75] = \"NOBR\";\n TAG_ID[TAG_ID[\"NOFRAMES\"] = 76] = \"NOFRAMES\";\n TAG_ID[TAG_ID[\"NOEMBED\"] = 77] = \"NOEMBED\";\n TAG_ID[TAG_ID[\"NOSCRIPT\"] = 78] = \"NOSCRIPT\";\n TAG_ID[TAG_ID[\"OBJECT\"] = 79] = \"OBJECT\";\n TAG_ID[TAG_ID[\"OL\"] = 80] = \"OL\";\n TAG_ID[TAG_ID[\"OPTGROUP\"] = 81] = \"OPTGROUP\";\n TAG_ID[TAG_ID[\"OPTION\"] = 82] = \"OPTION\";\n TAG_ID[TAG_ID[\"P\"] = 83] = \"P\";\n TAG_ID[TAG_ID[\"PARAM\"] = 84] = \"PARAM\";\n TAG_ID[TAG_ID[\"PLAINTEXT\"] = 85] = \"PLAINTEXT\";\n TAG_ID[TAG_ID[\"PRE\"] = 86] = \"PRE\";\n TAG_ID[TAG_ID[\"RB\"] = 87] = \"RB\";\n TAG_ID[TAG_ID[\"RP\"] = 88] = \"RP\";\n TAG_ID[TAG_ID[\"RT\"] = 89] = \"RT\";\n TAG_ID[TAG_ID[\"RTC\"] = 90] = \"RTC\";\n TAG_ID[TAG_ID[\"RUBY\"] = 91] = \"RUBY\";\n TAG_ID[TAG_ID[\"S\"] = 92] = \"S\";\n TAG_ID[TAG_ID[\"SCRIPT\"] = 93] = \"SCRIPT\";\n TAG_ID[TAG_ID[\"SEARCH\"] = 94] = \"SEARCH\";\n TAG_ID[TAG_ID[\"SECTION\"] = 95] = \"SECTION\";\n TAG_ID[TAG_ID[\"SELECT\"] = 96] = \"SELECT\";\n TAG_ID[TAG_ID[\"SOURCE\"] = 97] = \"SOURCE\";\n TAG_ID[TAG_ID[\"SMALL\"] = 98] = \"SMALL\";\n TAG_ID[TAG_ID[\"SPAN\"] = 99] = \"SPAN\";\n TAG_ID[TAG_ID[\"STRIKE\"] = 100] = \"STRIKE\";\n TAG_ID[TAG_ID[\"STRONG\"] = 101] = \"STRONG\";\n TAG_ID[TAG_ID[\"STYLE\"] = 102] = \"STYLE\";\n TAG_ID[TAG_ID[\"SUB\"] = 103] = \"SUB\";\n TAG_ID[TAG_ID[\"SUMMARY\"] = 104] = \"SUMMARY\";\n TAG_ID[TAG_ID[\"SUP\"] = 105] = \"SUP\";\n TAG_ID[TAG_ID[\"TABLE\"] = 106] = \"TABLE\";\n TAG_ID[TAG_ID[\"TBODY\"] = 107] = \"TBODY\";\n TAG_ID[TAG_ID[\"TEMPLATE\"] = 108] = \"TEMPLATE\";\n TAG_ID[TAG_ID[\"TEXTAREA\"] = 109] = \"TEXTAREA\";\n TAG_ID[TAG_ID[\"TFOOT\"] = 110] = \"TFOOT\";\n TAG_ID[TAG_ID[\"TD\"] = 111] = \"TD\";\n TAG_ID[TAG_ID[\"TH\"] = 112] = \"TH\";\n TAG_ID[TAG_ID[\"THEAD\"] = 113] = \"THEAD\";\n TAG_ID[TAG_ID[\"TITLE\"] = 114] = \"TITLE\";\n TAG_ID[TAG_ID[\"TR\"] = 115] = \"TR\";\n TAG_ID[TAG_ID[\"TRACK\"] = 116] = \"TRACK\";\n TAG_ID[TAG_ID[\"TT\"] = 117] = \"TT\";\n TAG_ID[TAG_ID[\"U\"] = 118] = \"U\";\n TAG_ID[TAG_ID[\"UL\"] = 119] = \"UL\";\n TAG_ID[TAG_ID[\"SVG\"] = 120] = \"SVG\";\n TAG_ID[TAG_ID[\"VAR\"] = 121] = \"VAR\";\n TAG_ID[TAG_ID[\"WBR\"] = 122] = \"WBR\";\n TAG_ID[TAG_ID[\"XMP\"] = 123] = \"XMP\";\n})(TAG_ID || (TAG_ID = {}));\nconst TAG_NAME_TO_ID = new Map([\n [TAG_NAMES.A, TAG_ID.A],\n [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],\n [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],\n [TAG_NAMES.APPLET, TAG_ID.APPLET],\n [TAG_NAMES.AREA, TAG_ID.AREA],\n [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],\n [TAG_NAMES.ASIDE, TAG_ID.ASIDE],\n [TAG_NAMES.B, TAG_ID.B],\n [TAG_NAMES.BASE, TAG_ID.BASE],\n [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],\n [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],\n [TAG_NAMES.BIG, TAG_ID.BIG],\n [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],\n [TAG_NAMES.BODY, TAG_ID.BODY],\n [TAG_NAMES.BR, TAG_ID.BR],\n [TAG_NAMES.BUTTON, TAG_ID.BUTTON],\n [TAG_NAMES.CAPTION, TAG_ID.CAPTION],\n [TAG_NAMES.CENTER, TAG_ID.CENTER],\n [TAG_NAMES.CODE, TAG_ID.CODE],\n [TAG_NAMES.COL, TAG_ID.COL],\n [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],\n [TAG_NAMES.DD, TAG_ID.DD],\n [TAG_NAMES.DESC, TAG_ID.DESC],\n [TAG_NAMES.DETAILS, TAG_ID.DETAILS],\n [TAG_NAMES.DIALOG, TAG_ID.DIALOG],\n [TAG_NAMES.DIR, TAG_ID.DIR],\n [TAG_NAMES.DIV, TAG_ID.DIV],\n [TAG_NAMES.DL, TAG_ID.DL],\n [TAG_NAMES.DT, TAG_ID.DT],\n [TAG_NAMES.EM, TAG_ID.EM],\n [TAG_NAMES.EMBED, TAG_ID.EMBED],\n [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],\n [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],\n [TAG_NAMES.FIGURE, TAG_ID.FIGURE],\n [TAG_NAMES.FONT, TAG_ID.FONT],\n [TAG_NAMES.FOOTER, TAG_ID.FOOTER],\n [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],\n [TAG_NAMES.FORM, TAG_ID.FORM],\n [TAG_NAMES.FRAME, TAG_ID.FRAME],\n [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],\n [TAG_NAMES.H1, TAG_ID.H1],\n [TAG_NAMES.H2, TAG_ID.H2],\n [TAG_NAMES.H3, TAG_ID.H3],\n [TAG_NAMES.H4, TAG_ID.H4],\n [TAG_NAMES.H5, TAG_ID.H5],\n [TAG_NAMES.H6, TAG_ID.H6],\n [TAG_NAMES.HEAD, TAG_ID.HEAD],\n [TAG_NAMES.HEADER, TAG_ID.HEADER],\n [TAG_NAMES.HGROUP, TAG_ID.HGROUP],\n [TAG_NAMES.HR, TAG_ID.HR],\n [TAG_NAMES.HTML, TAG_ID.HTML],\n [TAG_NAMES.I, TAG_ID.I],\n [TAG_NAMES.IMG, TAG_ID.IMG],\n [TAG_NAMES.IMAGE, TAG_ID.IMAGE],\n [TAG_NAMES.INPUT, TAG_ID.INPUT],\n [TAG_NAMES.IFRAME, TAG_ID.IFRAME],\n [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],\n [TAG_NAMES.LABEL, TAG_ID.LABEL],\n [TAG_NAMES.LI, TAG_ID.LI],\n [TAG_NAMES.LINK, TAG_ID.LINK],\n [TAG_NAMES.LISTING, TAG_ID.LISTING],\n [TAG_NAMES.MAIN, TAG_ID.MAIN],\n [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],\n [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],\n [TAG_NAMES.MATH, TAG_ID.MATH],\n [TAG_NAMES.MENU, TAG_ID.MENU],\n [TAG_NAMES.META, TAG_ID.META],\n [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],\n [TAG_NAMES.MI, TAG_ID.MI],\n [TAG_NAMES.MO, TAG_ID.MO],\n [TAG_NAMES.MN, TAG_ID.MN],\n [TAG_NAMES.MS, TAG_ID.MS],\n [TAG_NAMES.MTEXT, TAG_ID.MTEXT],\n [TAG_NAMES.NAV, TAG_ID.NAV],\n [TAG_NAMES.NOBR, TAG_ID.NOBR],\n [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],\n [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],\n [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],\n [TAG_NAMES.OBJECT, TAG_ID.OBJECT],\n [TAG_NAMES.OL, TAG_ID.OL],\n [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],\n [TAG_NAMES.OPTION, TAG_ID.OPTION],\n [TAG_NAMES.P, TAG_ID.P],\n [TAG_NAMES.PARAM, TAG_ID.PARAM],\n [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],\n [TAG_NAMES.PRE, TAG_ID.PRE],\n [TAG_NAMES.RB, TAG_ID.RB],\n [TAG_NAMES.RP, TAG_ID.RP],\n [TAG_NAMES.RT, TAG_ID.RT],\n [TAG_NAMES.RTC, TAG_ID.RTC],\n [TAG_NAMES.RUBY, TAG_ID.RUBY],\n [TAG_NAMES.S, TAG_ID.S],\n [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],\n [TAG_NAMES.SEARCH, TAG_ID.SEARCH],\n [TAG_NAMES.SECTION, TAG_ID.SECTION],\n [TAG_NAMES.SELECT, TAG_ID.SELECT],\n [TAG_NAMES.SOURCE, TAG_ID.SOURCE],\n [TAG_NAMES.SMALL, TAG_ID.SMALL],\n [TAG_NAMES.SPAN, TAG_ID.SPAN],\n [TAG_NAMES.STRIKE, TAG_ID.STRIKE],\n [TAG_NAMES.STRONG, TAG_ID.STRONG],\n [TAG_NAMES.STYLE, TAG_ID.STYLE],\n [TAG_NAMES.SUB, TAG_ID.SUB],\n [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],\n [TAG_NAMES.SUP, TAG_ID.SUP],\n [TAG_NAMES.TABLE, TAG_ID.TABLE],\n [TAG_NAMES.TBODY, TAG_ID.TBODY],\n [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],\n [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],\n [TAG_NAMES.TFOOT, TAG_ID.TFOOT],\n [TAG_NAMES.TD, TAG_ID.TD],\n [TAG_NAMES.TH, TAG_ID.TH],\n [TAG_NAMES.THEAD, TAG_ID.THEAD],\n [TAG_NAMES.TITLE, TAG_ID.TITLE],\n [TAG_NAMES.TR, TAG_ID.TR],\n [TAG_NAMES.TRACK, TAG_ID.TRACK],\n [TAG_NAMES.TT, TAG_ID.TT],\n [TAG_NAMES.U, TAG_ID.U],\n [TAG_NAMES.UL, TAG_ID.UL],\n [TAG_NAMES.SVG, TAG_ID.SVG],\n [TAG_NAMES.VAR, TAG_ID.VAR],\n [TAG_NAMES.WBR, TAG_ID.WBR],\n [TAG_NAMES.XMP, TAG_ID.XMP],\n]);\nexport function getTagID(tagName) {\n var _a;\n return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN;\n}\nconst $ = TAG_ID;\nexport const SPECIAL_ELEMENTS = {\n [NS.HTML]: new Set([\n $.ADDRESS,\n $.APPLET,\n $.AREA,\n $.ARTICLE,\n $.ASIDE,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.BUTTON,\n $.CAPTION,\n $.CENTER,\n $.COL,\n $.COLGROUP,\n $.DD,\n $.DETAILS,\n $.DIR,\n $.DIV,\n $.DL,\n $.DT,\n $.EMBED,\n $.FIELDSET,\n $.FIGCAPTION,\n $.FIGURE,\n $.FOOTER,\n $.FORM,\n $.FRAME,\n $.FRAMESET,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HEADER,\n $.HGROUP,\n $.HR,\n $.HTML,\n $.IFRAME,\n $.IMG,\n $.INPUT,\n $.LI,\n $.LINK,\n $.LISTING,\n $.MAIN,\n $.MARQUEE,\n $.MENU,\n $.META,\n $.NAV,\n $.NOEMBED,\n $.NOFRAMES,\n $.NOSCRIPT,\n $.OBJECT,\n $.OL,\n $.P,\n $.PARAM,\n $.PLAINTEXT,\n $.PRE,\n $.SCRIPT,\n $.SECTION,\n $.SELECT,\n $.SOURCE,\n $.STYLE,\n $.SUMMARY,\n $.TABLE,\n $.TBODY,\n $.TD,\n $.TEMPLATE,\n $.TEXTAREA,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TITLE,\n $.TR,\n $.TRACK,\n $.UL,\n $.WBR,\n $.XMP,\n ]),\n [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),\n [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),\n [NS.XLINK]: new Set(),\n [NS.XML]: new Set(),\n [NS.XMLNS]: new Set(),\n};\nexport const NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);\nconst UNESCAPED_TEXT = new Set([\n TAG_NAMES.STYLE,\n TAG_NAMES.SCRIPT,\n TAG_NAMES.XMP,\n TAG_NAMES.IFRAME,\n TAG_NAMES.NOEMBED,\n TAG_NAMES.NOFRAMES,\n TAG_NAMES.PLAINTEXT,\n]);\nexport function hasUnescapedText(tn, scriptingEnabled) {\n return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT);\n}\n","import { Preprocessor } from './preprocessor.js';\nimport { CODE_POINTS as $, SEQUENCES as $$, REPLACEMENT_CHARACTER, isSurrogate, isUndefinedCodePoint, isControlCodePoint, } from '../common/unicode.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\nimport { htmlDecodeTree, EntityDecoder, DecodingMode } from 'entities/decode';\nimport { ERR } from '../common/error-codes.js';\nimport { TAG_ID, getTagID } from '../common/html.js';\n//States\nvar State;\n(function (State) {\n State[State[\"DATA\"] = 0] = \"DATA\";\n State[State[\"RCDATA\"] = 1] = \"RCDATA\";\n State[State[\"RAWTEXT\"] = 2] = \"RAWTEXT\";\n State[State[\"SCRIPT_DATA\"] = 3] = \"SCRIPT_DATA\";\n State[State[\"PLAINTEXT\"] = 4] = \"PLAINTEXT\";\n State[State[\"TAG_OPEN\"] = 5] = \"TAG_OPEN\";\n State[State[\"END_TAG_OPEN\"] = 6] = \"END_TAG_OPEN\";\n State[State[\"TAG_NAME\"] = 7] = \"TAG_NAME\";\n State[State[\"RCDATA_LESS_THAN_SIGN\"] = 8] = \"RCDATA_LESS_THAN_SIGN\";\n State[State[\"RCDATA_END_TAG_OPEN\"] = 9] = \"RCDATA_END_TAG_OPEN\";\n State[State[\"RCDATA_END_TAG_NAME\"] = 10] = \"RCDATA_END_TAG_NAME\";\n State[State[\"RAWTEXT_LESS_THAN_SIGN\"] = 11] = \"RAWTEXT_LESS_THAN_SIGN\";\n State[State[\"RAWTEXT_END_TAG_OPEN\"] = 12] = \"RAWTEXT_END_TAG_OPEN\";\n State[State[\"RAWTEXT_END_TAG_NAME\"] = 13] = \"RAWTEXT_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_LESS_THAN_SIGN\"] = 14] = \"SCRIPT_DATA_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_END_TAG_OPEN\"] = 15] = \"SCRIPT_DATA_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_END_TAG_NAME\"] = 16] = \"SCRIPT_DATA_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_ESCAPE_START\"] = 17] = \"SCRIPT_DATA_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_ESCAPE_START_DASH\"] = 18] = \"SCRIPT_DATA_ESCAPE_START_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED\"] = 19] = \"SCRIPT_DATA_ESCAPED\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH\"] = 20] = \"SCRIPT_DATA_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_DASH_DASH\"] = 21] = \"SCRIPT_DATA_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\"] = 22] = \"SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\"] = 23] = \"SCRIPT_DATA_ESCAPED_END_TAG_OPEN\";\n State[State[\"SCRIPT_DATA_ESCAPED_END_TAG_NAME\"] = 24] = \"SCRIPT_DATA_ESCAPED_END_TAG_NAME\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_START\"] = 25] = \"SCRIPT_DATA_DOUBLE_ESCAPE_START\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED\"] = 26] = \"SCRIPT_DATA_DOUBLE_ESCAPED\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\"] = 27] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\"] = 28] = \"SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\"] = 29] = \"SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN\";\n State[State[\"SCRIPT_DATA_DOUBLE_ESCAPE_END\"] = 30] = \"SCRIPT_DATA_DOUBLE_ESCAPE_END\";\n State[State[\"BEFORE_ATTRIBUTE_NAME\"] = 31] = \"BEFORE_ATTRIBUTE_NAME\";\n State[State[\"ATTRIBUTE_NAME\"] = 32] = \"ATTRIBUTE_NAME\";\n State[State[\"AFTER_ATTRIBUTE_NAME\"] = 33] = \"AFTER_ATTRIBUTE_NAME\";\n State[State[\"BEFORE_ATTRIBUTE_VALUE\"] = 34] = \"BEFORE_ATTRIBUTE_VALUE\";\n State[State[\"ATTRIBUTE_VALUE_DOUBLE_QUOTED\"] = 35] = \"ATTRIBUTE_VALUE_DOUBLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_SINGLE_QUOTED\"] = 36] = \"ATTRIBUTE_VALUE_SINGLE_QUOTED\";\n State[State[\"ATTRIBUTE_VALUE_UNQUOTED\"] = 37] = \"ATTRIBUTE_VALUE_UNQUOTED\";\n State[State[\"AFTER_ATTRIBUTE_VALUE_QUOTED\"] = 38] = \"AFTER_ATTRIBUTE_VALUE_QUOTED\";\n State[State[\"SELF_CLOSING_START_TAG\"] = 39] = \"SELF_CLOSING_START_TAG\";\n State[State[\"BOGUS_COMMENT\"] = 40] = \"BOGUS_COMMENT\";\n State[State[\"MARKUP_DECLARATION_OPEN\"] = 41] = \"MARKUP_DECLARATION_OPEN\";\n State[State[\"COMMENT_START\"] = 42] = \"COMMENT_START\";\n State[State[\"COMMENT_START_DASH\"] = 43] = \"COMMENT_START_DASH\";\n State[State[\"COMMENT\"] = 44] = \"COMMENT\";\n State[State[\"COMMENT_LESS_THAN_SIGN\"] = 45] = \"COMMENT_LESS_THAN_SIGN\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG\"] = 46] = \"COMMENT_LESS_THAN_SIGN_BANG\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH\"] = 47] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH\";\n State[State[\"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\"] = 48] = \"COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH\";\n State[State[\"COMMENT_END_DASH\"] = 49] = \"COMMENT_END_DASH\";\n State[State[\"COMMENT_END\"] = 50] = \"COMMENT_END\";\n State[State[\"COMMENT_END_BANG\"] = 51] = \"COMMENT_END_BANG\";\n State[State[\"DOCTYPE\"] = 52] = \"DOCTYPE\";\n State[State[\"BEFORE_DOCTYPE_NAME\"] = 53] = \"BEFORE_DOCTYPE_NAME\";\n State[State[\"DOCTYPE_NAME\"] = 54] = \"DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_NAME\"] = 55] = \"AFTER_DOCTYPE_NAME\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_KEYWORD\"] = 56] = \"AFTER_DOCTYPE_PUBLIC_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\"] = 57] = \"BEFORE_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\"] = 58] = \"DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\"] = 59] = \"DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\"] = 60] = \"AFTER_DOCTYPE_PUBLIC_IDENTIFIER\";\n State[State[\"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\"] = 61] = \"BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_KEYWORD\"] = 62] = \"AFTER_DOCTYPE_SYSTEM_KEYWORD\";\n State[State[\"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\"] = 63] = \"BEFORE_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\"] = 64] = \"DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED\";\n State[State[\"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\"] = 65] = \"DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED\";\n State[State[\"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\"] = 66] = \"AFTER_DOCTYPE_SYSTEM_IDENTIFIER\";\n State[State[\"BOGUS_DOCTYPE\"] = 67] = \"BOGUS_DOCTYPE\";\n State[State[\"CDATA_SECTION\"] = 68] = \"CDATA_SECTION\";\n State[State[\"CDATA_SECTION_BRACKET\"] = 69] = \"CDATA_SECTION_BRACKET\";\n State[State[\"CDATA_SECTION_END\"] = 70] = \"CDATA_SECTION_END\";\n State[State[\"CHARACTER_REFERENCE\"] = 71] = \"CHARACTER_REFERENCE\";\n State[State[\"AMBIGUOUS_AMPERSAND\"] = 72] = \"AMBIGUOUS_AMPERSAND\";\n})(State || (State = {}));\n//Tokenizer initial states for different modes\nexport const TokenizerMode = {\n DATA: State.DATA,\n RCDATA: State.RCDATA,\n RAWTEXT: State.RAWTEXT,\n SCRIPT_DATA: State.SCRIPT_DATA,\n PLAINTEXT: State.PLAINTEXT,\n CDATA_SECTION: State.CDATA_SECTION,\n};\n//Utils\n//OPTIMIZATION: these utility functions should not be moved out of this module. V8 Crankshaft will not inline\n//this functions if they will be situated in another module due to context switch.\n//Always perform inlining check before modifying this functions ('node --trace-inlining').\nfunction isAsciiDigit(cp) {\n return cp >= $.DIGIT_0 && cp <= $.DIGIT_9;\n}\nfunction isAsciiUpper(cp) {\n return cp >= $.LATIN_CAPITAL_A && cp <= $.LATIN_CAPITAL_Z;\n}\nfunction isAsciiLower(cp) {\n return cp >= $.LATIN_SMALL_A && cp <= $.LATIN_SMALL_Z;\n}\nfunction isAsciiLetter(cp) {\n return isAsciiLower(cp) || isAsciiUpper(cp);\n}\nfunction isAsciiAlphaNumeric(cp) {\n return isAsciiLetter(cp) || isAsciiDigit(cp);\n}\nfunction toAsciiLower(cp) {\n return cp + 32;\n}\nfunction isWhitespace(cp) {\n return cp === $.SPACE || cp === $.LINE_FEED || cp === $.TABULATION || cp === $.FORM_FEED;\n}\nfunction isScriptDataDoubleEscapeSequenceEnd(cp) {\n return isWhitespace(cp) || cp === $.SOLIDUS || cp === $.GREATER_THAN_SIGN;\n}\nfunction getErrorForNumericCharacterReference(code) {\n if (code === $.NULL) {\n return ERR.nullCharacterReference;\n }\n else if (code > 1114111) {\n return ERR.characterReferenceOutsideUnicodeRange;\n }\n else if (isSurrogate(code)) {\n return ERR.surrogateCharacterReference;\n }\n else if (isUndefinedCodePoint(code)) {\n return ERR.noncharacterCharacterReference;\n }\n else if (isControlCodePoint(code) || code === $.CARRIAGE_RETURN) {\n return ERR.controlCharacterReference;\n }\n return null;\n}\n//Tokenizer\nexport class Tokenizer {\n constructor(options, handler) {\n this.options = options;\n this.handler = handler;\n this.paused = false;\n /** Ensures that the parsing loop isn't run multiple times at once. */\n this.inLoop = false;\n /**\n * Indicates that the current adjusted node exists, is not an element in the HTML namespace,\n * and that it is not an integration point for either MathML or HTML.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/parsing.html#tree-construction}\n */\n this.inForeignNode = false;\n this.lastStartTagName = '';\n this.active = false;\n this.state = State.DATA;\n this.returnState = State.DATA;\n this.entityStartPos = 0;\n this.consumedAfterSnapshot = -1;\n this.currentCharacterToken = null;\n this.currentToken = null;\n this.currentAttr = { name: '', value: '' };\n this.preprocessor = new Preprocessor(handler);\n this.currentLocation = this.getCurrentLocation(-1);\n this.entityDecoder = new EntityDecoder(htmlDecodeTree, (cp, consumed) => {\n // Note: Set `pos` _before_ flushing, as flushing might drop\n // the current chunk and invalidate `entityStartPos`.\n this.preprocessor.pos = this.entityStartPos + consumed - 1;\n this._flushCodePointConsumedAsCharacterReference(cp);\n }, handler.onParseError\n ? {\n missingSemicolonAfterCharacterReference: () => {\n this._err(ERR.missingSemicolonAfterCharacterReference, 1);\n },\n absenceOfDigitsInNumericCharacterReference: (consumed) => {\n this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);\n },\n validateNumericCharacterReference: (code) => {\n const error = getErrorForNumericCharacterReference(code);\n if (error)\n this._err(error, 1);\n },\n }\n : undefined);\n }\n //Errors\n _err(code, cpOffset = 0) {\n var _a, _b;\n (_b = (_a = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a, this.preprocessor.getError(code, cpOffset));\n }\n // NOTE: `offset` may never run across line boundaries.\n getCurrentLocation(offset) {\n if (!this.options.sourceCodeLocationInfo) {\n return null;\n }\n return {\n startLine: this.preprocessor.line,\n startCol: this.preprocessor.col - offset,\n startOffset: this.preprocessor.offset - offset,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n };\n }\n _runParsingLoop() {\n if (this.inLoop)\n return;\n this.inLoop = true;\n while (this.active && !this.paused) {\n this.consumedAfterSnapshot = 0;\n const cp = this._consume();\n if (!this._ensureHibernation()) {\n this._callState(cp);\n }\n }\n this.inLoop = false;\n }\n //API\n pause() {\n this.paused = true;\n }\n resume(writeCallback) {\n if (!this.paused) {\n throw new Error('Parser was already resumed');\n }\n this.paused = false;\n // Necessary for synchronous resume.\n if (this.inLoop)\n return;\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n write(chunk, isLastChunk, writeCallback) {\n this.active = true;\n this.preprocessor.write(chunk, isLastChunk);\n this._runParsingLoop();\n if (!this.paused) {\n writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();\n }\n }\n insertHtmlAtCurrentPos(chunk) {\n this.active = true;\n this.preprocessor.insertHtmlAtCurrentPos(chunk);\n this._runParsingLoop();\n }\n //Hibernation\n _ensureHibernation() {\n if (this.preprocessor.endOfChunkHit) {\n this.preprocessor.retreat(this.consumedAfterSnapshot);\n this.consumedAfterSnapshot = 0;\n this.active = false;\n return true;\n }\n return false;\n }\n //Consumption\n _consume() {\n this.consumedAfterSnapshot++;\n return this.preprocessor.advance();\n }\n _advanceBy(count) {\n this.consumedAfterSnapshot += count;\n for (let i = 0; i < count; i++) {\n this.preprocessor.advance();\n }\n }\n _consumeSequenceIfMatch(pattern, caseSensitive) {\n if (this.preprocessor.startsWith(pattern, caseSensitive)) {\n // We will already have consumed one character before calling this method.\n this._advanceBy(pattern.length - 1);\n return true;\n }\n return false;\n }\n //Token creation\n _createStartTagToken() {\n this.currentToken = {\n type: TokenType.START_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(1),\n };\n }\n _createEndTagToken() {\n this.currentToken = {\n type: TokenType.END_TAG,\n tagName: '',\n tagID: TAG_ID.UNKNOWN,\n selfClosing: false,\n ackSelfClosing: false,\n attrs: [],\n location: this.getCurrentLocation(2),\n };\n }\n _createCommentToken(offset) {\n this.currentToken = {\n type: TokenType.COMMENT,\n data: '',\n location: this.getCurrentLocation(offset),\n };\n }\n _createDoctypeToken(initialName) {\n this.currentToken = {\n type: TokenType.DOCTYPE,\n name: initialName,\n forceQuirks: false,\n publicId: null,\n systemId: null,\n location: this.currentLocation,\n };\n }\n _createCharacterToken(type, chars) {\n this.currentCharacterToken = {\n type,\n chars,\n location: this.currentLocation,\n };\n }\n //Tag attributes\n _createAttr(attrNameFirstCh) {\n this.currentAttr = {\n name: attrNameFirstCh,\n value: '',\n };\n this.currentLocation = this.getCurrentLocation(0);\n }\n _leaveAttrName() {\n var _a;\n var _b;\n const token = this.currentToken;\n if (getTokenAttr(token, this.currentAttr.name) === null) {\n token.attrs.push(this.currentAttr);\n if (token.location && this.currentLocation) {\n const attrLocations = ((_a = (_b = token.location).attrs) !== null && _a !== void 0 ? _a : (_b.attrs = Object.create(null)));\n attrLocations[this.currentAttr.name] = this.currentLocation;\n // Set end location\n this._leaveAttrValue();\n }\n }\n else {\n this._err(ERR.duplicateAttribute);\n }\n }\n _leaveAttrValue() {\n if (this.currentLocation) {\n this.currentLocation.endLine = this.preprocessor.line;\n this.currentLocation.endCol = this.preprocessor.col;\n this.currentLocation.endOffset = this.preprocessor.offset;\n }\n }\n //Token emission\n prepareToken(ct) {\n this._emitCurrentCharacterToken(ct.location);\n this.currentToken = null;\n if (ct.location) {\n ct.location.endLine = this.preprocessor.line;\n ct.location.endCol = this.preprocessor.col + 1;\n ct.location.endOffset = this.preprocessor.offset + 1;\n }\n this.currentLocation = this.getCurrentLocation(-1);\n }\n emitCurrentTagToken() {\n const ct = this.currentToken;\n this.prepareToken(ct);\n ct.tagID = getTagID(ct.tagName);\n if (ct.type === TokenType.START_TAG) {\n this.lastStartTagName = ct.tagName;\n this.handler.onStartTag(ct);\n }\n else {\n if (ct.attrs.length > 0) {\n this._err(ERR.endTagWithAttributes);\n }\n if (ct.selfClosing) {\n this._err(ERR.endTagWithTrailingSolidus);\n }\n this.handler.onEndTag(ct);\n }\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentComment(ct) {\n this.prepareToken(ct);\n this.handler.onComment(ct);\n this.preprocessor.dropParsedChunk();\n }\n emitCurrentDoctype(ct) {\n this.prepareToken(ct);\n this.handler.onDoctype(ct);\n this.preprocessor.dropParsedChunk();\n }\n _emitCurrentCharacterToken(nextLocation) {\n if (this.currentCharacterToken) {\n //NOTE: if we have a pending character token, make it's end location equal to the\n //current token's start location.\n if (nextLocation && this.currentCharacterToken.location) {\n this.currentCharacterToken.location.endLine = nextLocation.startLine;\n this.currentCharacterToken.location.endCol = nextLocation.startCol;\n this.currentCharacterToken.location.endOffset = nextLocation.startOffset;\n }\n switch (this.currentCharacterToken.type) {\n case TokenType.CHARACTER: {\n this.handler.onCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.handler.onNullCharacter(this.currentCharacterToken);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.handler.onWhitespaceCharacter(this.currentCharacterToken);\n break;\n }\n }\n this.currentCharacterToken = null;\n }\n }\n _emitEOFToken() {\n const location = this.getCurrentLocation(0);\n if (location) {\n location.endLine = location.startLine;\n location.endCol = location.startCol;\n location.endOffset = location.startOffset;\n }\n this._emitCurrentCharacterToken(location);\n this.handler.onEof({ type: TokenType.EOF, location });\n this.active = false;\n }\n //Characters emission\n //OPTIMIZATION: The specification uses only one type of character token (one token per character).\n //This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.\n //If we have a sequence of characters that belong to the same group, the parser can process it\n //as a single solid character token.\n //So, there are 3 types of character tokens in parse5:\n //1)TokenType.NULL_CHARACTER - \\u0000-character sequences (e.g. '\\u0000\\u0000\\u0000')\n //2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\\n \\r\\t \\f')\n //3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')\n _appendCharToCurrentCharacterToken(type, ch) {\n if (this.currentCharacterToken) {\n if (this.currentCharacterToken.type === type) {\n this.currentCharacterToken.chars += ch;\n return;\n }\n else {\n this.currentLocation = this.getCurrentLocation(0);\n this._emitCurrentCharacterToken(this.currentLocation);\n this.preprocessor.dropParsedChunk();\n }\n }\n this._createCharacterToken(type, ch);\n }\n _emitCodePoint(cp) {\n const type = isWhitespace(cp)\n ? TokenType.WHITESPACE_CHARACTER\n : cp === $.NULL\n ? TokenType.NULL_CHARACTER\n : TokenType.CHARACTER;\n this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));\n }\n //NOTE: used when we emit characters explicitly.\n //This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.\n _emitChars(ch) {\n this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);\n }\n // Character reference helpers\n _startCharacterReference() {\n this.returnState = this.state;\n this.state = State.CHARACTER_REFERENCE;\n this.entityStartPos = this.preprocessor.pos;\n this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);\n }\n _isCharacterReferenceInAttribute() {\n return (this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED ||\n this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED);\n }\n _flushCodePointConsumedAsCharacterReference(cp) {\n if (this._isCharacterReferenceInAttribute()) {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n else {\n this._emitCodePoint(cp);\n }\n }\n // Calling states this way turns out to be much faster than any other approach.\n _callState(cp) {\n switch (this.state) {\n case State.DATA: {\n this._stateData(cp);\n break;\n }\n case State.RCDATA: {\n this._stateRcdata(cp);\n break;\n }\n case State.RAWTEXT: {\n this._stateRawtext(cp);\n break;\n }\n case State.SCRIPT_DATA: {\n this._stateScriptData(cp);\n break;\n }\n case State.PLAINTEXT: {\n this._statePlaintext(cp);\n break;\n }\n case State.TAG_OPEN: {\n this._stateTagOpen(cp);\n break;\n }\n case State.END_TAG_OPEN: {\n this._stateEndTagOpen(cp);\n break;\n }\n case State.TAG_NAME: {\n this._stateTagName(cp);\n break;\n }\n case State.RCDATA_LESS_THAN_SIGN: {\n this._stateRcdataLessThanSign(cp);\n break;\n }\n case State.RCDATA_END_TAG_OPEN: {\n this._stateRcdataEndTagOpen(cp);\n break;\n }\n case State.RCDATA_END_TAG_NAME: {\n this._stateRcdataEndTagName(cp);\n break;\n }\n case State.RAWTEXT_LESS_THAN_SIGN: {\n this._stateRawtextLessThanSign(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_OPEN: {\n this._stateRawtextEndTagOpen(cp);\n break;\n }\n case State.RAWTEXT_END_TAG_NAME: {\n this._stateRawtextEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_LESS_THAN_SIGN: {\n this._stateScriptDataLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_OPEN: {\n this._stateScriptDataEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_END_TAG_NAME: {\n this._stateScriptDataEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START: {\n this._stateScriptDataEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPE_START_DASH: {\n this._stateScriptDataEscapeStartDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED: {\n this._stateScriptDataEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH: {\n this._stateScriptDataEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {\n this._stateScriptDataEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {\n this._stateScriptDataEscapedEndTagOpen(cp);\n break;\n }\n case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {\n this._stateScriptDataEscapedEndTagName(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {\n this._stateScriptDataDoubleEscapeStart(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED: {\n this._stateScriptDataDoubleEscaped(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {\n this._stateScriptDataDoubleEscapedDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {\n this._stateScriptDataDoubleEscapedDashDash(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {\n this._stateScriptDataDoubleEscapedLessThanSign(cp);\n break;\n }\n case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {\n this._stateScriptDataDoubleEscapeEnd(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_NAME: {\n this._stateBeforeAttributeName(cp);\n break;\n }\n case State.ATTRIBUTE_NAME: {\n this._stateAttributeName(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_NAME: {\n this._stateAfterAttributeName(cp);\n break;\n }\n case State.BEFORE_ATTRIBUTE_VALUE: {\n this._stateBeforeAttributeValue(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {\n this._stateAttributeValueDoubleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {\n this._stateAttributeValueSingleQuoted(cp);\n break;\n }\n case State.ATTRIBUTE_VALUE_UNQUOTED: {\n this._stateAttributeValueUnquoted(cp);\n break;\n }\n case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {\n this._stateAfterAttributeValueQuoted(cp);\n break;\n }\n case State.SELF_CLOSING_START_TAG: {\n this._stateSelfClosingStartTag(cp);\n break;\n }\n case State.BOGUS_COMMENT: {\n this._stateBogusComment(cp);\n break;\n }\n case State.MARKUP_DECLARATION_OPEN: {\n this._stateMarkupDeclarationOpen(cp);\n break;\n }\n case State.COMMENT_START: {\n this._stateCommentStart(cp);\n break;\n }\n case State.COMMENT_START_DASH: {\n this._stateCommentStartDash(cp);\n break;\n }\n case State.COMMENT: {\n this._stateComment(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN: {\n this._stateCommentLessThanSign(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG: {\n this._stateCommentLessThanSignBang(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {\n this._stateCommentLessThanSignBangDash(cp);\n break;\n }\n case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {\n this._stateCommentLessThanSignBangDashDash(cp);\n break;\n }\n case State.COMMENT_END_DASH: {\n this._stateCommentEndDash(cp);\n break;\n }\n case State.COMMENT_END: {\n this._stateCommentEnd(cp);\n break;\n }\n case State.COMMENT_END_BANG: {\n this._stateCommentEndBang(cp);\n break;\n }\n case State.DOCTYPE: {\n this._stateDoctype(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_NAME: {\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case State.DOCTYPE_NAME: {\n this._stateDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_NAME: {\n this._stateAfterDoctypeName(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {\n this._stateAfterDoctypePublicKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateBeforeDoctypePublicIdentifier(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypePublicIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypePublicIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {\n this._stateAfterDoctypePublicIdentifier(cp);\n break;\n }\n case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {\n this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {\n this._stateAfterDoctypeSystemKeyword(cp);\n break;\n }\n case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateBeforeDoctypeSystemIdentifier(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {\n this._stateDoctypeSystemIdentifierDoubleQuoted(cp);\n break;\n }\n case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {\n this._stateDoctypeSystemIdentifierSingleQuoted(cp);\n break;\n }\n case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {\n this._stateAfterDoctypeSystemIdentifier(cp);\n break;\n }\n case State.BOGUS_DOCTYPE: {\n this._stateBogusDoctype(cp);\n break;\n }\n case State.CDATA_SECTION: {\n this._stateCdataSection(cp);\n break;\n }\n case State.CDATA_SECTION_BRACKET: {\n this._stateCdataSectionBracket(cp);\n break;\n }\n case State.CDATA_SECTION_END: {\n this._stateCdataSectionEnd(cp);\n break;\n }\n case State.CHARACTER_REFERENCE: {\n this._stateCharacterReference();\n break;\n }\n case State.AMBIGUOUS_AMPERSAND: {\n this._stateAmbiguousAmpersand(cp);\n break;\n }\n default: {\n throw new Error('Unknown state');\n }\n }\n }\n // State machine\n // Data state\n //------------------------------------------------------------------\n _stateData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.TAG_OPEN;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RCDATA state\n //------------------------------------------------------------------\n _stateRcdata(cp) {\n switch (cp) {\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.RCDATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // RAWTEXT state\n //------------------------------------------------------------------\n _stateRawtext(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.RAWTEXT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data state\n //------------------------------------------------------------------\n _stateScriptData(cp) {\n switch (cp) {\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // PLAINTEXT state\n //------------------------------------------------------------------\n _statePlaintext(cp) {\n switch (cp) {\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Tag open state\n //------------------------------------------------------------------\n _stateTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createStartTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n this.state = State.MARKUP_DECLARATION_OPEN;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.END_TAG_OPEN;\n break;\n }\n case $.QUESTION_MARK: {\n this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);\n this._createCommentToken(1);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('<');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._emitChars('<');\n this.state = State.DATA;\n this._stateData(cp);\n }\n }\n }\n // End tag open state\n //------------------------------------------------------------------\n _stateEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this._createEndTagToken();\n this.state = State.TAG_NAME;\n this._stateTagName(cp);\n }\n else\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingEndTagName);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofBeforeTagName);\n this._emitChars('</');\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.invalidFirstCharacterOfTagName);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n }\n // Tag name state\n //------------------------------------------------------------------\n _stateTagName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.tagName += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // RCDATA less-than sign state\n //------------------------------------------------------------------\n _stateRcdataLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RCDATA_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RCDATA end tag open state\n //------------------------------------------------------------------\n _stateRcdataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RCDATA_END_TAG_NAME;\n this._stateRcdataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n handleSpecialEndTag(_cp) {\n if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {\n return !this._ensureHibernation();\n }\n this._createEndTagToken();\n const token = this.currentToken;\n token.tagName = this.lastStartTagName;\n const cp = this.preprocessor.peek(this.lastStartTagName.length);\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n return false;\n }\n case $.SOLIDUS: {\n this._advanceBy(this.lastStartTagName.length);\n this.state = State.SELF_CLOSING_START_TAG;\n return false;\n }\n case $.GREATER_THAN_SIGN: {\n this._advanceBy(this.lastStartTagName.length);\n this.emitCurrentTagToken();\n this.state = State.DATA;\n return false;\n }\n default: {\n return !this._ensureHibernation();\n }\n }\n }\n // RCDATA end tag name state\n //------------------------------------------------------------------\n _stateRcdataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RCDATA;\n this._stateRcdata(cp);\n }\n }\n // RAWTEXT less-than sign state\n //------------------------------------------------------------------\n _stateRawtextLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.RAWTEXT_END_TAG_OPEN;\n }\n else {\n this._emitChars('<');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag open state\n //------------------------------------------------------------------\n _stateRawtextEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.RAWTEXT_END_TAG_NAME;\n this._stateRawtextEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // RAWTEXT end tag name state\n //------------------------------------------------------------------\n _stateRawtextEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.RAWTEXT;\n this._stateRawtext(cp);\n }\n }\n // Script data less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataLessThanSign(cp) {\n switch (cp) {\n case $.SOLIDUS: {\n this.state = State.SCRIPT_DATA_END_TAG_OPEN;\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.SCRIPT_DATA_ESCAPE_START;\n this._emitChars('<!');\n break;\n }\n default: {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n }\n // Script data end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_END_TAG_NAME;\n this._stateScriptDataEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStart(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escape start dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapeStartDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n }\n else {\n this.state = State.SCRIPT_DATA;\n this._stateScriptData(cp);\n }\n }\n // Script data escaped state\n //------------------------------------------------------------------\n _stateScriptDataEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;\n }\n else if (isAsciiLetter(cp)) {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;\n this._stateScriptDataDoubleEscapeStart(cp);\n }\n else {\n this._emitChars('<');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag open state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagOpen(cp) {\n if (isAsciiLetter(cp)) {\n this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;\n this._stateScriptDataEscapedEndTagName(cp);\n }\n else {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data escaped end tag name state\n //------------------------------------------------------------------\n _stateScriptDataEscapedEndTagName(cp) {\n if (this.handleSpecialEndTag(cp)) {\n this._emitChars('</');\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escape start state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeStart(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_ESCAPED;\n this._stateScriptDataEscaped(cp);\n }\n }\n // Script data double escaped state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscaped(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped dash dash state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedDashDash(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this._emitChars('-');\n break;\n }\n case $.LESS_THAN_SIGN: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;\n this._emitChars('<');\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.SCRIPT_DATA;\n this._emitChars('>');\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitChars(REPLACEMENT_CHARACTER);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInScriptHtmlCommentLikeText);\n this._emitEOFToken();\n break;\n }\n default: {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._emitCodePoint(cp);\n }\n }\n }\n // Script data double escaped less-than sign state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapedLessThanSign(cp) {\n if (cp === $.SOLIDUS) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;\n this._emitChars('/');\n }\n else {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Script data double escape end state\n //------------------------------------------------------------------\n _stateScriptDataDoubleEscapeEnd(cp) {\n if (this.preprocessor.startsWith($$.SCRIPT, false) &&\n isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek($$.SCRIPT.length))) {\n this._emitCodePoint(cp);\n for (let i = 0; i < $$.SCRIPT.length; i++) {\n this._emitCodePoint(this._consume());\n }\n this.state = State.SCRIPT_DATA_ESCAPED;\n }\n else if (!this._ensureHibernation()) {\n this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;\n this._stateScriptDataDoubleEscaped(cp);\n }\n }\n // Before attribute name state\n //------------------------------------------------------------------\n _stateBeforeAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._err(ERR.unexpectedEqualsSignBeforeAttributeName);\n this._createAttr('=');\n this.state = State.ATTRIBUTE_NAME;\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Attribute name state\n //------------------------------------------------------------------\n _stateAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED:\n case $.SOLIDUS:\n case $.GREATER_THAN_SIGN:\n case $.EOF: {\n this._leaveAttrName();\n this.state = State.AFTER_ATTRIBUTE_NAME;\n this._stateAfterAttributeName(cp);\n break;\n }\n case $.EQUALS_SIGN: {\n this._leaveAttrName();\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN: {\n this._err(ERR.unexpectedCharacterInAttributeName);\n this.currentAttr.name += String.fromCodePoint(cp);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.name += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After attribute name state\n //------------------------------------------------------------------\n _stateAfterAttributeName(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.SOLIDUS: {\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.EQUALS_SIGN: {\n this.state = State.BEFORE_ATTRIBUTE_VALUE;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createAttr('');\n this.state = State.ATTRIBUTE_NAME;\n this._stateAttributeName(cp);\n }\n }\n }\n // Before attribute value state\n //------------------------------------------------------------------\n _stateBeforeAttributeValue(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingAttributeValue);\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n default: {\n this.state = State.ATTRIBUTE_VALUE_UNQUOTED;\n this._stateAttributeValueUnquoted(cp);\n }\n }\n }\n // Attribute value (double-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueDoubleQuoted(cp) {\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (single-quoted) state\n //------------------------------------------------------------------\n _stateAttributeValueSingleQuoted(cp) {\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // Attribute value (unquoted) state\n //------------------------------------------------------------------\n _stateAttributeValueUnquoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.AMPERSAND: {\n this._startCharacterReference();\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this.currentAttr.value += REPLACEMENT_CHARACTER;\n break;\n }\n case $.QUOTATION_MARK:\n case $.APOSTROPHE:\n case $.LESS_THAN_SIGN:\n case $.EQUALS_SIGN:\n case $.GRAVE_ACCENT: {\n this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);\n this.currentAttr.value += String.fromCodePoint(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this.currentAttr.value += String.fromCodePoint(cp);\n }\n }\n }\n // After attribute value (quoted) state\n //------------------------------------------------------------------\n _stateAfterAttributeValueQuoted(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this._leaveAttrValue();\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n break;\n }\n case $.SOLIDUS: {\n this._leaveAttrValue();\n this.state = State.SELF_CLOSING_START_TAG;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._leaveAttrValue();\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBetweenAttributes);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Self-closing start tag state\n //------------------------------------------------------------------\n _stateSelfClosingStartTag(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n const token = this.currentToken;\n token.selfClosing = true;\n this.state = State.DATA;\n this.emitCurrentTagToken();\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInTag);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedSolidusInTag);\n this.state = State.BEFORE_ATTRIBUTE_NAME;\n this._stateBeforeAttributeName(cp);\n }\n }\n }\n // Bogus comment state\n //------------------------------------------------------------------\n _stateBogusComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Markup declaration open state\n //------------------------------------------------------------------\n _stateMarkupDeclarationOpen(cp) {\n if (this._consumeSequenceIfMatch($$.DASH_DASH, true)) {\n this._createCommentToken($$.DASH_DASH.length + 1);\n this.state = State.COMMENT_START;\n }\n else if (this._consumeSequenceIfMatch($$.DOCTYPE, false)) {\n // NOTE: Doctypes tokens are created without fixed offsets. We keep track of the moment a doctype *might* start here.\n this.currentLocation = this.getCurrentLocation($$.DOCTYPE.length + 1);\n this.state = State.DOCTYPE;\n }\n else if (this._consumeSequenceIfMatch($$.CDATA_START, true)) {\n if (this.inForeignNode) {\n this.state = State.CDATA_SECTION;\n }\n else {\n this._err(ERR.cdataInHtmlContent);\n this._createCommentToken($$.CDATA_START.length + 1);\n this.currentToken.data = '[CDATA[';\n this.state = State.BOGUS_COMMENT;\n }\n }\n //NOTE: Sequence lookups can be abrupted by hibernation. In that case, lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.incorrectlyOpenedComment);\n this._createCommentToken(2);\n this.state = State.BOGUS_COMMENT;\n this._stateBogusComment(cp);\n }\n }\n // Comment start state\n //------------------------------------------------------------------\n _stateCommentStart(cp) {\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_START_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n const token = this.currentToken;\n this.emitCurrentComment(token);\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment start dash state\n //------------------------------------------------------------------\n _stateCommentStartDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptClosingOfEmptyComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment state\n //------------------------------------------------------------------\n _stateComment(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n this.state = State.COMMENT_LESS_THAN_SIGN;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.data += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += String.fromCodePoint(cp);\n }\n }\n }\n // Comment less-than sign state\n //------------------------------------------------------------------\n _stateCommentLessThanSign(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.EXCLAMATION_MARK: {\n token.data += '!';\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG;\n break;\n }\n case $.LESS_THAN_SIGN: {\n token.data += '<';\n break;\n }\n default: {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment less-than sign bang state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBang(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;\n }\n else {\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n // Comment less-than sign bang dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDash(cp) {\n if (cp === $.HYPHEN_MINUS) {\n this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;\n }\n else {\n this.state = State.COMMENT_END_DASH;\n this._stateCommentEndDash(cp);\n }\n }\n // Comment less-than sign bang dash dash state\n //------------------------------------------------------------------\n _stateCommentLessThanSignBangDashDash(cp) {\n if (cp !== $.GREATER_THAN_SIGN && cp !== $.EOF) {\n this._err(ERR.nestedComment);\n }\n this.state = State.COMMENT_END;\n this._stateCommentEnd(cp);\n }\n // Comment end dash state\n //------------------------------------------------------------------\n _stateCommentEndDash(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n this.state = State.COMMENT_END;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '-';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end state\n //------------------------------------------------------------------\n _stateCommentEnd(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EXCLAMATION_MARK: {\n this.state = State.COMMENT_END_BANG;\n break;\n }\n case $.HYPHEN_MINUS: {\n token.data += '-';\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // Comment end bang state\n //------------------------------------------------------------------\n _stateCommentEndBang(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.HYPHEN_MINUS: {\n token.data += '--!';\n this.state = State.COMMENT_END_DASH;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.incorrectlyClosedComment);\n this.state = State.DATA;\n this.emitCurrentComment(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInComment);\n this.emitCurrentComment(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.data += '--!';\n this.state = State.COMMENT;\n this._stateComment(cp);\n }\n }\n }\n // DOCTYPE state\n //------------------------------------------------------------------\n _stateDoctype(cp) {\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingWhitespaceBeforeDoctypeName);\n this.state = State.BEFORE_DOCTYPE_NAME;\n this._stateBeforeDoctypeName(cp);\n }\n }\n }\n // Before DOCTYPE name state\n //------------------------------------------------------------------\n _stateBeforeDoctypeName(cp) {\n if (isAsciiUpper(cp)) {\n this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));\n this.state = State.DOCTYPE_NAME;\n }\n else\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n this._createDoctypeToken(REPLACEMENT_CHARACTER);\n this.state = State.DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeName);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n this._createDoctypeToken(null);\n const token = this.currentToken;\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._createDoctypeToken(String.fromCodePoint(cp));\n this.state = State.DOCTYPE_NAME;\n }\n }\n }\n // DOCTYPE name state\n //------------------------------------------------------------------\n _stateDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.AFTER_DOCTYPE_NAME;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.name += REPLACEMENT_CHARACTER;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);\n }\n }\n }\n // After DOCTYPE name state\n //------------------------------------------------------------------\n _stateAfterDoctypeName(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n if (this._consumeSequenceIfMatch($$.PUBLIC, false)) {\n this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;\n }\n else if (this._consumeSequenceIfMatch($$.SYSTEM, false)) {\n this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;\n }\n //NOTE: sequence lookup can be abrupted by hibernation. In that case lookup\n //results are no longer valid and we will need to start over.\n else if (!this._ensureHibernation()) {\n this._err(ERR.invalidCharacterSequenceAfterDoctypeName);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n }\n // After DOCTYPE public keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.publicId = '';\n this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE public identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE public identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypePublicIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.publicId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypePublicIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.publicId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE public identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypePublicIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Between DOCTYPE public and system identifiers state\n //------------------------------------------------------------------\n _stateBetweenDoctypePublicAndSystemIdentifiers(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // After DOCTYPE system keyword state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemKeyword(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.QUOTATION_MARK: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Before DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateBeforeDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.QUOTATION_MARK: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;\n break;\n }\n case $.APOSTROPHE: {\n token.systemId = '';\n this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.missingDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.DATA;\n this.emitCurrentDoctype(token);\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // DOCTYPE system identifier (double-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierDoubleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.QUOTATION_MARK: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // DOCTYPE system identifier (single-quoted) state\n //------------------------------------------------------------------\n _stateDoctypeSystemIdentifierSingleQuoted(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.APOSTROPHE: {\n this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n token.systemId += REPLACEMENT_CHARACTER;\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this._err(ERR.abruptDoctypeSystemIdentifier);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n token.systemId += String.fromCodePoint(cp);\n }\n }\n }\n // After DOCTYPE system identifier state\n //------------------------------------------------------------------\n _stateAfterDoctypeSystemIdentifier(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.SPACE:\n case $.LINE_FEED:\n case $.TABULATION:\n case $.FORM_FEED: {\n // Ignore whitespace\n break;\n }\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInDoctype);\n token.forceQuirks = true;\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default: {\n this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);\n this.state = State.BOGUS_DOCTYPE;\n this._stateBogusDoctype(cp);\n }\n }\n }\n // Bogus DOCTYPE state\n //------------------------------------------------------------------\n _stateBogusDoctype(cp) {\n const token = this.currentToken;\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.emitCurrentDoctype(token);\n this.state = State.DATA;\n break;\n }\n case $.NULL: {\n this._err(ERR.unexpectedNullCharacter);\n break;\n }\n case $.EOF: {\n this.emitCurrentDoctype(token);\n this._emitEOFToken();\n break;\n }\n default:\n // Do nothing\n }\n }\n // CDATA section state\n //------------------------------------------------------------------\n _stateCdataSection(cp) {\n switch (cp) {\n case $.RIGHT_SQUARE_BRACKET: {\n this.state = State.CDATA_SECTION_BRACKET;\n break;\n }\n case $.EOF: {\n this._err(ERR.eofInCdata);\n this._emitEOFToken();\n break;\n }\n default: {\n this._emitCodePoint(cp);\n }\n }\n }\n // CDATA section bracket state\n //------------------------------------------------------------------\n _stateCdataSectionBracket(cp) {\n if (cp === $.RIGHT_SQUARE_BRACKET) {\n this.state = State.CDATA_SECTION_END;\n }\n else {\n this._emitChars(']');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n // CDATA section end state\n //------------------------------------------------------------------\n _stateCdataSectionEnd(cp) {\n switch (cp) {\n case $.GREATER_THAN_SIGN: {\n this.state = State.DATA;\n break;\n }\n case $.RIGHT_SQUARE_BRACKET: {\n this._emitChars(']');\n break;\n }\n default: {\n this._emitChars(']]');\n this.state = State.CDATA_SECTION;\n this._stateCdataSection(cp);\n }\n }\n }\n // Character reference state\n //------------------------------------------------------------------\n _stateCharacterReference() {\n let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);\n if (length < 0) {\n if (this.preprocessor.lastChunkWritten) {\n length = this.entityDecoder.end();\n }\n else {\n // Wait for the rest of the entity.\n this.active = false;\n // Mark the entire buffer as read.\n this.preprocessor.pos = this.preprocessor.html.length - 1;\n this.consumedAfterSnapshot = 0;\n this.preprocessor.endOfChunkHit = true;\n return;\n }\n }\n if (length === 0) {\n // This was not a valid entity. Go back to the beginning, and\n // figure out what to do.\n this.preprocessor.pos = this.entityStartPos;\n this._flushCodePointConsumedAsCharacterReference($.AMPERSAND);\n this.state =\n !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric(this.preprocessor.peek(1))\n ? State.AMBIGUOUS_AMPERSAND\n : this.returnState;\n }\n else {\n // We successfully parsed an entity. Switch to the return state.\n this.state = this.returnState;\n }\n }\n // Ambiguos ampersand state\n //------------------------------------------------------------------\n _stateAmbiguousAmpersand(cp) {\n if (isAsciiAlphaNumeric(cp)) {\n this._flushCodePointConsumedAsCharacterReference(cp);\n }\n else {\n if (cp === $.SEMICOLON) {\n this._err(ERR.unknownNamedCharacterReference);\n }\n this.state = this.returnState;\n this._callState(cp);\n }\n }\n}\n","import { TAG_ID as $, NS, NUMBERED_HEADERS } from '../common/html.js';\n//Element utils\nconst IMPLICIT_END_TAG_REQUIRED = new Set([$.DD, $.DT, $.LI, $.OPTGROUP, $.OPTION, $.P, $.RB, $.RP, $.RT, $.RTC]);\nconst IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = new Set([\n ...IMPLICIT_END_TAG_REQUIRED,\n $.CAPTION,\n $.COLGROUP,\n $.TBODY,\n $.TD,\n $.TFOOT,\n $.TH,\n $.THEAD,\n $.TR,\n]);\nconst SCOPING_ELEMENTS_HTML = new Set([\n $.APPLET,\n $.CAPTION,\n $.HTML,\n $.MARQUEE,\n $.OBJECT,\n $.TABLE,\n $.TD,\n $.TEMPLATE,\n $.TH,\n]);\nconst SCOPING_ELEMENTS_HTML_LIST = new Set([...SCOPING_ELEMENTS_HTML, $.OL, $.UL]);\nconst SCOPING_ELEMENTS_HTML_BUTTON = new Set([...SCOPING_ELEMENTS_HTML, $.BUTTON]);\nconst SCOPING_ELEMENTS_MATHML = new Set([$.ANNOTATION_XML, $.MI, $.MN, $.MO, $.MS, $.MTEXT]);\nconst SCOPING_ELEMENTS_SVG = new Set([$.DESC, $.FOREIGN_OBJECT, $.TITLE]);\nconst TABLE_ROW_CONTEXT = new Set([$.TR, $.TEMPLATE, $.HTML]);\nconst TABLE_BODY_CONTEXT = new Set([$.TBODY, $.TFOOT, $.THEAD, $.TEMPLATE, $.HTML]);\nconst TABLE_CONTEXT = new Set([$.TABLE, $.TEMPLATE, $.HTML]);\nconst TABLE_CELLS = new Set([$.TD, $.TH]);\n//Stack of open elements\nexport class OpenElementStack {\n get currentTmplContentOrNode() {\n return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;\n }\n constructor(document, treeAdapter, handler) {\n this.treeAdapter = treeAdapter;\n this.handler = handler;\n this.items = [];\n this.tagIDs = [];\n this.stackTop = -1;\n this.tmplCount = 0;\n this.currentTagId = $.UNKNOWN;\n this.current = document;\n }\n //Index of element\n _indexOf(element) {\n return this.items.lastIndexOf(element, this.stackTop);\n }\n //Update current element\n _isInTemplate() {\n return this.currentTagId === $.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;\n }\n _updateCurrentElement() {\n this.current = this.items[this.stackTop];\n this.currentTagId = this.tagIDs[this.stackTop];\n }\n //Mutations\n push(element, tagID) {\n this.stackTop++;\n this.items[this.stackTop] = element;\n this.current = element;\n this.tagIDs[this.stackTop] = tagID;\n this.currentTagId = tagID;\n if (this._isInTemplate()) {\n this.tmplCount++;\n }\n this.handler.onItemPush(element, tagID, true);\n }\n pop() {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount--;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, true);\n }\n replace(oldElement, newElement) {\n const idx = this._indexOf(oldElement);\n this.items[idx] = newElement;\n if (idx === this.stackTop) {\n this.current = newElement;\n }\n }\n insertAfter(referenceElement, newElement, newElementID) {\n const insertionIdx = this._indexOf(referenceElement) + 1;\n this.items.splice(insertionIdx, 0, newElement);\n this.tagIDs.splice(insertionIdx, 0, newElementID);\n this.stackTop++;\n if (insertionIdx === this.stackTop) {\n this._updateCurrentElement();\n }\n if (this.current && this.currentTagId !== undefined) {\n this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);\n }\n }\n popUntilTagNamePopped(tagName) {\n let targetIdx = this.stackTop + 1;\n do {\n targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);\n } while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);\n this.shortenToLength(Math.max(targetIdx, 0));\n }\n shortenToLength(idx) {\n while (this.stackTop >= idx) {\n const popped = this.current;\n if (this.tmplCount > 0 && this._isInTemplate()) {\n this.tmplCount -= 1;\n }\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(popped, this.stackTop < idx);\n }\n }\n popUntilElementPopped(element) {\n const idx = this._indexOf(element);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilPopped(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(Math.max(idx, 0));\n }\n popUntilNumberedHeaderPopped() {\n this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);\n }\n popUntilTableCellPopped() {\n this.popUntilPopped(TABLE_CELLS, NS.HTML);\n }\n popAllUpToHtmlElement() {\n //NOTE: here we assume that the root <html> element is always first in the open element stack, so\n //we perform this fast stack clean up.\n this.tmplCount = 0;\n this.shortenToLength(1);\n }\n _indexOfTagNames(tagNames, namespace) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {\n return i;\n }\n }\n return -1;\n }\n clearBackTo(tagNames, targetNS) {\n const idx = this._indexOfTagNames(tagNames, targetNS);\n this.shortenToLength(idx + 1);\n }\n clearBackToTableContext() {\n this.clearBackTo(TABLE_CONTEXT, NS.HTML);\n }\n clearBackToTableBodyContext() {\n this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);\n }\n clearBackToTableRowContext() {\n this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);\n }\n remove(element) {\n const idx = this._indexOf(element);\n if (idx >= 0) {\n if (idx === this.stackTop) {\n this.pop();\n }\n else {\n this.items.splice(idx, 1);\n this.tagIDs.splice(idx, 1);\n this.stackTop--;\n this._updateCurrentElement();\n this.handler.onItemPop(element, false);\n }\n }\n }\n //Search\n tryPeekProperlyNestedBodyElement() {\n //Properly nested <body> element (should be second element in stack).\n return this.stackTop >= 1 && this.tagIDs[1] === $.BODY ? this.items[1] : null;\n }\n contains(element) {\n return this._indexOf(element) > -1;\n }\n getCommonAncestor(element) {\n const elementIdx = this._indexOf(element) - 1;\n return elementIdx >= 0 ? this.items[elementIdx] : null;\n }\n isRootHtmlElementCurrent() {\n return this.stackTop === 0 && this.tagIDs[0] === $.HTML;\n }\n //Element in scope\n hasInDynamicScope(tagName, htmlScope) {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (tn === tagName)\n return true;\n if (htmlScope.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);\n }\n hasInListItemScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);\n }\n hasInButtonScope(tagName) {\n return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);\n }\n hasNumberedHeaderInScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n const tn = this.tagIDs[i];\n switch (this.treeAdapter.getNamespaceURI(this.items[i])) {\n case NS.HTML: {\n if (NUMBERED_HEADERS.has(tn))\n return true;\n if (SCOPING_ELEMENTS_HTML.has(tn))\n return false;\n break;\n }\n case NS.SVG: {\n if (SCOPING_ELEMENTS_SVG.has(tn))\n return false;\n break;\n }\n case NS.MATHML: {\n if (SCOPING_ELEMENTS_MATHML.has(tn))\n return false;\n break;\n }\n }\n }\n return true;\n }\n hasInTableScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasTableBodyContextInTableScope() {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n return true;\n }\n case $.TABLE:\n case $.HTML: {\n return false;\n }\n }\n }\n return true;\n }\n hasInSelectScope(tagName) {\n for (let i = this.stackTop; i >= 0; i--) {\n if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {\n continue;\n }\n switch (this.tagIDs[i]) {\n case tagName: {\n return true;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n break;\n }\n default: {\n return false;\n }\n }\n }\n return true;\n }\n //Implied end tags\n generateImpliedEndTags() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsThoroughly() {\n while (this.currentTagId !== undefined && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n generateImpliedEndTagsWithExclusion(exclusionId) {\n while (this.currentTagId !== undefined &&\n this.currentTagId !== exclusionId &&\n IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {\n this.pop();\n }\n }\n}\n","//Const\nconst NOAH_ARK_CAPACITY = 3;\nexport var EntryType;\n(function (EntryType) {\n EntryType[EntryType[\"Marker\"] = 0] = \"Marker\";\n EntryType[EntryType[\"Element\"] = 1] = \"Element\";\n})(EntryType || (EntryType = {}));\nconst MARKER = { type: EntryType.Marker };\n//List of formatting elements\nexport class FormattingElementList {\n constructor(treeAdapter) {\n this.treeAdapter = treeAdapter;\n this.entries = [];\n this.bookmark = null;\n }\n //Noah Ark's condition\n //OPTIMIZATION: at first we try to find possible candidates for exclusion using\n //lightweight heuristics without thorough attributes check.\n _getNoahArkConditionCandidates(newElement, neAttrs) {\n const candidates = [];\n const neAttrsLength = neAttrs.length;\n const neTagName = this.treeAdapter.getTagName(newElement);\n const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);\n for (let i = 0; i < this.entries.length; i++) {\n const entry = this.entries[i];\n if (entry.type === EntryType.Marker) {\n break;\n }\n const { element } = entry;\n if (this.treeAdapter.getTagName(element) === neTagName &&\n this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {\n const elementAttrs = this.treeAdapter.getAttrList(element);\n if (elementAttrs.length === neAttrsLength) {\n candidates.push({ idx: i, attrs: elementAttrs });\n }\n }\n }\n return candidates;\n }\n _ensureNoahArkCondition(newElement) {\n if (this.entries.length < NOAH_ARK_CAPACITY)\n return;\n const neAttrs = this.treeAdapter.getAttrList(newElement);\n const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);\n if (candidates.length < NOAH_ARK_CAPACITY)\n return;\n //NOTE: build attrs map for the new element, so we can perform fast lookups\n const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));\n let validCandidates = 0;\n //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met\n for (let i = 0; i < candidates.length; i++) {\n const candidate = candidates[i];\n // We know that `candidate.attrs.length === neAttrs.length`\n if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {\n validCandidates += 1;\n if (validCandidates >= NOAH_ARK_CAPACITY) {\n this.entries.splice(candidate.idx, 1);\n }\n }\n }\n }\n //Mutations\n insertMarker() {\n this.entries.unshift(MARKER);\n }\n pushElement(element, token) {\n this._ensureNoahArkCondition(element);\n this.entries.unshift({\n type: EntryType.Element,\n element,\n token,\n });\n }\n insertElementAfterBookmark(element, token) {\n const bookmarkIdx = this.entries.indexOf(this.bookmark);\n this.entries.splice(bookmarkIdx, 0, {\n type: EntryType.Element,\n element,\n token,\n });\n }\n removeEntry(entry) {\n const entryIndex = this.entries.indexOf(entry);\n if (entryIndex !== -1) {\n this.entries.splice(entryIndex, 1);\n }\n }\n /**\n * Clears the list of formatting elements up to the last marker.\n *\n * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker\n */\n clearToLastMarker() {\n const markerIdx = this.entries.indexOf(MARKER);\n if (markerIdx === -1) {\n this.entries.length = 0;\n }\n else {\n this.entries.splice(0, markerIdx + 1);\n }\n }\n //Search\n getElementEntryInScopeWithTagName(tagName) {\n const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName);\n return entry && entry.type === EntryType.Element ? entry : null;\n }\n getElementEntry(element) {\n return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element);\n }\n}\n","import { DOCUMENT_MODE } from '../common/html.js';\nexport const defaultTreeAdapter = {\n //Node construction\n createDocument() {\n return {\n nodeName: '#document',\n mode: DOCUMENT_MODE.NO_QUIRKS,\n childNodes: [],\n };\n },\n createDocumentFragment() {\n return {\n nodeName: '#document-fragment',\n childNodes: [],\n };\n },\n createElement(tagName, namespaceURI, attrs) {\n return {\n nodeName: tagName,\n tagName,\n attrs,\n namespaceURI,\n childNodes: [],\n parentNode: null,\n };\n },\n createCommentNode(data) {\n return {\n nodeName: '#comment',\n data,\n parentNode: null,\n };\n },\n createTextNode(value) {\n return {\n nodeName: '#text',\n value,\n parentNode: null,\n };\n },\n //Tree mutation\n appendChild(parentNode, newNode) {\n parentNode.childNodes.push(newNode);\n newNode.parentNode = parentNode;\n },\n insertBefore(parentNode, newNode, referenceNode) {\n const insertionIdx = parentNode.childNodes.indexOf(referenceNode);\n parentNode.childNodes.splice(insertionIdx, 0, newNode);\n newNode.parentNode = parentNode;\n },\n setTemplateContent(templateElement, contentElement) {\n templateElement.content = contentElement;\n },\n getTemplateContent(templateElement) {\n return templateElement.content;\n },\n setDocumentType(document, name, publicId, systemId) {\n const doctypeNode = document.childNodes.find((node) => node.nodeName === '#documentType');\n if (doctypeNode) {\n doctypeNode.name = name;\n doctypeNode.publicId = publicId;\n doctypeNode.systemId = systemId;\n }\n else {\n const node = {\n nodeName: '#documentType',\n name,\n publicId,\n systemId,\n parentNode: null,\n };\n defaultTreeAdapter.appendChild(document, node);\n }\n },\n setDocumentMode(document, mode) {\n document.mode = mode;\n },\n getDocumentMode(document) {\n return document.mode;\n },\n detachNode(node) {\n if (node.parentNode) {\n const idx = node.parentNode.childNodes.indexOf(node);\n node.parentNode.childNodes.splice(idx, 1);\n node.parentNode = null;\n }\n },\n insertText(parentNode, text) {\n if (parentNode.childNodes.length > 0) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];\n if (defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n return;\n }\n }\n defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text));\n },\n insertTextBefore(parentNode, text, referenceNode) {\n const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];\n if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {\n prevNode.value += text;\n }\n else {\n defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text), referenceNode);\n }\n },\n adoptAttributes(recipient, attrs) {\n const recipientAttrsMap = new Set(recipient.attrs.map((attr) => attr.name));\n for (let j = 0; j < attrs.length; j++) {\n if (!recipientAttrsMap.has(attrs[j].name)) {\n recipient.attrs.push(attrs[j]);\n }\n }\n },\n //Tree traversing\n getFirstChild(node) {\n return node.childNodes[0];\n },\n getChildNodes(node) {\n return node.childNodes;\n },\n getParentNode(node) {\n return node.parentNode;\n },\n getAttrList(element) {\n return element.attrs;\n },\n //Node data\n getTagName(element) {\n return element.tagName;\n },\n getNamespaceURI(element) {\n return element.namespaceURI;\n },\n getTextNodeContent(textNode) {\n return textNode.value;\n },\n getCommentNodeContent(commentNode) {\n return commentNode.data;\n },\n getDocumentTypeNodeName(doctypeNode) {\n return doctypeNode.name;\n },\n getDocumentTypeNodePublicId(doctypeNode) {\n return doctypeNode.publicId;\n },\n getDocumentTypeNodeSystemId(doctypeNode) {\n return doctypeNode.systemId;\n },\n //Node types\n isTextNode(node) {\n return node.nodeName === '#text';\n },\n isCommentNode(node) {\n return node.nodeName === '#comment';\n },\n isDocumentTypeNode(node) {\n return node.nodeName === '#documentType';\n },\n isElementNode(node) {\n return Object.prototype.hasOwnProperty.call(node, 'tagName');\n },\n // Source code location\n setNodeSourceCodeLocation(node, location) {\n node.sourceCodeLocation = location;\n },\n getNodeSourceCodeLocation(node) {\n return node.sourceCodeLocation;\n },\n updateNodeSourceCodeLocation(node, endLocation) {\n node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };\n },\n};\n","import { DOCUMENT_MODE } from './html.js';\n//Const\nconst VALID_DOCTYPE_NAME = 'html';\nconst VALID_SYSTEM_ID = 'about:legacy-compat';\nconst QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd';\nconst QUIRKS_MODE_PUBLIC_ID_PREFIXES = [\n '+//silmaril//dtd html pro v0r11 19970101//',\n '-//as//dtd html 3.0 aswedit + extensions//',\n '-//advasoft ltd//dtd html 3.0 aswedit + extensions//',\n '-//ietf//dtd html 2.0 level 1//',\n '-//ietf//dtd html 2.0 level 2//',\n '-//ietf//dtd html 2.0 strict level 1//',\n '-//ietf//dtd html 2.0 strict level 2//',\n '-//ietf//dtd html 2.0 strict//',\n '-//ietf//dtd html 2.0//',\n '-//ietf//dtd html 2.1e//',\n '-//ietf//dtd html 3.0//',\n '-//ietf//dtd html 3.2 final//',\n '-//ietf//dtd html 3.2//',\n '-//ietf//dtd html 3//',\n '-//ietf//dtd html level 0//',\n '-//ietf//dtd html level 1//',\n '-//ietf//dtd html level 2//',\n '-//ietf//dtd html level 3//',\n '-//ietf//dtd html strict level 0//',\n '-//ietf//dtd html strict level 1//',\n '-//ietf//dtd html strict level 2//',\n '-//ietf//dtd html strict level 3//',\n '-//ietf//dtd html strict//',\n '-//ietf//dtd html//',\n '-//metrius//dtd metrius presentational//',\n '-//microsoft//dtd internet explorer 2.0 html strict//',\n '-//microsoft//dtd internet explorer 2.0 html//',\n '-//microsoft//dtd internet explorer 2.0 tables//',\n '-//microsoft//dtd internet explorer 3.0 html strict//',\n '-//microsoft//dtd internet explorer 3.0 html//',\n '-//microsoft//dtd internet explorer 3.0 tables//',\n '-//netscape comm. corp.//dtd html//',\n '-//netscape comm. corp.//dtd strict html//',\n \"-//o'reilly and associates//dtd html 2.0//\",\n \"-//o'reilly and associates//dtd html extended 1.0//\",\n \"-//o'reilly and associates//dtd html extended relaxed 1.0//\",\n '-//sq//dtd html 2.0 hotmetal + extensions//',\n '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//',\n '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//',\n '-//spyglass//dtd html 2.0 extended//',\n '-//sun microsystems corp.//dtd hotjava html//',\n '-//sun microsystems corp.//dtd hotjava strict html//',\n '-//w3c//dtd html 3 1995-03-24//',\n '-//w3c//dtd html 3.2 draft//',\n '-//w3c//dtd html 3.2 final//',\n '-//w3c//dtd html 3.2//',\n '-//w3c//dtd html 3.2s draft//',\n '-//w3c//dtd html 4.0 frameset//',\n '-//w3c//dtd html 4.0 transitional//',\n '-//w3c//dtd html experimental 19960712//',\n '-//w3c//dtd html experimental 970421//',\n '-//w3c//dtd w3 html//',\n '-//w3o//dtd w3 html 3.0//',\n '-//webtechs//dtd mozilla html 2.0//',\n '-//webtechs//dtd mozilla html//',\n];\nconst QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...QUIRKS_MODE_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\nconst QUIRKS_MODE_PUBLIC_IDS = new Set([\n '-//w3o//dtd w3 html strict 3.0//en//',\n '-/w3c/dtd html 4.0 transitional/en',\n 'html',\n]);\nconst LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//'];\nconst LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [\n ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,\n '-//w3c//dtd html 4.01 frameset//',\n '-//w3c//dtd html 4.01 transitional//',\n];\n//Utils\nfunction hasPrefix(publicId, prefixes) {\n return prefixes.some((prefix) => publicId.startsWith(prefix));\n}\n//API\nexport function isConforming(token) {\n return (token.name === VALID_DOCTYPE_NAME &&\n token.publicId === null &&\n (token.systemId === null || token.systemId === VALID_SYSTEM_ID));\n}\nexport function getDocumentMode(token) {\n if (token.name !== VALID_DOCTYPE_NAME) {\n return DOCUMENT_MODE.QUIRKS;\n }\n const { systemId } = token;\n if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let { publicId } = token;\n if (publicId !== null) {\n publicId = publicId.toLowerCase();\n if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.QUIRKS;\n }\n prefixes =\n systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;\n if (hasPrefix(publicId, prefixes)) {\n return DOCUMENT_MODE.LIMITED_QUIRKS;\n }\n }\n return DOCUMENT_MODE.NO_QUIRKS;\n}\n","import { TAG_ID as $, NS, ATTRS, getTagID } from './html.js';\n//MIME types\nconst MIME_TYPES = {\n TEXT_HTML: 'text/html',\n APPLICATION_XML: 'application/xhtml+xml',\n};\n//Attributes\nconst DEFINITION_URL_ATTR = 'definitionurl';\nconst ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL';\nconst SVG_ATTRS_ADJUSTMENT_MAP = new Map([\n 'attributeName',\n 'attributeType',\n 'baseFrequency',\n 'baseProfile',\n 'calcMode',\n 'clipPathUnits',\n 'diffuseConstant',\n 'edgeMode',\n 'filterUnits',\n 'glyphRef',\n 'gradientTransform',\n 'gradientUnits',\n 'kernelMatrix',\n 'kernelUnitLength',\n 'keyPoints',\n 'keySplines',\n 'keyTimes',\n 'lengthAdjust',\n 'limitingConeAngle',\n 'markerHeight',\n 'markerUnits',\n 'markerWidth',\n 'maskContentUnits',\n 'maskUnits',\n 'numOctaves',\n 'pathLength',\n 'patternContentUnits',\n 'patternTransform',\n 'patternUnits',\n 'pointsAtX',\n 'pointsAtY',\n 'pointsAtZ',\n 'preserveAlpha',\n 'preserveAspectRatio',\n 'primitiveUnits',\n 'refX',\n 'refY',\n 'repeatCount',\n 'repeatDur',\n 'requiredExtensions',\n 'requiredFeatures',\n 'specularConstant',\n 'specularExponent',\n 'spreadMethod',\n 'startOffset',\n 'stdDeviation',\n 'stitchTiles',\n 'surfaceScale',\n 'systemLanguage',\n 'tableValues',\n 'targetX',\n 'targetY',\n 'textLength',\n 'viewBox',\n 'viewTarget',\n 'xChannelSelector',\n 'yChannelSelector',\n 'zoomAndPan',\n].map((attr) => [attr.toLowerCase(), attr]));\nconst XML_ATTRS_ADJUSTMENT_MAP = new Map([\n ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: NS.XLINK }],\n ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: NS.XLINK }],\n ['xlink:href', { prefix: 'xlink', name: 'href', namespace: NS.XLINK }],\n ['xlink:role', { prefix: 'xlink', name: 'role', namespace: NS.XLINK }],\n ['xlink:show', { prefix: 'xlink', name: 'show', namespace: NS.XLINK }],\n ['xlink:title', { prefix: 'xlink', name: 'title', namespace: NS.XLINK }],\n ['xlink:type', { prefix: 'xlink', name: 'type', namespace: NS.XLINK }],\n ['xml:lang', { prefix: 'xml', name: 'lang', namespace: NS.XML }],\n ['xml:space', { prefix: 'xml', name: 'space', namespace: NS.XML }],\n ['xmlns', { prefix: '', name: 'xmlns', namespace: NS.XMLNS }],\n ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: NS.XMLNS }],\n]);\n//SVG tag names adjustment map\nexport const SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([\n 'altGlyph',\n 'altGlyphDef',\n 'altGlyphItem',\n 'animateColor',\n 'animateMotion',\n 'animateTransform',\n 'clipPath',\n 'feBlend',\n 'feColorMatrix',\n 'feComponentTransfer',\n 'feComposite',\n 'feConvolveMatrix',\n 'feDiffuseLighting',\n 'feDisplacementMap',\n 'feDistantLight',\n 'feFlood',\n 'feFuncA',\n 'feFuncB',\n 'feFuncG',\n 'feFuncR',\n 'feGaussianBlur',\n 'feImage',\n 'feMerge',\n 'feMergeNode',\n 'feMorphology',\n 'feOffset',\n 'fePointLight',\n 'feSpecularLighting',\n 'feSpotLight',\n 'feTile',\n 'feTurbulence',\n 'foreignObject',\n 'glyphRef',\n 'linearGradient',\n 'radialGradient',\n 'textPath',\n].map((tn) => [tn.toLowerCase(), tn]));\n//Tags that causes exit from foreign content\nconst EXITS_FOREIGN_CONTENT = new Set([\n $.B,\n $.BIG,\n $.BLOCKQUOTE,\n $.BODY,\n $.BR,\n $.CENTER,\n $.CODE,\n $.DD,\n $.DIV,\n $.DL,\n $.DT,\n $.EM,\n $.EMBED,\n $.H1,\n $.H2,\n $.H3,\n $.H4,\n $.H5,\n $.H6,\n $.HEAD,\n $.HR,\n $.I,\n $.IMG,\n $.LI,\n $.LISTING,\n $.MENU,\n $.META,\n $.NOBR,\n $.OL,\n $.P,\n $.PRE,\n $.RUBY,\n $.S,\n $.SMALL,\n $.SPAN,\n $.STRONG,\n $.STRIKE,\n $.SUB,\n $.SUP,\n $.TABLE,\n $.TT,\n $.U,\n $.UL,\n $.VAR,\n]);\n//Check exit from foreign content\nexport function causesExit(startTagToken) {\n const tn = startTagToken.tagID;\n const isFontWithAttrs = tn === $.FONT &&\n startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);\n return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);\n}\n//Token adjustments\nexport function adjustTokenMathMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n if (token.attrs[i].name === DEFINITION_URL_ATTR) {\n token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;\n break;\n }\n }\n}\nexport function adjustTokenSVGAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrName != null) {\n token.attrs[i].name = adjustedAttrName;\n }\n }\n}\nexport function adjustTokenXMLAttrs(token) {\n for (let i = 0; i < token.attrs.length; i++) {\n const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);\n if (adjustedAttrEntry) {\n token.attrs[i].prefix = adjustedAttrEntry.prefix;\n token.attrs[i].name = adjustedAttrEntry.name;\n token.attrs[i].namespace = adjustedAttrEntry.namespace;\n }\n }\n}\nexport function adjustTokenSVGTagName(token) {\n const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);\n if (adjustedTagName != null) {\n token.tagName = adjustedTagName;\n token.tagID = getTagID(token.tagName);\n }\n}\n//Integration points\nfunction isMathMLTextIntegrationPoint(tn, ns) {\n return ns === NS.MATHML && (tn === $.MI || tn === $.MO || tn === $.MN || tn === $.MS || tn === $.MTEXT);\n}\nfunction isHtmlIntegrationPoint(tn, ns, attrs) {\n if (ns === NS.MATHML && tn === $.ANNOTATION_XML) {\n for (let i = 0; i < attrs.length; i++) {\n if (attrs[i].name === ATTRS.ENCODING) {\n const value = attrs[i].value.toLowerCase();\n return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;\n }\n }\n }\n return ns === NS.SVG && (tn === $.FOREIGN_OBJECT || tn === $.DESC || tn === $.TITLE);\n}\nexport function isIntegrationPoint(tn, ns, attrs, foreignNS) {\n return (((!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) ||\n ((!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns)));\n}\n","import { Tokenizer, TokenizerMode } from '../tokenizer/index.js';\nimport { OpenElementStack } from './open-element-stack.js';\nimport { FormattingElementList, EntryType } from './formatting-element-list.js';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\nimport * as doctype from '../common/doctype.js';\nimport * as foreignContent from '../common/foreign-content.js';\nimport { ERR } from '../common/error-codes.js';\nimport * as unicode from '../common/unicode.js';\nimport { TAG_ID as $, TAG_NAMES as TN, NS, ATTRS, SPECIAL_ELEMENTS, DOCUMENT_MODE, NUMBERED_HEADERS, getTagID, } from '../common/html.js';\nimport { TokenType, getTokenAttr, } from '../common/token.js';\n//Misc constants\nconst HIDDEN_INPUT_TYPE = 'hidden';\n//Adoption agency loops iteration count\nconst AA_OUTER_LOOP_ITER = 8;\nconst AA_INNER_LOOP_ITER = 3;\n//Insertion modes\nvar InsertionMode;\n(function (InsertionMode) {\n InsertionMode[InsertionMode[\"INITIAL\"] = 0] = \"INITIAL\";\n InsertionMode[InsertionMode[\"BEFORE_HTML\"] = 1] = \"BEFORE_HTML\";\n InsertionMode[InsertionMode[\"BEFORE_HEAD\"] = 2] = \"BEFORE_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD\"] = 3] = \"IN_HEAD\";\n InsertionMode[InsertionMode[\"IN_HEAD_NO_SCRIPT\"] = 4] = \"IN_HEAD_NO_SCRIPT\";\n InsertionMode[InsertionMode[\"AFTER_HEAD\"] = 5] = \"AFTER_HEAD\";\n InsertionMode[InsertionMode[\"IN_BODY\"] = 6] = \"IN_BODY\";\n InsertionMode[InsertionMode[\"TEXT\"] = 7] = \"TEXT\";\n InsertionMode[InsertionMode[\"IN_TABLE\"] = 8] = \"IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TABLE_TEXT\"] = 9] = \"IN_TABLE_TEXT\";\n InsertionMode[InsertionMode[\"IN_CAPTION\"] = 10] = \"IN_CAPTION\";\n InsertionMode[InsertionMode[\"IN_COLUMN_GROUP\"] = 11] = \"IN_COLUMN_GROUP\";\n InsertionMode[InsertionMode[\"IN_TABLE_BODY\"] = 12] = \"IN_TABLE_BODY\";\n InsertionMode[InsertionMode[\"IN_ROW\"] = 13] = \"IN_ROW\";\n InsertionMode[InsertionMode[\"IN_CELL\"] = 14] = \"IN_CELL\";\n InsertionMode[InsertionMode[\"IN_SELECT\"] = 15] = \"IN_SELECT\";\n InsertionMode[InsertionMode[\"IN_SELECT_IN_TABLE\"] = 16] = \"IN_SELECT_IN_TABLE\";\n InsertionMode[InsertionMode[\"IN_TEMPLATE\"] = 17] = \"IN_TEMPLATE\";\n InsertionMode[InsertionMode[\"AFTER_BODY\"] = 18] = \"AFTER_BODY\";\n InsertionMode[InsertionMode[\"IN_FRAMESET\"] = 19] = \"IN_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_FRAMESET\"] = 20] = \"AFTER_FRAMESET\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_BODY\"] = 21] = \"AFTER_AFTER_BODY\";\n InsertionMode[InsertionMode[\"AFTER_AFTER_FRAMESET\"] = 22] = \"AFTER_AFTER_FRAMESET\";\n})(InsertionMode || (InsertionMode = {}));\nconst BASE_LOC = {\n startLine: -1,\n startCol: -1,\n startOffset: -1,\n endLine: -1,\n endCol: -1,\n endOffset: -1,\n};\nconst TABLE_STRUCTURE_TAGS = new Set([$.TABLE, $.TBODY, $.TFOOT, $.THEAD, $.TR]);\nconst defaultParserOptions = {\n scriptingEnabled: true,\n sourceCodeLocationInfo: false,\n treeAdapter: defaultTreeAdapter,\n onParseError: null,\n};\n//Parser\nexport class Parser {\n constructor(options, document, \n /** @internal */\n fragmentContext = null, \n /** @internal */\n scriptHandler = null) {\n this.fragmentContext = fragmentContext;\n this.scriptHandler = scriptHandler;\n this.currentToken = null;\n this.stopped = false;\n /** @internal */\n this.insertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.originalInsertionMode = InsertionMode.INITIAL;\n /** @internal */\n this.headElement = null;\n /** @internal */\n this.formElement = null;\n /** Indicates that the current node is not an element in the HTML namespace */\n this.currentNotInHTML = false;\n /**\n * The template insertion mode stack is maintained from the left.\n * Ie. the topmost element will always have index 0.\n *\n * @internal\n */\n this.tmplInsertionModeStack = [];\n /** @internal */\n this.pendingCharacterTokens = [];\n /** @internal */\n this.hasNonWhitespacePendingCharacterToken = false;\n /** @internal */\n this.framesetOk = true;\n /** @internal */\n this.skipNextNewLine = false;\n /** @internal */\n this.fosterParentingEnabled = false;\n this.options = {\n ...defaultParserOptions,\n ...options,\n };\n this.treeAdapter = this.options.treeAdapter;\n this.onParseError = this.options.onParseError;\n // Always enable location info if we report parse errors.\n if (this.onParseError) {\n this.options.sourceCodeLocationInfo = true;\n }\n this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument();\n this.tokenizer = new Tokenizer(this.options, this);\n this.activeFormattingElements = new FormattingElementList(this.treeAdapter);\n this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : $.UNKNOWN;\n this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);\n this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);\n }\n // API\n static parse(html, options) {\n const parser = new this(options);\n parser.tokenizer.write(html, true);\n return parser.document;\n }\n static getFragmentParser(fragmentContext, options) {\n const opts = {\n ...defaultParserOptions,\n ...options,\n };\n //NOTE: use a <template> element as the fragment context if no context element was provided,\n //so we will parse in a \"forgiving\" manner\n fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : (fragmentContext = opts.treeAdapter.createElement(TN.TEMPLATE, NS.HTML, []));\n //NOTE: create a fake element which will be used as the `document` for fragment parsing.\n //This is important for jsdom, where a new `document` cannot be created. This led to\n //fragment parsing messing with the main `document`.\n const documentMock = opts.treeAdapter.createElement('documentmock', NS.HTML, []);\n const parser = new this(opts, documentMock, fragmentContext);\n if (parser.fragmentContextID === $.TEMPLATE) {\n parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n }\n parser._initTokenizerForFragmentParsing();\n parser._insertFakeRootElement();\n parser._resetInsertionMode();\n parser._findFormInFragmentContext();\n return parser;\n }\n getFragment() {\n const rootElement = this.treeAdapter.getFirstChild(this.document);\n const fragment = this.treeAdapter.createDocumentFragment();\n this._adoptNodes(rootElement, fragment);\n return fragment;\n }\n //Errors\n /** @internal */\n _err(token, code, beforeToken) {\n var _a;\n if (!this.onParseError)\n return;\n const loc = (_a = token.location) !== null && _a !== void 0 ? _a : BASE_LOC;\n const err = {\n code,\n startLine: loc.startLine,\n startCol: loc.startCol,\n startOffset: loc.startOffset,\n endLine: beforeToken ? loc.startLine : loc.endLine,\n endCol: beforeToken ? loc.startCol : loc.endCol,\n endOffset: beforeToken ? loc.startOffset : loc.endOffset,\n };\n this.onParseError(err);\n }\n //Stack events\n /** @internal */\n onItemPush(node, tid, isTop) {\n var _a, _b;\n (_b = (_a = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a, node);\n if (isTop && this.openElements.stackTop > 0)\n this._setContextModes(node, tid);\n }\n /** @internal */\n onItemPop(node, isTop) {\n var _a, _b;\n if (this.options.sourceCodeLocationInfo) {\n this._setEndLocation(node, this.currentToken);\n }\n (_b = (_a = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a, node, this.openElements.current);\n if (isTop) {\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n this._setContextModes(current, currentTagId);\n }\n }\n _setContextModes(current, tid) {\n const isHTML = current === this.document || (current && this.treeAdapter.getNamespaceURI(current) === NS.HTML);\n this.currentNotInHTML = !isHTML;\n this.tokenizer.inForeignNode =\n !isHTML && current !== undefined && tid !== undefined && !this._isIntegrationPoint(tid, current);\n }\n /** @protected */\n _switchToTextParsing(currentToken, nextTokenizerState) {\n this._insertElement(currentToken, NS.HTML);\n this.tokenizer.state = nextTokenizerState;\n this.originalInsertionMode = this.insertionMode;\n this.insertionMode = InsertionMode.TEXT;\n }\n switchToPlaintextParsing() {\n this.insertionMode = InsertionMode.TEXT;\n this.originalInsertionMode = InsertionMode.IN_BODY;\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n }\n //Fragment parsing\n /** @protected */\n _getAdjustedCurrentElement() {\n return this.openElements.stackTop === 0 && this.fragmentContext\n ? this.fragmentContext\n : this.openElements.current;\n }\n /** @protected */\n _findFormInFragmentContext() {\n let node = this.fragmentContext;\n while (node) {\n if (this.treeAdapter.getTagName(node) === TN.FORM) {\n this.formElement = node;\n break;\n }\n node = this.treeAdapter.getParentNode(node);\n }\n }\n _initTokenizerForFragmentParsing() {\n if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {\n return;\n }\n switch (this.fragmentContextID) {\n case $.TITLE:\n case $.TEXTAREA: {\n this.tokenizer.state = TokenizerMode.RCDATA;\n break;\n }\n case $.STYLE:\n case $.XMP:\n case $.IFRAME:\n case $.NOEMBED:\n case $.NOFRAMES:\n case $.NOSCRIPT: {\n this.tokenizer.state = TokenizerMode.RAWTEXT;\n break;\n }\n case $.SCRIPT: {\n this.tokenizer.state = TokenizerMode.SCRIPT_DATA;\n break;\n }\n case $.PLAINTEXT: {\n this.tokenizer.state = TokenizerMode.PLAINTEXT;\n break;\n }\n default:\n // Do nothing\n }\n }\n //Tree mutation\n /** @protected */\n _setDocumentType(token) {\n const name = token.name || '';\n const publicId = token.publicId || '';\n const systemId = token.systemId || '';\n this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);\n if (token.location) {\n const documentChildren = this.treeAdapter.getChildNodes(this.document);\n const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));\n if (docTypeNode) {\n this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);\n }\n }\n }\n /** @protected */\n _attachElementToTree(element, location) {\n if (this.options.sourceCodeLocationInfo) {\n const loc = location && {\n ...location,\n startTag: location,\n };\n this.treeAdapter.setNodeSourceCodeLocation(element, loc);\n }\n if (this._shouldFosterParentOnInsertion()) {\n this._fosterParentElement(element);\n }\n else {\n const parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.appendChild(parent !== null && parent !== void 0 ? parent : this.document, element);\n }\n }\n /**\n * For self-closing tags. Add an element to the tree, but skip adding it\n * to the stack.\n */\n /** @protected */\n _appendElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n }\n /** @protected */\n _insertElement(token, namespaceURI) {\n const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);\n this._attachElementToTree(element, token.location);\n this.openElements.push(element, token.tagID);\n }\n /** @protected */\n _insertFakeElement(tagName, tagID) {\n const element = this.treeAdapter.createElement(tagName, NS.HTML, []);\n this._attachElementToTree(element, null);\n this.openElements.push(element, tagID);\n }\n /** @protected */\n _insertTemplate(token) {\n const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);\n const content = this.treeAdapter.createDocumentFragment();\n this.treeAdapter.setTemplateContent(tmpl, content);\n this._attachElementToTree(tmpl, token.location);\n this.openElements.push(tmpl, token.tagID);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(content, null);\n }\n /** @protected */\n _insertFakeRootElement() {\n const element = this.treeAdapter.createElement(TN.HTML, NS.HTML, []);\n if (this.options.sourceCodeLocationInfo)\n this.treeAdapter.setNodeSourceCodeLocation(element, null);\n this.treeAdapter.appendChild(this.openElements.current, element);\n this.openElements.push(element, $.HTML);\n }\n /** @protected */\n _appendCommentNode(token, parent) {\n const commentNode = this.treeAdapter.createCommentNode(token.data);\n this.treeAdapter.appendChild(parent, commentNode);\n if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);\n }\n }\n /** @protected */\n _insertCharacters(token) {\n let parent;\n let beforeElement;\n if (this._shouldFosterParentOnInsertion()) {\n ({ parent, beforeElement } = this._findFosterParentingLocation());\n if (beforeElement) {\n this.treeAdapter.insertTextBefore(parent, token.chars, beforeElement);\n }\n else {\n this.treeAdapter.insertText(parent, token.chars);\n }\n }\n else {\n parent = this.openElements.currentTmplContentOrNode;\n this.treeAdapter.insertText(parent, token.chars);\n }\n if (!token.location)\n return;\n const siblings = this.treeAdapter.getChildNodes(parent);\n const textNodeIdx = beforeElement ? siblings.lastIndexOf(beforeElement) : siblings.length;\n const textNode = siblings[textNodeIdx - 1];\n //NOTE: if we have a location assigned by another token, then just update the end position\n const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);\n if (tnLoc) {\n const { endLine, endCol, endOffset } = token.location;\n this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });\n }\n else if (this.options.sourceCodeLocationInfo) {\n this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);\n }\n }\n /** @protected */\n _adoptNodes(donor, recipient) {\n for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {\n this.treeAdapter.detachNode(child);\n this.treeAdapter.appendChild(recipient, child);\n }\n }\n /** @protected */\n _setEndLocation(element, closingToken) {\n if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {\n const ctLoc = closingToken.location;\n const tn = this.treeAdapter.getTagName(element);\n const endLoc = \n // NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing\n // tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.\n closingToken.type === TokenType.END_TAG && tn === closingToken.tagName\n ? {\n endTag: { ...ctLoc },\n endLine: ctLoc.endLine,\n endCol: ctLoc.endCol,\n endOffset: ctLoc.endOffset,\n }\n : {\n endLine: ctLoc.startLine,\n endCol: ctLoc.startCol,\n endOffset: ctLoc.startOffset,\n };\n this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);\n }\n }\n //Token processing\n shouldProcessStartTagTokenInForeignContent(token) {\n // Check that neither current === document, or ns === NS.HTML\n if (!this.currentNotInHTML)\n return false;\n let current;\n let currentTagId;\n if (this.openElements.stackTop === 0 && this.fragmentContext) {\n current = this.fragmentContext;\n currentTagId = this.fragmentContextID;\n }\n else {\n ({ current, currentTagId } = this.openElements);\n }\n if (token.tagID === $.SVG &&\n this.treeAdapter.getTagName(current) === TN.ANNOTATION_XML &&\n this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {\n return false;\n }\n return (\n // Check that `current` is not an integration point for HTML or MathML elements.\n this.tokenizer.inForeignNode ||\n // If it _is_ an integration point, then we might have to check that it is not an HTML\n // integration point.\n ((token.tagID === $.MGLYPH || token.tagID === $.MALIGNMARK) &&\n currentTagId !== undefined &&\n !this._isIntegrationPoint(currentTagId, current, NS.HTML)));\n }\n /** @protected */\n _processToken(token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n this.onCharacter(token);\n break;\n }\n case TokenType.NULL_CHARACTER: {\n this.onNullCharacter(token);\n break;\n }\n case TokenType.COMMENT: {\n this.onComment(token);\n break;\n }\n case TokenType.DOCTYPE: {\n this.onDoctype(token);\n break;\n }\n case TokenType.START_TAG: {\n this._processStartTag(token);\n break;\n }\n case TokenType.END_TAG: {\n this.onEndTag(token);\n break;\n }\n case TokenType.EOF: {\n this.onEof(token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n this.onWhitespaceCharacter(token);\n break;\n }\n }\n }\n //Integration points\n /** @protected */\n _isIntegrationPoint(tid, element, foreignNS) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n const attrs = this.treeAdapter.getAttrList(element);\n return foreignContent.isIntegrationPoint(tid, ns, attrs, foreignNS);\n }\n //Active formatting elements reconstruction\n /** @protected */\n _reconstructActiveFormattingElements() {\n const listLength = this.activeFormattingElements.entries.length;\n if (listLength) {\n const endIndex = this.activeFormattingElements.entries.findIndex((entry) => entry.type === EntryType.Marker || this.openElements.contains(entry.element));\n const unopenIdx = endIndex === -1 ? listLength - 1 : endIndex - 1;\n for (let i = unopenIdx; i >= 0; i--) {\n const entry = this.activeFormattingElements.entries[i];\n this._insertElement(entry.token, this.treeAdapter.getNamespaceURI(entry.element));\n entry.element = this.openElements.current;\n }\n }\n }\n //Close elements\n /** @protected */\n _closeTableCell() {\n this.openElements.generateImpliedEndTags();\n this.openElements.popUntilTableCellPopped();\n this.activeFormattingElements.clearToLastMarker();\n this.insertionMode = InsertionMode.IN_ROW;\n }\n /** @protected */\n _closePElement() {\n this.openElements.generateImpliedEndTagsWithExclusion($.P);\n this.openElements.popUntilTagNamePopped($.P);\n }\n //Insertion modes\n /** @protected */\n _resetInsertionMode() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n //Insertion mode reset map\n switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {\n case $.TR: {\n this.insertionMode = InsertionMode.IN_ROW;\n return;\n }\n case $.TBODY:\n case $.THEAD:\n case $.TFOOT: {\n this.insertionMode = InsertionMode.IN_TABLE_BODY;\n return;\n }\n case $.CAPTION: {\n this.insertionMode = InsertionMode.IN_CAPTION;\n return;\n }\n case $.COLGROUP: {\n this.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n return;\n }\n case $.TABLE: {\n this.insertionMode = InsertionMode.IN_TABLE;\n return;\n }\n case $.BODY: {\n this.insertionMode = InsertionMode.IN_BODY;\n return;\n }\n case $.FRAMESET: {\n this.insertionMode = InsertionMode.IN_FRAMESET;\n return;\n }\n case $.SELECT: {\n this._resetInsertionModeForSelect(i);\n return;\n }\n case $.TEMPLATE: {\n this.insertionMode = this.tmplInsertionModeStack[0];\n return;\n }\n case $.HTML: {\n this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;\n return;\n }\n case $.TD:\n case $.TH: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_CELL;\n return;\n }\n break;\n }\n case $.HEAD: {\n if (i > 0) {\n this.insertionMode = InsertionMode.IN_HEAD;\n return;\n }\n break;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_BODY;\n }\n /** @protected */\n _resetInsertionModeForSelect(selectIdx) {\n if (selectIdx > 0) {\n for (let i = selectIdx - 1; i > 0; i--) {\n const tn = this.openElements.tagIDs[i];\n if (tn === $.TEMPLATE) {\n break;\n }\n else if (tn === $.TABLE) {\n this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;\n return;\n }\n }\n }\n this.insertionMode = InsertionMode.IN_SELECT;\n }\n //Foster parenting\n /** @protected */\n _isElementCausesFosterParenting(tn) {\n return TABLE_STRUCTURE_TAGS.has(tn);\n }\n /** @protected */\n _shouldFosterParentOnInsertion() {\n return (this.fosterParentingEnabled &&\n this.openElements.currentTagId !== undefined &&\n this._isElementCausesFosterParenting(this.openElements.currentTagId));\n }\n /** @protected */\n _findFosterParentingLocation() {\n for (let i = this.openElements.stackTop; i >= 0; i--) {\n const openElement = this.openElements.items[i];\n switch (this.openElements.tagIDs[i]) {\n case $.TEMPLATE: {\n if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {\n return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };\n }\n break;\n }\n case $.TABLE: {\n const parent = this.treeAdapter.getParentNode(openElement);\n if (parent) {\n return { parent, beforeElement: openElement };\n }\n return { parent: this.openElements.items[i - 1], beforeElement: null };\n }\n default:\n // Do nothing\n }\n }\n return { parent: this.openElements.items[0], beforeElement: null };\n }\n /** @protected */\n _fosterParentElement(element) {\n const location = this._findFosterParentingLocation();\n if (location.beforeElement) {\n this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);\n }\n else {\n this.treeAdapter.appendChild(location.parent, element);\n }\n }\n //Special elements\n /** @protected */\n _isSpecialElement(element, id) {\n const ns = this.treeAdapter.getNamespaceURI(element);\n return SPECIAL_ELEMENTS[ns].has(id);\n }\n /** @internal */\n onCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n characterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE: {\n characterInBody(this, token);\n break;\n }\n case InsertionMode.TEXT:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n characterInTableText(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onNullCharacter(token) {\n this.skipNextNewLine = false;\n if (this.tokenizer.inForeignNode) {\n nullCharacterInForeignContent(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n tokenInColumnGroup(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n tokenAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onComment(token) {\n this.skipNextNewLine = false;\n if (this.currentNotInHTML) {\n appendComment(this, token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.INITIAL:\n case InsertionMode.BEFORE_HTML:\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n appendComment(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n appendCommentToRootHtmlElement(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n appendCommentToDocument(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onDoctype(token) {\n this.skipNextNewLine = false;\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n doctypeInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD:\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD: {\n this._err(token, ERR.misplacedDoctype);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onStartTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n this._processStartTag(token);\n if (token.selfClosing && !token.ackSelfClosing) {\n this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);\n }\n }\n /**\n * Processes a given start tag.\n *\n * `onStartTag` checks if a self-closing tag was recognized. When a token\n * is moved inbetween multiple insertion modes, this check for self-closing\n * could lead to false positives. To avoid this, `_processStartTag` is used\n * for nested calls.\n *\n * @param token The token to process.\n * @protected\n */\n _processStartTag(token) {\n if (this.shouldProcessStartTagTokenInForeignContent(token)) {\n startTagInForeignContent(this, token);\n }\n else {\n this._startTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _startTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n startTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n startTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n startTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n startTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n startTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n startTagInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n startTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n startTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n startTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n startTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n startTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n startTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n startTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n startTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n startTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n startTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n startTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n startTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n startTagAfterAfterBody(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n startTagAfterAfterFrameset(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEndTag(token) {\n this.skipNextNewLine = false;\n this.currentToken = token;\n if (this.currentNotInHTML) {\n endTagInForeignContent(this, token);\n }\n else {\n this._endTagOutsideForeignContent(token);\n }\n }\n /** @protected */\n _endTagOutsideForeignContent(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n endTagBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n endTagBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n endTagInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n endTagInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n endTagAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY: {\n endTagInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n endTagInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE: {\n endTagInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_CAPTION: {\n endTagInCaption(this, token);\n break;\n }\n case InsertionMode.IN_COLUMN_GROUP: {\n endTagInColumnGroup(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_BODY: {\n endTagInTableBody(this, token);\n break;\n }\n case InsertionMode.IN_ROW: {\n endTagInRow(this, token);\n break;\n }\n case InsertionMode.IN_CELL: {\n endTagInCell(this, token);\n break;\n }\n case InsertionMode.IN_SELECT: {\n endTagInSelect(this, token);\n break;\n }\n case InsertionMode.IN_SELECT_IN_TABLE: {\n endTagInSelectInTable(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n endTagInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY: {\n endTagAfterBody(this, token);\n break;\n }\n case InsertionMode.IN_FRAMESET: {\n endTagInFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_FRAMESET: {\n endTagAfterFrameset(this, token);\n break;\n }\n case InsertionMode.AFTER_AFTER_BODY: {\n tokenAfterAfterBody(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onEof(token) {\n switch (this.insertionMode) {\n case InsertionMode.INITIAL: {\n tokenInInitialMode(this, token);\n break;\n }\n case InsertionMode.BEFORE_HTML: {\n tokenBeforeHtml(this, token);\n break;\n }\n case InsertionMode.BEFORE_HEAD: {\n tokenBeforeHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD: {\n tokenInHead(this, token);\n break;\n }\n case InsertionMode.IN_HEAD_NO_SCRIPT: {\n tokenInHeadNoScript(this, token);\n break;\n }\n case InsertionMode.AFTER_HEAD: {\n tokenAfterHead(this, token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE: {\n eofInBody(this, token);\n break;\n }\n case InsertionMode.TEXT: {\n eofInText(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n tokenInTableText(this, token);\n break;\n }\n case InsertionMode.IN_TEMPLATE: {\n eofInTemplate(this, token);\n break;\n }\n case InsertionMode.AFTER_BODY:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n stopParsing(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n /** @internal */\n onWhitespaceCharacter(token) {\n if (this.skipNextNewLine) {\n this.skipNextNewLine = false;\n if (token.chars.charCodeAt(0) === unicode.CODE_POINTS.LINE_FEED) {\n if (token.chars.length === 1) {\n return;\n }\n token.chars = token.chars.substr(1);\n }\n }\n if (this.tokenizer.inForeignNode) {\n this._insertCharacters(token);\n return;\n }\n switch (this.insertionMode) {\n case InsertionMode.IN_HEAD:\n case InsertionMode.IN_HEAD_NO_SCRIPT:\n case InsertionMode.AFTER_HEAD:\n case InsertionMode.TEXT:\n case InsertionMode.IN_COLUMN_GROUP:\n case InsertionMode.IN_SELECT:\n case InsertionMode.IN_SELECT_IN_TABLE:\n case InsertionMode.IN_FRAMESET:\n case InsertionMode.AFTER_FRAMESET: {\n this._insertCharacters(token);\n break;\n }\n case InsertionMode.IN_BODY:\n case InsertionMode.IN_CAPTION:\n case InsertionMode.IN_CELL:\n case InsertionMode.IN_TEMPLATE:\n case InsertionMode.AFTER_BODY:\n case InsertionMode.AFTER_AFTER_BODY:\n case InsertionMode.AFTER_AFTER_FRAMESET: {\n whitespaceCharacterInBody(this, token);\n break;\n }\n case InsertionMode.IN_TABLE:\n case InsertionMode.IN_TABLE_BODY:\n case InsertionMode.IN_ROW: {\n characterInTable(this, token);\n break;\n }\n case InsertionMode.IN_TABLE_TEXT: {\n whitespaceCharacterInTableText(this, token);\n break;\n }\n default:\n // Do nothing\n }\n }\n}\n//Adoption agency algorithm\n//(see: http://www.whatwg.org/specs/web-apps/current-work/multipage/tree-construction.html#adoptionAgency)\n//------------------------------------------------------------------\n//Steps 5-8 of the algorithm\nfunction aaObtainFormattingElementEntry(p, token) {\n let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);\n if (formattingElementEntry) {\n if (!p.openElements.contains(formattingElementEntry.element)) {\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n formattingElementEntry = null;\n }\n else if (!p.openElements.hasInScope(token.tagID)) {\n formattingElementEntry = null;\n }\n }\n else {\n genericEndTagInBody(p, token);\n }\n return formattingElementEntry;\n}\n//Steps 9 and 10 of the algorithm\nfunction aaObtainFurthestBlock(p, formattingElementEntry) {\n let furthestBlock = null;\n let idx = p.openElements.stackTop;\n for (; idx >= 0; idx--) {\n const element = p.openElements.items[idx];\n if (element === formattingElementEntry.element) {\n break;\n }\n if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {\n furthestBlock = element;\n }\n }\n if (!furthestBlock) {\n p.openElements.shortenToLength(Math.max(idx, 0));\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n }\n return furthestBlock;\n}\n//Step 13 of the algorithm\nfunction aaInnerLoop(p, furthestBlock, formattingElement) {\n let lastElement = furthestBlock;\n let nextElement = p.openElements.getCommonAncestor(furthestBlock);\n for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {\n //NOTE: store the next element for the next loop iteration (it may be deleted from the stack by step 9.5)\n nextElement = p.openElements.getCommonAncestor(element);\n const elementEntry = p.activeFormattingElements.getElementEntry(element);\n const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;\n const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;\n if (shouldRemoveFromOpenElements) {\n if (counterOverflow) {\n p.activeFormattingElements.removeEntry(elementEntry);\n }\n p.openElements.remove(element);\n }\n else {\n element = aaRecreateElementFromEntry(p, elementEntry);\n if (lastElement === furthestBlock) {\n p.activeFormattingElements.bookmark = elementEntry;\n }\n p.treeAdapter.detachNode(lastElement);\n p.treeAdapter.appendChild(element, lastElement);\n lastElement = element;\n }\n }\n return lastElement;\n}\n//Step 13.7 of the algorithm\nfunction aaRecreateElementFromEntry(p, elementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);\n const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);\n p.openElements.replace(elementEntry.element, newElement);\n elementEntry.element = newElement;\n return newElement;\n}\n//Step 14 of the algorithm\nfunction aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {\n const tn = p.treeAdapter.getTagName(commonAncestor);\n const tid = getTagID(tn);\n if (p._isElementCausesFosterParenting(tid)) {\n p._fosterParentElement(lastElement);\n }\n else {\n const ns = p.treeAdapter.getNamespaceURI(commonAncestor);\n if (tid === $.TEMPLATE && ns === NS.HTML) {\n commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);\n }\n p.treeAdapter.appendChild(commonAncestor, lastElement);\n }\n}\n//Steps 15-19 of the algorithm\nfunction aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {\n const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);\n const { token } = formattingElementEntry;\n const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);\n p._adoptNodes(furthestBlock, newElement);\n p.treeAdapter.appendChild(furthestBlock, newElement);\n p.activeFormattingElements.insertElementAfterBookmark(newElement, token);\n p.activeFormattingElements.removeEntry(formattingElementEntry);\n p.openElements.remove(formattingElementEntry.element);\n p.openElements.insertAfter(furthestBlock, newElement, token.tagID);\n}\n//Algorithm entry point\nfunction callAdoptionAgency(p, token) {\n for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {\n const formattingElementEntry = aaObtainFormattingElementEntry(p, token);\n if (!formattingElementEntry) {\n break;\n }\n const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);\n if (!furthestBlock) {\n break;\n }\n p.activeFormattingElements.bookmark = formattingElementEntry;\n const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);\n const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);\n p.treeAdapter.detachNode(lastElement);\n if (commonAncestor)\n aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);\n aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);\n }\n}\n//Generic token handlers\n//------------------------------------------------------------------\nfunction appendComment(p, token) {\n p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);\n}\nfunction appendCommentToRootHtmlElement(p, token) {\n p._appendCommentNode(token, p.openElements.items[0]);\n}\nfunction appendCommentToDocument(p, token) {\n p._appendCommentNode(token, p.document);\n}\nfunction stopParsing(p, token) {\n p.stopped = true;\n // NOTE: Set end locations for elements that remain on the open element stack.\n if (token.location) {\n // NOTE: If we are not in a fragment, `html` and `body` will stay on the stack.\n // This is a problem, as we might overwrite their end position here.\n const target = p.fragmentContext ? 0 : 2;\n for (let i = p.openElements.stackTop; i >= target; i--) {\n p._setEndLocation(p.openElements.items[i], token);\n }\n // Handle `html` and `body`\n if (!p.fragmentContext && p.openElements.stackTop >= 0) {\n const htmlElement = p.openElements.items[0];\n const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);\n if (htmlLocation && !htmlLocation.endTag) {\n p._setEndLocation(htmlElement, token);\n if (p.openElements.stackTop >= 1) {\n const bodyElement = p.openElements.items[1];\n const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);\n if (bodyLocation && !bodyLocation.endTag) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n }\n }\n}\n// The \"initial\" insertion mode\n//------------------------------------------------------------------\nfunction doctypeInInitialMode(p, token) {\n p._setDocumentType(token);\n const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : doctype.getDocumentMode(token);\n if (!doctype.isConforming(token)) {\n p._err(token, ERR.nonConformingDoctype);\n }\n p.treeAdapter.setDocumentMode(p.document, mode);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n}\nfunction tokenInInitialMode(p, token) {\n p._err(token, ERR.missingDoctype, true);\n p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);\n p.insertionMode = InsertionMode.BEFORE_HTML;\n p._processToken(token);\n}\n// The \"before html\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHtml(p, token) {\n if (token.tagID === $.HTML) {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n }\n else {\n tokenBeforeHtml(p, token);\n }\n}\nfunction endTagBeforeHtml(p, token) {\n const tn = token.tagID;\n if (tn === $.HTML || tn === $.HEAD || tn === $.BODY || tn === $.BR) {\n tokenBeforeHtml(p, token);\n }\n}\nfunction tokenBeforeHtml(p, token) {\n p._insertFakeRootElement();\n p.insertionMode = InsertionMode.BEFORE_HEAD;\n p._processToken(token);\n}\n// The \"before head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagBeforeHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.HEAD: {\n p._insertElement(token, NS.HTML);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n default: {\n tokenBeforeHead(p, token);\n }\n }\n}\nfunction endTagBeforeHead(p, token) {\n const tn = token.tagID;\n if (tn === $.HEAD || tn === $.BODY || tn === $.HTML || tn === $.BR) {\n tokenBeforeHead(p, token);\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenBeforeHead(p, token) {\n p._insertFakeElement(TN.HEAD, $.HEAD);\n p.headElement = p.openElements.current;\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"in head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TITLE: {\n p._switchToTextParsing(token, TokenizerMode.RCDATA);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n }\n else {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;\n }\n break;\n }\n case $.NOFRAMES:\n case $.STYLE: {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n break;\n }\n case $.SCRIPT: {\n p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);\n break;\n }\n case $.TEMPLATE: {\n p._insertTemplate(token);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TEMPLATE;\n p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenInHead(p, token);\n }\n }\n}\nfunction endTagInHead(p, token) {\n switch (token.tagID) {\n case $.HEAD: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n break;\n }\n case $.BODY:\n case $.BR:\n case $.HTML: {\n tokenInHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction templateEndTagInHead(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.generateImpliedEndTagsThoroughly();\n if (p.openElements.currentTagId !== $.TEMPLATE) {\n p._err(token, ERR.closingOfElementWithOpenChildElements);\n }\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n }\n else {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n}\nfunction tokenInHead(p, token) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.AFTER_HEAD;\n p._processToken(token);\n}\n// The \"in head no script\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BASEFONT:\n case $.BGSOUND:\n case $.HEAD:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.STYLE: {\n startTagInHead(p, token);\n break;\n }\n case $.NOSCRIPT: {\n p._err(token, ERR.nestedNoscriptInHead);\n break;\n }\n default: {\n tokenInHeadNoScript(p, token);\n }\n }\n}\nfunction endTagInHeadNoScript(p, token) {\n switch (token.tagID) {\n case $.NOSCRIPT: {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n break;\n }\n case $.BR: {\n tokenInHeadNoScript(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenInHeadNoScript(p, token) {\n const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;\n p._err(token, errCode);\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_HEAD;\n p._processToken(token);\n}\n// The \"after head\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.BODY: {\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_BODY;\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n break;\n }\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n p._err(token, ERR.abandonedHeadElementChild);\n p.openElements.push(p.headElement, $.HEAD);\n startTagInHead(p, token);\n p.openElements.remove(p.headElement);\n break;\n }\n case $.HEAD: {\n p._err(token, ERR.misplacedStartTagForHeadElement);\n break;\n }\n default: {\n tokenAfterHead(p, token);\n }\n }\n}\nfunction endTagAfterHead(p, token) {\n switch (token.tagID) {\n case $.BODY:\n case $.HTML:\n case $.BR: {\n tokenAfterHead(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n p._err(token, ERR.endTagWithoutMatchingOpenElement);\n }\n }\n}\nfunction tokenAfterHead(p, token) {\n p._insertFakeElement(TN.BODY, $.BODY);\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in body\" insertion mode\n//------------------------------------------------------------------\nfunction modeInBody(p, token) {\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInBody(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInBody(p, token);\n break;\n }\n case TokenType.COMMENT: {\n appendComment(p, token);\n break;\n }\n case TokenType.START_TAG: {\n startTagInBody(p, token);\n break;\n }\n case TokenType.END_TAG: {\n endTagInBody(p, token);\n break;\n }\n case TokenType.EOF: {\n eofInBody(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction whitespaceCharacterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n}\nfunction characterInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction htmlStartTagInBody(p, token) {\n if (p.openElements.tmplCount === 0) {\n p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);\n }\n}\nfunction bodyStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement && p.openElements.tmplCount === 0) {\n p.framesetOk = false;\n p.treeAdapter.adoptAttributes(bodyElement, token.attrs);\n }\n}\nfunction framesetStartTagInBody(p, token) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (p.framesetOk && bodyElement) {\n p.treeAdapter.detachNode(bodyElement);\n p.openElements.popAllUpToHtmlElement();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_FRAMESET;\n }\n}\nfunction addressStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction numberedHeaderStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n if (p.openElements.currentTagId !== undefined && NUMBERED_HEADERS.has(p.openElements.currentTagId)) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction preStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of pre blocks are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.framesetOk = false;\n}\nfunction formStartTagInBody(p, token) {\n const inTemplate = p.openElements.tmplCount > 0;\n if (!p.formElement || inTemplate) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n if (!inTemplate) {\n p.formElement = p.openElements.current;\n }\n }\n}\nfunction listItemStartTagInBody(p, token) {\n p.framesetOk = false;\n const tn = token.tagID;\n for (let i = p.openElements.stackTop; i >= 0; i--) {\n const elementId = p.openElements.tagIDs[i];\n if ((tn === $.LI && elementId === $.LI) ||\n ((tn === $.DD || tn === $.DT) && (elementId === $.DD || elementId === $.DT))) {\n p.openElements.generateImpliedEndTagsWithExclusion(elementId);\n p.openElements.popUntilTagNamePopped(elementId);\n break;\n }\n if (elementId !== $.ADDRESS &&\n elementId !== $.DIV &&\n elementId !== $.P &&\n p._isSpecialElement(p.openElements.items[i], elementId)) {\n break;\n }\n }\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction plaintextStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.tokenizer.state = TokenizerMode.PLAINTEXT;\n}\nfunction buttonStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.BUTTON)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.BUTTON);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n}\nfunction aStartTagInBody(p, token) {\n const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TN.A);\n if (activeElementEntry) {\n callAdoptionAgency(p, token);\n p.openElements.remove(activeElementEntry.element);\n p.activeFormattingElements.removeEntry(activeElementEntry);\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction bStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction nobrStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n if (p.openElements.hasInScope($.NOBR)) {\n callAdoptionAgency(p, token);\n p._reconstructActiveFormattingElements();\n }\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.pushElement(p.openElements.current, token);\n}\nfunction appletStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.activeFormattingElements.insertMarker();\n p.framesetOk = false;\n}\nfunction tableStartTagInBody(p, token) {\n if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode = InsertionMode.IN_TABLE;\n}\nfunction areaStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction isHiddenInput(token) {\n const inputType = getTokenAttr(token, ATTRS.TYPE);\n return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;\n}\nfunction inputStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._appendElement(token, NS.HTML);\n if (!isHiddenInput(token)) {\n p.framesetOk = false;\n }\n token.ackSelfClosing = true;\n}\nfunction paramStartTagInBody(p, token) {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n}\nfunction hrStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._appendElement(token, NS.HTML);\n p.framesetOk = false;\n token.ackSelfClosing = true;\n}\nfunction imageStartTagInBody(p, token) {\n token.tagName = TN.IMG;\n token.tagID = $.IMG;\n areaStartTagInBody(p, token);\n}\nfunction textareaStartTagInBody(p, token) {\n p._insertElement(token, NS.HTML);\n //NOTE: If the next token is a U+000A LINE FEED (LF) character token, then ignore that token and move\n //on to the next one. (Newlines at the start of textarea elements are ignored as an authoring convenience.)\n p.skipNextNewLine = true;\n p.tokenizer.state = TokenizerMode.RCDATA;\n p.originalInsertionMode = p.insertionMode;\n p.framesetOk = false;\n p.insertionMode = InsertionMode.TEXT;\n}\nfunction xmpStartTagInBody(p, token) {\n if (p.openElements.hasInButtonScope($.P)) {\n p._closePElement();\n }\n p._reconstructActiveFormattingElements();\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction iframeStartTagInBody(p, token) {\n p.framesetOk = false;\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\n//NOTE: here we assume that we always act as a user agent with enabled plugins/frames, so we parse\n//<noembed>/<noframes> as rawtext.\nfunction rawTextStartTagInBody(p, token) {\n p._switchToTextParsing(token, TokenizerMode.RAWTEXT);\n}\nfunction selectStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n p.framesetOk = false;\n p.insertionMode =\n p.insertionMode === InsertionMode.IN_TABLE ||\n p.insertionMode === InsertionMode.IN_CAPTION ||\n p.insertionMode === InsertionMode.IN_TABLE_BODY ||\n p.insertionMode === InsertionMode.IN_ROW ||\n p.insertionMode === InsertionMode.IN_CELL\n ? InsertionMode.IN_SELECT_IN_TABLE\n : InsertionMode.IN_SELECT;\n}\nfunction optgroupStartTagInBody(p, token) {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction rbStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTags();\n }\n p._insertElement(token, NS.HTML);\n}\nfunction rtStartTagInBody(p, token) {\n if (p.openElements.hasInScope($.RUBY)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.RTC);\n }\n p._insertElement(token, NS.HTML);\n}\nfunction mathStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenMathMLAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.MATHML);\n }\n else {\n p._insertElement(token, NS.MATHML);\n }\n token.ackSelfClosing = true;\n}\nfunction svgStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n foreignContent.adjustTokenSVGAttrs(token);\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, NS.SVG);\n }\n else {\n p._insertElement(token, NS.SVG);\n }\n token.ackSelfClosing = true;\n}\nfunction genericStartTagInBody(p, token) {\n p._reconstructActiveFormattingElements();\n p._insertElement(token, NS.HTML);\n}\nfunction startTagInBody(p, token) {\n switch (token.tagID) {\n case $.I:\n case $.S:\n case $.B:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n bStartTagInBody(p, token);\n break;\n }\n case $.A: {\n aStartTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderStartTagInBody(p, token);\n break;\n }\n case $.P:\n case $.DL:\n case $.OL:\n case $.UL:\n case $.DIV:\n case $.DIR:\n case $.NAV:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.DETAILS:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressStartTagInBody(p, token);\n break;\n }\n case $.LI:\n case $.DD:\n case $.DT: {\n listItemStartTagInBody(p, token);\n break;\n }\n case $.BR:\n case $.IMG:\n case $.WBR:\n case $.AREA:\n case $.EMBED:\n case $.KEYGEN: {\n areaStartTagInBody(p, token);\n break;\n }\n case $.HR: {\n hrStartTagInBody(p, token);\n break;\n }\n case $.RB:\n case $.RTC: {\n rbStartTagInBody(p, token);\n break;\n }\n case $.RT:\n case $.RP: {\n rtStartTagInBody(p, token);\n break;\n }\n case $.PRE:\n case $.LISTING: {\n preStartTagInBody(p, token);\n break;\n }\n case $.XMP: {\n xmpStartTagInBody(p, token);\n break;\n }\n case $.SVG: {\n svgStartTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlStartTagInBody(p, token);\n break;\n }\n case $.BASE:\n case $.LINK:\n case $.META:\n case $.STYLE:\n case $.TITLE:\n case $.SCRIPT:\n case $.BGSOUND:\n case $.BASEFONT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.BODY: {\n bodyStartTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInBody(p, token);\n break;\n }\n case $.NOBR: {\n nobrStartTagInBody(p, token);\n break;\n }\n case $.MATH: {\n mathStartTagInBody(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInBody(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInBody(p, token);\n break;\n }\n case $.PARAM:\n case $.TRACK:\n case $.SOURCE: {\n paramStartTagInBody(p, token);\n break;\n }\n case $.IMAGE: {\n imageStartTagInBody(p, token);\n break;\n }\n case $.BUTTON: {\n buttonStartTagInBody(p, token);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletStartTagInBody(p, token);\n break;\n }\n case $.IFRAME: {\n iframeStartTagInBody(p, token);\n break;\n }\n case $.SELECT: {\n selectStartTagInBody(p, token);\n break;\n }\n case $.OPTION:\n case $.OPTGROUP: {\n optgroupStartTagInBody(p, token);\n break;\n }\n case $.NOEMBED:\n case $.NOFRAMES: {\n rawTextStartTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n framesetStartTagInBody(p, token);\n break;\n }\n case $.TEXTAREA: {\n textareaStartTagInBody(p, token);\n break;\n }\n case $.NOSCRIPT: {\n if (p.options.scriptingEnabled) {\n rawTextStartTagInBody(p, token);\n }\n else {\n genericStartTagInBody(p, token);\n }\n break;\n }\n case $.PLAINTEXT: {\n plaintextStartTagInBody(p, token);\n break;\n }\n case $.COL:\n case $.TH:\n case $.TD:\n case $.TR:\n case $.HEAD:\n case $.FRAME:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.CAPTION:\n case $.COLGROUP: {\n // Ignore token\n break;\n }\n default: {\n genericStartTagInBody(p, token);\n }\n }\n}\nfunction bodyEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n //NOTE: <body> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo) {\n const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();\n if (bodyElement) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n}\nfunction htmlEndTagInBody(p, token) {\n if (p.openElements.hasInScope($.BODY)) {\n p.insertionMode = InsertionMode.AFTER_BODY;\n endTagAfterBody(p, token);\n }\n}\nfunction addressEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction formEndTagInBody(p) {\n const inTemplate = p.openElements.tmplCount > 0;\n const { formElement } = p;\n if (!inTemplate) {\n p.formElement = null;\n }\n if ((formElement || inTemplate) && p.openElements.hasInScope($.FORM)) {\n p.openElements.generateImpliedEndTags();\n if (inTemplate) {\n p.openElements.popUntilTagNamePopped($.FORM);\n }\n else if (formElement) {\n p.openElements.remove(formElement);\n }\n }\n}\nfunction pEndTagInBody(p) {\n if (!p.openElements.hasInButtonScope($.P)) {\n p._insertFakeElement(TN.P, $.P);\n }\n p._closePElement();\n}\nfunction liEndTagInBody(p) {\n if (p.openElements.hasInListItemScope($.LI)) {\n p.openElements.generateImpliedEndTagsWithExclusion($.LI);\n p.openElements.popUntilTagNamePopped($.LI);\n }\n}\nfunction ddEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tn);\n p.openElements.popUntilTagNamePopped(tn);\n }\n}\nfunction numberedHeaderEndTagInBody(p) {\n if (p.openElements.hasNumberedHeaderInScope()) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilNumberedHeaderPopped();\n }\n}\nfunction appletEndTagInBody(p, token) {\n const tn = token.tagID;\n if (p.openElements.hasInScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n }\n}\nfunction brEndTagInBody(p) {\n p._reconstructActiveFormattingElements();\n p._insertFakeElement(TN.BR, $.BR);\n p.openElements.pop();\n p.framesetOk = false;\n}\nfunction genericEndTagInBody(p, token) {\n const tn = token.tagName;\n const tid = token.tagID;\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n const elementId = p.openElements.tagIDs[i];\n // Compare the tag name here, as the tag might not be a known tag with an ID.\n if (tid === elementId && (tid !== $.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {\n p.openElements.generateImpliedEndTagsWithExclusion(tid);\n if (p.openElements.stackTop >= i)\n p.openElements.shortenToLength(i);\n break;\n }\n if (p._isSpecialElement(element, elementId)) {\n break;\n }\n }\n}\nfunction endTagInBody(p, token) {\n switch (token.tagID) {\n case $.A:\n case $.B:\n case $.I:\n case $.S:\n case $.U:\n case $.EM:\n case $.TT:\n case $.BIG:\n case $.CODE:\n case $.FONT:\n case $.NOBR:\n case $.SMALL:\n case $.STRIKE:\n case $.STRONG: {\n callAdoptionAgency(p, token);\n break;\n }\n case $.P: {\n pEndTagInBody(p);\n break;\n }\n case $.DL:\n case $.UL:\n case $.OL:\n case $.DIR:\n case $.DIV:\n case $.NAV:\n case $.PRE:\n case $.MAIN:\n case $.MENU:\n case $.ASIDE:\n case $.BUTTON:\n case $.CENTER:\n case $.FIGURE:\n case $.FOOTER:\n case $.HEADER:\n case $.HGROUP:\n case $.DIALOG:\n case $.ADDRESS:\n case $.ARTICLE:\n case $.DETAILS:\n case $.SEARCH:\n case $.SECTION:\n case $.SUMMARY:\n case $.LISTING:\n case $.FIELDSET:\n case $.BLOCKQUOTE:\n case $.FIGCAPTION: {\n addressEndTagInBody(p, token);\n break;\n }\n case $.LI: {\n liEndTagInBody(p);\n break;\n }\n case $.DD:\n case $.DT: {\n ddEndTagInBody(p, token);\n break;\n }\n case $.H1:\n case $.H2:\n case $.H3:\n case $.H4:\n case $.H5:\n case $.H6: {\n numberedHeaderEndTagInBody(p);\n break;\n }\n case $.BR: {\n brEndTagInBody(p);\n break;\n }\n case $.BODY: {\n bodyEndTagInBody(p, token);\n break;\n }\n case $.HTML: {\n htmlEndTagInBody(p, token);\n break;\n }\n case $.FORM: {\n formEndTagInBody(p);\n break;\n }\n case $.APPLET:\n case $.OBJECT:\n case $.MARQUEE: {\n appletEndTagInBody(p, token);\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default: {\n genericEndTagInBody(p, token);\n }\n }\n}\nfunction eofInBody(p, token) {\n if (p.tmplInsertionModeStack.length > 0) {\n eofInTemplate(p, token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"text\" insertion mode\n//------------------------------------------------------------------\nfunction endTagInText(p, token) {\n var _a;\n if (token.tagID === $.SCRIPT) {\n (_a = p.scriptHandler) === null || _a === void 0 ? void 0 : _a.call(p, p.openElements.current);\n }\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n}\nfunction eofInText(p, token) {\n p._err(token, ERR.eofInElementThatCanContainOnlyText);\n p.openElements.pop();\n p.insertionMode = p.originalInsertionMode;\n p.onEof(token);\n}\n// The \"in table\" insertion mode\n//------------------------------------------------------------------\nfunction characterInTable(p, token) {\n if (p.openElements.currentTagId !== undefined && TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {\n p.pendingCharacterTokens.length = 0;\n p.hasNonWhitespacePendingCharacterToken = false;\n p.originalInsertionMode = p.insertionMode;\n p.insertionMode = InsertionMode.IN_TABLE_TEXT;\n switch (token.type) {\n case TokenType.CHARACTER: {\n characterInTableText(p, token);\n break;\n }\n case TokenType.WHITESPACE_CHARACTER: {\n whitespaceCharacterInTableText(p, token);\n break;\n }\n // Ignore null\n }\n }\n else {\n tokenInTable(p, token);\n }\n}\nfunction captionStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p.activeFormattingElements.insertMarker();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CAPTION;\n}\nfunction colgroupStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n}\nfunction colStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.COLGROUP, $.COLGROUP);\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n}\nfunction tbodyStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n}\nfunction tdStartTagInTable(p, token) {\n p.openElements.clearBackToTableContext();\n p._insertFakeElement(TN.TBODY, $.TBODY);\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n}\nfunction tableStartTagInTable(p, token) {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n}\nfunction inputStartTagInTable(p, token) {\n if (isHiddenInput(token)) {\n p._appendElement(token, NS.HTML);\n }\n else {\n tokenInTable(p, token);\n }\n token.ackSelfClosing = true;\n}\nfunction formStartTagInTable(p, token) {\n if (!p.formElement && p.openElements.tmplCount === 0) {\n p._insertElement(token, NS.HTML);\n p.formElement = p.openElements.current;\n p.openElements.pop();\n }\n}\nfunction startTagInTable(p, token) {\n switch (token.tagID) {\n case $.TD:\n case $.TH:\n case $.TR: {\n tdStartTagInTable(p, token);\n break;\n }\n case $.STYLE:\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n case $.COL: {\n colStartTagInTable(p, token);\n break;\n }\n case $.FORM: {\n formStartTagInTable(p, token);\n break;\n }\n case $.TABLE: {\n tableStartTagInTable(p, token);\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n tbodyStartTagInTable(p, token);\n break;\n }\n case $.INPUT: {\n inputStartTagInTable(p, token);\n break;\n }\n case $.CAPTION: {\n captionStartTagInTable(p, token);\n break;\n }\n case $.COLGROUP: {\n colgroupStartTagInTable(p, token);\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction endTagInTable(p, token) {\n switch (token.tagID) {\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TABLE)) {\n p.openElements.popUntilTagNamePopped($.TABLE);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n tokenInTable(p, token);\n }\n }\n}\nfunction tokenInTable(p, token) {\n const savedFosterParentingState = p.fosterParentingEnabled;\n p.fosterParentingEnabled = true;\n // Process token in `In Body` mode\n modeInBody(p, token);\n p.fosterParentingEnabled = savedFosterParentingState;\n}\n// The \"in table text\" insertion mode\n//------------------------------------------------------------------\nfunction whitespaceCharacterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n}\nfunction characterInTableText(p, token) {\n p.pendingCharacterTokens.push(token);\n p.hasNonWhitespacePendingCharacterToken = true;\n}\nfunction tokenInTableText(p, token) {\n let i = 0;\n if (p.hasNonWhitespacePendingCharacterToken) {\n for (; i < p.pendingCharacterTokens.length; i++) {\n tokenInTable(p, p.pendingCharacterTokens[i]);\n }\n }\n else {\n for (; i < p.pendingCharacterTokens.length; i++) {\n p._insertCharacters(p.pendingCharacterTokens[i]);\n }\n }\n p.insertionMode = p.originalInsertionMode;\n p._processToken(token);\n}\n// The \"in caption\" insertion mode\n//------------------------------------------------------------------\nconst TABLE_VOID_ELEMENTS = new Set([$.CAPTION, $.COL, $.COLGROUP, $.TBODY, $.TD, $.TFOOT, $.TH, $.THEAD, $.TR]);\nfunction startTagInCaption(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCaption(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.CAPTION:\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.CAPTION)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped($.CAPTION);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_TABLE;\n if (tn === $.TABLE) {\n endTagInTable(p, token);\n }\n }\n break;\n }\n case $.BODY:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TBODY:\n case $.TD:\n case $.TFOOT:\n case $.TH:\n case $.THEAD:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in column group\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.COL: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction endTagInColumnGroup(p, token) {\n switch (token.tagID) {\n case $.COLGROUP: {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n case $.COL: {\n // Ignore token\n break;\n }\n default: {\n tokenInColumnGroup(p, token);\n }\n }\n}\nfunction tokenInColumnGroup(p, token) {\n if (p.openElements.currentTagId === $.COLGROUP) {\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n p._processToken(token);\n }\n}\n// The \"in table body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTableBody(p, token) {\n switch (token.tagID) {\n case $.TR: {\n p.openElements.clearBackToTableBodyContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_ROW;\n break;\n }\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableBodyContext();\n p._insertFakeElement(TN.TR, $.TR);\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInTableBody(p, token) {\n const tn = token.tagID;\n switch (token.tagID) {\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasTableBodyContextInTableScope()) {\n p.openElements.clearBackToTableBodyContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE;\n endTagInTable(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH:\n case $.TR: {\n // Ignore token\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in row\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInRow(p, token) {\n switch (token.tagID) {\n case $.TH:\n case $.TD: {\n p.openElements.clearBackToTableRowContext();\n p._insertElement(token, NS.HTML);\n p.insertionMode = InsertionMode.IN_CELL;\n p.activeFormattingElements.insertMarker();\n break;\n }\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n }\n break;\n }\n default: {\n startTagInTable(p, token);\n }\n }\n}\nfunction endTagInRow(p, token) {\n switch (token.tagID) {\n case $.TR: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n }\n break;\n }\n case $.TABLE: {\n if (p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope($.TR)) {\n p.openElements.clearBackToTableRowContext();\n p.openElements.pop();\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n endTagInTableBody(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML:\n case $.TD:\n case $.TH: {\n // Ignore end tag\n break;\n }\n default: {\n endTagInTable(p, token);\n }\n }\n}\n// The \"in cell\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInCell(p, token) {\n const tn = token.tagID;\n if (TABLE_VOID_ELEMENTS.has(tn)) {\n if (p.openElements.hasInTableScope($.TD) || p.openElements.hasInTableScope($.TH)) {\n p._closeTableCell();\n startTagInRow(p, token);\n }\n }\n else {\n startTagInBody(p, token);\n }\n}\nfunction endTagInCell(p, token) {\n const tn = token.tagID;\n switch (tn) {\n case $.TD:\n case $.TH: {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.generateImpliedEndTags();\n p.openElements.popUntilTagNamePopped(tn);\n p.activeFormattingElements.clearToLastMarker();\n p.insertionMode = InsertionMode.IN_ROW;\n }\n break;\n }\n case $.TABLE:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD:\n case $.TR: {\n if (p.openElements.hasInTableScope(tn)) {\n p._closeTableCell();\n endTagInRow(p, token);\n }\n break;\n }\n case $.BODY:\n case $.CAPTION:\n case $.COL:\n case $.COLGROUP:\n case $.HTML: {\n // Ignore token\n break;\n }\n default: {\n endTagInBody(p, token);\n }\n }\n}\n// The \"in select\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelect(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.OPTGROUP: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.HR: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.INPUT:\n case $.KEYGEN:\n case $.TEXTAREA:\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n if (token.tagID !== $.SELECT) {\n p._processStartTag(token);\n }\n }\n break;\n }\n case $.SCRIPT:\n case $.TEMPLATE: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInSelect(p, token) {\n switch (token.tagID) {\n case $.OPTGROUP: {\n if (p.openElements.stackTop > 0 &&\n p.openElements.currentTagId === $.OPTION &&\n p.openElements.tagIDs[p.openElements.stackTop - 1] === $.OPTGROUP) {\n p.openElements.pop();\n }\n if (p.openElements.currentTagId === $.OPTGROUP) {\n p.openElements.pop();\n }\n break;\n }\n case $.OPTION: {\n if (p.openElements.currentTagId === $.OPTION) {\n p.openElements.pop();\n }\n break;\n }\n case $.SELECT: {\n if (p.openElements.hasInSelectScope($.SELECT)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n }\n break;\n }\n case $.TEMPLATE: {\n templateEndTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The \"in select in table\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p._processStartTag(token);\n }\n else {\n startTagInSelect(p, token);\n }\n}\nfunction endTagInSelectInTable(p, token) {\n const tn = token.tagID;\n if (tn === $.CAPTION ||\n tn === $.TABLE ||\n tn === $.TBODY ||\n tn === $.TFOOT ||\n tn === $.THEAD ||\n tn === $.TR ||\n tn === $.TD ||\n tn === $.TH) {\n if (p.openElements.hasInTableScope(tn)) {\n p.openElements.popUntilTagNamePopped($.SELECT);\n p._resetInsertionMode();\n p.onEndTag(token);\n }\n }\n else {\n endTagInSelect(p, token);\n }\n}\n// The \"in template\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInTemplate(p, token) {\n switch (token.tagID) {\n // First, handle tags that can start without a mode change\n case $.BASE:\n case $.BASEFONT:\n case $.BGSOUND:\n case $.LINK:\n case $.META:\n case $.NOFRAMES:\n case $.SCRIPT:\n case $.STYLE:\n case $.TEMPLATE:\n case $.TITLE: {\n startTagInHead(p, token);\n break;\n }\n // Re-process the token in the appropriate mode\n case $.CAPTION:\n case $.COLGROUP:\n case $.TBODY:\n case $.TFOOT:\n case $.THEAD: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;\n p.insertionMode = InsertionMode.IN_TABLE;\n startTagInTable(p, token);\n break;\n }\n case $.COL: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;\n p.insertionMode = InsertionMode.IN_COLUMN_GROUP;\n startTagInColumnGroup(p, token);\n break;\n }\n case $.TR: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;\n p.insertionMode = InsertionMode.IN_TABLE_BODY;\n startTagInTableBody(p, token);\n break;\n }\n case $.TD:\n case $.TH: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;\n p.insertionMode = InsertionMode.IN_ROW;\n startTagInRow(p, token);\n break;\n }\n default: {\n p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;\n p.insertionMode = InsertionMode.IN_BODY;\n startTagInBody(p, token);\n }\n }\n}\nfunction endTagInTemplate(p, token) {\n if (token.tagID === $.TEMPLATE) {\n templateEndTagInHead(p, token);\n }\n}\nfunction eofInTemplate(p, token) {\n if (p.openElements.tmplCount > 0) {\n p.openElements.popUntilTagNamePopped($.TEMPLATE);\n p.activeFormattingElements.clearToLastMarker();\n p.tmplInsertionModeStack.shift();\n p._resetInsertionMode();\n p.onEof(token);\n }\n else {\n stopParsing(p, token);\n }\n}\n// The \"after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction endTagAfterBody(p, token) {\n var _a;\n if (token.tagID === $.HTML) {\n if (!p.fragmentContext) {\n p.insertionMode = InsertionMode.AFTER_AFTER_BODY;\n }\n //NOTE: <html> is never popped from the stack, so we need to updated\n //the end location explicitly.\n if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === $.HTML) {\n p._setEndLocation(p.openElements.items[0], token);\n // Update the body element, if it doesn't have an end tag\n const bodyElement = p.openElements.items[1];\n if (bodyElement && !((_a = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a === void 0 ? void 0 : _a.endTag)) {\n p._setEndLocation(bodyElement, token);\n }\n }\n }\n else {\n tokenAfterBody(p, token);\n }\n}\nfunction tokenAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"in frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagInFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.FRAMESET: {\n p._insertElement(token, NS.HTML);\n break;\n }\n case $.FRAME: {\n p._appendElement(token, NS.HTML);\n token.ackSelfClosing = true;\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagInFrameset(p, token) {\n if (token.tagID === $.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {\n p.openElements.pop();\n if (!p.fragmentContext && p.openElements.currentTagId !== $.FRAMESET) {\n p.insertionMode = InsertionMode.AFTER_FRAMESET;\n }\n }\n}\n// The \"after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\nfunction endTagAfterFrameset(p, token) {\n if (token.tagID === $.HTML) {\n p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;\n }\n}\n// The \"after after body\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterBody(p, token) {\n if (token.tagID === $.HTML) {\n startTagInBody(p, token);\n }\n else {\n tokenAfterAfterBody(p, token);\n }\n}\nfunction tokenAfterAfterBody(p, token) {\n p.insertionMode = InsertionMode.IN_BODY;\n modeInBody(p, token);\n}\n// The \"after after frameset\" insertion mode\n//------------------------------------------------------------------\nfunction startTagAfterAfterFrameset(p, token) {\n switch (token.tagID) {\n case $.HTML: {\n startTagInBody(p, token);\n break;\n }\n case $.NOFRAMES: {\n startTagInHead(p, token);\n break;\n }\n default:\n // Do nothing\n }\n}\n// The rules for parsing tokens in foreign content\n//------------------------------------------------------------------\nfunction nullCharacterInForeignContent(p, token) {\n token.chars = unicode.REPLACEMENT_CHARACTER;\n p._insertCharacters(token);\n}\nfunction characterInForeignContent(p, token) {\n p._insertCharacters(token);\n p.framesetOk = false;\n}\nfunction popUntilHtmlOrIntegrationPoint(p) {\n while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML &&\n p.openElements.currentTagId !== undefined &&\n !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {\n p.openElements.pop();\n }\n}\nfunction startTagInForeignContent(p, token) {\n if (foreignContent.causesExit(token)) {\n popUntilHtmlOrIntegrationPoint(p);\n p._startTagOutsideForeignContent(token);\n }\n else {\n const current = p._getAdjustedCurrentElement();\n const currentNs = p.treeAdapter.getNamespaceURI(current);\n if (currentNs === NS.MATHML) {\n foreignContent.adjustTokenMathMLAttrs(token);\n }\n else if (currentNs === NS.SVG) {\n foreignContent.adjustTokenSVGTagName(token);\n foreignContent.adjustTokenSVGAttrs(token);\n }\n foreignContent.adjustTokenXMLAttrs(token);\n if (token.selfClosing) {\n p._appendElement(token, currentNs);\n }\n else {\n p._insertElement(token, currentNs);\n }\n token.ackSelfClosing = true;\n }\n}\nfunction endTagInForeignContent(p, token) {\n if (token.tagID === $.P || token.tagID === $.BR) {\n popUntilHtmlOrIntegrationPoint(p);\n p._endTagOutsideForeignContent(token);\n return;\n }\n for (let i = p.openElements.stackTop; i > 0; i--) {\n const element = p.openElements.items[i];\n if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {\n p._endTagOutsideForeignContent(token);\n break;\n }\n const tagName = p.treeAdapter.getTagName(element);\n if (tagName.toLowerCase() === token.tagName) {\n //NOTE: update the token tag name for `_setEndLocation`.\n token.tagName = tagName;\n p.openElements.shortenToLength(i);\n break;\n }\n }\n}\n","import { TAG_NAMES as $, NS, hasUnescapedText } from '../common/html.js';\nimport { escapeText, escapeAttribute } from 'entities/escape';\nimport { defaultTreeAdapter } from '../tree-adapters/default.js';\n// Sets\nconst VOID_ELEMENTS = new Set([\n $.AREA,\n $.BASE,\n $.BASEFONT,\n $.BGSOUND,\n $.BR,\n $.COL,\n $.EMBED,\n $.FRAME,\n $.HR,\n $.IMG,\n $.INPUT,\n $.KEYGEN,\n $.LINK,\n $.META,\n $.PARAM,\n $.SOURCE,\n $.TRACK,\n $.WBR,\n]);\nfunction isVoidElement(node, options) {\n return (options.treeAdapter.isElementNode(node) &&\n options.treeAdapter.getNamespaceURI(node) === NS.HTML &&\n VOID_ELEMENTS.has(options.treeAdapter.getTagName(node)));\n}\nconst defaultOpts = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };\n/**\n * Serializes an AST node to an HTML string.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * // Serializes a document.\n * const html = parse5.serialize(document);\n *\n * // Serializes the <html> element content.\n * const str = parse5.serialize(document.childNodes[1]);\n *\n * console.log(str); //> '<head></head><body>Hi there!</body>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serialize(node, options) {\n const opts = { ...defaultOpts, ...options };\n if (isVoidElement(node, opts)) {\n return '';\n }\n return serializeChildNodes(node, opts);\n}\n/**\n * Serializes an AST element node to an HTML string, including the element node.\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parseFragment('<div>Hello, <b>world</b>!</div>');\n *\n * // Serializes the <div> element.\n * const str = parse5.serializeOuter(document.childNodes[0]);\n *\n * console.log(str); //> '<div>Hello, <b>world</b>!</div>'\n * ```\n *\n * @param node Node to serialize.\n * @param options Serialization options.\n */\nexport function serializeOuter(node, options) {\n const opts = { ...defaultOpts, ...options };\n return serializeNode(node, opts);\n}\nfunction serializeChildNodes(parentNode, options) {\n let html = '';\n // Get container of the child nodes\n const container = options.treeAdapter.isElementNode(parentNode) &&\n options.treeAdapter.getTagName(parentNode) === $.TEMPLATE &&\n options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML\n ? options.treeAdapter.getTemplateContent(parentNode)\n : parentNode;\n const childNodes = options.treeAdapter.getChildNodes(container);\n if (childNodes) {\n for (const currentNode of childNodes) {\n html += serializeNode(currentNode, options);\n }\n }\n return html;\n}\nfunction serializeNode(node, options) {\n if (options.treeAdapter.isElementNode(node)) {\n return serializeElement(node, options);\n }\n if (options.treeAdapter.isTextNode(node)) {\n return serializeTextNode(node, options);\n }\n if (options.treeAdapter.isCommentNode(node)) {\n return serializeCommentNode(node, options);\n }\n if (options.treeAdapter.isDocumentTypeNode(node)) {\n return serializeDocumentTypeNode(node, options);\n }\n // Return an empty string for unknown nodes\n return '';\n}\nfunction serializeElement(node, options) {\n const tn = options.treeAdapter.getTagName(node);\n return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? '' : `${serializeChildNodes(node, options)}</${tn}>`}`;\n}\nfunction serializeAttributes(node, { treeAdapter }) {\n let html = '';\n for (const attr of treeAdapter.getAttrList(node)) {\n html += ' ';\n if (attr.namespace) {\n switch (attr.namespace) {\n case NS.XML: {\n html += `xml:${attr.name}`;\n break;\n }\n case NS.XMLNS: {\n if (attr.name !== 'xmlns') {\n html += 'xmlns:';\n }\n html += attr.name;\n break;\n }\n case NS.XLINK: {\n html += `xlink:${attr.name}`;\n break;\n }\n default: {\n html += `${attr.prefix}:${attr.name}`;\n }\n }\n }\n else {\n html += attr.name;\n }\n html += `=\"${escapeAttribute(attr.value)}\"`;\n }\n return html;\n}\nfunction serializeTextNode(node, options) {\n const { treeAdapter } = options;\n const content = treeAdapter.getTextNodeContent(node);\n const parent = treeAdapter.getParentNode(node);\n const parentTn = parent && treeAdapter.isElementNode(parent) && treeAdapter.getTagName(parent);\n return parentTn &&\n treeAdapter.getNamespaceURI(parent) === NS.HTML &&\n hasUnescapedText(parentTn, options.scriptingEnabled)\n ? content\n : escapeText(content);\n}\nfunction serializeCommentNode(node, { treeAdapter }) {\n return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;\n}\nfunction serializeDocumentTypeNode(node, { treeAdapter }) {\n return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;\n}\n","import { Parser } from './parser/index.js';\nexport { defaultTreeAdapter } from './tree-adapters/default.js';\nexport { /** @internal */ Parser } from './parser/index.js';\nexport { serialize, serializeOuter } from './serializer/index.js';\nexport { ERR as ErrorCodes } from './common/error-codes.js';\n/** @internal */\nexport * as foreignContent from './common/foreign-content.js';\nexport * as html from './common/html.js';\nexport * as Token from './common/token.js';\n/** @internal */\nexport { Tokenizer, TokenizerMode } from './tokenizer/index.js';\n// Shorthands\n/**\n * Parses an HTML string.\n *\n * @param html Input HTML string.\n * @param options Parsing options.\n * @returns Document\n *\n * @example\n *\n * ```js\n * const parse5 = require('parse5');\n *\n * const document = parse5.parse('<!DOCTYPE html><html><head></head><body>Hi there!</body></html>');\n *\n * console.log(document.childNodes[1].tagName); //> 'html'\n *```\n */\nexport function parse(html, options) {\n return Parser.parse(html, options);\n}\nexport function parseFragment(fragmentContext, html, options) {\n if (typeof fragmentContext === 'string') {\n options = html;\n html = fragmentContext;\n fragmentContext = null;\n }\n const parser = Parser.getFragmentParser(fragmentContext, options);\n parser.tokenizer.write(html, true);\n return parser.getFragment();\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef NodeLike\n * @property {string} type\n * @property {PositionLike | null | undefined} [position]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n *\n * @typedef PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Point | PointLike | Position | PositionLike | null | undefined} [value]\n * Node, position, or point.\n * @returns {string}\n * Pretty printed positional info of a node (`string`).\n *\n * In the format of a range `ls:cs-le:ce` (when given `node` or `position`)\n * or a point `l:c` (when given `point`), where `l` stands for line, `c` for\n * column, `s` for `start`, and `e` for end.\n * An empty string (`''`) is returned if the given value is neither `node`,\n * `position`, nor `point`.\n */\nexport function stringifyPosition(value) {\n // Nothing.\n if (!value || typeof value !== 'object') {\n return ''\n }\n\n // Node.\n if ('position' in value || 'type' in value) {\n return position(value.position)\n }\n\n // Position.\n if ('start' in value || 'end' in value) {\n return position(value)\n }\n\n // Point.\n if ('line' in value || 'column' in value) {\n return point(value)\n }\n\n // ?\n return ''\n}\n\n/**\n * @param {Point | PointLike | null | undefined} point\n * @returns {string}\n */\nfunction point(point) {\n return index(point && point.line) + ':' + index(point && point.column)\n}\n\n/**\n * @param {Position | PositionLike | null | undefined} pos\n * @returns {string}\n */\nfunction position(pos) {\n return point(pos && pos.start) + '-' + point(pos && pos.end)\n}\n\n/**\n * @param {number | null | undefined} value\n * @returns {number}\n */\nfunction index(value) {\n return value && typeof value === 'number' ? value : 1\n}\n","/**\n * @typedef {import('unist').Node} Node\n * @typedef {import('unist').Point} Point\n * @typedef {import('unist').Position} Position\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n *\n * @typedef Options\n * Configuration.\n * @property {Array<Node> | null | undefined} [ancestors]\n * Stack of (inclusive) ancestor nodes surrounding the message (optional).\n * @property {Error | null | undefined} [cause]\n * Original error cause of the message (optional).\n * @property {Point | Position | null | undefined} [place]\n * Place of message (optional).\n * @property {string | null | undefined} [ruleId]\n * Category of message (optional, example: `'my-rule'`).\n * @property {string | null | undefined} [source]\n * Namespace of who sent the message (optional, example: `'my-package'`).\n */\n\nimport {stringifyPosition} from 'unist-util-stringify-position'\n\n/**\n * Message.\n */\nexport class VFileMessage extends Error {\n /**\n * Create a message for `reason`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {Options | null | undefined} [options]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | Options | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns\n * Instance of `VFileMessage`.\n */\n // eslint-disable-next-line complexity\n constructor(causeOrReason, optionsOrParentOrPlace, origin) {\n super()\n\n if (typeof optionsOrParentOrPlace === 'string') {\n origin = optionsOrParentOrPlace\n optionsOrParentOrPlace = undefined\n }\n\n /** @type {string} */\n let reason = ''\n /** @type {Options} */\n let options = {}\n let legacyCause = false\n\n if (optionsOrParentOrPlace) {\n // Point.\n if (\n 'line' in optionsOrParentOrPlace &&\n 'column' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Position.\n else if (\n 'start' in optionsOrParentOrPlace &&\n 'end' in optionsOrParentOrPlace\n ) {\n options = {place: optionsOrParentOrPlace}\n }\n // Node.\n else if ('type' in optionsOrParentOrPlace) {\n options = {\n ancestors: [optionsOrParentOrPlace],\n place: optionsOrParentOrPlace.position\n }\n }\n // Options.\n else {\n options = {...optionsOrParentOrPlace}\n }\n }\n\n if (typeof causeOrReason === 'string') {\n reason = causeOrReason\n }\n // Error.\n else if (!options.cause && causeOrReason) {\n legacyCause = true\n reason = causeOrReason.message\n options.cause = causeOrReason\n }\n\n if (!options.ruleId && !options.source && typeof origin === 'string') {\n const index = origin.indexOf(':')\n\n if (index === -1) {\n options.ruleId = origin\n } else {\n options.source = origin.slice(0, index)\n options.ruleId = origin.slice(index + 1)\n }\n }\n\n if (!options.place && options.ancestors && options.ancestors) {\n const parent = options.ancestors[options.ancestors.length - 1]\n\n if (parent) {\n options.place = parent.position\n }\n }\n\n const start =\n options.place && 'start' in options.place\n ? options.place.start\n : options.place\n\n /* eslint-disable no-unused-expressions */\n /**\n * Stack of ancestor nodes surrounding the message.\n *\n * @type {Array<Node> | undefined}\n */\n this.ancestors = options.ancestors || undefined\n\n /**\n * Original error cause of the message.\n *\n * @type {Error | undefined}\n */\n this.cause = options.cause || undefined\n\n /**\n * Starting column of message.\n *\n * @type {number | undefined}\n */\n this.column = start ? start.column : undefined\n\n /**\n * State of problem.\n *\n * * `true` — error, file not usable\n * * `false` — warning, change may be needed\n * * `undefined` — change likely not needed\n *\n * @type {boolean | null | undefined}\n */\n this.fatal = undefined\n\n /**\n * Path of a file (used throughout the `VFile` ecosystem).\n *\n * @type {string | undefined}\n */\n this.file\n\n // Field from `Error`.\n /**\n * Reason for message.\n *\n * @type {string}\n */\n this.message = reason\n\n /**\n * Starting line of error.\n *\n * @type {number | undefined}\n */\n this.line = start ? start.line : undefined\n\n // Field from `Error`.\n /**\n * Serialized positional info of message.\n *\n * On normal errors, this would be something like `ParseError`, buit in\n * `VFile` messages we use this space to show where an error happened.\n */\n this.name = stringifyPosition(options.place) || '1:1'\n\n /**\n * Place of message.\n *\n * @type {Point | Position | undefined}\n */\n this.place = options.place || undefined\n\n /**\n * Reason for message, should use markdown.\n *\n * @type {string}\n */\n this.reason = this.message\n\n /**\n * Category of message (example: `'my-rule'`).\n *\n * @type {string | undefined}\n */\n this.ruleId = options.ruleId || undefined\n\n /**\n * Namespace of message (example: `'my-package'`).\n *\n * @type {string | undefined}\n */\n this.source = options.source || undefined\n\n // Field from `Error`.\n /**\n * Stack of message.\n *\n * This is used by normal errors to show where something happened in\n * programming code, irrelevant for `VFile` messages,\n *\n * @type {string}\n */\n this.stack =\n legacyCause && options.cause && typeof options.cause.stack === 'string'\n ? options.cause.stack\n : ''\n\n // The following fields are “well known”.\n // Not standard.\n // Feel free to add other non-standard fields to your messages.\n\n /**\n * Specify the source value that’s being reported, which is deemed\n * incorrect.\n *\n * @type {string | undefined}\n */\n this.actual\n\n /**\n * Suggest acceptable values that can be used instead of `actual`.\n *\n * @type {Array<string> | undefined}\n */\n this.expected\n\n /**\n * Long form description of the message (you should use markdown).\n *\n * @type {string | undefined}\n */\n this.note\n\n /**\n * Link to docs for the message.\n *\n * > 👉 **Note**: this must be an absolute URL that can be passed as `x`\n * > to `new URL(x)`.\n *\n * @type {string | undefined}\n */\n this.url\n /* eslint-enable no-unused-expressions */\n }\n}\n\nVFileMessage.prototype.file = ''\nVFileMessage.prototype.name = ''\nVFileMessage.prototype.reason = ''\nVFileMessage.prototype.message = ''\nVFileMessage.prototype.stack = ''\nVFileMessage.prototype.column = undefined\nVFileMessage.prototype.line = undefined\nVFileMessage.prototype.ancestors = undefined\nVFileMessage.prototype.cause = undefined\nVFileMessage.prototype.fatal = undefined\nVFileMessage.prototype.place = undefined\nVFileMessage.prototype.ruleId = undefined\nVFileMessage.prototype.source = undefined\n","// A derivative work based on:\n// <https://github.com/browserify/path-browserify>.\n// Which is licensed:\n//\n// MIT License\n//\n// Copyright (c) 2013 James Halliday\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in all\n// copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A derivative work based on:\n//\n// Parts of that are extracted from Node’s internal `path` module:\n// <https://github.com/nodejs/node/blob/master/lib/path.js>.\n// Which is licensed:\n//\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nexport const minpath = {basename, dirname, extname, join, sep: '/'}\n\n/* eslint-disable max-depth, complexity */\n\n/**\n * Get the basename from a path.\n *\n * @param {string} path\n * File path.\n * @param {string | null | undefined} [extname]\n * Extension to strip.\n * @returns {string}\n * Stem or basename.\n */\nfunction basename(path, extname) {\n if (extname !== undefined && typeof extname !== 'string') {\n throw new TypeError('\"ext\" argument must be a string')\n }\n\n assertPath(path)\n let start = 0\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let seenNonSlash\n\n if (\n extname === undefined ||\n extname.length === 0 ||\n extname.length > path.length\n ) {\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // path component.\n seenNonSlash = true\n end = index + 1\n }\n }\n\n return end < 0 ? '' : path.slice(start, end)\n }\n\n if (extname === path) {\n return ''\n }\n\n let firstNonSlashEnd = -1\n let extnameIndex = extname.length - 1\n\n while (index--) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (seenNonSlash) {\n start = index + 1\n break\n }\n } else {\n if (firstNonSlashEnd < 0) {\n // We saw the first non-path separator, remember this index in case\n // we need it if the extension ends up not matching.\n seenNonSlash = true\n firstNonSlashEnd = index + 1\n }\n\n if (extnameIndex > -1) {\n // Try to match the explicit extension.\n if (path.codePointAt(index) === extname.codePointAt(extnameIndex--)) {\n if (extnameIndex < 0) {\n // We matched the extension, so mark this as the end of our path\n // component\n end = index\n }\n } else {\n // Extension does not match, so our result is the entire path\n // component\n extnameIndex = -1\n end = firstNonSlashEnd\n }\n }\n }\n }\n\n if (start === end) {\n end = firstNonSlashEnd\n } else if (end < 0) {\n end = path.length\n }\n\n return path.slice(start, end)\n}\n\n/**\n * Get the dirname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\nfunction dirname(path) {\n assertPath(path)\n\n if (path.length === 0) {\n return '.'\n }\n\n let end = -1\n let index = path.length\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n // Prefix `--` is important to not run on `0`.\n while (--index) {\n if (path.codePointAt(index) === 47 /* `/` */) {\n if (unmatchedSlash) {\n end = index\n break\n }\n } else if (!unmatchedSlash) {\n // We saw the first non-path separator\n unmatchedSlash = true\n }\n }\n\n return end < 0\n ? path.codePointAt(0) === 47 /* `/` */\n ? '/'\n : '.'\n : end === 1 && path.codePointAt(0) === 47 /* `/` */\n ? '//'\n : path.slice(0, end)\n}\n\n/**\n * Get an extname from a path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * Extname.\n */\nfunction extname(path) {\n assertPath(path)\n\n let index = path.length\n\n let end = -1\n let startPart = 0\n let startDot = -1\n // Track the state of characters (if any) we see before our first dot and\n // after any path separator we find.\n let preDotState = 0\n /** @type {boolean | undefined} */\n let unmatchedSlash\n\n while (index--) {\n const code = path.codePointAt(index)\n\n if (code === 47 /* `/` */) {\n // If we reached a path separator that was not part of a set of path\n // separators at the end of the string, stop now.\n if (unmatchedSlash) {\n startPart = index + 1\n break\n }\n\n continue\n }\n\n if (end < 0) {\n // We saw the first non-path separator, mark this as the end of our\n // extension.\n unmatchedSlash = true\n end = index + 1\n }\n\n if (code === 46 /* `.` */) {\n // If this is our first dot, mark it as the start of our extension.\n if (startDot < 0) {\n startDot = index\n } else if (preDotState !== 1) {\n preDotState = 1\n }\n } else if (startDot > -1) {\n // We saw a non-dot and non-path separator before our dot, so we should\n // have a good chance at having a non-empty extension.\n preDotState = -1\n }\n }\n\n if (\n startDot < 0 ||\n end < 0 ||\n // We saw a non-dot character immediately before the dot.\n preDotState === 0 ||\n // The (right-most) trimmed path component is exactly `..`.\n (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1)\n ) {\n return ''\n }\n\n return path.slice(startDot, end)\n}\n\n/**\n * Join segments from a path.\n *\n * @param {Array<string>} segments\n * Path segments.\n * @returns {string}\n * File path.\n */\nfunction join(...segments) {\n let index = -1\n /** @type {string | undefined} */\n let joined\n\n while (++index < segments.length) {\n assertPath(segments[index])\n\n if (segments[index]) {\n joined =\n joined === undefined ? segments[index] : joined + '/' + segments[index]\n }\n }\n\n return joined === undefined ? '.' : normalize(joined)\n}\n\n/**\n * Normalize a basic file path.\n *\n * @param {string} path\n * File path.\n * @returns {string}\n * File path.\n */\n// Note: `normalize` is not exposed as `path.normalize`, so some code is\n// manually removed from it.\nfunction normalize(path) {\n assertPath(path)\n\n const absolute = path.codePointAt(0) === 47 /* `/` */\n\n // Normalize the path according to POSIX rules.\n let value = normalizeString(path, !absolute)\n\n if (value.length === 0 && !absolute) {\n value = '.'\n }\n\n if (value.length > 0 && path.codePointAt(path.length - 1) === 47 /* / */) {\n value += '/'\n }\n\n return absolute ? '/' + value : value\n}\n\n/**\n * Resolve `.` and `..` elements in a path with directory names.\n *\n * @param {string} path\n * File path.\n * @param {boolean} allowAboveRoot\n * Whether `..` can move above root.\n * @returns {string}\n * File path.\n */\nfunction normalizeString(path, allowAboveRoot) {\n let result = ''\n let lastSegmentLength = 0\n let lastSlash = -1\n let dots = 0\n let index = -1\n /** @type {number | undefined} */\n let code\n /** @type {number} */\n let lastSlashIndex\n\n while (++index <= path.length) {\n if (index < path.length) {\n code = path.codePointAt(index)\n } else if (code === 47 /* `/` */) {\n break\n } else {\n code = 47 /* `/` */\n }\n\n if (code === 47 /* `/` */) {\n if (lastSlash === index - 1 || dots === 1) {\n // Empty.\n } else if (lastSlash !== index - 1 && dots === 2) {\n if (\n result.length < 2 ||\n lastSegmentLength !== 2 ||\n result.codePointAt(result.length - 1) !== 46 /* `.` */ ||\n result.codePointAt(result.length - 2) !== 46 /* `.` */\n ) {\n if (result.length > 2) {\n lastSlashIndex = result.lastIndexOf('/')\n\n if (lastSlashIndex !== result.length - 1) {\n if (lastSlashIndex < 0) {\n result = ''\n lastSegmentLength = 0\n } else {\n result = result.slice(0, lastSlashIndex)\n lastSegmentLength = result.length - 1 - result.lastIndexOf('/')\n }\n\n lastSlash = index\n dots = 0\n continue\n }\n } else if (result.length > 0) {\n result = ''\n lastSegmentLength = 0\n lastSlash = index\n dots = 0\n continue\n }\n }\n\n if (allowAboveRoot) {\n result = result.length > 0 ? result + '/..' : '..'\n lastSegmentLength = 2\n }\n } else {\n if (result.length > 0) {\n result += '/' + path.slice(lastSlash + 1, index)\n } else {\n result = path.slice(lastSlash + 1, index)\n }\n\n lastSegmentLength = index - lastSlash - 1\n }\n\n lastSlash = index\n dots = 0\n } else if (code === 46 /* `.` */ && dots > -1) {\n dots++\n } else {\n dots = -1\n }\n }\n\n return result\n}\n\n/**\n * Make sure `path` is a string.\n *\n * @param {string} path\n * File path.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path) {\n if (typeof path !== 'string') {\n throw new TypeError(\n 'Path must be a string. Received ' + JSON.stringify(path)\n )\n }\n}\n\n/* eslint-enable max-depth, complexity */\n","// Somewhat based on:\n// <https://github.com/defunctzombie/node-process/blob/master/browser.js>.\n// But I don’t think one tiny line of code can be copyrighted. 😅\nexport const minproc = {cwd}\n\nfunction cwd() {\n return '/'\n}\n","/**\n * Checks if a value has the shape of a WHATWG URL object.\n *\n * Using a symbol or instanceof would not be able to recognize URL objects\n * coming from other implementations (e.g. in Electron), so instead we are\n * checking some well known properties for a lack of a better test.\n *\n * We use `href` and `protocol` as they are the only properties that are\n * easy to retrieve and calculate due to the lazy nature of the getters.\n *\n * We check for auth attribute to distinguish legacy url instance with\n * WHATWG URL instance.\n *\n * @param {unknown} fileUrlOrPath\n * File path or URL.\n * @returns {fileUrlOrPath is URL}\n * Whether it’s a URL.\n */\n// From: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js#L720>\nexport function isUrl(fileUrlOrPath) {\n return Boolean(\n fileUrlOrPath !== null &&\n typeof fileUrlOrPath === 'object' &&\n 'href' in fileUrlOrPath &&\n fileUrlOrPath.href &&\n 'protocol' in fileUrlOrPath &&\n fileUrlOrPath.protocol &&\n // @ts-expect-error: indexing is fine.\n fileUrlOrPath.auth === undefined\n )\n}\n","import {isUrl} from './minurl.shared.js'\n\nexport {isUrl} from './minurl.shared.js'\n\n// See: <https://github.com/nodejs/node/blob/6a3403c/lib/internal/url.js>\n\n/**\n * @param {URL | string} path\n * File URL.\n * @returns {string}\n * File URL.\n */\nexport function urlToPath(path) {\n if (typeof path === 'string') {\n path = new URL(path)\n } else if (!isUrl(path)) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'The \"path\" argument must be of type string or an instance of URL. Received `' +\n path +\n '`'\n )\n error.code = 'ERR_INVALID_ARG_TYPE'\n throw error\n }\n\n if (path.protocol !== 'file:') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError('The URL must be of scheme file')\n error.code = 'ERR_INVALID_URL_SCHEME'\n throw error\n }\n\n return getPathFromURLPosix(path)\n}\n\n/**\n * Get a path from a POSIX URL.\n *\n * @param {URL} url\n * URL.\n * @returns {string}\n * File path.\n */\nfunction getPathFromURLPosix(url) {\n if (url.hostname !== '') {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL host must be \"localhost\" or empty on darwin'\n )\n error.code = 'ERR_INVALID_FILE_URL_HOST'\n throw error\n }\n\n const pathname = url.pathname\n let index = -1\n\n while (++index < pathname.length) {\n if (\n pathname.codePointAt(index) === 37 /* `%` */ &&\n pathname.codePointAt(index + 1) === 50 /* `2` */\n ) {\n const third = pathname.codePointAt(index + 2)\n if (third === 70 /* `F` */ || third === 102 /* `f` */) {\n /** @type {NodeJS.ErrnoException} */\n const error = new TypeError(\n 'File URL path must not include encoded / characters'\n )\n error.code = 'ERR_INVALID_FILE_URL_PATH'\n throw error\n }\n }\n }\n\n return decodeURIComponent(pathname)\n}\n","/**\n * @import {Node, Point, Position} from 'unist'\n * @import {Options as MessageOptions} from 'vfile-message'\n * @import {Compatible, Data, Map, Options, Value} from 'vfile'\n */\n\n/**\n * @typedef {object & {type: string, position?: Position | undefined}} NodeLike\n */\n\nimport {VFileMessage} from 'vfile-message'\nimport {minpath} from '#minpath'\nimport {minproc} from '#minproc'\nimport {urlToPath, isUrl} from '#minurl'\n\n/**\n * Order of setting (least specific to most), we need this because otherwise\n * `{stem: 'a', path: '~/b.js'}` would throw, as a path is needed before a\n * stem can be set.\n */\nconst order = /** @type {const} */ ([\n 'history',\n 'path',\n 'basename',\n 'stem',\n 'extname',\n 'dirname'\n])\n\nexport class VFile {\n /**\n * Create a new virtual file.\n *\n * `options` is treated as:\n *\n * * `string` or `Uint8Array` — `{value: options}`\n * * `URL` — `{path: options}`\n * * `VFile` — shallow copies its data over to the new file\n * * `object` — all fields are shallow copied over to the new file\n *\n * Path related fields are set in the following order (least specific to\n * most specific): `history`, `path`, `basename`, `stem`, `extname`,\n * `dirname`.\n *\n * You cannot set `dirname` or `extname` without setting either `history`,\n * `path`, `basename`, or `stem` too.\n *\n * @param {Compatible | null | undefined} [value]\n * File value.\n * @returns\n * New instance.\n */\n constructor(value) {\n /** @type {Options | VFile} */\n let options\n\n if (!value) {\n options = {}\n } else if (isUrl(value)) {\n options = {path: value}\n } else if (typeof value === 'string' || isUint8Array(value)) {\n options = {value}\n } else {\n options = value\n }\n\n /* eslint-disable no-unused-expressions */\n\n /**\n * Base of `path` (default: `process.cwd()` or `'/'` in browsers).\n *\n * @type {string}\n */\n // Prevent calling `cwd` (which could be expensive) if it’s not needed;\n // the empty string will be overridden in the next block.\n this.cwd = 'cwd' in options ? '' : minproc.cwd()\n\n /**\n * Place to store custom info (default: `{}`).\n *\n * It’s OK to store custom data directly on the file but moving it to\n * `data` is recommended.\n *\n * @type {Data}\n */\n this.data = {}\n\n /**\n * List of file paths the file moved between.\n *\n * The first is the original path and the last is the current path.\n *\n * @type {Array<string>}\n */\n this.history = []\n\n /**\n * List of messages associated with the file.\n *\n * @type {Array<VFileMessage>}\n */\n this.messages = []\n\n /**\n * Raw value.\n *\n * @type {Value}\n */\n this.value\n\n // The below are non-standard, they are “well-known”.\n // As in, used in several tools.\n /**\n * Source map.\n *\n * This type is equivalent to the `RawSourceMap` type from the `source-map`\n * module.\n *\n * @type {Map | null | undefined}\n */\n this.map\n\n /**\n * Custom, non-string, compiled, representation.\n *\n * This is used by unified to store non-string results.\n * One example is when turning markdown into React nodes.\n *\n * @type {unknown}\n */\n this.result\n\n /**\n * Whether a file was saved to disk.\n *\n * This is used by vfile reporters.\n *\n * @type {boolean}\n */\n this.stored\n /* eslint-enable no-unused-expressions */\n\n // Set path related properties in the correct order.\n let index = -1\n\n while (++index < order.length) {\n const field = order[index]\n\n // Note: we specifically use `in` instead of `hasOwnProperty` to accept\n // `vfile`s too.\n if (\n field in options &&\n options[field] !== undefined &&\n options[field] !== null\n ) {\n // @ts-expect-error: TS doesn’t understand basic reality.\n this[field] = field === 'history' ? [...options[field]] : options[field]\n }\n }\n\n /** @type {string} */\n let field\n\n // Set non-path related properties.\n for (field in options) {\n // @ts-expect-error: fine to set other things.\n if (!order.includes(field)) {\n // @ts-expect-error: fine to set other things.\n this[field] = options[field]\n }\n }\n }\n\n /**\n * Get the basename (including extname) (example: `'index.min.js'`).\n *\n * @returns {string | undefined}\n * Basename.\n */\n get basename() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path)\n : undefined\n }\n\n /**\n * Set basename (including extname) (`'index.min.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} basename\n * Basename.\n * @returns {undefined}\n * Nothing.\n */\n set basename(basename) {\n assertNonEmpty(basename, 'basename')\n assertPart(basename, 'basename')\n this.path = minpath.join(this.dirname || '', basename)\n }\n\n /**\n * Get the parent path (example: `'~'`).\n *\n * @returns {string | undefined}\n * Dirname.\n */\n get dirname() {\n return typeof this.path === 'string'\n ? minpath.dirname(this.path)\n : undefined\n }\n\n /**\n * Set the parent path (example: `'~'`).\n *\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} dirname\n * Dirname.\n * @returns {undefined}\n * Nothing.\n */\n set dirname(dirname) {\n assertPath(this.basename, 'dirname')\n this.path = minpath.join(dirname || '', this.basename)\n }\n\n /**\n * Get the extname (including dot) (example: `'.js'`).\n *\n * @returns {string | undefined}\n * Extname.\n */\n get extname() {\n return typeof this.path === 'string'\n ? minpath.extname(this.path)\n : undefined\n }\n\n /**\n * Set the extname (including dot) (example: `'.js'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be set if there’s no `path` yet.\n *\n * @param {string | undefined} extname\n * Extname.\n * @returns {undefined}\n * Nothing.\n */\n set extname(extname) {\n assertPart(extname, 'extname')\n assertPath(this.dirname, 'extname')\n\n if (extname) {\n if (extname.codePointAt(0) !== 46 /* `.` */) {\n throw new Error('`extname` must start with `.`')\n }\n\n if (extname.includes('.', 1)) {\n throw new Error('`extname` cannot contain multiple dots')\n }\n }\n\n this.path = minpath.join(this.dirname, this.stem + (extname || ''))\n }\n\n /**\n * Get the full path (example: `'~/index.min.js'`).\n *\n * @returns {string}\n * Path.\n */\n get path() {\n return this.history[this.history.length - 1]\n }\n\n /**\n * Set the full path (example: `'~/index.min.js'`).\n *\n * Cannot be nullified.\n * You can set a file URL (a `URL` object with a `file:` protocol) which will\n * be turned into a path with `url.fileURLToPath`.\n *\n * @param {URL | string} path\n * Path.\n * @returns {undefined}\n * Nothing.\n */\n set path(path) {\n if (isUrl(path)) {\n path = urlToPath(path)\n }\n\n assertNonEmpty(path, 'path')\n\n if (this.path !== path) {\n this.history.push(path)\n }\n }\n\n /**\n * Get the stem (basename w/o extname) (example: `'index.min'`).\n *\n * @returns {string | undefined}\n * Stem.\n */\n get stem() {\n return typeof this.path === 'string'\n ? minpath.basename(this.path, this.extname)\n : undefined\n }\n\n /**\n * Set the stem (basename w/o extname) (example: `'index.min'`).\n *\n * Cannot contain path separators (`'/'` on unix, macOS, and browsers, `'\\'`\n * on windows).\n * Cannot be nullified (use `file.path = file.dirname` instead).\n *\n * @param {string} stem\n * Stem.\n * @returns {undefined}\n * Nothing.\n */\n set stem(stem) {\n assertNonEmpty(stem, 'stem')\n assertPart(stem, 'stem')\n this.path = minpath.join(this.dirname || '', stem + (this.extname || ''))\n }\n\n // Normal prototypal methods.\n /**\n * Create a fatal message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `true` (error; file not usable)\n * and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {never}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {never}\n * Never.\n * @throws {VFileMessage}\n * Message.\n */\n fail(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = true\n\n throw message\n }\n\n /**\n * Create an info message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `undefined` (info; change\n * likely not needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n info(causeOrReason, optionsOrParentOrPlace, origin) {\n // @ts-expect-error: the overloads are fine.\n const message = this.message(causeOrReason, optionsOrParentOrPlace, origin)\n\n message.fatal = undefined\n\n return message\n }\n\n /**\n * Create a message for `reason` associated with the file.\n *\n * The `fatal` field of the message is set to `false` (warning; change may be\n * needed) and the `file` field is set to the current file path.\n * The message is added to the `messages` field on `file`.\n *\n * > 🪦 **Note**: also has obsolete signatures.\n *\n * @overload\n * @param {string} reason\n * @param {MessageOptions | null | undefined} [options]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {string} reason\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Node | NodeLike | null | undefined} parent\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {Point | Position | null | undefined} place\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @overload\n * @param {Error | VFileMessage} cause\n * @param {string | null | undefined} [origin]\n * @returns {VFileMessage}\n *\n * @param {Error | VFileMessage | string} causeOrReason\n * Reason for message, should use markdown.\n * @param {Node | NodeLike | MessageOptions | Point | Position | string | null | undefined} [optionsOrParentOrPlace]\n * Configuration (optional).\n * @param {string | null | undefined} [origin]\n * Place in code where the message originates (example:\n * `'my-package:my-rule'` or `'my-rule'`).\n * @returns {VFileMessage}\n * Message.\n */\n message(causeOrReason, optionsOrParentOrPlace, origin) {\n const message = new VFileMessage(\n // @ts-expect-error: the overloads are fine.\n causeOrReason,\n optionsOrParentOrPlace,\n origin\n )\n\n if (this.path) {\n message.name = this.path + ':' + message.name\n message.file = this.path\n }\n\n message.fatal = false\n\n this.messages.push(message)\n\n return message\n }\n\n /**\n * Serialize the file.\n *\n * > **Note**: which encodings are supported depends on the engine.\n * > For info on Node.js, see:\n * > <https://nodejs.org/api/util.html#whatwg-supported-encodings>.\n *\n * @param {string | null | undefined} [encoding='utf8']\n * Character encoding to understand `value` as when it’s a `Uint8Array`\n * (default: `'utf-8'`).\n * @returns {string}\n * Serialized file.\n */\n toString(encoding) {\n if (this.value === undefined) {\n return ''\n }\n\n if (typeof this.value === 'string') {\n return this.value\n }\n\n const decoder = new TextDecoder(encoding || undefined)\n return decoder.decode(this.value)\n }\n}\n\n/**\n * Assert that `part` is not a path (as in, does not contain `path.sep`).\n *\n * @param {string | null | undefined} part\n * File path part.\n * @param {string} name\n * Part name.\n * @returns {undefined}\n * Nothing.\n */\nfunction assertPart(part, name) {\n if (part && part.includes(minpath.sep)) {\n throw new Error(\n '`' + name + '` cannot be a path: did not expect `' + minpath.sep + '`'\n )\n }\n}\n\n/**\n * Assert that `part` is not empty.\n *\n * @param {string | undefined} part\n * Thing.\n * @param {string} name\n * Part name.\n * @returns {asserts part is string}\n * Nothing.\n */\nfunction assertNonEmpty(part, name) {\n if (!part) {\n throw new Error('`' + name + '` cannot be empty')\n }\n}\n\n/**\n * Assert `path` exists.\n *\n * @param {string | undefined} path\n * Path.\n * @param {string} name\n * Dependency name.\n * @returns {asserts path is string}\n * Nothing.\n */\nfunction assertPath(path, name) {\n if (!path) {\n throw new Error('Setting `' + name + '` requires `path` to be set too')\n }\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n","/**\n * @typedef ErrorInfo\n * Info on a `parse5` error.\n * @property {string} reason\n * Reason of error.\n * @property {string} description\n * More info on error.\n * @property {false} [url]\n * Turn off if this is not documented in the html5 spec (optional).\n */\n\nexport const errors = {\n /** @type {ErrorInfo} */\n abandonedHeadElementChild: {\n reason: 'Unexpected metadata element after head',\n description:\n 'Unexpected element after head. Expected the element before `</head>`',\n url: false\n },\n /** @type {ErrorInfo} */\n abruptClosingOfEmptyComment: {\n reason: 'Unexpected abruptly closed empty comment',\n description: 'Unexpected `>` or `->`. Expected `-->` to close comments'\n },\n /** @type {ErrorInfo} */\n abruptDoctypePublicIdentifier: {\n reason: 'Unexpected abruptly closed public identifier',\n description:\n 'Unexpected `>`. Expected a closing `\"` or `\\'` after the public identifier'\n },\n /** @type {ErrorInfo} */\n abruptDoctypeSystemIdentifier: {\n reason: 'Unexpected abruptly closed system identifier',\n description:\n 'Unexpected `>`. Expected a closing `\"` or `\\'` after the identifier identifier'\n },\n /** @type {ErrorInfo} */\n absenceOfDigitsInNumericCharacterReference: {\n reason: 'Unexpected non-digit at start of numeric character reference',\n description:\n 'Unexpected `%c`. Expected `[0-9]` for decimal references or `[0-9a-fA-F]` for hexadecimal references'\n },\n /** @type {ErrorInfo} */\n cdataInHtmlContent: {\n reason: 'Unexpected CDATA section in HTML',\n description:\n 'Unexpected `<![CDATA[` in HTML. Remove it, use a comment, or encode special characters instead'\n },\n /** @type {ErrorInfo} */\n characterReferenceOutsideUnicodeRange: {\n reason: 'Unexpected too big numeric character reference',\n description:\n 'Unexpectedly high character reference. Expected character references to be at most hexadecimal 10ffff (or decimal 1114111)'\n },\n /** @type {ErrorInfo} */\n closingOfElementWithOpenChildElements: {\n reason: 'Unexpected closing tag with open child elements',\n description:\n 'Unexpectedly closing tag. Expected other tags to be closed first',\n url: false\n },\n /** @type {ErrorInfo} */\n controlCharacterInInputStream: {\n reason: 'Unexpected control character',\n description:\n 'Unexpected control character `%x`. Expected a non-control code point, 0x00, or ASCII whitespace'\n },\n /** @type {ErrorInfo} */\n controlCharacterReference: {\n reason: 'Unexpected control character reference',\n description:\n 'Unexpectedly control character in reference. Expected a non-control code point, 0x00, or ASCII whitespace'\n },\n /** @type {ErrorInfo} */\n disallowedContentInNoscriptInHead: {\n reason: 'Disallowed content inside `<noscript>` in `<head>`',\n description:\n 'Unexpected text character `%c`. Only use text in `<noscript>`s in `<body>`',\n url: false\n },\n /** @type {ErrorInfo} */\n duplicateAttribute: {\n reason: 'Unexpected duplicate attribute',\n description:\n 'Unexpectedly double attribute. Expected attributes to occur only once'\n },\n /** @type {ErrorInfo} */\n endTagWithAttributes: {\n reason: 'Unexpected attribute on closing tag',\n description: 'Unexpected attribute. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n endTagWithTrailingSolidus: {\n reason: 'Unexpected slash at end of closing tag',\n description: 'Unexpected `%c-1`. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n endTagWithoutMatchingOpenElement: {\n reason: 'Unexpected unopened end tag',\n description: 'Unexpected end tag. Expected no end tag or another end tag',\n url: false\n },\n /** @type {ErrorInfo} */\n eofBeforeTagName: {\n reason: 'Unexpected end of file',\n description: 'Unexpected end of file. Expected tag name instead'\n },\n /** @type {ErrorInfo} */\n eofInCdata: {\n reason: 'Unexpected end of file in CDATA',\n description: 'Unexpected end of file. Expected `]]>` to close the CDATA'\n },\n /** @type {ErrorInfo} */\n eofInComment: {\n reason: 'Unexpected end of file in comment',\n description: 'Unexpected end of file. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n eofInDoctype: {\n reason: 'Unexpected end of file in doctype',\n description:\n 'Unexpected end of file. Expected a valid doctype (such as `<!doctype html>`)'\n },\n /** @type {ErrorInfo} */\n eofInElementThatCanContainOnlyText: {\n reason: 'Unexpected end of file in element that can only contain text',\n description: 'Unexpected end of file. Expected text or a closing tag',\n url: false\n },\n /** @type {ErrorInfo} */\n eofInScriptHtmlCommentLikeText: {\n reason: 'Unexpected end of file in comment inside script',\n description: 'Unexpected end of file. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n eofInTag: {\n reason: 'Unexpected end of file in tag',\n description: 'Unexpected end of file. Expected `>` to close the tag'\n },\n /** @type {ErrorInfo} */\n incorrectlyClosedComment: {\n reason: 'Incorrectly closed comment',\n description: 'Unexpected `%c-1`. Expected `-->` to close the comment'\n },\n /** @type {ErrorInfo} */\n incorrectlyOpenedComment: {\n reason: 'Incorrectly opened comment',\n description: 'Unexpected `%c`. Expected `<!--` to open the comment'\n },\n /** @type {ErrorInfo} */\n invalidCharacterSequenceAfterDoctypeName: {\n reason: 'Invalid sequence after doctype name',\n description: 'Unexpected sequence at `%c`. Expected `public` or `system`'\n },\n /** @type {ErrorInfo} */\n invalidFirstCharacterOfTagName: {\n reason: 'Invalid first character in tag name',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n misplacedDoctype: {\n reason: 'Misplaced doctype',\n description: 'Unexpected doctype. Expected doctype before head',\n url: false\n },\n /** @type {ErrorInfo} */\n misplacedStartTagForHeadElement: {\n reason: 'Misplaced `<head>` start tag',\n description:\n 'Unexpected start tag `<head>`. Expected `<head>` directly after doctype',\n url: false\n },\n /** @type {ErrorInfo} */\n missingAttributeValue: {\n reason: 'Missing attribute value',\n description:\n 'Unexpected `%c-1`. Expected an attribute value or no `%c-1` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctype: {\n reason: 'Missing doctype before other content',\n description: 'Expected a `<!doctype html>` before anything else',\n url: false\n },\n /** @type {ErrorInfo} */\n missingDoctypeName: {\n reason: 'Missing doctype name',\n description: 'Unexpected doctype end at `%c`. Expected `html` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctypePublicIdentifier: {\n reason: 'Missing public identifier in doctype',\n description: 'Unexpected `%c`. Expected identifier for `public` instead'\n },\n /** @type {ErrorInfo} */\n missingDoctypeSystemIdentifier: {\n reason: 'Missing system identifier in doctype',\n description:\n 'Unexpected `%c`. Expected identifier for `system` instead (suggested: `\"about:legacy-compat\"`)'\n },\n /** @type {ErrorInfo} */\n missingEndTagName: {\n reason: 'Missing name in end tag',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n missingQuoteBeforeDoctypePublicIdentifier: {\n reason: 'Missing quote before public identifier in doctype',\n description: 'Unexpected `%c`. Expected `\"` or `\\'` instead'\n },\n /** @type {ErrorInfo} */\n missingQuoteBeforeDoctypeSystemIdentifier: {\n reason: 'Missing quote before system identifier in doctype',\n description: 'Unexpected `%c`. Expected `\"` or `\\'` instead'\n },\n /** @type {ErrorInfo} */\n missingSemicolonAfterCharacterReference: {\n reason: 'Missing semicolon after character reference',\n description: 'Unexpected `%c`. Expected `;` instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceAfterDoctypePublicKeyword: {\n reason: 'Missing whitespace after public identifier in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceAfterDoctypeSystemKeyword: {\n reason: 'Missing whitespace after system identifier in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBeforeDoctypeName: {\n reason: 'Missing whitespace before doctype name',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBetweenAttributes: {\n reason: 'Missing whitespace between attributes',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers: {\n reason:\n 'Missing whitespace between public and system identifiers in doctype',\n description: 'Unexpected `%c`. Expected ASCII whitespace instead'\n },\n /** @type {ErrorInfo} */\n nestedComment: {\n reason: 'Unexpected nested comment',\n description: 'Unexpected `<!--`. Expected `-->`'\n },\n /** @type {ErrorInfo} */\n nestedNoscriptInHead: {\n reason: 'Unexpected nested `<noscript>` in `<head>`',\n description:\n 'Unexpected `<noscript>`. Expected a closing tag or a meta element',\n url: false\n },\n /** @type {ErrorInfo} */\n nonConformingDoctype: {\n reason: 'Unexpected non-conforming doctype declaration',\n description:\n 'Expected `<!doctype html>` or `<!doctype html system \"about:legacy-compat\">`',\n url: false\n },\n /** @type {ErrorInfo} */\n nonVoidHtmlElementStartTagWithTrailingSolidus: {\n reason: 'Unexpected trailing slash on start tag of non-void element',\n description: 'Unexpected `/`. Expected `>` instead'\n },\n /** @type {ErrorInfo} */\n noncharacterCharacterReference: {\n reason:\n 'Unexpected noncharacter code point referenced by character reference',\n description: 'Unexpected code point. Do not use noncharacters in HTML'\n },\n /** @type {ErrorInfo} */\n noncharacterInInputStream: {\n reason: 'Unexpected noncharacter character',\n description: 'Unexpected code point `%x`. Do not use noncharacters in HTML'\n },\n /** @type {ErrorInfo} */\n nullCharacterReference: {\n reason: 'Unexpected NULL character referenced by character reference',\n description: 'Unexpected code point. Do not use NULL characters in HTML'\n },\n /** @type {ErrorInfo} */\n openElementsLeftAfterEof: {\n reason: 'Unexpected end of file',\n description: 'Unexpected end of file. Expected closing tag instead',\n url: false\n },\n /** @type {ErrorInfo} */\n surrogateCharacterReference: {\n reason: 'Unexpected surrogate character referenced by character reference',\n description:\n 'Unexpected code point. Do not use lone surrogate characters in HTML'\n },\n /** @type {ErrorInfo} */\n surrogateInInputStream: {\n reason: 'Unexpected surrogate character',\n description:\n 'Unexpected code point `%x`. Do not use lone surrogate characters in HTML'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterAfterDoctypeSystemIdentifier: {\n reason: 'Invalid character after system identifier in doctype',\n description: 'Unexpected character at `%c`. Expected `>`'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterInAttributeName: {\n reason: 'Unexpected character in attribute name',\n description:\n 'Unexpected `%c`. Expected whitespace, `/`, `>`, `=`, or probably an ASCII letter'\n },\n /** @type {ErrorInfo} */\n unexpectedCharacterInUnquotedAttributeValue: {\n reason: 'Unexpected character in unquoted attribute value',\n description: 'Unexpected `%c`. Quote the attribute value to include it'\n },\n /** @type {ErrorInfo} */\n unexpectedEqualsSignBeforeAttributeName: {\n reason: 'Unexpected equals sign before attribute name',\n description: 'Unexpected `%c`. Add an attribute name before it'\n },\n /** @type {ErrorInfo} */\n unexpectedNullCharacter: {\n reason: 'Unexpected NULL character',\n description:\n 'Unexpected code point `%x`. Do not use NULL characters in HTML'\n },\n /** @type {ErrorInfo} */\n unexpectedQuestionMarkInsteadOfTagName: {\n reason: 'Unexpected question mark instead of tag name',\n description: 'Unexpected `%c`. Expected an ASCII letter instead'\n },\n /** @type {ErrorInfo} */\n unexpectedSolidusInTag: {\n reason: 'Unexpected slash in tag',\n description:\n 'Unexpected `%c-1`. Expected it followed by `>` or in a quoted attribute value'\n },\n /** @type {ErrorInfo} */\n unknownNamedCharacterReference: {\n reason: 'Unexpected unknown named character reference',\n description:\n 'Unexpected character reference. Expected known named character references'\n }\n}\n","/**\n * @import {Root} from 'hast'\n * @import {ParserError} from 'parse5'\n * @import {Value} from 'vfile'\n * @import {ErrorCode, Options} from './types.js'\n */\n\nimport {ok as assert} from 'devlop'\nimport {fromParse5} from 'hast-util-from-parse5'\nimport {parse, parseFragment} from 'parse5'\nimport {VFile} from 'vfile'\nimport {VFileMessage} from 'vfile-message'\nimport {errors} from './errors.js'\n\nconst base = 'https://html.spec.whatwg.org/multipage/parsing.html#parse-error-'\n\nconst dashToCamelRe = /-[a-z]/g\nconst formatCRe = /%c(?:([-+])(\\d+))?/g\nconst formatXRe = /%x/g\n\nconst fatalities = {2: true, 1: false, 0: null}\n\n/** @type {Readonly<Options>} */\nconst emptyOptions = {}\n\n/**\n * Turn serialized HTML into a hast tree.\n *\n * @param {VFile | Value} value\n * Serialized HTML to parse.\n * @param {Readonly<Options> | null | undefined} [options]\n * Configuration (optional).\n * @returns {Root}\n * Tree.\n */\nexport function fromHtml(value, options) {\n const settings = options || emptyOptions\n const onerror = settings.onerror\n const file = value instanceof VFile ? value : new VFile(value)\n const parseFunction = settings.fragment ? parseFragment : parse\n const document = String(file)\n const p5Document = parseFunction(document, {\n sourceCodeLocationInfo: true,\n // Note `parse5` types currently do not allow `undefined`.\n onParseError: settings.onerror ? internalOnerror : null,\n scriptingEnabled: false\n })\n\n // `parse5` returns document which are always mapped to roots.\n return /** @type {Root} */ (\n fromParse5(p5Document, {\n file,\n space: settings.space,\n verbose: settings.verbose\n })\n )\n\n /**\n * Handle a parse error.\n *\n * @param {ParserError} error\n * Parse5 error.\n * @returns {undefined}\n * Nothing.\n */\n function internalOnerror(error) {\n const code = error.code\n const name = camelcase(code)\n const setting = settings[name]\n const config = setting === null || setting === undefined ? true : setting\n const level = typeof config === 'number' ? config : config ? 1 : 0\n\n if (level) {\n const info = errors[name]\n assert(info, 'expected known error from `parse5`')\n\n const message = new VFileMessage(format(info.reason), {\n place: {\n start: {\n line: error.startLine,\n column: error.startCol,\n offset: error.startOffset\n },\n end: {\n line: error.endLine,\n column: error.endCol,\n offset: error.endOffset\n }\n },\n ruleId: code,\n source: 'hast-util-from-html'\n })\n\n if (file.path) {\n message.file = file.path\n message.name = file.path + ':' + message.name\n }\n\n message.fatal = fatalities[level]\n message.note = format(info.description)\n message.url = info.url === false ? undefined : base + code\n\n assert(onerror, '`internalOnerror` is not passed if `onerror` is not set')\n onerror(message)\n }\n\n /**\n * Format a human readable string about an error.\n *\n * @param {string} value\n * Value to format.\n * @returns {string}\n * Formatted.\n */\n function format(value) {\n return value.replace(formatCRe, formatC).replace(formatXRe, formatX)\n\n /**\n * Format the character.\n *\n * @param {string} _\n * Match.\n * @param {string} $1\n * Sign (`-` or `+`, optional).\n * @param {string} $2\n * Offset.\n * @returns {string}\n * Formatted.\n */\n function formatC(_, $1, $2) {\n const offset =\n ($2 ? Number.parseInt($2, 10) : 0) * ($1 === '-' ? -1 : 1)\n const char = document.charAt(error.startOffset + offset)\n return visualizeCharacter(char)\n }\n\n /**\n * Format the character code.\n *\n * @returns {string}\n * Formatted.\n */\n function formatX() {\n return visualizeCharacterCode(document.charCodeAt(error.startOffset))\n }\n }\n }\n}\n\n/**\n * @param {string} value\n * Error code in dash case.\n * @returns {ErrorCode}\n * Error code in camelcase.\n */\nfunction camelcase(value) {\n // This should match an error code.\n return /** @type {ErrorCode} */ (value.replace(dashToCamelRe, dashToCamel))\n}\n\n/**\n * @param {string} $0\n * Match.\n * @returns {string}\n * Camelcased.\n */\nfunction dashToCamel($0) {\n return $0.charAt(1).toUpperCase()\n}\n\n/**\n * @param {string} char\n * Character.\n * @returns {string}\n * Formatted.\n */\nfunction visualizeCharacter(char) {\n return char === '`' ? '` ` `' : char\n}\n\n/**\n * @param {number} charCode\n * Character code.\n * @returns {string}\n * Formatted.\n */\nfunction visualizeCharacterCode(charCode) {\n return '0x' + charCode.toString(16).toUpperCase()\n}\n","/**\n * @import {Root} from 'hast'\n * @import {Options as FromHtmlOptions} from 'hast-util-from-html'\n * @import {Parser, Processor} from 'unified'\n */\n\n/**\n * @typedef {Omit<FromHtmlOptions, 'onerror'> & RehypeParseFields} Options\n * Configuration.\n *\n * @typedef RehypeParseFields\n * Extra fields.\n * @property {boolean | null | undefined} [emitParseErrors=false]\n * Whether to emit parse errors while parsing (default: `false`).\n *\n * > 👉 **Note**: parse errors are currently being added to HTML.\n * > Not all errors emitted by parse5 (or us) are specced yet.\n * > Some documentation may still be missing.\n */\n\nimport {fromHtml} from 'hast-util-from-html'\n\n/**\n * Plugin to add support for parsing from HTML.\n *\n * > 👉 **Note**: this is not an XML parser.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG files might break but fragments of modern SVG should be fine.\n * > Use [`xast-util-from-xml`][xast-util-from-xml] to parse XML.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function rehypeParse(options) {\n /** @type {Processor<Root>} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n const {emitParseErrors, ...settings} = {...self.data('settings'), ...options}\n\n self.parser = parser\n\n /**\n * @type {Parser<Root>}\n */\n function parser(document, file) {\n return fromHtml(document, {\n ...settings,\n onerror: emitParseErrors\n ? function (message) {\n if (file.path) {\n message.name = file.path + ':' + message.name\n message.file = file.path\n }\n\n file.messages.push(message)\n }\n : undefined\n })\n }\n}\n","/**\n * List of HTML void tag names.\n *\n * @type {Array<string>}\n */\nexport const htmlVoidElements = [\n 'area',\n 'base',\n 'basefont',\n 'bgsound',\n 'br',\n 'col',\n 'command',\n 'embed',\n 'frame',\n 'hr',\n 'image',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr'\n]\n","/**\n * @callback Handler\n * Handle a value, with a certain ID field set to a certain value.\n * The ID field is passed to `zwitch`, and it’s value is this function’s\n * place on the `handlers` record.\n * @param {...any} parameters\n * Arbitrary parameters passed to the zwitch.\n * The first will be an object with a certain ID field set to a certain value.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback UnknownHandler\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @param {unknown} value\n * An object with a certain ID field set to an unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {any}\n * Anything!\n */\n\n/**\n * @callback InvalidHandler\n * Handle values that do not have a certain ID field.\n * @param {unknown} value\n * Any unknown value.\n * @param {...any} rest\n * Arbitrary parameters passed to the zwitch.\n * @returns {void|null|undefined|never}\n * This should crash or return nothing.\n */\n\n/**\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @typedef Options\n * Configuration (required).\n * @property {Invalid} [invalid]\n * Handler to use for invalid values.\n * @property {Unknown} [unknown]\n * Handler to use for unknown values.\n * @property {Handlers} [handlers]\n * Handlers to use.\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Handle values based on a field.\n *\n * @template {InvalidHandler} [Invalid=InvalidHandler]\n * @template {UnknownHandler} [Unknown=UnknownHandler]\n * @template {Record<string, Handler>} [Handlers=Record<string, Handler>]\n * @param {string} key\n * Field to switch on.\n * @param {Options<Invalid, Unknown, Handlers>} [options]\n * Configuration (required).\n * @returns {{unknown: Unknown, invalid: Invalid, handlers: Handlers, (...parameters: Parameters<Handlers[keyof Handlers]>): ReturnType<Handlers[keyof Handlers]>, (...parameters: Parameters<Unknown>): ReturnType<Unknown>}}\n */\nexport function zwitch(key, options) {\n const settings = options || {}\n\n /**\n * Handle one value.\n *\n * Based on the bound `key`, a respective handler will be called.\n * If `value` is not an object, or doesn’t have a `key` property, the special\n * “invalid” handler will be called.\n * If `value` has an unknown `key`, the special “unknown” handler will be\n * called.\n *\n * All arguments, and the context object, are passed through to the handler,\n * and it’s result is returned.\n *\n * @this {unknown}\n * Any context object.\n * @param {unknown} [value]\n * Any value.\n * @param {...unknown} parameters\n * Arbitrary parameters passed to the zwitch.\n * @property {Handler} invalid\n * Handle for values that do not have a certain ID field.\n * @property {Handler} unknown\n * Handle values that do have a certain ID field, but it’s set to a value\n * that is not listed in the `handlers` record.\n * @property {Handlers} handlers\n * Record of handlers.\n * @returns {unknown}\n * Anything.\n */\n function one(value, ...parameters) {\n /** @type {Handler|undefined} */\n let fn = one.invalid\n const handlers = one.handlers\n\n if (value && own.call(value, key)) {\n // @ts-expect-error Indexable.\n const id = String(value[key])\n // @ts-expect-error Indexable.\n fn = own.call(handlers, id) ? handlers[id] : one.unknown\n }\n\n if (fn) {\n return fn.call(this, value, ...parameters)\n }\n }\n\n one.handlers = settings.handlers || {}\n one.invalid = settings.invalid\n one.unknown = settings.unknown\n\n // @ts-expect-error: matches!\n return one\n}\n","/**\n * @typedef CoreOptions\n * @property {ReadonlyArray<string>} [subset=[]]\n * Whether to only escape the given subset of characters.\n * @property {boolean} [escapeOnly=false]\n * Whether to only escape possibly dangerous characters.\n * Those characters are `\"`, `&`, `'`, `<`, `>`, and `` ` ``.\n *\n * @typedef FormatOptions\n * @property {(code: number, next: number, options: CoreWithFormatOptions) => string} format\n * Format strategy.\n *\n * @typedef {CoreOptions & FormatOptions & import('./util/format-smart.js').FormatSmartOptions} CoreWithFormatOptions\n */\n\nconst defaultSubsetRegex = /[\"&'<>`]/g\nconst surrogatePairsRegex = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g\nconst controlCharactersRegex =\n // eslint-disable-next-line no-control-regex, unicorn/no-hex-escape\n /[\\x01-\\t\\v\\f\\x0E-\\x1F\\x7F\\x81\\x8D\\x8F\\x90\\x9D\\xA0-\\uFFFF]/g\nconst regexEscapeRegex = /[|\\\\{}()[\\]^$+*?.]/g\n\n/** @type {WeakMap<ReadonlyArray<string>, RegExp>} */\nconst subsetToRegexCache = new WeakMap()\n\n/**\n * Encode certain characters in `value`.\n *\n * @param {string} value\n * @param {CoreWithFormatOptions} options\n * @returns {string}\n */\nexport function core(value, options) {\n value = value.replace(\n options.subset\n ? charactersToExpressionCached(options.subset)\n : defaultSubsetRegex,\n basic\n )\n\n if (options.subset || options.escapeOnly) {\n return value\n }\n\n return (\n value\n // Surrogate pairs.\n .replace(surrogatePairsRegex, surrogate)\n // BMP control characters (C0 except for LF, CR, SP; DEL; and some more\n // non-ASCII ones).\n .replace(controlCharactersRegex, basic)\n )\n\n /**\n * @param {string} pair\n * @param {number} index\n * @param {string} all\n */\n function surrogate(pair, index, all) {\n return options.format(\n (pair.charCodeAt(0) - 0xd800) * 0x400 +\n pair.charCodeAt(1) -\n 0xdc00 +\n 0x10000,\n all.charCodeAt(index + 2),\n options\n )\n }\n\n /**\n * @param {string} character\n * @param {number} index\n * @param {string} all\n */\n function basic(character, index, all) {\n return options.format(\n character.charCodeAt(0),\n all.charCodeAt(index + 1),\n options\n )\n }\n}\n\n/**\n * A wrapper function that caches the result of `charactersToExpression` with a WeakMap.\n * This can improve performance when tooling calls `charactersToExpression` repeatedly\n * with the same subset.\n *\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpressionCached(subset) {\n let cached = subsetToRegexCache.get(subset)\n\n if (!cached) {\n cached = charactersToExpression(subset)\n subsetToRegexCache.set(subset, cached)\n }\n\n return cached\n}\n\n/**\n * @param {ReadonlyArray<string>} subset\n * @returns {RegExp}\n */\nfunction charactersToExpression(subset) {\n /** @type {Array<string>} */\n const groups = []\n let index = -1\n\n while (++index < subset.length) {\n groups.push(subset[index].replace(regexEscapeRegex, '\\\\$&'))\n }\n\n return new RegExp('(?:' + groups.join('|') + ')', 'g')\n}\n","const hexadecimalRegex = /[\\dA-Fa-f]/\n\n/**\n * Configurable ways to encode characters as hexadecimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toHexadecimal(code, next, omit) {\n const value = '&#x' + code.toString(16).toUpperCase()\n return omit && next && !hexadecimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","const decimalRegex = /\\d/\n\n/**\n * Configurable ways to encode characters as decimal references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @returns {string}\n */\nexport function toDecimal(code, next, omit) {\n const value = '&#' + String(code)\n return omit && next && !decimalRegex.test(String.fromCharCode(next))\n ? value\n : value + ';'\n}\n","/**\n * List of legacy HTML named character references that don’t need a trailing semicolon.\n *\n * @type {Array<string>}\n */\nexport const characterEntitiesLegacy = [\n 'AElig',\n 'AMP',\n 'Aacute',\n 'Acirc',\n 'Agrave',\n 'Aring',\n 'Atilde',\n 'Auml',\n 'COPY',\n 'Ccedil',\n 'ETH',\n 'Eacute',\n 'Ecirc',\n 'Egrave',\n 'Euml',\n 'GT',\n 'Iacute',\n 'Icirc',\n 'Igrave',\n 'Iuml',\n 'LT',\n 'Ntilde',\n 'Oacute',\n 'Ocirc',\n 'Ograve',\n 'Oslash',\n 'Otilde',\n 'Ouml',\n 'QUOT',\n 'REG',\n 'THORN',\n 'Uacute',\n 'Ucirc',\n 'Ugrave',\n 'Uuml',\n 'Yacute',\n 'aacute',\n 'acirc',\n 'acute',\n 'aelig',\n 'agrave',\n 'amp',\n 'aring',\n 'atilde',\n 'auml',\n 'brvbar',\n 'ccedil',\n 'cedil',\n 'cent',\n 'copy',\n 'curren',\n 'deg',\n 'divide',\n 'eacute',\n 'ecirc',\n 'egrave',\n 'eth',\n 'euml',\n 'frac12',\n 'frac14',\n 'frac34',\n 'gt',\n 'iacute',\n 'icirc',\n 'iexcl',\n 'igrave',\n 'iquest',\n 'iuml',\n 'laquo',\n 'lt',\n 'macr',\n 'micro',\n 'middot',\n 'nbsp',\n 'not',\n 'ntilde',\n 'oacute',\n 'ocirc',\n 'ograve',\n 'ordf',\n 'ordm',\n 'oslash',\n 'otilde',\n 'ouml',\n 'para',\n 'plusmn',\n 'pound',\n 'quot',\n 'raquo',\n 'reg',\n 'sect',\n 'shy',\n 'sup1',\n 'sup2',\n 'sup3',\n 'szlig',\n 'thorn',\n 'times',\n 'uacute',\n 'ucirc',\n 'ugrave',\n 'uml',\n 'uuml',\n 'yacute',\n 'yen',\n 'yuml'\n]\n","/**\n * Map of named character references from HTML 4.\n *\n * @type {Record<string, string>}\n */\nexport const characterEntitiesHtml4 = {\n nbsp: ' ',\n iexcl: '¡',\n cent: '¢',\n pound: '£',\n curren: '¤',\n yen: '¥',\n brvbar: '¦',\n sect: '§',\n uml: '¨',\n copy: '©',\n ordf: 'ª',\n laquo: '«',\n not: '¬',\n shy: '­',\n reg: '®',\n macr: '¯',\n deg: '°',\n plusmn: '±',\n sup2: '²',\n sup3: '³',\n acute: '´',\n micro: 'µ',\n para: '¶',\n middot: '·',\n cedil: '¸',\n sup1: '¹',\n ordm: 'º',\n raquo: '»',\n frac14: '¼',\n frac12: '½',\n frac34: '¾',\n iquest: '¿',\n Agrave: 'À',\n Aacute: 'Á',\n Acirc: 'Â',\n Atilde: 'Ã',\n Auml: 'Ä',\n Aring: 'Å',\n AElig: 'Æ',\n Ccedil: 'Ç',\n Egrave: 'È',\n Eacute: 'É',\n Ecirc: 'Ê',\n Euml: 'Ë',\n Igrave: 'Ì',\n Iacute: 'Í',\n Icirc: 'Î',\n Iuml: 'Ï',\n ETH: 'Ð',\n Ntilde: 'Ñ',\n Ograve: 'Ò',\n Oacute: 'Ó',\n Ocirc: 'Ô',\n Otilde: 'Õ',\n Ouml: 'Ö',\n times: '×',\n Oslash: 'Ø',\n Ugrave: 'Ù',\n Uacute: 'Ú',\n Ucirc: 'Û',\n Uuml: 'Ü',\n Yacute: 'Ý',\n THORN: 'Þ',\n szlig: 'ß',\n agrave: 'à',\n aacute: 'á',\n acirc: 'â',\n atilde: 'ã',\n auml: 'ä',\n aring: 'å',\n aelig: 'æ',\n ccedil: 'ç',\n egrave: 'è',\n eacute: 'é',\n ecirc: 'ê',\n euml: 'ë',\n igrave: 'ì',\n iacute: 'í',\n icirc: 'î',\n iuml: 'ï',\n eth: 'ð',\n ntilde: 'ñ',\n ograve: 'ò',\n oacute: 'ó',\n ocirc: 'ô',\n otilde: 'õ',\n ouml: 'ö',\n divide: '÷',\n oslash: 'ø',\n ugrave: 'ù',\n uacute: 'ú',\n ucirc: 'û',\n uuml: 'ü',\n yacute: 'ý',\n thorn: 'þ',\n yuml: 'ÿ',\n fnof: 'ƒ',\n Alpha: 'Α',\n Beta: 'Β',\n Gamma: 'Γ',\n Delta: 'Δ',\n Epsilon: 'Ε',\n Zeta: 'Ζ',\n Eta: 'Η',\n Theta: 'Θ',\n Iota: 'Ι',\n Kappa: 'Κ',\n Lambda: 'Λ',\n Mu: 'Μ',\n Nu: 'Ν',\n Xi: 'Ξ',\n Omicron: 'Ο',\n Pi: 'Π',\n Rho: 'Ρ',\n Sigma: 'Σ',\n Tau: 'Τ',\n Upsilon: 'Υ',\n Phi: 'Φ',\n Chi: 'Χ',\n Psi: 'Ψ',\n Omega: 'Ω',\n alpha: 'α',\n beta: 'β',\n gamma: 'γ',\n delta: 'δ',\n epsilon: 'ε',\n zeta: 'ζ',\n eta: 'η',\n theta: 'θ',\n iota: 'ι',\n kappa: 'κ',\n lambda: 'λ',\n mu: 'μ',\n nu: 'ν',\n xi: 'ξ',\n omicron: 'ο',\n pi: 'π',\n rho: 'ρ',\n sigmaf: 'ς',\n sigma: 'σ',\n tau: 'τ',\n upsilon: 'υ',\n phi: 'φ',\n chi: 'χ',\n psi: 'ψ',\n omega: 'ω',\n thetasym: 'ϑ',\n upsih: 'ϒ',\n piv: 'ϖ',\n bull: '•',\n hellip: '…',\n prime: '′',\n Prime: '″',\n oline: '‾',\n frasl: '⁄',\n weierp: '℘',\n image: 'ℑ',\n real: 'ℜ',\n trade: '™',\n alefsym: 'ℵ',\n larr: '←',\n uarr: '↑',\n rarr: '→',\n darr: '↓',\n harr: '↔',\n crarr: '↵',\n lArr: '⇐',\n uArr: '⇑',\n rArr: '⇒',\n dArr: '⇓',\n hArr: '⇔',\n forall: '∀',\n part: '∂',\n exist: '∃',\n empty: '∅',\n nabla: '∇',\n isin: '∈',\n notin: '∉',\n ni: '∋',\n prod: '∏',\n sum: '∑',\n minus: '−',\n lowast: '∗',\n radic: '√',\n prop: '∝',\n infin: '∞',\n ang: '∠',\n and: '∧',\n or: '∨',\n cap: '∩',\n cup: '∪',\n int: '∫',\n there4: '∴',\n sim: '∼',\n cong: '≅',\n asymp: '≈',\n ne: '≠',\n equiv: '≡',\n le: '≤',\n ge: '≥',\n sub: '⊂',\n sup: '⊃',\n nsub: '⊄',\n sube: '⊆',\n supe: '⊇',\n oplus: '⊕',\n otimes: '⊗',\n perp: '⊥',\n sdot: '⋅',\n lceil: '⌈',\n rceil: '⌉',\n lfloor: '⌊',\n rfloor: '⌋',\n lang: '〈',\n rang: '〉',\n loz: '◊',\n spades: '♠',\n clubs: '♣',\n hearts: '♥',\n diams: '♦',\n quot: '\"',\n amp: '&',\n lt: '<',\n gt: '>',\n OElig: 'Œ',\n oelig: 'œ',\n Scaron: 'Š',\n scaron: 'š',\n Yuml: 'Ÿ',\n circ: 'ˆ',\n tilde: '˜',\n ensp: ' ',\n emsp: ' ',\n thinsp: ' ',\n zwnj: '‌',\n zwj: '‍',\n lrm: '‎',\n rlm: '‏',\n ndash: '–',\n mdash: '—',\n lsquo: '‘',\n rsquo: '’',\n sbquo: '‚',\n ldquo: '“',\n rdquo: '”',\n bdquo: '„',\n dagger: '†',\n Dagger: '‡',\n permil: '‰',\n lsaquo: '‹',\n rsaquo: '›',\n euro: '€'\n}\n","/**\n * List of legacy (that don’t need a trailing `;`) named references which could,\n * depending on what follows them, turn into a different meaning\n *\n * @type {Array<string>}\n */\nexport const dangerous = [\n 'cent',\n 'copy',\n 'divide',\n 'gt',\n 'lt',\n 'not',\n 'para',\n 'times'\n]\n","import {characterEntitiesLegacy} from 'character-entities-legacy'\nimport {characterEntitiesHtml4} from 'character-entities-html4'\nimport {dangerous} from '../constant/dangerous.js'\n\nconst own = {}.hasOwnProperty\n\n/**\n * `characterEntitiesHtml4` but inverted.\n *\n * @type {Record<string, string>}\n */\nconst characters = {}\n\n/** @type {string} */\nlet key\n\nfor (key in characterEntitiesHtml4) {\n if (own.call(characterEntitiesHtml4, key)) {\n characters[characterEntitiesHtml4[key]] = key\n }\n}\n\nconst notAlphanumericRegex = /[^\\dA-Za-z]/\n\n/**\n * Configurable ways to encode characters as named references.\n *\n * @param {number} code\n * @param {number} next\n * @param {boolean|undefined} omit\n * @param {boolean|undefined} attribute\n * @returns {string}\n */\nexport function toNamed(code, next, omit, attribute) {\n const character = String.fromCharCode(code)\n\n if (own.call(characters, character)) {\n const name = characters[character]\n const value = '&' + name\n\n if (\n omit &&\n characterEntitiesLegacy.includes(name) &&\n !dangerous.includes(name) &&\n (!attribute ||\n (next &&\n next !== 61 /* `=` */ &&\n notAlphanumericRegex.test(String.fromCharCode(next))))\n ) {\n return value\n }\n\n return value + ';'\n }\n\n return ''\n}\n","/**\n * @typedef FormatSmartOptions\n * @property {boolean} [useNamedReferences=false]\n * Prefer named character references (`&amp;`) where possible.\n * @property {boolean} [useShortestReferences=false]\n * Prefer the shortest possible reference, if that results in less bytes.\n * **Note**: `useNamedReferences` can be omitted when using `useShortestReferences`.\n * @property {boolean} [omitOptionalSemicolons=false]\n * Whether to omit semicolons when possible.\n * **Note**: This creates what HTML calls “parse errors” but is otherwise still valid HTML — don’t use this except when building a minifier.\n * Omitting semicolons is possible for certain named and numeric references in some cases.\n * @property {boolean} [attribute=false]\n * Create character references which don’t fail in attributes.\n * **Note**: `attribute` only applies when operating dangerously with\n * `omitOptionalSemicolons: true`.\n */\n\nimport {toHexadecimal} from './to-hexadecimal.js'\nimport {toDecimal} from './to-decimal.js'\nimport {toNamed} from './to-named.js'\n\n/**\n * Configurable ways to encode a character yielding pretty or small results.\n *\n * @param {number} code\n * @param {number} next\n * @param {FormatSmartOptions} options\n * @returns {string}\n */\nexport function formatSmart(code, next, options) {\n let numeric = toHexadecimal(code, next, options.omitOptionalSemicolons)\n /** @type {string|undefined} */\n let named\n\n if (options.useNamedReferences || options.useShortestReferences) {\n named = toNamed(\n code,\n next,\n options.omitOptionalSemicolons,\n options.attribute\n )\n }\n\n // Use the shortest numeric reference when requested.\n // A simple algorithm would use decimal for all code points under 100, as\n // those are shorter than hexadecimal:\n //\n // * `&#99;` vs `&#x63;` (decimal shorter)\n // * `&#100;` vs `&#x64;` (equal)\n //\n // However, because we take `next` into consideration when `omit` is used,\n // And it would be possible that decimals are shorter on bigger values as\n // well if `next` is hexadecimal but not decimal, we instead compare both.\n if (\n (options.useShortestReferences || !named) &&\n options.useShortestReferences\n ) {\n const decimal = toDecimal(code, next, options.omitOptionalSemicolons)\n\n if (decimal.length < numeric.length) {\n numeric = decimal\n }\n }\n\n return named &&\n (!options.useShortestReferences || named.length < numeric.length)\n ? named\n : numeric\n}\n","/**\n * @typedef {import('./core.js').CoreOptions & import('./util/format-smart.js').FormatSmartOptions} Options\n * @typedef {import('./core.js').CoreOptions} LightOptions\n */\n\nimport {core} from './core.js'\nimport {formatSmart} from './util/format-smart.js'\nimport {formatBasic} from './util/format-basic.js'\n\n/**\n * Encode special characters in `value`.\n *\n * @param {string} value\n * Value to encode.\n * @param {Options} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntities(value, options) {\n return core(value, Object.assign({format: formatSmart}, options))\n}\n\n/**\n * Encode special characters in `value` as hexadecimals.\n *\n * @param {string} value\n * Value to encode.\n * @param {LightOptions} [options]\n * Configuration.\n * @returns {string}\n * Encoded value.\n */\nexport function stringifyEntitiesLight(value, options) {\n return core(value, Object.assign({format: formatBasic}, options))\n}\n","/**\n * @import {Comment, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\nconst htmlCommentRegex = /^>|^->|<!--|-->|--!>|<!-$/g\n\n// Declare arrays as variables so it can be cached by `stringifyEntities`\nconst bogusCommentEntitySubset = ['>']\nconst commentEntitySubset = ['<', '>']\n\n/**\n * Serialize a comment.\n *\n * @param {Comment} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function comment(node, _1, _2, state) {\n // See: <https://html.spec.whatwg.org/multipage/syntax.html#comments>\n return state.settings.bogusComments\n ? '<?' +\n stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: bogusCommentEntitySubset\n })\n ) +\n '>'\n : '<!--' + node.value.replace(htmlCommentRegex, encode) + '-->'\n\n /**\n * @param {string} $0\n */\n function encode($0) {\n return stringifyEntities(\n $0,\n Object.assign({}, state.settings.characterReferences, {\n subset: commentEntitySubset\n })\n )\n }\n}\n","/**\n * @import {Doctype, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a doctype.\n *\n * @param {Doctype} _1\n * Node to handle.\n * @param {number | undefined} _2\n * Index of `node` in `parent.\n * @param {Parents | undefined} _3\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function doctype(_1, _2, _3, state) {\n return (\n '<!' +\n (state.settings.upperDoctype ? 'DOCTYPE' : 'doctype') +\n (state.settings.tightDoctype ? '' : ' ') +\n 'html>'\n )\n}\n","/**\n * Count how often a character (or substring) is used in a string.\n *\n * @param {string} value\n * Value to search in.\n * @param {string} character\n * Character (or substring) to look for.\n * @return {number}\n * Number of times `character` occurred in `value`.\n */\nexport function ccount(value, character) {\n const source = String(value)\n\n if (typeof character !== 'string') {\n throw new TypeError('Expected character')\n }\n\n let count = 0\n let index = source.indexOf(character)\n\n while (index !== -1) {\n count++\n index = source.indexOf(character, index + character.length)\n }\n\n return count\n}\n","/**\n * @typedef {import('hast').Nodes} Nodes\n */\n\n// HTML whitespace expression.\n// See <https://infra.spec.whatwg.org/#ascii-whitespace>.\nconst re = /[ \\t\\n\\f\\r]/g\n\n/**\n * Check if the given value is *inter-element whitespace*.\n *\n * @param {Nodes | string} thing\n * Thing to check (`Node` or `string`).\n * @returns {boolean}\n * Whether the `value` is inter-element whitespace (`boolean`): consisting of\n * zero or more of space, tab (`\\t`), line feed (`\\n`), carriage return\n * (`\\r`), or form feed (`\\f`); if a node is passed it must be a `Text` node,\n * whose `value` field is checked.\n */\nexport function whitespace(thing) {\n return typeof thing === 'object'\n ? thing.type === 'text'\n ? empty(thing.value)\n : false\n : empty(thing)\n}\n\n/**\n * @param {string} value\n * @returns {boolean}\n */\nfunction empty(value) {\n return value.replace(re, '') === ''\n}\n","/**\n * @import {Parents, RootContent} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\n\nexport const siblingAfter = siblings(1)\nexport const siblingBefore = siblings(-1)\n\n/** @type {Array<RootContent>} */\nconst emptyChildren = []\n\n/**\n * Factory to check siblings in a direction.\n *\n * @param {number} increment\n */\nfunction siblings(increment) {\n return sibling\n\n /**\n * Find applicable siblings in a direction.\n *\n * @template {Parents} Parent\n * Parent type.\n * @param {Parent | undefined} parent\n * Parent.\n * @param {number | undefined} index\n * Index of child in `parent`.\n * @param {boolean | undefined} [includeWhitespace=false]\n * Whether to include whitespace (default: `false`).\n * @returns {Parent extends {children: Array<infer Child>} ? Child | undefined : never}\n * Child of parent.\n */\n function sibling(parent, index, includeWhitespace) {\n const siblings = parent ? parent.children : emptyChildren\n let offset = (index || 0) + increment\n let next = siblings[offset]\n\n if (!includeWhitespace) {\n while (next && whitespace(next)) {\n offset += increment\n next = siblings[offset]\n }\n }\n\n // @ts-expect-error: it’s a correct child.\n return next\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\n/**\n * @callback OmitHandle\n * Check if a tag can be omitted.\n * @param {Element} element\n * Element to check.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether to omit a tag.\n *\n */\n\nconst own = {}.hasOwnProperty\n\n/**\n * Factory to check if a given node can have a tag omitted.\n *\n * @param {Record<string, OmitHandle>} handlers\n * Omission handlers, where each key is a tag name, and each value is the\n * corresponding handler.\n * @returns {OmitHandle}\n * Whether to omit a tag of an element.\n */\nexport function omission(handlers) {\n return omit\n\n /**\n * Check if a given node can have a tag omitted.\n *\n * @type {OmitHandle}\n */\n function omit(node, index, parent) {\n return (\n own.call(handlers, node.tagName) &&\n handlers[node.tagName](node, index, parent)\n )\n }\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter} from './util/siblings.js'\nimport {omission} from './omission.js'\n\nexport const closing = omission({\n body,\n caption: headOrColgroupOrCaption,\n colgroup: headOrColgroupOrCaption,\n dd,\n dt,\n head: headOrColgroupOrCaption,\n html,\n li,\n optgroup,\n option,\n p,\n rp: rubyElement,\n rt: rubyElement,\n tbody,\n td: cells,\n tfoot,\n th: cells,\n thead,\n tr\n})\n\n/**\n * Macro for `</head>`, `</colgroup>`, and `</caption>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction headOrColgroupOrCaption(_, index, parent) {\n const next = siblingAfter(parent, index, true)\n return (\n !next ||\n (next.type !== 'comment' &&\n !(next.type === 'text' && whitespace(next.value.charAt(0))))\n )\n}\n\n/**\n * Whether to omit `</html>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction html(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</body>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction body(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || next.type !== 'comment'\n}\n\n/**\n * Whether to omit `</p>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction p(_, index, parent) {\n const next = siblingAfter(parent, index)\n return next\n ? next.type === 'element' &&\n (next.tagName === 'address' ||\n next.tagName === 'article' ||\n next.tagName === 'aside' ||\n next.tagName === 'blockquote' ||\n next.tagName === 'details' ||\n next.tagName === 'div' ||\n next.tagName === 'dl' ||\n next.tagName === 'fieldset' ||\n next.tagName === 'figcaption' ||\n next.tagName === 'figure' ||\n next.tagName === 'footer' ||\n next.tagName === 'form' ||\n next.tagName === 'h1' ||\n next.tagName === 'h2' ||\n next.tagName === 'h3' ||\n next.tagName === 'h4' ||\n next.tagName === 'h5' ||\n next.tagName === 'h6' ||\n next.tagName === 'header' ||\n next.tagName === 'hgroup' ||\n next.tagName === 'hr' ||\n next.tagName === 'main' ||\n next.tagName === 'menu' ||\n next.tagName === 'nav' ||\n next.tagName === 'ol' ||\n next.tagName === 'p' ||\n next.tagName === 'pre' ||\n next.tagName === 'section' ||\n next.tagName === 'table' ||\n next.tagName === 'ul')\n : !parent ||\n // Confusing parent.\n !(\n parent.type === 'element' &&\n (parent.tagName === 'a' ||\n parent.tagName === 'audio' ||\n parent.tagName === 'del' ||\n parent.tagName === 'ins' ||\n parent.tagName === 'map' ||\n parent.tagName === 'noscript' ||\n parent.tagName === 'video')\n )\n}\n\n/**\n * Whether to omit `</li>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction li(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'li')\n}\n\n/**\n * Whether to omit `</dt>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dt(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd')\n )\n}\n\n/**\n * Whether to omit `</dd>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction dd(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'dt' || next.tagName === 'dd'))\n )\n}\n\n/**\n * Whether to omit `</rt>` or `</rp>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction rubyElement(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'rp' || next.tagName === 'rt'))\n )\n}\n\n/**\n * Whether to omit `</optgroup>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction optgroup(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'optgroup')\n}\n\n/**\n * Whether to omit `</option>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction option(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'option' || next.tagName === 'optgroup'))\n )\n}\n\n/**\n * Whether to omit `</thead>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction thead(_, index, parent) {\n const next = siblingAfter(parent, index)\n return Boolean(\n next &&\n next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot')\n )\n}\n\n/**\n * Whether to omit `</tbody>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tbody(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'tbody' || next.tagName === 'tfoot'))\n )\n}\n\n/**\n * Whether to omit `</tfoot>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tfoot(_, index, parent) {\n return !siblingAfter(parent, index)\n}\n\n/**\n * Whether to omit `</tr>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction tr(_, index, parent) {\n const next = siblingAfter(parent, index)\n return !next || (next.type === 'element' && next.tagName === 'tr')\n}\n\n/**\n * Whether to omit `</td>` or `</th>`.\n *\n * @param {Element} _\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the closing tag can be omitted.\n */\nfunction cells(_, index, parent) {\n const next = siblingAfter(parent, index)\n return (\n !next ||\n (next.type === 'element' &&\n (next.tagName === 'td' || next.tagName === 'th'))\n )\n}\n","/**\n * @import {Element, Parents} from 'hast'\n */\n\nimport {whitespace} from 'hast-util-whitespace'\nimport {siblingAfter, siblingBefore} from './util/siblings.js'\nimport {closing} from './closing.js'\nimport {omission} from './omission.js'\n\nexport const opening = omission({\n body,\n colgroup,\n head,\n html,\n tbody\n})\n\n/**\n * Whether to omit `<html>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction html(node) {\n const head = siblingAfter(node, -1)\n return !head || head.type !== 'comment'\n}\n\n/**\n * Whether to omit `<head>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction head(node) {\n /** @type {Set<string>} */\n const seen = new Set()\n\n // Whether `srcdoc` or not,\n // make sure the content model at least doesn’t have too many `base`s/`title`s.\n for (const child of node.children) {\n if (\n child.type === 'element' &&\n (child.tagName === 'base' || child.tagName === 'title')\n ) {\n if (seen.has(child.tagName)) return false\n seen.add(child.tagName)\n }\n }\n\n // “May be omitted if the element is empty,\n // or if the first thing inside the head element is an element.”\n const child = node.children[0]\n return !child || child.type === 'element'\n}\n\n/**\n * Whether to omit `<body>`.\n *\n * @param {Element} node\n * Element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction body(node) {\n const head = siblingAfter(node, -1, true)\n\n return (\n !head ||\n (head.type !== 'comment' &&\n !(head.type === 'text' && whitespace(head.value.charAt(0))) &&\n !(\n head.type === 'element' &&\n (head.tagName === 'meta' ||\n head.tagName === 'link' ||\n head.tagName === 'script' ||\n head.tagName === 'style' ||\n head.tagName === 'template')\n ))\n )\n}\n\n/**\n * Whether to omit `<colgroup>`.\n * The spec describes some logic for the opening tag, but it’s easier to\n * implement in the closing tag, to the same effect, so we handle it there\n * instead.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction colgroup(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1, true)\n\n // Previous colgroup was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n previous.tagName === 'colgroup' &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'col')\n}\n\n/**\n * Whether to omit `<tbody>`.\n *\n * @param {Element} node\n * Element.\n * @param {number | undefined} index\n * Index of element in parent.\n * @param {Parents | undefined} parent\n * Parent of element.\n * @returns {boolean}\n * Whether the opening tag can be omitted.\n */\nfunction tbody(node, index, parent) {\n const previous = siblingBefore(parent, index)\n const head = siblingAfter(node, -1)\n\n // Previous table section was already omitted.\n if (\n parent &&\n previous &&\n previous.type === 'element' &&\n (previous.tagName === 'thead' || previous.tagName === 'tbody') &&\n closing(previous, parent.children.indexOf(previous), parent)\n ) {\n return false\n }\n\n return Boolean(head && head.type === 'element' && head.tagName === 'tr')\n}\n","/**\n * @import {Element, Parents, Properties} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {ccount} from 'ccount'\nimport {stringify as commas} from 'comma-separated-tokens'\nimport {find, svg} from 'property-information'\nimport {stringify as spaces} from 'space-separated-tokens'\nimport {stringifyEntities} from 'stringify-entities'\nimport {closing} from '../omission/closing.js'\nimport {opening} from '../omission/opening.js'\n\n/**\n * Maps of subsets.\n *\n * Each value is a matrix of tuples.\n * The value at `0` causes parse errors, the value at `1` is valid.\n * Of both, the value at `0` is unsafe, and the value at `1` is safe.\n *\n * @type {Record<'double' | 'name' | 'single' | 'unquoted', Array<[Array<string>, Array<string>]>>}\n */\nconst constants = {\n // See: <https://html.spec.whatwg.org/#attribute-name-state>.\n name: [\n ['\\t\\n\\f\\r &/=>'.split(''), '\\t\\n\\f\\r \"&\\'/=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'/<=>'.split(''), '\\0\\t\\n\\f\\r \"&\\'/<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(unquoted)-state>.\n unquoted: [\n ['\\t\\n\\f\\r &>'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')],\n ['\\0\\t\\n\\f\\r \"&\\'<=>`'.split(''), '\\0\\t\\n\\f\\r \"&\\'<=>`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(single-quoted)-state>.\n single: [\n [\"&'\".split(''), '\"&\\'`'.split('')],\n [\"\\0&'\".split(''), '\\0\"&\\'`'.split('')]\n ],\n // See: <https://html.spec.whatwg.org/#attribute-value-(double-quoted)-state>.\n double: [\n ['\"&'.split(''), '\"&\\'`'.split('')],\n ['\\0\"&'.split(''), '\\0\"&\\'`'.split('')]\n ]\n}\n\n/**\n * Serialize an element node.\n *\n * @param {Element} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function element(node, index, parent, state) {\n const schema = state.schema\n const omit = schema.space === 'svg' ? false : state.settings.omitOptionalTags\n let selfClosing =\n schema.space === 'svg'\n ? state.settings.closeEmptyElements\n : state.settings.voids.includes(node.tagName.toLowerCase())\n /** @type {Array<string>} */\n const parts = []\n /** @type {string} */\n let last\n\n if (schema.space === 'html' && node.tagName === 'svg') {\n state.schema = svg\n }\n\n const attributes = serializeAttributes(state, node.properties)\n\n const content = state.all(\n schema.space === 'html' && node.tagName === 'template' ? node.content : node\n )\n\n state.schema = schema\n\n // If the node is categorised as void, but it has children, remove the\n // categorisation.\n // This enables for example `menuitem`s, which are void in W3C HTML but not\n // void in WHATWG HTML, to be stringified properly.\n // Note: `menuitem` has since been removed from the HTML spec, and so is no\n // longer void.\n if (content) selfClosing = false\n\n if (attributes || !omit || !opening(node, index, parent)) {\n parts.push('<', node.tagName, attributes ? ' ' + attributes : '')\n\n if (\n selfClosing &&\n (schema.space === 'svg' || state.settings.closeSelfClosing)\n ) {\n last = attributes.charAt(attributes.length - 1)\n if (\n !state.settings.tightSelfClosing ||\n last === '/' ||\n (last && last !== '\"' && last !== \"'\")\n ) {\n parts.push(' ')\n }\n\n parts.push('/')\n }\n\n parts.push('>')\n }\n\n parts.push(content)\n\n if (!selfClosing && (!omit || !closing(node, index, parent))) {\n parts.push('</' + node.tagName + '>')\n }\n\n return parts.join('')\n}\n\n/**\n * @param {State} state\n * @param {Properties | null | undefined} properties\n * @returns {string}\n */\nfunction serializeAttributes(state, properties) {\n /** @type {Array<string>} */\n const values = []\n let index = -1\n /** @type {string} */\n let key\n\n if (properties) {\n for (key in properties) {\n if (properties[key] !== null && properties[key] !== undefined) {\n const value = serializeAttribute(state, key, properties[key])\n if (value) values.push(value)\n }\n }\n }\n\n while (++index < values.length) {\n const last = state.settings.tightAttributes\n ? values[index].charAt(values[index].length - 1)\n : undefined\n\n // In tight mode, don’t add a space after quoted attributes.\n if (index !== values.length - 1 && last !== '\"' && last !== \"'\") {\n values[index] += ' '\n }\n }\n\n return values.join('')\n}\n\n/**\n * @param {State} state\n * @param {string} key\n * @param {Properties[keyof Properties]} value\n * @returns {string}\n */\nfunction serializeAttribute(state, key, value) {\n const info = find(state.schema, key)\n const x =\n state.settings.allowParseErrors && state.schema.space === 'html' ? 0 : 1\n const y = state.settings.allowDangerousCharacters ? 0 : 1\n let quote = state.quote\n /** @type {string | undefined} */\n let result\n\n if (info.overloadedBoolean && (value === info.attribute || value === '')) {\n value = true\n } else if (\n (info.boolean || info.overloadedBoolean) &&\n (typeof value !== 'string' || value === info.attribute || value === '')\n ) {\n value = Boolean(value)\n }\n\n if (\n value === null ||\n value === undefined ||\n value === false ||\n (typeof value === 'number' && Number.isNaN(value))\n ) {\n return ''\n }\n\n const name = stringifyEntities(\n info.attribute,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: constants.name[x][y]\n })\n )\n\n // No value.\n // There is currently only one boolean property in SVG: `[download]` on\n // `<a>`.\n // This property does not seem to work in browsers (Firefox, Safari, Chrome),\n // so I can’t test if dropping the value works.\n // But I assume that it should:\n //\n // ```html\n // <!doctype html>\n // <svg viewBox=\"0 0 100 100\">\n // <a href=https://example.com download>\n // <circle cx=50 cy=40 r=35 />\n // </a>\n // </svg>\n // ```\n //\n // See: <https://github.com/wooorm/property-information/blob/main/lib/svg.js>\n if (value === true) return name\n\n // `spaces` doesn’t accept a second argument, but it’s given here just to\n // keep the code cleaner.\n value = Array.isArray(value)\n ? (info.commaSeparated ? commas : spaces)(value, {\n padLeft: !state.settings.tightCommaSeparatedLists\n })\n : String(value)\n\n if (state.settings.collapseEmptyAttributes && !value) return name\n\n // Check unquoted value.\n if (state.settings.preferUnquoted) {\n result = stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n attribute: true,\n subset: constants.unquoted[x][y]\n })\n )\n }\n\n // If we don’t want unquoted, or if `value` contains character references when\n // unquoted…\n if (result !== value) {\n // If the alternative is less common than `quote`, switch.\n if (\n state.settings.quoteSmart &&\n ccount(value, quote) > ccount(value, state.alternative)\n ) {\n quote = state.alternative\n }\n\n result =\n quote +\n stringifyEntities(\n value,\n Object.assign({}, state.settings.characterReferences, {\n // Always encode without parse errors in non-HTML.\n subset: (quote === \"'\" ? constants.single : constants.double)[x][y],\n attribute: true\n })\n ) +\n quote\n }\n\n // Don’t add a `=` for unquoted empties.\n return name + (result ? '=' + result : result)\n}\n","/**\n * @import {Parents, Text} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {stringifyEntities} from 'stringify-entities'\n\n// Declare array as variable so it can be cached by `stringifyEntities`\nconst textEntitySubset = ['<', '&']\n\n/**\n * Serialize a text node.\n *\n * @param {Raw | Text} node\n * Node to handle.\n * @param {number | undefined} _\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function text(node, _, parent, state) {\n // Check if content of `node` should be escaped.\n return parent &&\n parent.type === 'element' &&\n (parent.tagName === 'script' || parent.tagName === 'style')\n ? node.value\n : stringifyEntities(\n node.value,\n Object.assign({}, state.settings.characterReferences, {\n subset: textEntitySubset\n })\n )\n}\n","/**\n * @import {Parents} from 'hast'\n * @import {Raw} from 'mdast-util-to-hast'\n * @import {State} from '../index.js'\n */\n\nimport {text} from './text.js'\n\n/**\n * Serialize a raw node.\n *\n * @param {Raw} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function raw(node, index, parent, state) {\n return state.settings.allowDangerousHtml\n ? node.value\n : text(node, index, parent, state)\n}\n","/**\n * @import {Parents, Root} from 'hast'\n * @import {State} from '../index.js'\n */\n\n/**\n * Serialize a root.\n *\n * @param {Root} node\n * Node to handle.\n * @param {number | undefined} _1\n * Index of `node` in `parent.\n * @param {Parents | undefined} _2\n * Parent of `node`.\n * @param {State} state\n * Info passed around about the current state.\n * @returns {string}\n * Serialized node.\n */\nexport function root(node, _1, _2, state) {\n return state.all(node)\n}\n","/**\n * @import {Nodes, Parents} from 'hast'\n * @import {State} from '../index.js'\n */\n\nimport {zwitch} from 'zwitch'\nimport {comment} from './comment.js'\nimport {doctype} from './doctype.js'\nimport {element} from './element.js'\nimport {raw} from './raw.js'\nimport {root} from './root.js'\nimport {text} from './text.js'\n\n/**\n * @type {(node: Nodes, index: number | undefined, parent: Parents | undefined, state: State) => string}\n */\nexport const handle = zwitch('type', {\n invalid,\n unknown,\n handlers: {comment, doctype, element, raw, root, text}\n})\n\n/**\n * Fail when a non-node is found in the tree.\n *\n * @param {unknown} node\n * Unknown value.\n * @returns {never}\n * Never.\n */\nfunction invalid(node) {\n throw new Error('Expected node, not `' + node + '`')\n}\n\n/**\n * Fail when a node with an unknown type is found in the tree.\n *\n * @param {unknown} node_\n * Unknown node.\n * @returns {never}\n * Never.\n */\nfunction unknown(node_) {\n // `type` is guaranteed by runtime JS.\n const node = /** @type {Nodes} */ (node_)\n throw new Error('Cannot compile unknown node `' + node.type + '`')\n}\n","/**\n * @import {Nodes, Parents, RootContent} from 'hast'\n * @import {Schema} from 'property-information'\n * @import {Options as StringifyEntitiesOptions} from 'stringify-entities'\n */\n\n/**\n * @typedef {Omit<StringifyEntitiesOptions, 'attribute' | 'escapeOnly' | 'subset'>} CharacterReferences\n *\n * @typedef Options\n * Configuration.\n * @property {boolean | null | undefined} [allowDangerousCharacters=false]\n * Do not encode some characters which cause XSS vulnerabilities in older\n * browsers (default: `false`).\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowDangerousHtml=false]\n * Allow `raw` nodes and insert them as raw HTML (default: `false`).\n *\n * When `false`, `Raw` nodes are encoded.\n *\n * > ⚠️ **Danger**: only set this if you completely trust the content.\n * @property {boolean | null | undefined} [allowParseErrors=false]\n * Do not encode characters which cause parse errors (even though they work),\n * to save bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [bogusComments=false]\n * Use “bogus comments” instead of comments to save byes: `<?charlie>`\n * instead of `<!--charlie-->` (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {CharacterReferences | null | undefined} [characterReferences]\n * Configure how to serialize character references (optional).\n * @property {boolean | null | undefined} [closeEmptyElements=false]\n * Close SVG elements without any content with slash (`/`) on the opening tag\n * instead of an end tag: `<circle />` instead of `<circle></circle>`\n * (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the HTML space.\n * @property {boolean | null | undefined} [closeSelfClosing=false]\n * Close self-closing nodes with an extra slash (`/`): `<img />` instead of\n * `<img>` (default: `false`).\n *\n * See `tightSelfClosing` to control whether a space is used before the\n * slash.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [collapseEmptyAttributes=false]\n * Collapse empty attributes: get `class` instead of `class=\"\"` (default:\n * `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: boolean attributes (such as `hidden`) are always collapsed.\n * @property {boolean | null | undefined} [omitOptionalTags=false]\n * Omit optional opening and closing tags (default: `false`).\n *\n * For example, in `<ol><li>one</li><li>two</li></ol>`, both `</li>` closing\n * tags can be omitted.\n * The first because it’s followed by another `li`, the last because it’s\n * followed by nothing.\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [preferUnquoted=false]\n * Leave attributes unquoted if that results in less bytes (default: `false`).\n *\n * Not used in the SVG space.\n * @property {boolean | null | undefined} [quoteSmart=false]\n * Use the other quote if that results in less bytes (default: `false`).\n * @property {Quote | null | undefined} [quote='\"']\n * Preferred quote to use (default: `'\"'`).\n * @property {Space | null | undefined} [space='html']\n * When an `<svg>` element is found in the HTML space, this package already\n * automatically switches to and from the SVG space when entering and exiting\n * it (default: `'html'`).\n *\n * > 👉 **Note**: hast is not XML.\n * > It supports SVG as embedded in HTML.\n * > It does not support the features available in XML.\n * > Passing SVG might break but fragments of modern SVG should be fine.\n * > Use [`xast`][xast] if you need to support SVG as XML.\n * @property {boolean | null | undefined} [tightAttributes=false]\n * Join attributes together, without whitespace, if possible: get\n * `class=\"a b\"title=\"c d\"` instead of `class=\"a b\" title=\"c d\"` to save\n * bytes (default: `false`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightCommaSeparatedLists=false]\n * Join known comma-separated attribute values with just a comma (`,`),\n * instead of padding them on the right as well (`,␠`, where `␠` represents a\n * space) (default: `false`).\n * @property {boolean | null | undefined} [tightDoctype=false]\n * Drop unneeded spaces in doctypes: `<!doctypehtml>` instead of\n * `<!doctype html>` to save bytes (default: `false`).\n *\n * > 👉 **Note**: intentionally creates parse errors in markup (how parse\n * > errors are handled is well defined, so this works but isn’t pretty).\n * @property {boolean | null | undefined} [tightSelfClosing=false]\n * Do not use an extra space when closing self-closing elements: `<img/>`\n * instead of `<img />` (default: `false`).\n *\n * > 👉 **Note**: only used if `closeSelfClosing: true` or\n * > `closeEmptyElements: true`.\n * @property {boolean | null | undefined} [upperDoctype=false]\n * Use a `<!DOCTYPE…` instead of `<!doctype…` (default: `false`).\n *\n * Useless except for XHTML.\n * @property {ReadonlyArray<string> | null | undefined} [voids]\n * Tag names of elements to serialize without closing tag (default: `html-void-elements`).\n *\n * Not used in the SVG space.\n *\n * > 👉 **Note**: It’s highly unlikely that you want to pass this, because\n * > hast is not for XML, and HTML will not add more void elements.\n *\n * @typedef {'\"' | \"'\"} Quote\n * HTML quotes for attribute values.\n *\n * @typedef {Omit<Required<{[key in keyof Options]: Exclude<Options[key], null | undefined>}>, 'space' | 'quote'>} Settings\n *\n * @typedef {'html' | 'svg'} Space\n * Namespace.\n *\n * @typedef State\n * Info passed around about the current state.\n * @property {(node: Parents | undefined) => string} all\n * Serialize the children of a parent node.\n * @property {Quote} alternative\n * Alternative quote.\n * @property {(node: Nodes, index: number | undefined, parent: Parents | undefined) => string} one\n * Serialize one node.\n * @property {Quote} quote\n * Preferred quote.\n * @property {Schema} schema\n * Current schema.\n * @property {Settings} settings\n * User configuration.\n */\n\nimport {htmlVoidElements} from 'html-void-elements'\nimport {html, svg} from 'property-information'\nimport {handle} from './handle/index.js'\n\n/** @type {Options} */\nconst emptyOptions = {}\n\n/** @type {CharacterReferences} */\nconst emptyCharacterReferences = {}\n\n/** @type {Array<never>} */\nconst emptyChildren = []\n\n/**\n * Serialize hast as HTML.\n *\n * @param {Array<RootContent> | Nodes} tree\n * Tree to serialize.\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {string}\n * Serialized HTML.\n */\nexport function toHtml(tree, options) {\n const options_ = options || emptyOptions\n const quote = options_.quote || '\"'\n const alternative = quote === '\"' ? \"'\" : '\"'\n\n if (quote !== '\"' && quote !== \"'\") {\n throw new Error('Invalid quote `' + quote + '`, expected `\\'` or `\"`')\n }\n\n /** @type {State} */\n const state = {\n one,\n all,\n settings: {\n omitOptionalTags: options_.omitOptionalTags || false,\n allowParseErrors: options_.allowParseErrors || false,\n allowDangerousCharacters: options_.allowDangerousCharacters || false,\n quoteSmart: options_.quoteSmart || false,\n preferUnquoted: options_.preferUnquoted || false,\n tightAttributes: options_.tightAttributes || false,\n upperDoctype: options_.upperDoctype || false,\n tightDoctype: options_.tightDoctype || false,\n bogusComments: options_.bogusComments || false,\n tightCommaSeparatedLists: options_.tightCommaSeparatedLists || false,\n tightSelfClosing: options_.tightSelfClosing || false,\n collapseEmptyAttributes: options_.collapseEmptyAttributes || false,\n allowDangerousHtml: options_.allowDangerousHtml || false,\n voids: options_.voids || htmlVoidElements,\n characterReferences:\n options_.characterReferences || emptyCharacterReferences,\n closeSelfClosing: options_.closeSelfClosing || false,\n closeEmptyElements: options_.closeEmptyElements || false\n },\n schema: options_.space === 'svg' ? svg : html,\n quote,\n alternative\n }\n\n return state.one(\n Array.isArray(tree) ? {type: 'root', children: tree} : tree,\n undefined,\n undefined\n )\n}\n\n/**\n * Serialize a node.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Nodes} node\n * Node to handle.\n * @param {number | undefined} index\n * Index of `node` in `parent.\n * @param {Parents | undefined} parent\n * Parent of `node`.\n * @returns {string}\n * Serialized node.\n */\nfunction one(node, index, parent) {\n return handle(node, index, parent, this)\n}\n\n/**\n * Serialize all children of `parent`.\n *\n * @this {State}\n * Info passed around about the current state.\n * @param {Parents | undefined} parent\n * Parent whose children to serialize.\n * @returns {string}\n */\nexport function all(parent) {\n /** @type {Array<string>} */\n const results = []\n const children = (parent && parent.children) || emptyChildren\n let index = -1\n\n while (++index < children.length) {\n results[index] = this.one(children[index], index, parent)\n }\n\n return results.join('')\n}\n","/**\n * @import {Root} from 'hast'\n * @import {Options} from 'hast-util-to-html'\n * @import {Compiler, Processor} from 'unified'\n */\n\nimport {toHtml} from 'hast-util-to-html'\n\n/**\n * Plugin to add support for serializing as HTML.\n *\n * @param {Options | null | undefined} [options]\n * Configuration (optional).\n * @returns {undefined}\n * Nothing.\n */\nexport default function rehypeStringify(options) {\n /** @type {Processor<undefined, undefined, undefined, Root, string>} */\n // @ts-expect-error: TS in JSDoc generates wrong types if `this` is typed regularly.\n const self = this\n const settings = {...self.data('settings'), ...options}\n\n self.compiler = compiler\n\n /**\n * @type {Compiler<Root, string>}\n */\n function compiler(tree) {\n return toHtml(tree, settings)\n }\n}\n","/**\n * Throw a given error.\n *\n * @param {Error|null|undefined} [error]\n * Maybe error.\n * @returns {asserts error is null|undefined}\n */\nexport function bail(error) {\n if (error) {\n throw error\n }\n}\n","'use strict';\n\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar toStr = Object.prototype.toString;\nvar defineProperty = Object.defineProperty;\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nvar isArray = function isArray(arr) {\n\tif (typeof Array.isArray === 'function') {\n\t\treturn Array.isArray(arr);\n\t}\n\n\treturn toStr.call(arr) === '[object Array]';\n};\n\nvar isPlainObject = function isPlainObject(obj) {\n\tif (!obj || toStr.call(obj) !== '[object Object]') {\n\t\treturn false;\n\t}\n\n\tvar hasOwnConstructor = hasOwn.call(obj, 'constructor');\n\tvar hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');\n\t// Not own constructor property must be Object\n\tif (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {\n\t\treturn false;\n\t}\n\n\t// Own properties are enumerated firstly, so to speed up,\n\t// if last one is own, then all properties are own.\n\tvar key;\n\tfor (key in obj) { /**/ }\n\n\treturn typeof key === 'undefined' || hasOwn.call(obj, key);\n};\n\n// If name is '__proto__', and Object.defineProperty is available, define __proto__ as an own property on target\nvar setProperty = function setProperty(target, options) {\n\tif (defineProperty && options.name === '__proto__') {\n\t\tdefineProperty(target, options.name, {\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true,\n\t\t\tvalue: options.newValue,\n\t\t\twritable: true\n\t\t});\n\t} else {\n\t\ttarget[options.name] = options.newValue;\n\t}\n};\n\n// Return undefined instead of __proto__ if '__proto__' is not an own property\nvar getProperty = function getProperty(obj, name) {\n\tif (name === '__proto__') {\n\t\tif (!hasOwn.call(obj, name)) {\n\t\t\treturn void 0;\n\t\t} else if (gOPD) {\n\t\t\t// In early versions of node, obj['__proto__'] is buggy when obj has\n\t\t\t// __proto__ as an own property. Object.getOwnPropertyDescriptor() works.\n\t\t\treturn gOPD(obj, name).value;\n\t\t}\n\t}\n\n\treturn obj[name];\n};\n\nmodule.exports = function extend() {\n\tvar options, name, src, copy, copyIsArray, clone;\n\tvar target = arguments[0];\n\tvar i = 1;\n\tvar length = arguments.length;\n\tvar deep = false;\n\n\t// Handle a deep copy situation\n\tif (typeof target === 'boolean') {\n\t\tdeep = target;\n\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\n\t}\n\tif (target == null || (typeof target !== 'object' && typeof target !== 'function')) {\n\t\ttarget = {};\n\t}\n\n\tfor (; i < length; ++i) {\n\t\toptions = arguments[i];\n\t\t// Only deal with non-null/undefined values\n\t\tif (options != null) {\n\t\t\t// Extend the base object\n\t\t\tfor (name in options) {\n\t\t\t\tsrc = getProperty(target, name);\n\t\t\t\tcopy = getProperty(options, name);\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif (target !== copy) {\n\t\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\t\tif (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {\n\t\t\t\t\t\tif (copyIsArray) {\n\t\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\t\tclone = src && isArray(src) ? src : [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tclone = src && isPlainObject(src) ? src : {};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: extend(deep, clone, copy) });\n\n\t\t\t\t\t// Don't bring in undefined values\n\t\t\t\t\t} else if (typeof copy !== 'undefined') {\n\t\t\t\t\t\tsetProperty(target, { name: name, newValue: copy });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n","export default function isPlainObject(value) {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\n\tconst prototype = Object.getPrototypeOf(value);\n\treturn (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in value) && !(Symbol.iterator in value);\n}\n","// To do: remove `void`s\n// To do: remove `null` from output of our APIs, allow it as user APIs.\n\n/**\n * @typedef {(error?: Error | null | undefined, ...output: Array<any>) => void} Callback\n * Callback.\n *\n * @typedef {(...input: Array<any>) => any} Middleware\n * Ware.\n *\n * @typedef Pipeline\n * Pipeline.\n * @property {Run} run\n * Run the pipeline.\n * @property {Use} use\n * Add middleware.\n *\n * @typedef {(...input: Array<any>) => void} Run\n * Call all middleware.\n *\n * Calls `done` on completion with either an error or the output of the\n * last middleware.\n *\n * > 👉 **Note**: as the length of input defines whether async functions get a\n * > `next` function,\n * > it’s recommended to keep `input` at one value normally.\n\n *\n * @typedef {(fn: Middleware) => Pipeline} Use\n * Add middleware.\n */\n\n/**\n * Create new middleware.\n *\n * @returns {Pipeline}\n * Pipeline.\n */\nexport function trough() {\n /** @type {Array<Middleware>} */\n const fns = []\n /** @type {Pipeline} */\n const pipeline = {run, use}\n\n return pipeline\n\n /** @type {Run} */\n function run(...values) {\n let middlewareIndex = -1\n /** @type {Callback} */\n const callback = values.pop()\n\n if (typeof callback !== 'function') {\n throw new TypeError('Expected function as last argument, not ' + callback)\n }\n\n next(null, ...values)\n\n /**\n * Run the next `fn`, or we’re done.\n *\n * @param {Error | null | undefined} error\n * @param {Array<any>} output\n */\n function next(error, ...output) {\n const fn = fns[++middlewareIndex]\n let index = -1\n\n if (error) {\n callback(error)\n return\n }\n\n // Copy non-nullish input into values.\n while (++index < values.length) {\n if (output[index] === null || output[index] === undefined) {\n output[index] = values[index]\n }\n }\n\n // Save the newly created `output` for the next call.\n values = output\n\n // Next or done.\n if (fn) {\n wrap(fn, next)(...output)\n } else {\n callback(null, ...output)\n }\n }\n }\n\n /** @type {Use} */\n function use(middelware) {\n if (typeof middelware !== 'function') {\n throw new TypeError(\n 'Expected `middelware` to be a function, not ' + middelware\n )\n }\n\n fns.push(middelware)\n return pipeline\n }\n}\n\n/**\n * Wrap `middleware` into a uniform interface.\n *\n * You can pass all input to the resulting function.\n * `callback` is then called with the output of `middleware`.\n *\n * If `middleware` accepts more arguments than the later given in input,\n * an extra `done` function is passed to it after that input,\n * which must be called by `middleware`.\n *\n * The first value in `input` is the main input value.\n * All other input values are the rest input values.\n * The values given to `callback` are the input values,\n * merged with every non-nullish output value.\n *\n * * if `middleware` throws an error,\n * returns a promise that is rejected,\n * or calls the given `done` function with an error,\n * `callback` is called with that error\n * * if `middleware` returns a value or returns a promise that is resolved,\n * that value is the main output value\n * * if `middleware` calls `done`,\n * all non-nullish values except for the first one (the error) overwrite the\n * output values\n *\n * @param {Middleware} middleware\n * Function to wrap.\n * @param {Callback} callback\n * Callback called with the output of `middleware`.\n * @returns {Run}\n * Wrapped middleware.\n */\nexport function wrap(middleware, callback) {\n /** @type {boolean} */\n let called\n\n return wrapped\n\n /**\n * Call `middleware`.\n * @this {any}\n * @param {Array<any>} parameters\n * @returns {void}\n */\n function wrapped(...parameters) {\n const fnExpectsCallback = middleware.length > parameters.length\n /** @type {any} */\n let result\n\n if (fnExpectsCallback) {\n parameters.push(done)\n }\n\n try {\n result = middleware.apply(this, parameters)\n } catch (error) {\n const exception = /** @type {Error} */ (error)\n\n // Well, this is quite the pickle.\n // `middleware` received a callback and called it synchronously, but that\n // threw an error.\n // The only thing left to do is to throw the thing instead.\n if (fnExpectsCallback && called) {\n throw exception\n }\n\n return done(exception)\n }\n\n if (!fnExpectsCallback) {\n if (result && result.then && typeof result.then === 'function') {\n result.then(then, done)\n } else if (result instanceof Error) {\n done(result)\n } else {\n then(result)\n }\n }\n }\n\n /**\n * Call `callback`, only once.\n *\n * @type {Callback}\n */\n function done(error, ...output) {\n if (!called) {\n called = true\n callback(error, ...output)\n }\n }\n\n /**\n * Call `done` with one value.\n *\n * @param {any} [value]\n */\n function then(value) {\n done(null, value)\n }\n}\n","export const CallableInstance =\n /**\n * @type {new <Parameters extends Array<unknown>, Result>(property: string | symbol) => (...parameters: Parameters) => Result}\n */\n (\n /** @type {unknown} */\n (\n /**\n * @this {Function}\n * @param {string | symbol} property\n * @returns {(...parameters: Array<unknown>) => unknown}\n */\n function (property) {\n const self = this\n const constr = self.constructor\n const proto = /** @type {Record<string | symbol, Function>} */ (\n // Prototypes do exist.\n // type-coverage:ignore-next-line\n constr.prototype\n )\n const value = proto[property]\n /** @type {(...parameters: Array<unknown>) => unknown} */\n const apply = function () {\n return value.apply(apply, arguments)\n }\n\n Object.setPrototypeOf(apply, proto)\n\n // Not needed for us in `unified`: we only call this on the `copy`\n // function,\n // and we don't need to add its fields (`length`, `name`)\n // over.\n // See also: GH-246.\n // const names = Object.getOwnPropertyNames(value)\n //\n // for (const p of names) {\n // const descriptor = Object.getOwnPropertyDescriptor(value, p)\n // if (descriptor) Object.defineProperty(apply, p, descriptor)\n // }\n\n return apply\n }\n )\n )\n","/**\n * @typedef {import('trough').Pipeline} Pipeline\n *\n * @typedef {import('unist').Node} Node\n *\n * @typedef {import('vfile').Compatible} Compatible\n * @typedef {import('vfile').Value} Value\n *\n * @typedef {import('../index.js').CompileResultMap} CompileResultMap\n * @typedef {import('../index.js').Data} Data\n * @typedef {import('../index.js').Settings} Settings\n */\n\n/**\n * @typedef {CompileResultMap[keyof CompileResultMap]} CompileResults\n * Acceptable results from compilers.\n *\n * To register custom results, add them to\n * {@linkcode CompileResultMap}.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the compiler receives (default: `Node`).\n * @template {CompileResults} [Result=CompileResults]\n * The thing that the compiler yields (default: `CompileResults`).\n * @callback Compiler\n * A **compiler** handles the compiling of a syntax tree to something else\n * (in most cases, text) (TypeScript type).\n *\n * It is used in the stringify phase and called with a {@linkcode Node}\n * and {@linkcode VFile} representation of the document to compile.\n * It should return the textual representation of the given tree (typically\n * `string`).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n * @param {Tree} tree\n * Tree to compile.\n * @param {VFile} file\n * File associated with `tree`.\n * @returns {Result}\n * New content: compiled text (`string` or `Uint8Array`, for `file.value`) or\n * something else (for `file.result`).\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The node that the parser yields (default: `Node`)\n * @callback Parser\n * A **parser** handles the parsing of text to a syntax tree.\n *\n * It is used in the parse phase and is called with a `string` and\n * {@linkcode VFile} of the document to parse.\n * It must return the syntax tree representation of the given file\n * ({@linkcode Node}).\n * @param {string} document\n * Document to parse.\n * @param {VFile} file\n * File associated with `document`.\n * @returns {Tree}\n * Node representing the given file.\n */\n\n/**\n * @typedef {(\n * Plugin<Array<any>, any, any> |\n * PluginTuple<Array<any>, any, any> |\n * Preset\n * )} Pluggable\n * Union of the different ways to add plugins and settings.\n */\n\n/**\n * @typedef {Array<Pluggable>} PluggableList\n * List of plugins and presets.\n */\n\n// Note: we can’t use `callback` yet as it messes up `this`:\n// <https://github.com/microsoft/TypeScript/issues/55197>.\n/**\n * @template {Array<unknown>} [PluginParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=Node]\n * Value that is expected as input (default: `Node`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=Input]\n * Value that is yielded as output (default: `Input`).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * (this: Processor, ...parameters: PluginParameters) =>\n * Input extends string ? // Parser.\n * Output extends Node | undefined ? undefined | void : never :\n * Output extends CompileResults ? // Compiler.\n * Input extends Node | undefined ? undefined | void : never :\n * Transformer<\n * Input extends Node ? Input : Node,\n * Output extends Node ? Output : Node\n * > | undefined | void\n * )} Plugin\n * Single plugin.\n *\n * Plugins configure the processors they are applied on in the following\n * ways:\n *\n * * they change the processor, such as the parser, the compiler, or by\n * configuring data\n * * they specify how to handle trees and files\n *\n * In practice, they are functions that can receive options and configure the\n * processor (`this`).\n *\n * > **Note**: plugins are called when the processor is *frozen*, not when\n * > they are applied.\n */\n\n/**\n * Tuple of a plugin and its configuration.\n *\n * The first item is a plugin, the rest are its parameters.\n *\n * @template {Array<unknown>} [TupleParameters=[]]\n * Arguments passed to the plugin (default: `[]`, the empty tuple).\n * @template {Node | string | undefined} [Input=undefined]\n * Value that is expected as input (optional).\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node it expects.\n * * If the plugin sets a {@linkcode Parser}, this should be\n * `string`.\n * * If the plugin sets a {@linkcode Compiler}, this should be the\n * node it expects.\n * @template [Output=undefined] (optional).\n * Value that is yielded as output.\n *\n * * If the plugin returns a {@linkcode Transformer}, this\n * should be the node that that yields.\n * * If the plugin sets a {@linkcode Parser}, this should be the\n * node that it yields.\n * * If the plugin sets a {@linkcode Compiler}, this should be\n * result it yields.\n * @typedef {(\n * [\n * plugin: Plugin<TupleParameters, Input, Output>,\n * ...parameters: TupleParameters\n * ]\n * )} PluginTuple\n */\n\n/**\n * @typedef Preset\n * Sharable configuration.\n *\n * They can contain plugins and settings.\n * @property {PluggableList | undefined} [plugins]\n * List of plugins and presets (optional).\n * @property {Settings | undefined} [settings]\n * Shared settings for parsers and compilers (optional).\n */\n\n/**\n * @template {VFile} [File=VFile]\n * The file that the callback receives (default: `VFile`).\n * @callback ProcessCallback\n * Callback called when the process is done.\n *\n * Called with either an error or a result.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {File | undefined} [file]\n * Processed file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Tree=Node]\n * The tree that the callback receives (default: `Node`).\n * @callback RunCallback\n * Callback called when transformers are done.\n *\n * Called with either an error or results.\n * @param {Error | undefined} [error]\n * Fatal error (optional).\n * @param {Tree | undefined} [tree]\n * Transformed tree (optional).\n * @param {VFile | undefined} [file]\n * File (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Output=Node]\n * Node type that the transformer yields (default: `Node`).\n * @callback TransformCallback\n * Callback passed to transforms.\n *\n * If the signature of a `transformer` accepts a third argument, the\n * transformer may perform asynchronous operations, and must call it.\n * @param {Error | undefined} [error]\n * Fatal error to stop the process (optional).\n * @param {Output | undefined} [tree]\n * New, changed, tree (optional).\n * @param {VFile | undefined} [file]\n * New, changed, file (optional).\n * @returns {undefined}\n * Nothing.\n */\n\n/**\n * @template {Node} [Input=Node]\n * Node type that the transformer expects (default: `Node`).\n * @template {Node} [Output=Input]\n * Node type that the transformer yields (default: `Input`).\n * @callback Transformer\n * Transformers handle syntax trees and files.\n *\n * They are functions that are called each time a syntax tree and file are\n * passed through the run phase.\n * When an error occurs in them (either because it’s thrown, returned,\n * rejected, or passed to `next`), the process stops.\n *\n * The run phase is handled by [`trough`][trough], see its documentation for\n * the exact semantics of these functions.\n *\n * > **Note**: you should likely ignore `next`: don’t accept it.\n * > it supports callback-style async work.\n * > But promises are likely easier to reason about.\n *\n * [trough]: https://github.com/wooorm/trough#function-fninput-next\n * @param {Input} tree\n * Tree to handle.\n * @param {VFile} file\n * File to handle.\n * @param {TransformCallback<Output>} next\n * Callback.\n * @returns {(\n * Promise<Output | undefined | void> |\n * Promise<never> | // For some reason this is needed separately.\n * Output |\n * Error |\n * undefined |\n * void\n * )}\n * If you accept `next`, nothing.\n * Otherwise:\n *\n * * `Error` — fatal error to stop the process\n * * `Promise<undefined>` or `undefined` — the next transformer keeps using\n * same tree\n * * `Promise<Node>` or `Node` — new, changed, tree\n */\n\n/**\n * @template {Node | undefined} ParseTree\n * Output of `parse`.\n * @template {Node | undefined} HeadTree\n * Input for `run`.\n * @template {Node | undefined} TailTree\n * Output for `run`.\n * @template {Node | undefined} CompileTree\n * Input of `stringify`.\n * @template {CompileResults | undefined} CompileResult\n * Output of `stringify`.\n * @template {Node | string | undefined} Input\n * Input of plugin.\n * @template Output\n * Output of plugin (optional).\n * @typedef {(\n * Input extends string\n * ? Output extends Node | undefined\n * ? // Parser.\n * Processor<\n * Output extends undefined ? ParseTree : Output,\n * HeadTree,\n * TailTree,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Output extends CompileResults\n * ? Input extends Node | undefined\n * ? // Compiler.\n * Processor<\n * ParseTree,\n * HeadTree,\n * TailTree,\n * Input extends undefined ? CompileTree : Input,\n * Output extends undefined ? CompileResult : Output\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : Input extends Node | undefined\n * ? Output extends Node | undefined\n * ? // Transform.\n * Processor<\n * ParseTree,\n * HeadTree extends undefined ? Input : HeadTree,\n * Output extends undefined ? TailTree : Output,\n * CompileTree,\n * CompileResult\n * >\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * : // Unknown.\n * Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>\n * )} UsePlugin\n * Create a processor based on the input/output of a {@link Plugin plugin}.\n */\n\n/**\n * @template {CompileResults | undefined} Result\n * Node type that the transformer yields.\n * @typedef {(\n * Result extends Value | undefined ?\n * VFile :\n * VFile & {result: Result}\n * )} VFileWithOutput\n * Type to generate a {@linkcode VFile} corresponding to a compiler result.\n *\n * If a result that is not acceptable on a `VFile` is used, that will\n * be stored on the `result` field of {@linkcode VFile}.\n */\n\nimport {bail} from 'bail'\nimport extend from 'extend'\nimport {ok as assert} from 'devlop'\nimport isPlainObj from 'is-plain-obj'\nimport {trough} from 'trough'\nimport {VFile} from 'vfile'\nimport {CallableInstance} from './callable-instance.js'\n\n// To do: next major: drop `Compiler`, `Parser`: prefer lowercase.\n\n// To do: we could start yielding `never` in TS when a parser is missing and\n// `parse` is called.\n// Currently, we allow directly setting `processor.parser`, which is untyped.\n\nconst own = {}.hasOwnProperty\n\n/**\n * @template {Node | undefined} [ParseTree=undefined]\n * Output of `parse` (optional).\n * @template {Node | undefined} [HeadTree=undefined]\n * Input for `run` (optional).\n * @template {Node | undefined} [TailTree=undefined]\n * Output for `run` (optional).\n * @template {Node | undefined} [CompileTree=undefined]\n * Input of `stringify` (optional).\n * @template {CompileResults | undefined} [CompileResult=undefined]\n * Output of `stringify` (optional).\n * @extends {CallableInstance<[], Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>>}\n */\nexport class Processor extends CallableInstance {\n /**\n * Create a processor.\n */\n constructor() {\n // If `Processor()` is called (w/o new), `copy` is called instead.\n super('copy')\n\n /**\n * Compiler to use (deprecated).\n *\n * @deprecated\n * Use `compiler` instead.\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.Compiler = undefined\n\n /**\n * Parser to use (deprecated).\n *\n * @deprecated\n * Use `parser` instead.\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.Parser = undefined\n\n // Note: the following fields are considered private.\n // However, they are needed for tests, and TSC generates an untyped\n // `private freezeIndex` field for, which trips `type-coverage` up.\n // Instead, we use `@deprecated` to visualize that they shouldn’t be used.\n /**\n * Internal list of configured plugins.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Array<PluginTuple<Array<unknown>>>}\n */\n this.attachers = []\n\n /**\n * Compiler to use.\n *\n * @type {(\n * Compiler<\n * CompileTree extends undefined ? Node : CompileTree,\n * CompileResult extends undefined ? CompileResults : CompileResult\n * > |\n * undefined\n * )}\n */\n this.compiler = undefined\n\n /**\n * Internal state to track where we are while freezing.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {number}\n */\n this.freezeIndex = -1\n\n /**\n * Internal state to track whether we’re frozen.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {boolean | undefined}\n */\n this.frozen = undefined\n\n /**\n * Internal state.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Data}\n */\n this.namespace = {}\n\n /**\n * Parser to use.\n *\n * @type {(\n * Parser<ParseTree extends undefined ? Node : ParseTree> |\n * undefined\n * )}\n */\n this.parser = undefined\n\n /**\n * Internal list of configured transformers.\n *\n * @deprecated\n * This is a private internal property and should not be used.\n * @type {Pipeline}\n */\n this.transformers = trough()\n }\n\n /**\n * Copy a processor.\n *\n * @deprecated\n * This is a private internal method and should not be used.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * New *unfrozen* processor ({@linkcode Processor}) that is\n * configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\n copy() {\n // Cast as the type parameters will be the same after attaching.\n const destination =\n /** @type {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>} */ (\n new Processor()\n )\n let index = -1\n\n while (++index < this.attachers.length) {\n const attacher = this.attachers[index]\n destination.use(...attacher)\n }\n\n destination.data(extend(true, {}, this.namespace))\n\n return destination\n }\n\n /**\n * Configure the processor with info available to all plugins.\n * Information is stored in an object.\n *\n * Typically, options can be given to a specific plugin, but sometimes it\n * makes sense to have information shared with several plugins.\n * For example, a list of HTML elements that are self-closing, which is\n * needed during all phases.\n *\n * > **Note**: setting information cannot occur on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * > **Note**: to register custom data in TypeScript, augment the\n * > {@linkcode Data} interface.\n *\n * @example\n * This example show how to get and set info:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * const processor = unified().data('alpha', 'bravo')\n *\n * processor.data('alpha') // => 'bravo'\n *\n * processor.data() // => {alpha: 'bravo'}\n *\n * processor.data({charlie: 'delta'})\n *\n * processor.data() // => {charlie: 'delta'}\n * ```\n *\n * @template {keyof Data} Key\n *\n * @overload\n * @returns {Data}\n *\n * @overload\n * @param {Data} dataset\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Key} key\n * @returns {Data[Key]}\n *\n * @overload\n * @param {Key} key\n * @param {Data[Key]} value\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @param {Data | Key} [key]\n * Key to get or set, or entire dataset to set, or nothing to get the\n * entire dataset (optional).\n * @param {Data[Key]} [value]\n * Value to set (optional).\n * @returns {unknown}\n * The current processor when setting, the value at `key` when getting, or\n * the entire dataset when getting without key.\n */\n data(key, value) {\n if (typeof key === 'string') {\n // Set `key`.\n if (arguments.length === 2) {\n assertUnfrozen('data', this.frozen)\n this.namespace[key] = value\n return this\n }\n\n // Get `key`.\n return (own.call(this.namespace, key) && this.namespace[key]) || undefined\n }\n\n // Set space.\n if (key) {\n assertUnfrozen('data', this.frozen)\n this.namespace = key\n return this\n }\n\n // Get space.\n return this.namespace\n }\n\n /**\n * Freeze a processor.\n *\n * Frozen processors are meant to be extended and not to be configured\n * directly.\n *\n * When a processor is frozen it cannot be unfrozen.\n * New processors working the same way can be created by calling the\n * processor.\n *\n * It’s possible to freeze processors explicitly by calling `.freeze()`.\n * Processors freeze automatically when `.parse()`, `.run()`, `.runSync()`,\n * `.stringify()`, `.process()`, or `.processSync()` are called.\n *\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * The current processor.\n */\n freeze() {\n if (this.frozen) {\n return this\n }\n\n // Cast so that we can type plugins easier.\n // Plugins are supposed to be usable on different processors, not just on\n // this exact processor.\n const self = /** @type {Processor} */ (/** @type {unknown} */ (this))\n\n while (++this.freezeIndex < this.attachers.length) {\n const [attacher, ...options] = this.attachers[this.freezeIndex]\n\n if (options[0] === false) {\n continue\n }\n\n if (options[0] === true) {\n options[0] = undefined\n }\n\n const transformer = attacher.call(self, ...options)\n\n if (typeof transformer === 'function') {\n this.transformers.use(transformer)\n }\n }\n\n this.frozen = true\n this.freezeIndex = Number.POSITIVE_INFINITY\n\n return this\n }\n\n /**\n * Parse text to a syntax tree.\n *\n * > **Note**: `parse` freezes the processor if not already *frozen*.\n *\n * > **Note**: `parse` performs the parse phase, not the run phase or other\n * > phases.\n *\n * @param {Compatible | undefined} [file]\n * file to parse (optional); typically `string` or `VFile`; any value\n * accepted as `x` in `new VFile(x)`.\n * @returns {ParseTree extends undefined ? Node : ParseTree}\n * Syntax tree representing `file`.\n */\n parse(file) {\n this.freeze()\n const realFile = vfile(file)\n const parser = this.parser || this.Parser\n assertParser('parse', parser)\n return parser(String(realFile), realFile)\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * > **Note**: `process` freezes the processor if not already *frozen*.\n *\n * > **Note**: `process` performs the parse, run, and stringify phases.\n *\n * @overload\n * @param {Compatible | undefined} file\n * @param {ProcessCallback<VFileWithOutput<CompileResult>>} done\n * @returns {undefined}\n *\n * @overload\n * @param {Compatible | undefined} [file]\n * @returns {Promise<VFileWithOutput<CompileResult>>}\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`]; any value accepted as\n * `x` in `new VFile(x)`.\n * @param {ProcessCallback<VFileWithOutput<CompileResult>> | undefined} [done]\n * Callback (optional).\n * @returns {Promise<VFile> | undefined}\n * Nothing if `done` is given.\n * Otherwise a promise, rejected with a fatal error or resolved with the\n * processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n process(file, done) {\n const self = this\n\n this.freeze()\n assertParser('process', this.parser || this.Parser)\n assertCompiler('process', this.compiler || this.Compiler)\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {((file: VFileWithOutput<CompileResult>) => undefined | void) | undefined} resolve\n * @param {(error: Error | undefined) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n const realFile = vfile(file)\n // Assume `ParseTree` (the result of the parser) matches `HeadTree` (the\n // input of the first transform).\n const parseTree =\n /** @type {HeadTree extends undefined ? Node : HeadTree} */ (\n /** @type {unknown} */ (self.parse(realFile))\n )\n\n self.run(parseTree, realFile, function (error, tree, file) {\n if (error || !tree || !file) {\n return realDone(error)\n }\n\n // Assume `TailTree` (the output of the last transform) matches\n // `CompileTree` (the input of the compiler).\n const compileTree =\n /** @type {CompileTree extends undefined ? Node : CompileTree} */ (\n /** @type {unknown} */ (tree)\n )\n\n const compileResult = self.stringify(compileTree, file)\n\n if (looksLikeAValue(compileResult)) {\n file.value = compileResult\n } else {\n file.result = compileResult\n }\n\n realDone(error, /** @type {VFileWithOutput<CompileResult>} */ (file))\n })\n\n /**\n * @param {Error | undefined} error\n * @param {VFileWithOutput<CompileResult> | undefined} [file]\n * @returns {undefined}\n */\n function realDone(error, file) {\n if (error || !file) {\n reject(error)\n } else if (resolve) {\n resolve(file)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, file)\n }\n }\n }\n }\n\n /**\n * Process the given file as configured on the processor.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `processSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `processSync` performs the parse, run, and stringify phases.\n *\n * @param {Compatible | undefined} [file]\n * File (optional); typically `string` or `VFile`; any value accepted as\n * `x` in `new VFile(x)`.\n * @returns {VFileWithOutput<CompileResult>}\n * The processed file.\n *\n * The parsed, transformed, and compiled value is available at\n * `file.value` (see note).\n *\n * > **Note**: unified typically compiles by serializing: most\n * > compilers return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n processSync(file) {\n /** @type {boolean} */\n let complete = false\n /** @type {VFileWithOutput<CompileResult> | undefined} */\n let result\n\n this.freeze()\n assertParser('processSync', this.parser || this.Parser)\n assertCompiler('processSync', this.compiler || this.Compiler)\n\n this.process(file, realDone)\n assertDone('processSync', 'process', complete)\n assert(result, 'we either bailed on an error or have a tree')\n\n return result\n\n /**\n * @type {ProcessCallback<VFileWithOutput<CompileResult>>}\n */\n function realDone(error, file) {\n complete = true\n bail(error)\n result = file\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * > **Note**: `run` freezes the processor if not already *frozen*.\n *\n * > **Note**: `run` performs the run phase, not other phases.\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} file\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} done\n * @returns {undefined}\n *\n * @overload\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * @param {Compatible | undefined} [file]\n * @returns {Promise<TailTree extends undefined ? Node : TailTree>}\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {(\n * RunCallback<TailTree extends undefined ? Node : TailTree> |\n * Compatible\n * )} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @param {RunCallback<TailTree extends undefined ? Node : TailTree>} [done]\n * Callback (optional).\n * @returns {Promise<TailTree extends undefined ? Node : TailTree> | undefined}\n * Nothing if `done` is given.\n * Otherwise, a promise rejected with a fatal error or resolved with the\n * transformed tree.\n */\n run(tree, file, done) {\n assertNode(tree)\n this.freeze()\n\n const transformers = this.transformers\n\n if (!done && typeof file === 'function') {\n done = file\n file = undefined\n }\n\n return done ? executor(undefined, done) : new Promise(executor)\n\n // Note: `void`s needed for TS.\n /**\n * @param {(\n * ((tree: TailTree extends undefined ? Node : TailTree) => undefined | void) |\n * undefined\n * )} resolve\n * @param {(error: Error) => undefined | void} reject\n * @returns {undefined}\n */\n function executor(resolve, reject) {\n assert(\n typeof file !== 'function',\n '`file` can’t be a `done` anymore, we checked'\n )\n const realFile = vfile(file)\n transformers.run(tree, realFile, realDone)\n\n /**\n * @param {Error | undefined} error\n * @param {Node} outputTree\n * @param {VFile} file\n * @returns {undefined}\n */\n function realDone(error, outputTree, file) {\n const resultingTree =\n /** @type {TailTree extends undefined ? Node : TailTree} */ (\n outputTree || tree\n )\n\n if (error) {\n reject(error)\n } else if (resolve) {\n resolve(resultingTree)\n } else {\n assert(done, '`done` is defined if `resolve` is not')\n done(undefined, resultingTree, file)\n }\n }\n }\n }\n\n /**\n * Run *transformers* on a syntax tree.\n *\n * An error is thrown if asynchronous transforms are configured.\n *\n * > **Note**: `runSync` freezes the processor if not already *frozen*.\n *\n * > **Note**: `runSync` performs the run phase, not other phases.\n *\n * @param {HeadTree extends undefined ? Node : HeadTree} tree\n * Tree to transform and inspect.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {TailTree extends undefined ? Node : TailTree}\n * Transformed tree.\n */\n runSync(tree, file) {\n /** @type {boolean} */\n let complete = false\n /** @type {(TailTree extends undefined ? Node : TailTree) | undefined} */\n let result\n\n this.run(tree, file, realDone)\n\n assertDone('runSync', 'run', complete)\n assert(result, 'we either bailed on an error or have a tree')\n return result\n\n /**\n * @type {RunCallback<TailTree extends undefined ? Node : TailTree>}\n */\n function realDone(error, tree) {\n bail(error)\n result = tree\n complete = true\n }\n }\n\n /**\n * Compile a syntax tree.\n *\n * > **Note**: `stringify` freezes the processor if not already *frozen*.\n *\n * > **Note**: `stringify` performs the stringify phase, not the run phase\n * > or other phases.\n *\n * @param {CompileTree extends undefined ? Node : CompileTree} tree\n * Tree to compile.\n * @param {Compatible | undefined} [file]\n * File associated with `node` (optional); any value accepted as `x` in\n * `new VFile(x)`.\n * @returns {CompileResult extends undefined ? Value : CompileResult}\n * Textual representation of the tree (see note).\n *\n * > **Note**: unified typically compiles by serializing: most compilers\n * > return `string` (or `Uint8Array`).\n * > Some compilers, such as the one configured with\n * > [`rehype-react`][rehype-react], return other values (in this case, a\n * > React tree).\n * > If you’re using a compiler that doesn’t serialize, expect different\n * > result values.\n * >\n * > To register custom results in TypeScript, add them to\n * > {@linkcode CompileResultMap}.\n *\n * [rehype-react]: https://github.com/rehypejs/rehype-react\n */\n stringify(tree, file) {\n this.freeze()\n const realFile = vfile(file)\n const compiler = this.compiler || this.Compiler\n assertCompiler('stringify', compiler)\n assertNode(tree)\n\n return compiler(tree, realFile)\n }\n\n /**\n * Configure the processor to use a plugin, a list of usable values, or a\n * preset.\n *\n * If the processor is already using a plugin, the previous plugin\n * configuration is changed based on the options that are passed in.\n * In other words, the plugin is not added a second time.\n *\n * > **Note**: `use` cannot be called on *frozen* processors.\n * > Call the processor first to create a new unfrozen processor.\n *\n * @example\n * There are many ways to pass plugins to `.use()`.\n * This example gives an overview:\n *\n * ```js\n * import {unified} from 'unified'\n *\n * unified()\n * // Plugin with options:\n * .use(pluginA, {x: true, y: true})\n * // Passing the same plugin again merges configuration (to `{x: true, y: false, z: true}`):\n * .use(pluginA, {y: false, z: true})\n * // Plugins:\n * .use([pluginB, pluginC])\n * // Two plugins, the second with options:\n * .use([pluginD, [pluginE, {}]])\n * // Preset with plugins and settings:\n * .use({plugins: [pluginF, [pluginG, {}]], settings: {position: false}})\n * // Settings only:\n * .use({settings: {position: false}})\n * ```\n *\n * @template {Array<unknown>} [Parameters=[]]\n * @template {Node | string | undefined} [Input=undefined]\n * @template [Output=Input]\n *\n * @overload\n * @param {Preset | null | undefined} [preset]\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {PluggableList} list\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n *\n * @overload\n * @param {Plugin<Parameters, Input, Output>} plugin\n * @param {...(Parameters | [boolean])} parameters\n * @returns {UsePlugin<ParseTree, HeadTree, TailTree, CompileTree, CompileResult, Input, Output>}\n *\n * @param {PluggableList | Plugin | Preset | null | undefined} value\n * Usable value.\n * @param {...unknown} parameters\n * Parameters, when a plugin is given as a usable value.\n * @returns {Processor<ParseTree, HeadTree, TailTree, CompileTree, CompileResult>}\n * Current processor.\n */\n use(value, ...parameters) {\n const attachers = this.attachers\n const namespace = this.namespace\n\n assertUnfrozen('use', this.frozen)\n\n if (value === null || value === undefined) {\n // Empty.\n } else if (typeof value === 'function') {\n addPlugin(value, parameters)\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n addList(value)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n\n return this\n\n /**\n * @param {Pluggable} value\n * @returns {undefined}\n */\n function add(value) {\n if (typeof value === 'function') {\n addPlugin(value, [])\n } else if (typeof value === 'object') {\n if (Array.isArray(value)) {\n const [plugin, ...parameters] =\n /** @type {PluginTuple<Array<unknown>>} */ (value)\n addPlugin(plugin, parameters)\n } else {\n addPreset(value)\n }\n } else {\n throw new TypeError('Expected usable value, not `' + value + '`')\n }\n }\n\n /**\n * @param {Preset} result\n * @returns {undefined}\n */\n function addPreset(result) {\n if (!('plugins' in result) && !('settings' in result)) {\n throw new Error(\n 'Expected usable value but received an empty preset, which is probably a mistake: presets typically come with `plugins` and sometimes with `settings`, but this has neither'\n )\n }\n\n addList(result.plugins)\n\n if (result.settings) {\n namespace.settings = extend(true, namespace.settings, result.settings)\n }\n }\n\n /**\n * @param {PluggableList | null | undefined} plugins\n * @returns {undefined}\n */\n function addList(plugins) {\n let index = -1\n\n if (plugins === null || plugins === undefined) {\n // Empty.\n } else if (Array.isArray(plugins)) {\n while (++index < plugins.length) {\n const thing = plugins[index]\n add(thing)\n }\n } else {\n throw new TypeError('Expected a list of plugins, not `' + plugins + '`')\n }\n }\n\n /**\n * @param {Plugin} plugin\n * @param {Array<unknown>} parameters\n * @returns {undefined}\n */\n function addPlugin(plugin, parameters) {\n let index = -1\n let entryIndex = -1\n\n while (++index < attachers.length) {\n if (attachers[index][0] === plugin) {\n entryIndex = index\n break\n }\n }\n\n if (entryIndex === -1) {\n attachers.push([plugin, ...parameters])\n }\n // Only set if there was at least a `primary` value, otherwise we’d change\n // `arguments.length`.\n else if (parameters.length > 0) {\n let [primary, ...rest] = parameters\n const currentPrimary = attachers[entryIndex][1]\n if (isPlainObj(currentPrimary) && isPlainObj(primary)) {\n primary = extend(true, currentPrimary, primary)\n }\n\n attachers[entryIndex] = [plugin, primary, ...rest]\n }\n }\n }\n}\n\n// Note: this returns a *callable* instance.\n// That’s why it’s documented as a function.\n/**\n * Create a new processor.\n *\n * @example\n * This example shows how a new processor can be created (from `remark`) and linked\n * to **stdin**(4) and **stdout**(4).\n *\n * ```js\n * import process from 'node:process'\n * import concatStream from 'concat-stream'\n * import {remark} from 'remark'\n *\n * process.stdin.pipe(\n * concatStream(function (buf) {\n * process.stdout.write(String(remark().processSync(buf)))\n * })\n * )\n * ```\n *\n * @returns\n * New *unfrozen* processor (`processor`).\n *\n * This processor is configured to work the same as its ancestor.\n * When the descendant processor is configured in the future it does not\n * affect the ancestral processor.\n */\nexport const unified = new Processor().freeze()\n\n/**\n * Assert a parser is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Parser}\n */\nfunction assertParser(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `parser`')\n }\n}\n\n/**\n * Assert a compiler is available.\n *\n * @param {string} name\n * @param {unknown} value\n * @returns {asserts value is Compiler}\n */\nfunction assertCompiler(name, value) {\n if (typeof value !== 'function') {\n throw new TypeError('Cannot `' + name + '` without `compiler`')\n }\n}\n\n/**\n * Assert the processor is not frozen.\n *\n * @param {string} name\n * @param {unknown} frozen\n * @returns {asserts frozen is false}\n */\nfunction assertUnfrozen(name, frozen) {\n if (frozen) {\n throw new Error(\n 'Cannot call `' +\n name +\n '` on a frozen processor.\\nCreate a new processor first, by calling it: use `processor()` instead of `processor`.'\n )\n }\n}\n\n/**\n * Assert `node` is a unist node.\n *\n * @param {unknown} node\n * @returns {asserts node is Node}\n */\nfunction assertNode(node) {\n // `isPlainObj` unfortunately uses `any` instead of `unknown`.\n // type-coverage:ignore-next-line\n if (!isPlainObj(node) || typeof node.type !== 'string') {\n throw new TypeError('Expected node, got `' + node + '`')\n // Fine.\n }\n}\n\n/**\n * Assert that `complete` is `true`.\n *\n * @param {string} name\n * @param {string} asyncName\n * @param {unknown} complete\n * @returns {asserts complete is true}\n */\nfunction assertDone(name, asyncName, complete) {\n if (!complete) {\n throw new Error(\n '`' + name + '` finished async. Use `' + asyncName + '` instead'\n )\n }\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {VFile}\n */\nfunction vfile(value) {\n return looksLikeAVFile(value) ? value : new VFile(value)\n}\n\n/**\n * @param {Compatible | undefined} [value]\n * @returns {value is VFile}\n */\nfunction looksLikeAVFile(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'message' in value &&\n 'messages' in value\n )\n}\n\n/**\n * @param {unknown} [value]\n * @returns {value is Value}\n */\nfunction looksLikeAValue(value) {\n return typeof value === 'string' || isUint8Array(value)\n}\n\n/**\n * Assert `value` is an `Uint8Array`.\n *\n * @param {unknown} value\n * thing.\n * @returns {value is Uint8Array}\n * Whether `value` is an `Uint8Array`.\n */\nfunction isUint8Array(value) {\n return Boolean(\n value &&\n typeof value === 'object' &&\n 'byteLength' in value &&\n 'byteOffset' in value\n )\n}\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84],"mappings":"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AAa,KAAK,OAAO,aAAa,KAAK,CAAC,GAChE,QACA,QAAQ;;;;;;;;;ACTd,IAAa,0BAA0B;CACrC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;;;;;;;;AC3GD,IAAa,yBAAyB;CACpC,MAAM;CACN,OAAO;CACP,MAAM;CACN,OAAO;CACP,QAAQ;CACR,KAAK;CACL,QAAQ;CACR,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,OAAO;CACP,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,QAAQ;CACR,MAAM;CACN,MAAM;CACN,OAAO;CACP,OAAO;CACP,MAAM;CACN,QAAQ;CACR,OAAO;CACP,MAAM;CACN,MAAM;CACN,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,MAAM;CACN,KAAK;CACL,QAAQ;CACR,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAA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"}