%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/varak.net/nextcloud.varak.net/apps_old/apps/text/js/
Upload File :
Create Path :
Current File : /www/varak.net/nextcloud.varak.net/apps_old/apps/text/js/createText-2e5e7dd3-CGeVxhlf.chunk.mjs.map

{"version":3,"file":"createText-2e5e7dd3-CGeVxhlf.chunk.mjs","sources":["../node_modules/decode-named-character-reference/index.dom.js","../node_modules/mdast-util-to-string/lib/index.js","../node_modules/micromark-util-chunked/index.js","../node_modules/micromark-util-combine-extensions/index.js","../node_modules/micromark-util-character/lib/unicode-punctuation-regex.js","../node_modules/micromark-util-character/index.js","../node_modules/micromark-factory-space/index.js","../node_modules/micromark/lib/initialize/content.js","../node_modules/micromark/lib/initialize/document.js","../node_modules/micromark-util-classify-character/index.js","../node_modules/micromark-util-resolve-all/index.js","../node_modules/micromark-core-commonmark/lib/attention.js","../node_modules/micromark-core-commonmark/lib/autolink.js","../node_modules/micromark-core-commonmark/lib/blank-line.js","../node_modules/micromark-core-commonmark/lib/block-quote.js","../node_modules/micromark-core-commonmark/lib/character-escape.js","../node_modules/micromark-core-commonmark/lib/character-reference.js","../node_modules/micromark-core-commonmark/lib/code-fenced.js","../node_modules/micromark-core-commonmark/lib/code-indented.js","../node_modules/micromark-core-commonmark/lib/code-text.js","../node_modules/micromark-util-subtokenize/index.js","../node_modules/micromark-core-commonmark/lib/content.js","../node_modules/micromark-factory-destination/index.js","../node_modules/micromark-factory-label/index.js","../node_modules/micromark-factory-title/index.js","../node_modules/micromark-factory-whitespace/index.js","../node_modules/micromark-util-normalize-identifier/index.js","../node_modules/micromark-core-commonmark/lib/definition.js","../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","../node_modules/micromark-core-commonmark/lib/heading-atx.js","../node_modules/micromark-util-html-tag-name/index.js","../node_modules/micromark-core-commonmark/lib/html-flow.js","../node_modules/micromark-core-commonmark/lib/html-text.js","../node_modules/micromark-core-commonmark/lib/label-end.js","../node_modules/micromark-core-commonmark/lib/label-start-image.js","../node_modules/micromark-core-commonmark/lib/label-start-link.js","../node_modules/micromark-core-commonmark/lib/line-ending.js","../node_modules/micromark-core-commonmark/lib/thematic-break.js","../node_modules/micromark-core-commonmark/lib/list.js","../node_modules/micromark-core-commonmark/lib/setext-underline.js","../node_modules/micromark/lib/initialize/flow.js","../node_modules/micromark/lib/initialize/text.js","../node_modules/micromark/lib/create-tokenizer.js","../node_modules/micromark/lib/constructs.js","../node_modules/micromark/lib/parse.js","../node_modules/micromark/lib/preprocess.js","../node_modules/micromark/lib/postprocess.js","../node_modules/micromark-util-decode-numeric-character-reference/index.js","../node_modules/micromark-util-decode-string/index.js","../node_modules/unist-util-stringify-position/lib/index.js","../node_modules/mdast-util-from-markdown/lib/index.js","../node_modules/mermaid/dist/createText-2e5e7dd3.js"],"sourcesContent":["/// <reference lib=\"dom\" />\n\n/* eslint-env browser */\n\nconst element = document.createElement('i')\n\n/**\n * @param {string} value\n * @returns {string|false}\n */\nexport function decodeNamedCharacterReference(value) {\n  const characterReference = '&' + value + ';'\n  element.innerHTML = characterReference\n  const char = element.textContent\n\n  // Some named character references do not require the closing semicolon\n  // (`&not`, for instance), which leads to situations where parsing the assumed\n  // named reference of `&notit;` will result in the string `¬it;`.\n  // When we encounter a trailing semicolon after parsing, and the character\n  // reference to decode was not a semicolon (`&semi;`), we can assume that the\n  // matching was not complete.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  if (char.charCodeAt(char.length - 1) === 59 /* `;` */ && value !== 'semi') {\n    return false\n  }\n\n  // If the decoded string is equal to the input, the character reference was\n  // not valid.\n  // @ts-expect-error: TypeScript is wrong that `textContent` on elements can\n  // yield `null`.\n  return char === characterReference ? false : char\n}\n","/**\n * @typedef {import('mdast').Root|import('mdast').Content} Node\n *\n * @typedef Options\n *   Configuration (optional).\n * @property {boolean | null | undefined} [includeImageAlt=true]\n *   Whether to use `alt` for `image`s.\n */\n\n/**\n * Get the text content of a node or list of nodes.\n *\n * Prefers the node’s plain-text fields, otherwise serializes its children,\n * and if the given value is an array, serialize the nodes in it.\n *\n * @param {unknown} value\n *   Thing to serialize, typically `Node`.\n * @param {Options | null | undefined} [options]\n *   Configuration (optional).\n * @returns {string}\n *   Serialized `value`.\n */\nexport function toString(value, options) {\n  const includeImageAlt = (options || {}).includeImageAlt\n  return one(\n    value,\n    typeof includeImageAlt === 'boolean' ? includeImageAlt : true\n  )\n}\n\n/**\n * One node or several nodes.\n *\n * @param {unknown} value\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @returns {string}\n *   Serialized node.\n */\nfunction one(value, includeImageAlt) {\n  return (\n    (node(value) &&\n      (('value' in value && value.value) ||\n        (includeImageAlt && 'alt' in value && value.alt) ||\n        ('children' in value && all(value.children, includeImageAlt)))) ||\n    (Array.isArray(value) && all(value, includeImageAlt)) ||\n    ''\n  )\n}\n\n/**\n * Serialize a list of nodes.\n *\n * @param {Array<unknown>} values\n *   Thing to serialize.\n * @param {boolean} includeImageAlt\n *   Include image `alt`s.\n * @returns {string}\n *   Serialized nodes.\n */\nfunction all(values, includeImageAlt) {\n  /** @type {Array<string>} */\n  const result = []\n  let index = -1\n\n  while (++index < values.length) {\n    result[index] = one(values[index], includeImageAlt)\n  }\n\n  return result.join('')\n}\n\n/**\n * Check if `value` looks like a node.\n *\n * @param {unknown} value\n *   Thing.\n * @returns {value is Node}\n *   Whether `value` is a node.\n */\nfunction node(value) {\n  return Boolean(value && typeof value === 'object')\n}\n","/**\n * Like `Array#splice`, but smarter for giant arrays.\n *\n * `Array#splice` takes all items to be inserted as individual argument which\n * causes a stack overflow in V8 when trying to insert 100k items for instance.\n *\n * Otherwise, this does not return the removed items, and takes `items` as an\n * array instead of rest parameters.\n *\n * @template {unknown} T\n * @param {T[]} list\n * @param {number} start\n * @param {number} remove\n * @param {T[]} items\n * @returns {void}\n */\nexport function splice(list, start, remove, items) {\n  const end = list.length\n  let chunkStart = 0\n  /** @type {unknown[]} */\n\n  let parameters // Make start between zero and `end` (included).\n\n  if (start < 0) {\n    start = -start > end ? 0 : end + start\n  } else {\n    start = start > end ? end : start\n  }\n\n  remove = remove > 0 ? remove : 0 // No need to chunk the items if there’s only a couple (10k) items.\n\n  if (items.length < 10000) {\n    parameters = Array.from(items)\n    parameters.unshift(start, remove) // @ts-expect-error Hush, it’s fine.\n    ;[].splice.apply(list, parameters)\n  } else {\n    // Delete `remove` items starting from `start`\n    if (remove) [].splice.apply(list, [start, remove]) // Insert the items in chunks to not cause stack overflows.\n\n    while (chunkStart < items.length) {\n      parameters = items.slice(chunkStart, chunkStart + 10000)\n      parameters.unshift(start, 0) // @ts-expect-error Hush, it’s fine.\n      ;[].splice.apply(list, parameters)\n      chunkStart += 10000\n      start += 10000\n    }\n  }\n}\n/**\n * Append `items` (an array) at the end of `list` (another array).\n * When `list` was empty, returns `items` instead.\n *\n * This prevents a potentially expensive operation when `list` is empty,\n * and adds items in batches to prevent V8 from hanging.\n *\n * @template {unknown} T\n * @param {T[]} list\n * @param {T[]} items\n * @returns {T[]}\n */\n\nexport function push(list, items) {\n  if (list.length > 0) {\n    splice(list, list.length, 0, items)\n    return list\n  }\n\n  return items\n}\n","/**\n * @typedef {import('micromark-util-types').NormalizedExtension} NormalizedExtension\n * @typedef {import('micromark-util-types').Extension} Extension\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').HtmlExtension} HtmlExtension\n */\n\nimport {splice} from 'micromark-util-chunked'\n\nconst hasOwnProperty = {}.hasOwnProperty\n\n/**\n * Combine several syntax extensions into one.\n *\n * @param {Extension[]} extensions List of syntax extensions.\n * @returns {NormalizedExtension} A single combined extension.\n */\nexport function combineExtensions(extensions) {\n  /** @type {NormalizedExtension} */\n  const all = {}\n  let index = -1\n\n  while (++index < extensions.length) {\n    syntaxExtension(all, extensions[index])\n  }\n\n  return all\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {NormalizedExtension} all Extension to merge into.\n * @param {Extension} extension Extension to merge.\n * @returns {void}\n */\nfunction syntaxExtension(all, extension) {\n  /** @type {string} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {string} */\n    let code\n\n    for (code in right) {\n      if (!hasOwnProperty.call(left, code)) left[code] = []\n      const value = right[code]\n      constructs(\n        // @ts-expect-error Looks like a list.\n        left[code],\n        Array.isArray(value) ? value : value ? [value] : []\n      )\n    }\n  }\n}\n\n/**\n * Merge `list` into `existing` (both lists of constructs).\n * Mutates `existing`.\n *\n * @param {unknown[]} existing\n * @param {unknown[]} list\n * @returns {void}\n */\nfunction constructs(existing, list) {\n  let index = -1\n  /** @type {unknown[]} */\n  const before = []\n\n  while (++index < list.length) {\n    // @ts-expect-error Looks like an object.\n    ;(list[index].add === 'after' ? existing : before).push(list[index])\n  }\n\n  splice(existing, 0, 0, before)\n}\n\n/**\n * Combine several HTML extensions into one.\n *\n * @param {HtmlExtension[]} htmlExtensions List of HTML extensions.\n * @returns {HtmlExtension} A single combined extension.\n */\nexport function combineHtmlExtensions(htmlExtensions) {\n  /** @type {HtmlExtension} */\n  const handlers = {}\n  let index = -1\n\n  while (++index < htmlExtensions.length) {\n    htmlExtension(handlers, htmlExtensions[index])\n  }\n\n  return handlers\n}\n\n/**\n * Merge `extension` into `all`.\n *\n * @param {HtmlExtension} all Extension to merge into.\n * @param {HtmlExtension} extension Extension to merge.\n * @returns {void}\n */\nfunction htmlExtension(all, extension) {\n  /** @type {string} */\n  let hook\n\n  for (hook in extension) {\n    const maybe = hasOwnProperty.call(all, hook) ? all[hook] : undefined\n    const left = maybe || (all[hook] = {})\n    const right = extension[hook]\n    /** @type {string} */\n    let type\n\n    if (right) {\n      for (type in right) {\n        left[type] = right[type]\n      }\n    }\n  }\n}\n","// This module is generated by `script/`.\n//\n// CommonMark handles attention (emphasis, strong) markers based on what comes\n// before or after them.\n// One such difference is if those characters are Unicode punctuation.\n// This script is generated from the Unicode data.\nexport const unicodePunctuationRegex =\n  /[!-/:-@[-`{-~\\u00A1\\u00A7\\u00AB\\u00B6\\u00B7\\u00BB\\u00BF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061E\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65]/\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {unicodePunctuationRegex} from './lib/unicode-punctuation-regex.js'\n/**\n * Check whether the character code represents an ASCII alpha (`a` through `z`,\n * case insensitive).\n *\n * An **ASCII alpha** is an ASCII upper alpha or ASCII lower alpha.\n *\n * An **ASCII upper alpha** is a character in the inclusive range U+0041 (`A`)\n * to U+005A (`Z`).\n *\n * An **ASCII lower alpha** is a character in the inclusive range U+0061 (`a`)\n * to U+007A (`z`).\n */\n\nexport const asciiAlpha = regexCheck(/[A-Za-z]/)\n/**\n * Check whether the character code represents an ASCII digit (`0` through `9`).\n *\n * An **ASCII digit** is a character in the inclusive range U+0030 (`0`) to\n * U+0039 (`9`).\n */\n\nexport const asciiDigit = regexCheck(/\\d/)\n/**\n * Check whether the character code represents an ASCII hex digit (`a` through\n * `f`, case insensitive, or `0` through `9`).\n *\n * An **ASCII hex digit** is an ASCII digit (see `asciiDigit`), ASCII upper hex\n * digit, or an ASCII lower hex digit.\n *\n * An **ASCII upper hex digit** is a character in the inclusive range U+0041\n * (`A`) to U+0046 (`F`).\n *\n * An **ASCII lower hex digit** is a character in the inclusive range U+0061\n * (`a`) to U+0066 (`f`).\n */\n\nexport const asciiHexDigit = regexCheck(/[\\dA-Fa-f]/)\n/**\n * Check whether the character code represents an ASCII alphanumeric (`a`\n * through `z`, case insensitive, or `0` through `9`).\n *\n * An **ASCII alphanumeric** is an ASCII digit (see `asciiDigit`) or ASCII alpha\n * (see `asciiAlpha`).\n */\n\nexport const asciiAlphanumeric = regexCheck(/[\\dA-Za-z]/)\n/**\n * Check whether the character code represents ASCII punctuation.\n *\n * An **ASCII punctuation** is a character in the inclusive ranges U+0021\n * EXCLAMATION MARK (`!`) to U+002F SLASH (`/`), U+003A COLON (`:`) to U+0040 AT\n * SIGN (`@`), U+005B LEFT SQUARE BRACKET (`[`) to U+0060 GRAVE ACCENT\n * (`` ` ``), or U+007B LEFT CURLY BRACE (`{`) to U+007E TILDE (`~`).\n */\n\nexport const asciiPunctuation = regexCheck(/[!-/:-@[-`{-~]/)\n/**\n * Check whether the character code represents an ASCII atext.\n *\n * atext is an ASCII alphanumeric (see `asciiAlphanumeric`), or a character in\n * the inclusive ranges U+0023 NUMBER SIGN (`#`) to U+0027 APOSTROPHE (`'`),\n * U+002A ASTERISK (`*`), U+002B PLUS SIGN (`+`), U+002D DASH (`-`), U+002F\n * SLASH (`/`), U+003D EQUALS TO (`=`), U+003F QUESTION MARK (`?`), U+005E\n * CARET (`^`) to U+0060 GRAVE ACCENT (`` ` ``), or U+007B LEFT CURLY BRACE\n * (`{`) to U+007E TILDE (`~`).\n *\n * See:\n * **\\[RFC5322]**:\n * [Internet Message Format](https://tools.ietf.org/html/rfc5322).\n * P. Resnick.\n * IETF.\n */\n\nexport const asciiAtext = regexCheck(/[#-'*+\\--9=?A-Z^-~]/)\n/**\n * Check whether a character code is an ASCII control character.\n *\n * An **ASCII control** is a character in the inclusive range U+0000 NULL (NUL)\n * to U+001F (US), or U+007F (DEL).\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function asciiControl(code) {\n  return (\n    // Special whitespace codes (which have negative values), C0 and Control\n    // character DEL\n    code !== null && (code < 32 || code === 127)\n  )\n}\n/**\n * Check whether a character code is a markdown line ending (see\n * `markdownLineEnding`) or markdown space (see `markdownSpace`).\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownLineEndingOrSpace(code) {\n  return code !== null && (code < 0 || code === 32)\n}\n/**\n * Check whether a character code is a markdown line ending.\n *\n * A **markdown line ending** is the virtual characters M-0003 CARRIAGE RETURN\n * LINE FEED (CRLF), M-0004 LINE FEED (LF) and M-0005 CARRIAGE RETURN (CR).\n *\n * In micromark, the actual character U+000A LINE FEED (LF) and U+000D CARRIAGE\n * RETURN (CR) are replaced by these virtual characters depending on whether\n * they occurred together.\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownLineEnding(code) {\n  return code !== null && code < -2\n}\n/**\n * Check whether a character code is a markdown space.\n *\n * A **markdown space** is the concrete character U+0020 SPACE (SP) and the\n * virtual characters M-0001 VIRTUAL SPACE (VS) and M-0002 HORIZONTAL TAB (HT).\n *\n * In micromark, the actual character U+0009 CHARACTER TABULATION (HT) is\n * replaced by one M-0002 HORIZONTAL TAB (HT) and between 0 and 3 M-0001 VIRTUAL\n * SPACE (VS) characters, depending on the column at which the tab occurred.\n *\n * @param {Code} code\n * @returns {code is number}\n */\n\nexport function markdownSpace(code) {\n  return code === -2 || code === -1 || code === 32\n}\n/**\n * Check whether the character code represents Unicode whitespace.\n *\n * Note that this does handle micromark specific markdown whitespace characters.\n * See `markdownLineEndingOrSpace` to check that.\n *\n * A **Unicode whitespace** is a character in the Unicode `Zs` (Separator,\n * Space) category, or U+0009 CHARACTER TABULATION (HT), U+000A LINE FEED (LF),\n * U+000C (FF), or U+000D CARRIAGE RETURN (CR) (**\\[UNICODE]**).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n */\n\nexport const unicodeWhitespace = regexCheck(/\\s/)\n/**\n * Check whether the character code represents Unicode punctuation.\n *\n * A **Unicode punctuation** is a character in the Unicode `Pc` (Punctuation,\n * Connector), `Pd` (Punctuation, Dash), `Pe` (Punctuation, Close), `Pf`\n * (Punctuation, Final quote), `Pi` (Punctuation, Initial quote), `Po`\n * (Punctuation, Other), or `Ps` (Punctuation, Open) categories, or an ASCII\n * punctuation (see `asciiPunctuation`).\n *\n * See:\n * **\\[UNICODE]**:\n * [The Unicode Standard](https://www.unicode.org/versions/).\n * Unicode Consortium.\n */\n// Size note: removing ASCII from the regex and using `asciiPunctuation` here\n// In fact adds to the bundle size.\n\nexport const unicodePunctuation = regexCheck(unicodePunctuationRegex)\n/**\n * Create a code check from a regex.\n *\n * @param {RegExp} regex\n * @returns {(code: Code) => code is number}\n */\n\nfunction regexCheck(regex) {\n  return check\n  /**\n   * Check whether a code matches the bound regex.\n   *\n   * @param {Code} code Character code\n   * @returns {code is number} Whether the character code matches the bound regex\n   */\n\n  function check(code) {\n    return code !== null && regex.test(String.fromCharCode(code))\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownSpace} from 'micromark-util-character'\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {string} type\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n\nexport function factorySpace(effects, ok, type, max) {\n  const limit = max ? max - 1 : Number.POSITIVE_INFINITY\n  let size = 0\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (markdownSpace(code)) {\n      effects.enter(type)\n      return prefix(code)\n    }\n\n    return ok(code)\n  }\n  /** @type {State} */\n\n  function prefix(code) {\n    if (markdownSpace(code) && size++ < limit) {\n      effects.consume(code)\n      return prefix\n    }\n\n    effects.exit(type)\n    return ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const content = {\n  tokenize: initializeContent\n}\n/** @type {Initializer} */\n\nfunction initializeContent(effects) {\n  const contentStart = effects.attempt(\n    this.parser.constructs.contentInitial,\n    afterContentStartConstruct,\n    paragraphInitial\n  )\n  /** @type {Token} */\n\n  let previous\n  return contentStart\n  /** @type {State} */\n\n  function afterContentStartConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, contentStart, 'linePrefix')\n  }\n  /** @type {State} */\n\n  function paragraphInitial(code) {\n    effects.enter('paragraph')\n    return lineStart(code)\n  }\n  /** @type {State} */\n\n  function lineStart(code) {\n    const token = effects.enter('chunkText', {\n      contentType: 'text',\n      previous\n    })\n\n    if (previous) {\n      previous.next = token\n    }\n\n    previous = token\n    return data(code)\n  }\n  /** @type {State} */\n\n  function data(code) {\n    if (code === null) {\n      effects.exit('chunkText')\n      effects.exit('paragraph')\n      effects.consume(code)\n      return\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      effects.exit('chunkText')\n      return lineStart\n    } // Data.\n\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Point} Point\n */\n\n/**\n * @typedef {Record<string, unknown>} StackState\n * @typedef {[Construct, StackState]} StackItem\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n/** @type {InitialConstruct} */\n\nexport const document = {\n  tokenize: initializeDocument\n}\n/** @type {Construct} */\n\nconst containerConstruct = {\n  tokenize: tokenizeContainer\n}\n/** @type {Initializer} */\n\nfunction initializeDocument(effects) {\n  const self = this\n  /** @type {Array<StackItem>} */\n\n  const stack = []\n  let continued = 0\n  /** @type {TokenizeContext|undefined} */\n\n  let childFlow\n  /** @type {Token|undefined} */\n\n  let childToken\n  /** @type {number} */\n\n  let lineStartOffset\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    // First we iterate through the open blocks, starting with the root\n    // document, and descending through last children down to the last open\n    // block.\n    // Each block imposes a condition that the line must satisfy if the block is\n    // to remain open.\n    // For example, a block quote requires a `>` character.\n    // A paragraph requires a non-blank line.\n    // In this phase we may match all or just some of the open blocks.\n    // But we cannot close unmatched blocks yet, because we may have a lazy\n    // continuation line.\n    if (continued < stack.length) {\n      const item = stack[continued]\n      self.containerState = item[1]\n      return effects.attempt(\n        item[0].continuation,\n        documentContinue,\n        checkNewContainers\n      )(code)\n    } // Done.\n\n    return checkNewContainers(code)\n  }\n  /** @type {State} */\n\n  function documentContinue(code) {\n    continued++ // Note: this field is called `_closeFlow` but it also closes containers.\n    // Perhaps a good idea to rename it but it’s already used in the wild by\n    // extensions.\n\n    if (self.containerState._closeFlow) {\n      self.containerState._closeFlow = undefined\n\n      if (childFlow) {\n        closeFlow()\n      } // Note: this algorithm for moving events around is similar to the\n      // algorithm when dealing with lazy lines in `writeToChild`.\n\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {Point|undefined} */\n\n      let point // Find the flow chunk.\n\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          point = self.events[indexBeforeFlow][1].end\n          break\n        }\n      }\n\n      exitContainers(continued) // Fix positions.\n\n      let index = indexBeforeExits\n\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      } // Inject the exits earlier (they’re still also at the end).\n\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      ) // Discard the duplicate exits.\n\n      self.events.length = index\n      return checkNewContainers(code)\n    }\n\n    return start(code)\n  }\n  /** @type {State} */\n\n  function checkNewContainers(code) {\n    // Next, after consuming the continuation markers for existing blocks, we\n    // look for new block starts (e.g. `>` for a block quote).\n    // If we encounter a new block start, we close any blocks unmatched in\n    // step 1 before creating the new block as a child of the last matched\n    // block.\n    if (continued === stack.length) {\n      // No need to `check` whether there’s a container, of `exitContainers`\n      // would be moot.\n      // We can instead immediately `attempt` to parse one.\n      if (!childFlow) {\n        return documentContinued(code)\n      } // If we have concrete content, such as block HTML or fenced code,\n      // we can’t have containers “pierce” into them, so we can immediately\n      // start.\n\n      if (childFlow.currentConstruct && childFlow.currentConstruct.concrete) {\n        return flowStart(code)\n      } // If we do have flow, it could still be a blank line,\n      // but we’d be interrupting it w/ a new container if there’s a current\n      // construct.\n\n      self.interrupt = Boolean(\n        childFlow.currentConstruct && !childFlow._gfmTableDynamicInterruptHack\n      )\n    } // Check if there is a new container.\n\n    self.containerState = {}\n    return effects.check(\n      containerConstruct,\n      thereIsANewContainer,\n      thereIsNoNewContainer\n    )(code)\n  }\n  /** @type {State} */\n\n  function thereIsANewContainer(code) {\n    if (childFlow) closeFlow()\n    exitContainers(continued)\n    return documentContinued(code)\n  }\n  /** @type {State} */\n\n  function thereIsNoNewContainer(code) {\n    self.parser.lazy[self.now().line] = continued !== stack.length\n    lineStartOffset = self.now().offset\n    return flowStart(code)\n  }\n  /** @type {State} */\n\n  function documentContinued(code) {\n    // Try new containers.\n    self.containerState = {}\n    return effects.attempt(\n      containerConstruct,\n      containerContinue,\n      flowStart\n    )(code)\n  }\n  /** @type {State} */\n\n  function containerContinue(code) {\n    continued++\n    stack.push([self.currentConstruct, self.containerState]) // Try another.\n\n    return documentContinued(code)\n  }\n  /** @type {State} */\n\n  function flowStart(code) {\n    if (code === null) {\n      if (childFlow) closeFlow()\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n\n    childFlow = childFlow || self.parser.flow(self.now())\n    effects.enter('chunkFlow', {\n      contentType: 'flow',\n      previous: childToken,\n      _tokenizer: childFlow\n    })\n    return flowContinue(code)\n  }\n  /** @type {State} */\n\n  function flowContinue(code) {\n    if (code === null) {\n      writeToChild(effects.exit('chunkFlow'), true)\n      exitContainers(0)\n      effects.consume(code)\n      return\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.consume(code)\n      writeToChild(effects.exit('chunkFlow')) // Get ready for the next line.\n\n      continued = 0\n      self.interrupt = undefined\n      return start\n    }\n\n    effects.consume(code)\n    return flowContinue\n  }\n  /**\n   * @param {Token} token\n   * @param {boolean} [eof]\n   * @returns {void}\n   */\n\n  function writeToChild(token, eof) {\n    const stream = self.sliceStream(token)\n    if (eof) stream.push(null)\n    token.previous = childToken\n    if (childToken) childToken.next = token\n    childToken = token\n    childFlow.defineSkip(token.start)\n    childFlow.write(stream) // Alright, so we just added a lazy line:\n    //\n    // ```markdown\n    // > a\n    // b.\n    //\n    // Or:\n    //\n    // > ~~~c\n    // d\n    //\n    // Or:\n    //\n    // > | e |\n    // f\n    // ```\n    //\n    // The construct in the second example (fenced code) does not accept lazy\n    // lines, so it marked itself as done at the end of its first line, and\n    // then the content construct parses `d`.\n    // Most constructs in markdown match on the first line: if the first line\n    // forms a construct, a non-lazy line can’t “unmake” it.\n    //\n    // The construct in the third example is potentially a GFM table, and\n    // those are *weird*.\n    // It *could* be a table, from the first line, if the following line\n    // matches a condition.\n    // In this case, that second line is lazy, which “unmakes” the first line\n    // and turns the whole into one content block.\n    //\n    // We’ve now parsed the non-lazy and the lazy line, and can figure out\n    // whether the lazy line started a new flow block.\n    // If it did, we exit the current containers between the two flow blocks.\n\n    if (self.parser.lazy[token.start.line]) {\n      let index = childFlow.events.length\n\n      while (index--) {\n        if (\n          // The token starts before the line ending…\n          childFlow.events[index][1].start.offset < lineStartOffset && // …and either is not ended yet…\n          (!childFlow.events[index][1].end || // …or ends after it.\n            childFlow.events[index][1].end.offset > lineStartOffset)\n        ) {\n          // Exit: there’s still something open, which means it’s a lazy line\n          // part of something.\n          return\n        }\n      } // Note: this algorithm for moving events around is similar to the\n      // algorithm when closing flow in `documentContinue`.\n\n      const indexBeforeExits = self.events.length\n      let indexBeforeFlow = indexBeforeExits\n      /** @type {boolean|undefined} */\n\n      let seen\n      /** @type {Point|undefined} */\n\n      let point // Find the previous chunk (the one before the lazy line).\n\n      while (indexBeforeFlow--) {\n        if (\n          self.events[indexBeforeFlow][0] === 'exit' &&\n          self.events[indexBeforeFlow][1].type === 'chunkFlow'\n        ) {\n          if (seen) {\n            point = self.events[indexBeforeFlow][1].end\n            break\n          }\n\n          seen = true\n        }\n      }\n\n      exitContainers(continued) // Fix positions.\n\n      index = indexBeforeExits\n\n      while (index < self.events.length) {\n        self.events[index][1].end = Object.assign({}, point)\n        index++\n      } // Inject the exits earlier (they’re still also at the end).\n\n      splice(\n        self.events,\n        indexBeforeFlow + 1,\n        0,\n        self.events.slice(indexBeforeExits)\n      ) // Discard the duplicate exits.\n\n      self.events.length = index\n    }\n  }\n  /**\n   * @param {number} size\n   * @returns {void}\n   */\n\n  function exitContainers(size) {\n    let index = stack.length // Exit open containers.\n\n    while (index-- > size) {\n      const entry = stack[index]\n      self.containerState = entry[1]\n      entry[0].exit.call(self, effects)\n    }\n\n    stack.length = size\n  }\n\n  function closeFlow() {\n    childFlow.write([null])\n    childToken = undefined\n    childFlow = undefined\n    self.containerState._closeFlow = undefined\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContainer(effects, ok, nok) {\n  return factorySpace(\n    effects,\n    effects.attempt(this.parser.constructs.document, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n  markdownLineEndingOrSpace,\n  unicodePunctuation,\n  unicodeWhitespace\n} from 'micromark-util-character'\n\n/**\n * Classify whether a character code represents whitespace, punctuation, or\n * something else.\n *\n * Used for attention (emphasis, strong), whose sequences can open or close\n * based on the class of surrounding characters.\n *\n * Note that eof (`null`) is seen as whitespace.\n *\n * @param {Code} code\n * @returns {number|undefined}\n */\nexport function classifyCharacter(code) {\n  if (\n    code === null ||\n    markdownLineEndingOrSpace(code) ||\n    unicodeWhitespace(code)\n  ) {\n    return 1\n  }\n\n  if (unicodePunctuation(code)) {\n    return 2\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Resolver} Resolver\n */\n\n/**\n * Call all `resolveAll`s.\n *\n * @param {{resolveAll?: Resolver}[]} constructs\n * @param {Event[]} events\n * @param {TokenizeContext} context\n * @returns {Event[]}\n */\nexport function resolveAll(constructs, events, context) {\n  /** @type {Resolver[]} */\n  const called = []\n  let index = -1\n\n  while (++index < constructs.length) {\n    const resolve = constructs[index].resolveAll\n\n    if (resolve && !called.includes(resolve)) {\n      events = resolve(events, context)\n      called.push(resolve)\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Point} Point\n */\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const attention = {\n  name: 'attention',\n  tokenize: tokenizeAttention,\n  resolveAll: resolveAllAttention\n}\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\n\nfunction resolveAllAttention(events, context) {\n  let index = -1\n  /** @type {number} */\n\n  let open\n  /** @type {Token} */\n\n  let group\n  /** @type {Token} */\n\n  let text\n  /** @type {Token} */\n\n  let openingSequence\n  /** @type {Token} */\n\n  let closingSequence\n  /** @type {number} */\n\n  let use\n  /** @type {Event[]} */\n\n  let nextEvents\n  /** @type {number} */\n\n  let offset // Walk through all events.\n  //\n  // Note: performance of this is fine on an mb of normal markdown, but it’s\n  // a bottleneck for malicious stuff.\n\n  while (++index < events.length) {\n    // Find a token that can close.\n    if (\n      events[index][0] === 'enter' &&\n      events[index][1].type === 'attentionSequence' &&\n      events[index][1]._close\n    ) {\n      open = index // Now walk back to find an opener.\n\n      while (open--) {\n        // Find a token that can open the closer.\n        if (\n          events[open][0] === 'exit' &&\n          events[open][1].type === 'attentionSequence' &&\n          events[open][1]._open && // If the markers are the same:\n          context.sliceSerialize(events[open][1]).charCodeAt(0) ===\n            context.sliceSerialize(events[index][1]).charCodeAt(0)\n        ) {\n          // If the opening can close or the closing can open,\n          // and the close size *is not* a multiple of three,\n          // but the sum of the opening and closing size *is* multiple of three,\n          // then don’t match.\n          if (\n            (events[open][1]._close || events[index][1]._open) &&\n            (events[index][1].end.offset - events[index][1].start.offset) % 3 &&\n            !(\n              (events[open][1].end.offset -\n                events[open][1].start.offset +\n                events[index][1].end.offset -\n                events[index][1].start.offset) %\n              3\n            )\n          ) {\n            continue\n          } // Number of markers to use from the sequence.\n\n          use =\n            events[open][1].end.offset - events[open][1].start.offset > 1 &&\n            events[index][1].end.offset - events[index][1].start.offset > 1\n              ? 2\n              : 1\n          const start = Object.assign({}, events[open][1].end)\n          const end = Object.assign({}, events[index][1].start)\n          movePoint(start, -use)\n          movePoint(end, use)\n          openingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start,\n            end: Object.assign({}, events[open][1].end)\n          }\n          closingSequence = {\n            type: use > 1 ? 'strongSequence' : 'emphasisSequence',\n            start: Object.assign({}, events[index][1].start),\n            end\n          }\n          text = {\n            type: use > 1 ? 'strongText' : 'emphasisText',\n            start: Object.assign({}, events[open][1].end),\n            end: Object.assign({}, events[index][1].start)\n          }\n          group = {\n            type: use > 1 ? 'strong' : 'emphasis',\n            start: Object.assign({}, openingSequence.start),\n            end: Object.assign({}, closingSequence.end)\n          }\n          events[open][1].end = Object.assign({}, openingSequence.start)\n          events[index][1].start = Object.assign({}, closingSequence.end)\n          nextEvents = [] // If there are more markers in the opening, add them before.\n\n          if (events[open][1].end.offset - events[open][1].start.offset) {\n            nextEvents = push(nextEvents, [\n              ['enter', events[open][1], context],\n              ['exit', events[open][1], context]\n            ])\n          } // Opening.\n\n          nextEvents = push(nextEvents, [\n            ['enter', group, context],\n            ['enter', openingSequence, context],\n            ['exit', openingSequence, context],\n            ['enter', text, context]\n          ]) // Between.\n\n          nextEvents = push(\n            nextEvents,\n            resolveAll(\n              context.parser.constructs.insideSpan.null,\n              events.slice(open + 1, index),\n              context\n            )\n          ) // Closing.\n\n          nextEvents = push(nextEvents, [\n            ['exit', text, context],\n            ['enter', closingSequence, context],\n            ['exit', closingSequence, context],\n            ['exit', group, context]\n          ]) // If there are more markers in the closing, add them after.\n\n          if (events[index][1].end.offset - events[index][1].start.offset) {\n            offset = 2\n            nextEvents = push(nextEvents, [\n              ['enter', events[index][1], context],\n              ['exit', events[index][1], context]\n            ])\n          } else {\n            offset = 0\n          }\n\n          splice(events, open - 1, index - open + 3, nextEvents)\n          index = open + nextEvents.length - offset - 2\n          break\n        }\n      }\n    }\n  } // Remove remaining sequences.\n\n  index = -1\n\n  while (++index < events.length) {\n    if (events[index][1].type === 'attentionSequence') {\n      events[index][1].type = 'data'\n    }\n  }\n\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAttention(effects, ok) {\n  const attentionMarkers = this.parser.constructs.attentionMarkers.null\n  const previous = this.previous\n  const before = classifyCharacter(previous)\n  /** @type {NonNullable<Code>} */\n\n  let marker\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('attentionSequence')\n    marker = code\n    return sequence(code)\n  }\n  /** @type {State} */\n\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return sequence\n    }\n\n    const token = effects.exit('attentionSequence')\n    const after = classifyCharacter(code)\n    const open =\n      !after || (after === 2 && before) || attentionMarkers.includes(code)\n    const close =\n      !before || (before === 2 && after) || attentionMarkers.includes(previous)\n    token._open = Boolean(marker === 42 ? open : open && (before || !close))\n    token._close = Boolean(marker === 42 ? close : close && (after || !open))\n    return ok(code)\n  }\n}\n/**\n * Move a point a bit.\n *\n * Note: `move` only works inside lines! It’s not possible to move past other\n * chunks (replacement characters, tabs, or line endings).\n *\n * @param {Point} point\n * @param {number} offset\n * @returns {void}\n */\n\nfunction movePoint(point, offset) {\n  point.column += offset\n  point.offset += offset\n  point._bufferIndex += offset\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  asciiAtext,\n  asciiControl\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const autolink = {\n  name: 'autolink',\n  tokenize: tokenizeAutolink\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeAutolink(effects, ok, nok) {\n  let size = 1\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('autolink')\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.enter('autolinkProtocol')\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return schemeOrEmailAtext\n    }\n\n    return asciiAtext(code) ? emailAtext(code) : nok(code)\n  }\n  /** @type {State} */\n\n  function schemeOrEmailAtext(code) {\n    return code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)\n      ? schemeInsideOrEmailAtext(code)\n      : emailAtext(code)\n  }\n  /** @type {State} */\n\n  function schemeInsideOrEmailAtext(code) {\n    if (code === 58) {\n      effects.consume(code)\n      return urlInside\n    }\n\n    if (\n      (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n      size++ < 32\n    ) {\n      effects.consume(code)\n      return schemeInsideOrEmailAtext\n    }\n\n    return emailAtext(code)\n  }\n  /** @type {State} */\n\n  function urlInside(code) {\n    if (code === 62) {\n      effects.exit('autolinkProtocol')\n      return end(code)\n    }\n\n    if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n      return nok(code)\n    }\n\n    effects.consume(code)\n    return urlInside\n  }\n  /** @type {State} */\n\n  function emailAtext(code) {\n    if (code === 64) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n\n    if (asciiAtext(code)) {\n      effects.consume(code)\n      return emailAtext\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function emailAtSignOrDot(code) {\n    return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n  }\n  /** @type {State} */\n\n  function emailLabel(code) {\n    if (code === 46) {\n      effects.consume(code)\n      size = 0\n      return emailAtSignOrDot\n    }\n\n    if (code === 62) {\n      // Exit, then change the type.\n      effects.exit('autolinkProtocol').type = 'autolinkEmail'\n      return end(code)\n    }\n\n    return emailValue(code)\n  }\n  /** @type {State} */\n\n  function emailValue(code) {\n    if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n      effects.consume(code)\n      return code === 45 ? emailValue : emailLabel\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function end(code) {\n    effects.enter('autolinkMarker')\n    effects.consume(code)\n    effects.exit('autolinkMarker')\n    effects.exit('autolink')\n    return ok\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blankLine = {\n  tokenize: tokenizeBlankLine,\n  partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlankLine(effects, ok, nok) {\n  return factorySpace(effects, afterWhitespace, 'linePrefix')\n  /** @type {State} */\n\n  function afterWhitespace(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const blockQuote = {\n  name: 'blockQuote',\n  tokenize: tokenizeBlockQuoteStart,\n  continuation: {\n    tokenize: tokenizeBlockQuoteContinuation\n  },\n  exit\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (code === 62) {\n      const state = self.containerState\n\n      if (!state.open) {\n        effects.enter('blockQuote', {\n          _container: true\n        })\n        state.open = true\n      }\n\n      effects.enter('blockQuotePrefix')\n      effects.enter('blockQuoteMarker')\n      effects.consume(code)\n      effects.exit('blockQuoteMarker')\n      return after\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function after(code) {\n    if (markdownSpace(code)) {\n      effects.enter('blockQuotePrefixWhitespace')\n      effects.consume(code)\n      effects.exit('blockQuotePrefixWhitespace')\n      effects.exit('blockQuotePrefix')\n      return ok\n    }\n\n    effects.exit('blockQuotePrefix')\n    return ok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n  return factorySpace(\n    effects,\n    effects.attempt(blockQuote, ok, nok),\n    'linePrefix',\n    this.parser.constructs.disable.null.includes('codeIndented') ? undefined : 4\n  )\n}\n/** @type {Exiter} */\n\nfunction exit(effects) {\n  effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {asciiPunctuation} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterEscape = {\n  name: 'characterEscape',\n  tokenize: tokenizeCharacterEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('characterEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    effects.exit('escapeMarker')\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (asciiPunctuation(code)) {\n      effects.enter('characterEscapeValue')\n      effects.consume(code)\n      effects.exit('characterEscapeValue')\n      effects.exit('characterEscape')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n  asciiAlphanumeric,\n  asciiDigit,\n  asciiHexDigit\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const characterReference = {\n  name: 'characterReference',\n  tokenize: tokenizeCharacterReference\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCharacterReference(effects, ok, nok) {\n  const self = this\n  let size = 0\n  /** @type {number} */\n\n  let max\n  /** @type {(code: Code) => code is number} */\n\n  let test\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('characterReference')\n    effects.enter('characterReferenceMarker')\n    effects.consume(code)\n    effects.exit('characterReferenceMarker')\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 35) {\n      effects.enter('characterReferenceMarkerNumeric')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerNumeric')\n      return numeric\n    }\n\n    effects.enter('characterReferenceValue')\n    max = 31\n    test = asciiAlphanumeric\n    return value(code)\n  }\n  /** @type {State} */\n\n  function numeric(code) {\n    if (code === 88 || code === 120) {\n      effects.enter('characterReferenceMarkerHexadecimal')\n      effects.consume(code)\n      effects.exit('characterReferenceMarkerHexadecimal')\n      effects.enter('characterReferenceValue')\n      max = 6\n      test = asciiHexDigit\n      return value\n    }\n\n    effects.enter('characterReferenceValue')\n    max = 7\n    test = asciiDigit\n    return value(code)\n  }\n  /** @type {State} */\n\n  function value(code) {\n    /** @type {Token} */\n    let token\n\n    if (code === 59 && size) {\n      token = effects.exit('characterReferenceValue')\n\n      if (\n        test === asciiAlphanumeric &&\n        !decodeNamedCharacterReference(self.sliceSerialize(token))\n      ) {\n        return nok(code)\n      }\n\n      effects.enter('characterReferenceMarker')\n      effects.consume(code)\n      effects.exit('characterReferenceMarker')\n      effects.exit('characterReference')\n      return ok\n    }\n\n    if (test(code) && size++ < max) {\n      effects.consume(code)\n      return value\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeFenced = {\n  name: 'codeFenced',\n  tokenize: tokenizeCodeFenced,\n  concrete: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeFenced(effects, ok, nok) {\n  const self = this\n  /** @type {Construct} */\n\n  const closingFenceConstruct = {\n    tokenize: tokenizeClosingFence,\n    partial: true\n  }\n  /** @type {Construct} */\n\n  const nonLazyLine = {\n    tokenize: tokenizeNonLazyLine,\n    partial: true\n  }\n  const tail = this.events[this.events.length - 1]\n  const initialPrefix =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let sizeOpen = 0\n  /** @type {NonNullable<Code>} */\n\n  let marker\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('codeFenced')\n    effects.enter('codeFencedFence')\n    effects.enter('codeFencedFenceSequence')\n    marker = code\n    return sequenceOpen(code)\n  }\n  /** @type {State} */\n\n  function sequenceOpen(code) {\n    if (code === marker) {\n      effects.consume(code)\n      sizeOpen++\n      return sequenceOpen\n    }\n\n    effects.exit('codeFencedFenceSequence')\n    return sizeOpen < 3\n      ? nok(code)\n      : factorySpace(effects, infoOpen, 'whitespace')(code)\n  }\n  /** @type {State} */\n\n  function infoOpen(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return openAfter(code)\n    }\n\n    effects.enter('codeFencedFenceInfo')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return info(code)\n  }\n  /** @type {State} */\n\n  function info(code) {\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceInfo')\n      return factorySpace(effects, infoAfter, 'whitespace')(code)\n    }\n\n    if (code === 96 && code === marker) return nok(code)\n    effects.consume(code)\n    return info\n  }\n  /** @type {State} */\n\n  function infoAfter(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return openAfter(code)\n    }\n\n    effects.enter('codeFencedFenceMeta')\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return meta(code)\n  }\n  /** @type {State} */\n\n  function meta(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      effects.exit('codeFencedFenceMeta')\n      return openAfter(code)\n    }\n\n    if (code === 96 && code === marker) return nok(code)\n    effects.consume(code)\n    return meta\n  }\n  /** @type {State} */\n\n  function openAfter(code) {\n    effects.exit('codeFencedFence')\n    return self.interrupt ? ok(code) : contentStart(code)\n  }\n  /** @type {State} */\n\n  function contentStart(code) {\n    if (code === null) {\n      return after(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.attempt(\n        nonLazyLine,\n        effects.attempt(\n          closingFenceConstruct,\n          after,\n          initialPrefix\n            ? factorySpace(\n                effects,\n                contentStart,\n                'linePrefix',\n                initialPrefix + 1\n              )\n            : contentStart\n        ),\n        after\n      )(code)\n    }\n\n    effects.enter('codeFlowValue')\n    return contentContinue(code)\n  }\n  /** @type {State} */\n\n  function contentContinue(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return contentStart(code)\n    }\n\n    effects.consume(code)\n    return contentContinue\n  }\n  /** @type {State} */\n\n  function after(code) {\n    effects.exit('codeFenced')\n    return ok(code)\n  }\n  /** @type {Tokenizer} */\n\n  function tokenizeNonLazyLine(effects, ok, nok) {\n    const self = this\n    return start\n    /** @type {State} */\n\n    function start(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return lineStart\n    }\n    /** @type {State} */\n\n    function lineStart(code) {\n      return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n    }\n  }\n  /** @type {Tokenizer} */\n\n  function tokenizeClosingFence(effects, ok, nok) {\n    let size = 0\n    return factorySpace(\n      effects,\n      closingSequenceStart,\n      'linePrefix',\n      this.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )\n    /** @type {State} */\n\n    function closingSequenceStart(code) {\n      effects.enter('codeFencedFence')\n      effects.enter('codeFencedFenceSequence')\n      return closingSequence(code)\n    }\n    /** @type {State} */\n\n    function closingSequence(code) {\n      if (code === marker) {\n        effects.consume(code)\n        size++\n        return closingSequence\n      }\n\n      if (size < sizeOpen) return nok(code)\n      effects.exit('codeFencedFenceSequence')\n      return factorySpace(effects, closingSequenceEnd, 'whitespace')(code)\n    }\n    /** @type {State} */\n\n    function closingSequenceEnd(code) {\n      if (code === null || markdownLineEnding(code)) {\n        effects.exit('codeFencedFence')\n        return ok(code)\n      }\n\n      return nok(code)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeIndented = {\n  name: 'codeIndented',\n  tokenize: tokenizeCodeIndented\n}\n/** @type {Construct} */\n\nconst indentedContent = {\n  tokenize: tokenizeIndentedContent,\n  partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeIndented(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('codeIndented')\n    return factorySpace(effects, afterStartPrefix, 'linePrefix', 4 + 1)(code)\n  }\n  /** @type {State} */\n\n  function afterStartPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? afterPrefix(code)\n      : nok(code)\n  }\n  /** @type {State} */\n\n  function afterPrefix(code) {\n    if (code === null) {\n      return after(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.attempt(indentedContent, afterPrefix, after)(code)\n    }\n\n    effects.enter('codeFlowValue')\n    return content(code)\n  }\n  /** @type {State} */\n\n  function content(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('codeFlowValue')\n      return afterPrefix(code)\n    }\n\n    effects.consume(code)\n    return content\n  }\n  /** @type {State} */\n\n  function after(code) {\n    effects.exit('codeIndented')\n    return ok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeIndentedContent(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    // If this is a lazy line, it can’t be code.\n    if (self.parser.lazy[self.now().line]) {\n      return nok(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return start\n    }\n\n    return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n  }\n  /** @type {State} */\n\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n      ? ok(code)\n      : markdownLineEnding(code)\n      ? start(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Previous} Previous\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const codeText = {\n  name: 'codeText',\n  tokenize: tokenizeCodeText,\n  resolve: resolveCodeText,\n  previous\n}\n/** @type {Resolver} */\n\nfunction resolveCodeText(events) {\n  let tailExitIndex = events.length - 4\n  let headEnterIndex = 3\n  /** @type {number} */\n\n  let index\n  /** @type {number|undefined} */\n\n  let enter // If we start and end with an EOL or a space.\n\n  if (\n    (events[headEnterIndex][1].type === 'lineEnding' ||\n      events[headEnterIndex][1].type === 'space') &&\n    (events[tailExitIndex][1].type === 'lineEnding' ||\n      events[tailExitIndex][1].type === 'space')\n  ) {\n    index = headEnterIndex // And we have data.\n\n    while (++index < tailExitIndex) {\n      if (events[index][1].type === 'codeTextData') {\n        // Then we have padding.\n        events[headEnterIndex][1].type = 'codeTextPadding'\n        events[tailExitIndex][1].type = 'codeTextPadding'\n        headEnterIndex += 2\n        tailExitIndex -= 2\n        break\n      }\n    }\n  } // Merge adjacent spaces and data.\n\n  index = headEnterIndex - 1\n  tailExitIndex++\n\n  while (++index <= tailExitIndex) {\n    if (enter === undefined) {\n      if (index !== tailExitIndex && events[index][1].type !== 'lineEnding') {\n        enter = index\n      }\n    } else if (\n      index === tailExitIndex ||\n      events[index][1].type === 'lineEnding'\n    ) {\n      events[enter][1].type = 'codeTextData'\n\n      if (index !== enter + 2) {\n        events[enter][1].end = events[index - 1][1].end\n        events.splice(enter + 2, index - enter - 2)\n        tailExitIndex -= index - enter - 2\n        index = enter + 2\n      }\n\n      enter = undefined\n    }\n  }\n\n  return events\n}\n/** @type {Previous} */\n\nfunction previous(code) {\n  // If there is a previous code, there will always be a tail.\n  return (\n    code !== 96 ||\n    this.events[this.events.length - 1][1].type === 'characterEscape'\n  )\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCodeText(effects, ok, nok) {\n  const self = this\n  let sizeOpen = 0\n  /** @type {number} */\n\n  let size\n  /** @type {Token} */\n\n  let token\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('codeText')\n    effects.enter('codeTextSequence')\n    return openingSequence(code)\n  }\n  /** @type {State} */\n\n  function openingSequence(code) {\n    if (code === 96) {\n      effects.consume(code)\n      sizeOpen++\n      return openingSequence\n    }\n\n    effects.exit('codeTextSequence')\n    return gap(code)\n  }\n  /** @type {State} */\n\n  function gap(code) {\n    // EOF.\n    if (code === null) {\n      return nok(code)\n    } // Closing fence?\n    // Could also be data.\n\n    if (code === 96) {\n      token = effects.enter('codeTextSequence')\n      size = 0\n      return closingSequence(code)\n    } // Tabs don’t work, and virtual spaces don’t make sense.\n\n    if (code === 32) {\n      effects.enter('space')\n      effects.consume(code)\n      effects.exit('space')\n      return gap\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return gap\n    } // Data.\n\n    effects.enter('codeTextData')\n    return data(code)\n  } // In code.\n\n  /** @type {State} */\n\n  function data(code) {\n    if (\n      code === null ||\n      code === 32 ||\n      code === 96 ||\n      markdownLineEnding(code)\n    ) {\n      effects.exit('codeTextData')\n      return gap(code)\n    }\n\n    effects.consume(code)\n    return data\n  } // Closing fence.\n\n  /** @type {State} */\n\n  function closingSequence(code) {\n    // More.\n    if (code === 96) {\n      effects.consume(code)\n      size++\n      return closingSequence\n    } // Done!\n\n    if (size === sizeOpen) {\n      effects.exit('codeTextSequence')\n      effects.exit('codeText')\n      return ok(code)\n    } // More or less accents: mark as data.\n\n    token.type = 'codeTextData'\n    return data(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {splice} from 'micromark-util-chunked'\n\n/**\n * Tokenize subcontent.\n *\n * @param {Event[]} events\n * @returns {boolean}\n */\nexport function subtokenize(events) {\n  /** @type {Record<string, number>} */\n  const jumps = {}\n  let index = -1\n  /** @type {Event} */\n\n  let event\n  /** @type {number|undefined} */\n\n  let lineIndex\n  /** @type {number} */\n\n  let otherIndex\n  /** @type {Event} */\n\n  let otherEvent\n  /** @type {Event[]} */\n\n  let parameters\n  /** @type {Event[]} */\n\n  let subevents\n  /** @type {boolean|undefined} */\n\n  let more\n\n  while (++index < events.length) {\n    while (index in jumps) {\n      index = jumps[index]\n    }\n\n    event = events[index] // Add a hook for the GFM tasklist extension, which needs to know if text\n    // is in the first content of a list item.\n\n    if (\n      index &&\n      event[1].type === 'chunkFlow' &&\n      events[index - 1][1].type === 'listItemPrefix'\n    ) {\n      subevents = event[1]._tokenizer.events\n      otherIndex = 0\n\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'lineEndingBlank'\n      ) {\n        otherIndex += 2\n      }\n\n      if (\n        otherIndex < subevents.length &&\n        subevents[otherIndex][1].type === 'content'\n      ) {\n        while (++otherIndex < subevents.length) {\n          if (subevents[otherIndex][1].type === 'content') {\n            break\n          }\n\n          if (subevents[otherIndex][1].type === 'chunkText') {\n            subevents[otherIndex][1]._isInFirstContentOfListItem = true\n            otherIndex++\n          }\n        }\n      }\n    } // Enter.\n\n    if (event[0] === 'enter') {\n      if (event[1].contentType) {\n        Object.assign(jumps, subcontent(events, index))\n        index = jumps[index]\n        more = true\n      }\n    } // Exit.\n    else if (event[1]._container) {\n      otherIndex = index\n      lineIndex = undefined\n\n      while (otherIndex--) {\n        otherEvent = events[otherIndex]\n\n        if (\n          otherEvent[1].type === 'lineEnding' ||\n          otherEvent[1].type === 'lineEndingBlank'\n        ) {\n          if (otherEvent[0] === 'enter') {\n            if (lineIndex) {\n              events[lineIndex][1].type = 'lineEndingBlank'\n            }\n\n            otherEvent[1].type = 'lineEnding'\n            lineIndex = otherIndex\n          }\n        } else {\n          break\n        }\n      }\n\n      if (lineIndex) {\n        // Fix position.\n        event[1].end = Object.assign({}, events[lineIndex][1].start) // Switch container exit w/ line endings.\n\n        parameters = events.slice(lineIndex, index)\n        parameters.unshift(event)\n        splice(events, lineIndex, index - lineIndex + 1, parameters)\n      }\n    }\n  }\n\n  return !more\n}\n/**\n * Tokenize embedded tokens.\n *\n * @param {Event[]} events\n * @param {number} eventIndex\n * @returns {Record<string, number>}\n */\n\nfunction subcontent(events, eventIndex) {\n  const token = events[eventIndex][1]\n  const context = events[eventIndex][2]\n  let startPosition = eventIndex - 1\n  /** @type {number[]} */\n\n  const startPositions = []\n  const tokenizer =\n    token._tokenizer || context.parser[token.contentType](token.start)\n  const childEvents = tokenizer.events\n  /** @type {[number, number][]} */\n\n  const jumps = []\n  /** @type {Record<string, number>} */\n\n  const gaps = {}\n  /** @type {Chunk[]} */\n\n  let stream\n  /** @type {Token|undefined} */\n\n  let previous\n  let index = -1\n  /** @type {Token|undefined} */\n\n  let current = token\n  let adjust = 0\n  let start = 0\n  const breaks = [start] // Loop forward through the linked tokens to pass them in order to the\n  // subtokenizer.\n\n  while (current) {\n    // Find the position of the event for this token.\n    while (events[++startPosition][1] !== current) {\n      // Empty.\n    }\n\n    startPositions.push(startPosition)\n\n    if (!current._tokenizer) {\n      stream = context.sliceStream(current)\n\n      if (!current.next) {\n        stream.push(null)\n      }\n\n      if (previous) {\n        tokenizer.defineSkip(current.start)\n      }\n\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = true\n      }\n\n      tokenizer.write(stream)\n\n      if (current._isInFirstContentOfListItem) {\n        tokenizer._gfmTasklistFirstContentOfListItem = undefined\n      }\n    } // Unravel the next token.\n\n    previous = current\n    current = current.next\n  } // Now, loop back through all events (and linked tokens), to figure out which\n  // parts belong where.\n\n  current = token\n\n  while (++index < childEvents.length) {\n    if (\n      // Find a void token that includes a break.\n      childEvents[index][0] === 'exit' &&\n      childEvents[index - 1][0] === 'enter' &&\n      childEvents[index][1].type === childEvents[index - 1][1].type &&\n      childEvents[index][1].start.line !== childEvents[index][1].end.line\n    ) {\n      start = index + 1\n      breaks.push(start) // Help GC.\n\n      current._tokenizer = undefined\n      current.previous = undefined\n      current = current.next\n    }\n  } // Help GC.\n\n  tokenizer.events = [] // If there’s one more token (which is the cases for lines that end in an\n  // EOF), that’s perfect: the last point we found starts it.\n  // If there isn’t then make sure any remaining content is added to it.\n\n  if (current) {\n    // Help GC.\n    current._tokenizer = undefined\n    current.previous = undefined\n  } else {\n    breaks.pop()\n  } // Now splice the events from the subtokenizer into the current events,\n  // moving back to front so that splice indices aren’t affected.\n\n  index = breaks.length\n\n  while (index--) {\n    const slice = childEvents.slice(breaks[index], breaks[index + 1])\n    const start = startPositions.pop()\n    jumps.unshift([start, start + slice.length - 1])\n    splice(events, start, 2, slice)\n  }\n\n  index = -1\n\n  while (++index < jumps.length) {\n    gaps[adjust + jumps[index][0]] = adjust + jumps[index][1]\n    adjust += jumps[index][1] - jumps[index][0] - 1\n  }\n\n  return gaps\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\n\n/**\n * No name because it must not be turned off.\n * @type {Construct}\n */\nexport const content = {\n  tokenize: tokenizeContent,\n  resolve: resolveContent\n}\n/** @type {Construct} */\n\nconst continuationConstruct = {\n  tokenize: tokenizeContinuation,\n  partial: true\n}\n/**\n * Content is transparent: it’s parsed right now. That way, definitions are also\n * parsed right now: before text in paragraphs (specifically, media) are parsed.\n *\n * @type {Resolver}\n */\n\nfunction resolveContent(events) {\n  subtokenize(events)\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContent(effects, ok) {\n  /** @type {Token} */\n  let previous\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('content')\n    previous = effects.enter('chunkContent', {\n      contentType: 'content'\n    })\n    return data(code)\n  }\n  /** @type {State} */\n\n  function data(code) {\n    if (code === null) {\n      return contentEnd(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.check(\n        continuationConstruct,\n        contentContinue,\n        contentEnd\n      )(code)\n    } // Data.\n\n    effects.consume(code)\n    return data\n  }\n  /** @type {State} */\n\n  function contentEnd(code) {\n    effects.exit('chunkContent')\n    effects.exit('content')\n    return ok(code)\n  }\n  /** @type {State} */\n\n  function contentContinue(code) {\n    effects.consume(code)\n    effects.exit('chunkContent')\n    previous.next = effects.enter('chunkContent', {\n      contentType: 'content',\n      previous\n    })\n    previous = previous.next\n    return data\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeContinuation(effects, ok, nok) {\n  const self = this\n  return startLookahead\n  /** @type {State} */\n\n  function startLookahead(code) {\n    effects.exit('chunkContent')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, prefixed, 'linePrefix')\n  }\n  /** @type {State} */\n\n  function prefixed(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    const tail = self.events[self.events.length - 1]\n\n    if (\n      !self.parser.constructs.disable.null.includes('codeIndented') &&\n      tail &&\n      tail[1].type === 'linePrefix' &&\n      tail[2].sliceSerialize(tail[1], true).length >= 4\n    ) {\n      return ok(code)\n    }\n\n    return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {\n  asciiControl,\n  markdownLineEndingOrSpace,\n  markdownLineEnding\n} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} literalType\n * @param {string} literalMarkerType\n * @param {string} rawType\n * @param {string} stringType\n * @param {number} [max=Infinity]\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryDestination(\n  effects,\n  ok,\n  nok,\n  type,\n  literalType,\n  literalMarkerType,\n  rawType,\n  stringType,\n  max\n) {\n  const limit = max || Number.POSITIVE_INFINITY\n  let balance = 0\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (code === 60) {\n      effects.enter(type)\n      effects.enter(literalType)\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      return destinationEnclosedBefore\n    }\n\n    if (code === null || code === 41 || asciiControl(code)) {\n      return nok(code)\n    }\n\n    effects.enter(type)\n    effects.enter(rawType)\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return destinationRaw(code)\n  }\n  /** @type {State} */\n\n  function destinationEnclosedBefore(code) {\n    if (code === 62) {\n      effects.enter(literalMarkerType)\n      effects.consume(code)\n      effects.exit(literalMarkerType)\n      effects.exit(literalType)\n      effects.exit(type)\n      return ok\n    }\n\n    effects.enter(stringType)\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return destinationEnclosed(code)\n  }\n  /** @type {State} */\n\n  function destinationEnclosed(code) {\n    if (code === 62) {\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      return destinationEnclosedBefore(code)\n    }\n\n    if (code === null || code === 60 || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    effects.consume(code)\n    return code === 92 ? destinationEnclosedEscape : destinationEnclosed\n  }\n  /** @type {State} */\n\n  function destinationEnclosedEscape(code) {\n    if (code === 60 || code === 62 || code === 92) {\n      effects.consume(code)\n      return destinationEnclosed\n    }\n\n    return destinationEnclosed(code)\n  }\n  /** @type {State} */\n\n  function destinationRaw(code) {\n    if (code === 40) {\n      if (++balance > limit) return nok(code)\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    if (code === 41) {\n      if (!balance--) {\n        effects.exit('chunkString')\n        effects.exit(stringType)\n        effects.exit(rawType)\n        effects.exit(type)\n        return ok(code)\n      }\n\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      if (balance) return nok(code)\n      effects.exit('chunkString')\n      effects.exit(stringType)\n      effects.exit(rawType)\n      effects.exit(type)\n      return ok(code)\n    }\n\n    if (asciiControl(code)) return nok(code)\n    effects.consume(code)\n    return code === 92 ? destinationRawEscape : destinationRaw\n  }\n  /** @type {State} */\n\n  function destinationRawEscape(code) {\n    if (code === 40 || code === 41 || code === 92) {\n      effects.consume(code)\n      return destinationRaw\n    }\n\n    return destinationRaw(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @this {TokenizeContext}\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryLabel(effects, ok, nok, type, markerType, stringType) {\n  const self = this\n  let size = 0\n  /** @type {boolean} */\n\n  let data\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    effects.enter(stringType)\n    return atBreak\n  }\n  /** @type {State} */\n\n  function atBreak(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      (code === 93 && !data) ||\n      /* To do: remove in the future once we’ve switched from\n       * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n       * which doesn’t need this */\n\n      /* Hidden footnotes hook */\n\n      /* c8 ignore next 3 */\n      (code === 94 &&\n        !size &&\n        '_hiddenFootnoteSupport' in self.parser.constructs) ||\n      size > 999\n    ) {\n      return nok(code)\n    }\n\n    if (code === 93) {\n      effects.exit(stringType)\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return atBreak\n    }\n\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return label(code)\n  }\n  /** @type {State} */\n\n  function label(code) {\n    if (\n      code === null ||\n      code === 91 ||\n      code === 93 ||\n      markdownLineEnding(code) ||\n      size++ > 999\n    ) {\n      effects.exit('chunkString')\n      return atBreak(code)\n    }\n\n    effects.consume(code)\n    data = data || !markdownSpace(code)\n    return code === 92 ? labelEscape : label\n  }\n  /** @type {State} */\n\n  function labelEscape(code) {\n    if (code === 91 || code === 92 || code === 93) {\n      effects.consume(code)\n      size++\n      return label\n    }\n\n    return label(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n * @param {State} nok\n * @param {string} type\n * @param {string} markerType\n * @param {string} stringType\n * @returns {State}\n */\n// eslint-disable-next-line max-params\nexport function factoryTitle(effects, ok, nok, type, markerType, stringType) {\n  /** @type {NonNullable<Code>} */\n  let marker\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter(type)\n    effects.enter(markerType)\n    effects.consume(code)\n    effects.exit(markerType)\n    marker = code === 40 ? 41 : code\n    return atFirstTitleBreak\n  }\n  /** @type {State} */\n\n  function atFirstTitleBreak(code) {\n    if (code === marker) {\n      effects.enter(markerType)\n      effects.consume(code)\n      effects.exit(markerType)\n      effects.exit(type)\n      return ok\n    }\n\n    effects.enter(stringType)\n    return atTitleBreak(code)\n  }\n  /** @type {State} */\n\n  function atTitleBreak(code) {\n    if (code === marker) {\n      effects.exit(stringType)\n      return atFirstTitleBreak(marker)\n    }\n\n    if (code === null) {\n      return nok(code)\n    } // Note: blank lines can’t exist in content.\n\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return factorySpace(effects, atTitleBreak, 'linePrefix')\n    }\n\n    effects.enter('chunkString', {\n      contentType: 'string'\n    })\n    return title(code)\n  }\n  /** @type {State} */\n\n  function title(code) {\n    if (code === marker || code === null || markdownLineEnding(code)) {\n      effects.exit('chunkString')\n      return atTitleBreak(code)\n    }\n\n    effects.consume(code)\n    return code === 92 ? titleEscape : title\n  }\n  /** @type {State} */\n\n  function titleEscape(code) {\n    if (code === marker || code === 92) {\n      effects.consume(code)\n      return title\n    }\n\n    return title(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/**\n * @param {Effects} effects\n * @param {State} ok\n */\nexport function factoryWhitespace(effects, ok) {\n  /** @type {boolean} */\n  let seen\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (markdownLineEnding(code)) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      seen = true\n      return start\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(\n        effects,\n        start,\n        seen ? 'linePrefix' : 'lineSuffix'\n      )(code)\n    }\n\n    return ok(code)\n  }\n}\n","/**\n * Normalize an identifier (such as used in definitions).\n *\n * @param {string} value\n * @returns {string}\n */\nexport function normalizeIdentifier(value) {\n  return (\n    value // Collapse Markdown whitespace.\n      .replace(/[\\t\\n\\r ]+/g, ' ') // Trim.\n      .replace(/^ | $/g, '') // Some characters are considered “uppercase”, but if their lowercase\n      // counterpart is uppercased will result in a different uppercase\n      // character.\n      // Hence, to get that form, we perform both lower- and uppercase.\n      // Upper case makes sure keys will not interact with default prototypal\n      // methods: no method is uppercase.\n      .toLowerCase()\n      .toUpperCase()\n  )\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factorySpace} from 'micromark-factory-space'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const definition = {\n  name: 'definition',\n  tokenize: tokenizeDefinition\n}\n/** @type {Construct} */\n\nconst titleConstruct = {\n  tokenize: tokenizeTitle,\n  partial: true\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeDefinition(effects, ok, nok) {\n  const self = this\n  /** @type {string} */\n\n  let identifier\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('definition')\n    return factoryLabel.call(\n      self,\n      effects,\n      labelAfter,\n      nok,\n      'definitionLabel',\n      'definitionLabelMarker',\n      'definitionLabelString'\n    )(code)\n  }\n  /** @type {State} */\n\n  function labelAfter(code) {\n    identifier = normalizeIdentifier(\n      self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n    )\n\n    if (code === 58) {\n      effects.enter('definitionMarker')\n      effects.consume(code)\n      effects.exit('definitionMarker') // Note: blank lines can’t exist in content.\n\n      return factoryWhitespace(\n        effects,\n        factoryDestination(\n          effects,\n          effects.attempt(\n            titleConstruct,\n            factorySpace(effects, after, 'whitespace'),\n            factorySpace(effects, after, 'whitespace')\n          ),\n          nok,\n          'definitionDestination',\n          'definitionDestinationLiteral',\n          'definitionDestinationLiteralMarker',\n          'definitionDestinationRaw',\n          'definitionDestinationString'\n        )\n      )\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function after(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('definition')\n\n      if (!self.parser.defined.includes(identifier)) {\n        self.parser.defined.push(identifier)\n      }\n\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeTitle(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, before)(code)\n      : nok(code)\n  }\n  /** @type {State} */\n\n  function before(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        factorySpace(effects, after, 'whitespace'),\n        nok,\n        'definitionTitle',\n        'definitionTitleMarker',\n        'definitionTitleString'\n      )(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function after(code) {\n    return code === null || markdownLineEnding(code) ? ok(code) : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const hardBreakEscape = {\n  name: 'hardBreakEscape',\n  tokenize: tokenizeHardBreakEscape\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('hardBreakEscape')\n    effects.enter('escapeMarker')\n    effects.consume(code)\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (markdownLineEnding(code)) {\n      effects.exit('escapeMarker')\n      effects.exit('hardBreakEscape')\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {splice} from 'micromark-util-chunked'\n\n/** @type {Construct} */\nexport const headingAtx = {\n  name: 'headingAtx',\n  tokenize: tokenizeHeadingAtx,\n  resolve: resolveHeadingAtx\n}\n/** @type {Resolver} */\n\nfunction resolveHeadingAtx(events, context) {\n  let contentEnd = events.length - 2\n  let contentStart = 3\n  /** @type {Token} */\n\n  let content\n  /** @type {Token} */\n\n  let text // Prefix whitespace, part of the opening.\n\n  if (events[contentStart][1].type === 'whitespace') {\n    contentStart += 2\n  } // Suffix whitespace, part of the closing.\n\n  if (\n    contentEnd - 2 > contentStart &&\n    events[contentEnd][1].type === 'whitespace'\n  ) {\n    contentEnd -= 2\n  }\n\n  if (\n    events[contentEnd][1].type === 'atxHeadingSequence' &&\n    (contentStart === contentEnd - 1 ||\n      (contentEnd - 4 > contentStart &&\n        events[contentEnd - 2][1].type === 'whitespace'))\n  ) {\n    contentEnd -= contentStart + 1 === contentEnd ? 2 : 4\n  }\n\n  if (contentEnd > contentStart) {\n    content = {\n      type: 'atxHeadingText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end\n    }\n    text = {\n      type: 'chunkText',\n      start: events[contentStart][1].start,\n      end: events[contentEnd][1].end,\n      // @ts-expect-error Constants are fine to assign.\n      contentType: 'text'\n    }\n    splice(events, contentStart, contentEnd - contentStart + 1, [\n      ['enter', content, context],\n      ['enter', text, context],\n      ['exit', text, context],\n      ['exit', content, context]\n    ])\n  }\n\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n  const self = this\n  let size = 0\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('atxHeading')\n    effects.enter('atxHeadingSequence')\n    return fenceOpenInside(code)\n  }\n  /** @type {State} */\n\n  function fenceOpenInside(code) {\n    if (code === 35 && size++ < 6) {\n      effects.consume(code)\n      return fenceOpenInside\n    }\n\n    if (code === null || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingSequence')\n      return self.interrupt ? ok(code) : headingBreak(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function headingBreak(code) {\n    if (code === 35) {\n      effects.enter('atxHeadingSequence')\n      return sequence(code)\n    }\n\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('atxHeading')\n      return ok(code)\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(effects, headingBreak, 'whitespace')(code)\n    }\n\n    effects.enter('atxHeadingText')\n    return data(code)\n  }\n  /** @type {State} */\n\n  function sequence(code) {\n    if (code === 35) {\n      effects.consume(code)\n      return sequence\n    }\n\n    effects.exit('atxHeadingSequence')\n    return headingBreak(code)\n  }\n  /** @type {State} */\n\n  function data(code) {\n    if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n      effects.exit('atxHeadingText')\n      return headingBreak(code)\n    }\n\n    effects.consume(code)\n    return data\n  }\n}\n","/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result\n * in more relaxed rules (condition 6): because they are known blocks, the\n * HTML-like syntax doesn’t have to be strictly parsed.\n * For tag names not in this list, a more strict algorithm (condition 7) is used\n * to detect whether the HTML-like syntax is seen as HTML (flow) or not.\n *\n * This is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n */\nexport const htmlBlockNames = [\n  'address',\n  'article',\n  'aside',\n  'base',\n  'basefont',\n  'blockquote',\n  'body',\n  'caption',\n  'center',\n  'col',\n  'colgroup',\n  'dd',\n  'details',\n  'dialog',\n  'dir',\n  'div',\n  'dl',\n  'dt',\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  'hr',\n  'html',\n  'iframe',\n  'legend',\n  'li',\n  'link',\n  'main',\n  'menu',\n  'menuitem',\n  'nav',\n  'noframes',\n  'ol',\n  'optgroup',\n  'option',\n  'p',\n  'param',\n  'section',\n  'summary',\n  'table',\n  'tbody',\n  'td',\n  'tfoot',\n  'th',\n  'thead',\n  'title',\n  'tr',\n  'track',\n  'ul'\n]\n\n/**\n * List of lowercase HTML tag names which when parsing HTML (flow), result in\n * HTML that can include lines w/o exiting, until a closing tag also in this\n * list is found (condition 1).\n *\n * This module is copied from:\n * <https://spec.commonmark.org/0.30/#html-blocks>.\n *\n * Note that `textarea` was added in `CommonMark@0.30`.\n */\nexport const htmlRawNames = ['pre', 'script', 'style', 'textarea']\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\nimport {htmlBlockNames, htmlRawNames} from 'micromark-util-html-tag-name'\nimport {blankLine} from './blank-line.js'\n/** @type {Construct} */\n\nexport const htmlFlow = {\n  name: 'htmlFlow',\n  tokenize: tokenizeHtmlFlow,\n  resolveTo: resolveToHtmlFlow,\n  concrete: true\n}\n/** @type {Construct} */\n\nconst nextBlankConstruct = {\n  tokenize: tokenizeNextBlank,\n  partial: true\n}\n/** @type {Resolver} */\n\nfunction resolveToHtmlFlow(events) {\n  let index = events.length\n\n  while (index--) {\n    if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n      break\n    }\n  }\n\n  if (index > 1 && events[index - 2][1].type === 'linePrefix') {\n    // Add the prefix start to the HTML token.\n    events[index][1].start = events[index - 2][1].start // Add the prefix start to the HTML line token.\n\n    events[index + 1][1].start = events[index - 2][1].start // Remove the line prefix.\n\n    events.splice(index - 2, 2)\n  }\n\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n  const self = this\n  /** @type {number} */\n\n  let kind\n  /** @type {boolean} */\n\n  let startTag\n  /** @type {string} */\n\n  let buffer\n  /** @type {number} */\n\n  let index\n  /** @type {Code} */\n\n  let marker\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('htmlFlow')\n    effects.enter('htmlFlowData')\n    effects.consume(code)\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationStart\n    }\n\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      kind = 3 // While we’re in an instruction instead of a declaration, we’re on a `?`\n      // right now, so we do need to search for `>`, similar to declarations.\n\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      buffer = String.fromCharCode(code)\n      startTag = true\n      return tagName\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function declarationStart(code) {\n    if (code === 45) {\n      effects.consume(code)\n      kind = 2\n      return commentOpenInside\n    }\n\n    if (code === 91) {\n      effects.consume(code)\n      kind = 5\n      buffer = 'CDATA['\n      index = 0\n      return cdataOpenInside\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      kind = 4\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function commentOpenInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return self.interrupt ? ok : continuationDeclarationInside\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function cdataOpenInside(code) {\n    if (code === buffer.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === buffer.length\n        ? self.interrupt\n          ? ok\n          : continuation\n        : cdataOpenInside\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      buffer = String.fromCharCode(code)\n      return tagName\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function tagName(code) {\n    if (\n      code === null ||\n      code === 47 ||\n      code === 62 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      if (\n        code !== 47 &&\n        startTag &&\n        htmlRawNames.includes(buffer.toLowerCase())\n      ) {\n        kind = 1\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n\n      if (htmlBlockNames.includes(buffer.toLowerCase())) {\n        kind = 6\n\n        if (code === 47) {\n          effects.consume(code)\n          return basicSelfClosing\n        }\n\n        return self.interrupt ? ok(code) : continuation(code)\n      }\n\n      kind = 7 // Do not support complete HTML when interrupting\n\n      return self.interrupt && !self.parser.lazy[self.now().line]\n        ? nok(code)\n        : startTag\n        ? completeAttributeNameBefore(code)\n        : completeClosingTagAfter(code)\n    }\n\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return tagName\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function basicSelfClosing(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return self.interrupt ? ok : continuation\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function completeClosingTagAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeClosingTagAfter\n    }\n\n    return completeEnd(code)\n  }\n  /** @type {State} */\n\n  function completeAttributeNameBefore(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return completeEnd\n    }\n\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameBefore\n    }\n\n    return completeEnd(code)\n  }\n  /** @type {State} */\n\n  function completeAttributeName(code) {\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return completeAttributeName\n    }\n\n    return completeAttributeNameAfter(code)\n  }\n  /** @type {State} */\n\n  function completeAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeNameAfter\n    }\n\n    return completeAttributeNameBefore(code)\n  }\n  /** @type {State} */\n\n  function completeAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return completeAttributeValueQuoted\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAttributeValueBefore\n    }\n\n    marker = null\n    return completeAttributeValueUnquoted(code)\n  }\n  /** @type {State} */\n\n  function completeAttributeValueQuoted(code) {\n    if (code === null || markdownLineEnding(code)) {\n      return nok(code)\n    }\n\n    if (code === marker) {\n      effects.consume(code)\n      return completeAttributeValueQuotedAfter\n    }\n\n    effects.consume(code)\n    return completeAttributeValueQuoted\n  }\n  /** @type {State} */\n\n  function completeAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96 ||\n      markdownLineEndingOrSpace(code)\n    ) {\n      return completeAttributeNameAfter(code)\n    }\n\n    effects.consume(code)\n    return completeAttributeValueUnquoted\n  }\n  /** @type {State} */\n\n  function completeAttributeValueQuotedAfter(code) {\n    if (code === 47 || code === 62 || markdownSpace(code)) {\n      return completeAttributeNameBefore(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function completeEnd(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return completeAfter\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function completeAfter(code) {\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return completeAfter\n    }\n\n    return code === null || markdownLineEnding(code)\n      ? continuation(code)\n      : nok(code)\n  }\n  /** @type {State} */\n\n  function continuation(code) {\n    if (code === 45 && kind === 2) {\n      effects.consume(code)\n      return continuationCommentInside\n    }\n\n    if (code === 60 && kind === 1) {\n      effects.consume(code)\n      return continuationRawTagOpen\n    }\n\n    if (code === 62 && kind === 4) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    if (code === 63 && kind === 3) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    if (code === 93 && kind === 5) {\n      effects.consume(code)\n      return continuationCharacterDataInside\n    }\n\n    if (markdownLineEnding(code) && (kind === 6 || kind === 7)) {\n      return effects.check(\n        nextBlankConstruct,\n        continuationClose,\n        continuationAtLineEnding\n      )(code)\n    }\n\n    if (code === null || markdownLineEnding(code)) {\n      return continuationAtLineEnding(code)\n    }\n\n    effects.consume(code)\n    return continuation\n  }\n  /** @type {State} */\n\n  function continuationAtLineEnding(code) {\n    effects.exit('htmlFlowData')\n    return htmlContinueStart(code)\n  }\n  /** @type {State} */\n\n  function htmlContinueStart(code) {\n    if (code === null) {\n      return done(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      return effects.attempt(\n        {\n          tokenize: htmlLineEnd,\n          partial: true\n        },\n        htmlContinueStart,\n        done\n      )(code)\n    }\n\n    effects.enter('htmlFlowData')\n    return continuation(code)\n  }\n  /** @type {Tokenizer} */\n\n  function htmlLineEnd(effects, ok, nok) {\n    return start\n    /** @type {State} */\n\n    function start(code) {\n      effects.enter('lineEnding')\n      effects.consume(code)\n      effects.exit('lineEnding')\n      return lineStart\n    }\n    /** @type {State} */\n\n    function lineStart(code) {\n      return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n    }\n  }\n  /** @type {State} */\n\n  function continuationCommentInside(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    return continuation(code)\n  }\n  /** @type {State} */\n\n  function continuationRawTagOpen(code) {\n    if (code === 47) {\n      effects.consume(code)\n      buffer = ''\n      return continuationRawEndTag\n    }\n\n    return continuation(code)\n  }\n  /** @type {State} */\n\n  function continuationRawEndTag(code) {\n    if (code === 62 && htmlRawNames.includes(buffer.toLowerCase())) {\n      effects.consume(code)\n      return continuationClose\n    }\n\n    if (asciiAlpha(code) && buffer.length < 8) {\n      effects.consume(code)\n      buffer += String.fromCharCode(code)\n      return continuationRawEndTag\n    }\n\n    return continuation(code)\n  }\n  /** @type {State} */\n\n  function continuationCharacterDataInside(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    return continuation(code)\n  }\n  /** @type {State} */\n\n  function continuationDeclarationInside(code) {\n    if (code === 62) {\n      effects.consume(code)\n      return continuationClose\n    } // More dashes.\n\n    if (code === 45 && kind === 2) {\n      effects.consume(code)\n      return continuationDeclarationInside\n    }\n\n    return continuation(code)\n  }\n  /** @type {State} */\n\n  function continuationClose(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('htmlFlowData')\n      return done(code)\n    }\n\n    effects.consume(code)\n    return continuationClose\n  }\n  /** @type {State} */\n\n  function done(code) {\n    effects.exit('htmlFlow')\n    return ok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeNextBlank(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.exit('htmlFlowData')\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    return effects.attempt(blankLine, ok, nok)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n  asciiAlpha,\n  asciiAlphanumeric,\n  markdownLineEnding,\n  markdownLineEndingOrSpace,\n  markdownSpace\n} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const htmlText = {\n  name: 'htmlText',\n  tokenize: tokenizeHtmlText\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeHtmlText(effects, ok, nok) {\n  const self = this\n  /** @type {NonNullable<Code>|undefined} */\n\n  let marker\n  /** @type {string} */\n\n  let buffer\n  /** @type {number} */\n\n  let index\n  /** @type {State} */\n\n  let returnState\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('htmlText')\n    effects.enter('htmlTextData')\n    effects.consume(code)\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 33) {\n      effects.consume(code)\n      return declarationOpen\n    }\n\n    if (code === 47) {\n      effects.consume(code)\n      return tagCloseStart\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      return instruction\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function declarationOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentOpen\n    }\n\n    if (code === 91) {\n      effects.consume(code)\n      buffer = 'CDATA['\n      index = 0\n      return cdataOpen\n    }\n\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return declaration\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function commentOpen(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return commentStart\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function commentStart(code) {\n    if (code === null || code === 62) {\n      return nok(code)\n    }\n\n    if (code === 45) {\n      effects.consume(code)\n      return commentStartDash\n    }\n\n    return comment(code)\n  }\n  /** @type {State} */\n\n  function commentStartDash(code) {\n    if (code === null || code === 62) {\n      return nok(code)\n    }\n\n    return comment(code)\n  }\n  /** @type {State} */\n\n  function comment(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 45) {\n      effects.consume(code)\n      return commentClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = comment\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return comment\n  }\n  /** @type {State} */\n\n  function commentClose(code) {\n    if (code === 45) {\n      effects.consume(code)\n      return end\n    }\n\n    return comment(code)\n  }\n  /** @type {State} */\n\n  function cdataOpen(code) {\n    if (code === buffer.charCodeAt(index++)) {\n      effects.consume(code)\n      return index === buffer.length ? cdata : cdataOpen\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function cdata(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 93) {\n      effects.consume(code)\n      return cdataClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = cdata\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return cdata\n  }\n  /** @type {State} */\n\n  function cdataClose(code) {\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n\n    return cdata(code)\n  }\n  /** @type {State} */\n\n  function cdataEnd(code) {\n    if (code === 62) {\n      return end(code)\n    }\n\n    if (code === 93) {\n      effects.consume(code)\n      return cdataEnd\n    }\n\n    return cdata(code)\n  }\n  /** @type {State} */\n\n  function declaration(code) {\n    if (code === null || code === 62) {\n      return end(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = declaration\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return declaration\n  }\n  /** @type {State} */\n\n  function instruction(code) {\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (code === 63) {\n      effects.consume(code)\n      return instructionClose\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = instruction\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return instruction\n  }\n  /** @type {State} */\n\n  function instructionClose(code) {\n    return code === 62 ? end(code) : instruction(code)\n  }\n  /** @type {State} */\n\n  function tagCloseStart(code) {\n    if (asciiAlpha(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function tagClose(code) {\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagClose\n    }\n\n    return tagCloseBetween(code)\n  }\n  /** @type {State} */\n\n  function tagCloseBetween(code) {\n    if (markdownLineEnding(code)) {\n      returnState = tagCloseBetween\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagCloseBetween\n    }\n\n    return end(code)\n  }\n  /** @type {State} */\n\n  function tagOpen(code) {\n    if (code === 45 || asciiAlphanumeric(code)) {\n      effects.consume(code)\n      return tagOpen\n    }\n\n    if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function tagOpenBetween(code) {\n    if (code === 47) {\n      effects.consume(code)\n      return end\n    }\n\n    if (code === 58 || code === 95 || asciiAlpha(code)) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenBetween\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenBetween\n    }\n\n    return end(code)\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeName(code) {\n    if (\n      code === 45 ||\n      code === 46 ||\n      code === 58 ||\n      code === 95 ||\n      asciiAlphanumeric(code)\n    ) {\n      effects.consume(code)\n      return tagOpenAttributeName\n    }\n\n    return tagOpenAttributeNameAfter(code)\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeNameAfter(code) {\n    if (code === 61) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeNameAfter\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeNameAfter\n    }\n\n    return tagOpenBetween(code)\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeValueBefore(code) {\n    if (\n      code === null ||\n      code === 60 ||\n      code === 61 ||\n      code === 62 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 34 || code === 39) {\n      effects.consume(code)\n      marker = code\n      return tagOpenAttributeValueQuoted\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueBefore\n      return atLineEnding(code)\n    }\n\n    if (markdownSpace(code)) {\n      effects.consume(code)\n      return tagOpenAttributeValueBefore\n    }\n\n    effects.consume(code)\n    marker = undefined\n    return tagOpenAttributeValueUnquoted\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeValueQuoted(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return tagOpenAttributeValueQuotedAfter\n    }\n\n    if (code === null) {\n      return nok(code)\n    }\n\n    if (markdownLineEnding(code)) {\n      returnState = tagOpenAttributeValueQuoted\n      return atLineEnding(code)\n    }\n\n    effects.consume(code)\n    return tagOpenAttributeValueQuoted\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeValueQuotedAfter(code) {\n    if (code === 62 || code === 47 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function tagOpenAttributeValueUnquoted(code) {\n    if (\n      code === null ||\n      code === 34 ||\n      code === 39 ||\n      code === 60 ||\n      code === 61 ||\n      code === 96\n    ) {\n      return nok(code)\n    }\n\n    if (code === 62 || markdownLineEndingOrSpace(code)) {\n      return tagOpenBetween(code)\n    }\n\n    effects.consume(code)\n    return tagOpenAttributeValueUnquoted\n  } // We can’t have blank lines in content, so no need to worry about empty\n  // tokens.\n\n  /** @type {State} */\n\n  function atLineEnding(code) {\n    effects.exit('htmlTextData')\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(\n      effects,\n      afterPrefix,\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )\n  }\n  /** @type {State} */\n\n  function afterPrefix(code) {\n    effects.enter('htmlTextData')\n    return returnState(code)\n  }\n  /** @type {State} */\n\n  function end(code) {\n    if (code === 62) {\n      effects.consume(code)\n      effects.exit('htmlTextData')\n      effects.exit('htmlText')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factoryDestination} from 'micromark-factory-destination'\nimport {factoryLabel} from 'micromark-factory-label'\nimport {factoryTitle} from 'micromark-factory-title'\nimport {factoryWhitespace} from 'micromark-factory-whitespace'\nimport {markdownLineEndingOrSpace} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/** @type {Construct} */\nexport const labelEnd = {\n  name: 'labelEnd',\n  tokenize: tokenizeLabelEnd,\n  resolveTo: resolveToLabelEnd,\n  resolveAll: resolveAllLabelEnd\n}\n/** @type {Construct} */\n\nconst resourceConstruct = {\n  tokenize: tokenizeResource\n}\n/** @type {Construct} */\n\nconst fullReferenceConstruct = {\n  tokenize: tokenizeFullReference\n}\n/** @type {Construct} */\n\nconst collapsedReferenceConstruct = {\n  tokenize: tokenizeCollapsedReference\n}\n/** @type {Resolver} */\n\nfunction resolveAllLabelEnd(events) {\n  let index = -1\n  /** @type {Token} */\n\n  let token\n\n  while (++index < events.length) {\n    token = events[index][1]\n\n    if (\n      token.type === 'labelImage' ||\n      token.type === 'labelLink' ||\n      token.type === 'labelEnd'\n    ) {\n      // Remove the marker.\n      events.splice(index + 1, token.type === 'labelImage' ? 4 : 2)\n      token.type = 'data'\n      index++\n    }\n  }\n\n  return events\n}\n/** @type {Resolver} */\n\nfunction resolveToLabelEnd(events, context) {\n  let index = events.length\n  let offset = 0\n  /** @type {Token} */\n\n  let token\n  /** @type {number|undefined} */\n\n  let open\n  /** @type {number|undefined} */\n\n  let close\n  /** @type {Event[]} */\n\n  let media // Find an opening.\n\n  while (index--) {\n    token = events[index][1]\n\n    if (open) {\n      // If we see another link, or inactive link label, we’ve been here before.\n      if (\n        token.type === 'link' ||\n        (token.type === 'labelLink' && token._inactive)\n      ) {\n        break\n      } // Mark other link openings as inactive, as we can’t have links in\n      // links.\n\n      if (events[index][0] === 'enter' && token.type === 'labelLink') {\n        token._inactive = true\n      }\n    } else if (close) {\n      if (\n        events[index][0] === 'enter' &&\n        (token.type === 'labelImage' || token.type === 'labelLink') &&\n        !token._balanced\n      ) {\n        open = index\n\n        if (token.type !== 'labelLink') {\n          offset = 2\n          break\n        }\n      }\n    } else if (token.type === 'labelEnd') {\n      close = index\n    }\n  }\n\n  const group = {\n    type: events[open][1].type === 'labelLink' ? 'link' : 'image',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  }\n  const label = {\n    type: 'label',\n    start: Object.assign({}, events[open][1].start),\n    end: Object.assign({}, events[close][1].end)\n  }\n  const text = {\n    type: 'labelText',\n    start: Object.assign({}, events[open + offset + 2][1].end),\n    end: Object.assign({}, events[close - 2][1].start)\n  }\n  media = [\n    ['enter', group, context],\n    ['enter', label, context]\n  ] // Opening marker.\n\n  media = push(media, events.slice(open + 1, open + offset + 3)) // Text open.\n\n  media = push(media, [['enter', text, context]]) // Between.\n\n  media = push(\n    media,\n    resolveAll(\n      context.parser.constructs.insideSpan.null,\n      events.slice(open + offset + 4, close - 3),\n      context\n    )\n  ) // Text close, marker close, label close.\n\n  media = push(media, [\n    ['exit', text, context],\n    events[close - 2],\n    events[close - 1],\n    ['exit', label, context]\n  ]) // Reference, resource, or so.\n\n  media = push(media, events.slice(close + 1)) // Media close.\n\n  media = push(media, [['exit', group, context]])\n  splice(events, open, events.length, media)\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelEnd(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {Token} */\n\n  let labelStart\n  /** @type {boolean} */\n\n  let defined // Find an opening.\n\n  while (index--) {\n    if (\n      (self.events[index][1].type === 'labelImage' ||\n        self.events[index][1].type === 'labelLink') &&\n      !self.events[index][1]._balanced\n    ) {\n      labelStart = self.events[index][1]\n      break\n    }\n  }\n\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (!labelStart) {\n      return nok(code)\n    } // It’s a balanced bracket, but contains a link.\n\n    if (labelStart._inactive) return balanced(code)\n    defined = self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize({\n          start: labelStart.end,\n          end: self.now()\n        })\n      )\n    )\n    effects.enter('labelEnd')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelEnd')\n    return afterLabelEnd\n  }\n  /** @type {State} */\n\n  function afterLabelEnd(code) {\n    // Resource: `[asd](fgh)`.\n    if (code === 40) {\n      return effects.attempt(\n        resourceConstruct,\n        ok,\n        defined ? ok : balanced\n      )(code)\n    } // Collapsed (`[asd][]`) or full (`[asd][fgh]`) reference?\n\n    if (code === 91) {\n      return effects.attempt(\n        fullReferenceConstruct,\n        ok,\n        defined\n          ? effects.attempt(collapsedReferenceConstruct, ok, balanced)\n          : balanced\n      )(code)\n    } // Shortcut reference: `[asd]`?\n\n    return defined ? ok(code) : balanced(code)\n  }\n  /** @type {State} */\n\n  function balanced(code) {\n    labelStart._balanced = true\n    return nok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeResource(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('resource')\n    effects.enter('resourceMarker')\n    effects.consume(code)\n    effects.exit('resourceMarker')\n    return factoryWhitespace(effects, open)\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 41) {\n      return end(code)\n    }\n\n    return factoryDestination(\n      effects,\n      destinationAfter,\n      nok,\n      'resourceDestination',\n      'resourceDestinationLiteral',\n      'resourceDestinationLiteralMarker',\n      'resourceDestinationRaw',\n      'resourceDestinationString',\n      32\n    )(code)\n  }\n  /** @type {State} */\n\n  function destinationAfter(code) {\n    return markdownLineEndingOrSpace(code)\n      ? factoryWhitespace(effects, between)(code)\n      : end(code)\n  }\n  /** @type {State} */\n\n  function between(code) {\n    if (code === 34 || code === 39 || code === 40) {\n      return factoryTitle(\n        effects,\n        factoryWhitespace(effects, end),\n        nok,\n        'resourceTitle',\n        'resourceTitleMarker',\n        'resourceTitleString'\n      )(code)\n    }\n\n    return end(code)\n  }\n  /** @type {State} */\n\n  function end(code) {\n    if (code === 41) {\n      effects.enter('resourceMarker')\n      effects.consume(code)\n      effects.exit('resourceMarker')\n      effects.exit('resource')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeFullReference(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    return factoryLabel.call(\n      self,\n      effects,\n      afterLabel,\n      nok,\n      'reference',\n      'referenceMarker',\n      'referenceString'\n    )(code)\n  }\n  /** @type {State} */\n\n  function afterLabel(code) {\n    return self.parser.defined.includes(\n      normalizeIdentifier(\n        self.sliceSerialize(self.events[self.events.length - 1][1]).slice(1, -1)\n      )\n    )\n      ? ok(code)\n      : nok(code)\n  }\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeCollapsedReference(effects, ok, nok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('reference')\n    effects.enter('referenceMarker')\n    effects.consume(code)\n    effects.exit('referenceMarker')\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 93) {\n      effects.enter('referenceMarker')\n      effects.consume(code)\n      effects.exit('referenceMarker')\n      effects.exit('reference')\n      return ok\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartImage = {\n  name: 'labelStartImage',\n  tokenize: tokenizeLabelStartImage,\n  resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('labelImage')\n    effects.enter('labelImageMarker')\n    effects.consume(code)\n    effects.exit('labelImageMarker')\n    return open\n  }\n  /** @type {State} */\n\n  function open(code) {\n    if (code === 91) {\n      effects.enter('labelMarker')\n      effects.consume(code)\n      effects.exit('labelMarker')\n      effects.exit('labelImage')\n      return after\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function after(code) {\n    /* To do: remove in the future once we’ve switched from\n     * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n     * which doesn’t need this */\n\n    /* Hidden footnotes hook */\n\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {labelEnd} from './label-end.js'\n/** @type {Construct} */\n\nexport const labelStartLink = {\n  name: 'labelStartLink',\n  tokenize: tokenizeLabelStartLink,\n  resolveAll: labelEnd.resolveAll\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n  const self = this\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('labelLink')\n    effects.enter('labelMarker')\n    effects.consume(code)\n    effects.exit('labelMarker')\n    effects.exit('labelLink')\n    return after\n  }\n  /** @type {State} */\n\n  function after(code) {\n    /* To do: remove in the future once we’ve switched from\n     * `micromark-extension-footnote` to `micromark-extension-gfm-footnote`,\n     * which doesn’t need this */\n\n    /* Hidden footnotes hook. */\n\n    /* c8 ignore next 3 */\n    return code === 94 && '_hiddenFootnoteSupport' in self.parser.constructs\n      ? nok(code)\n      : ok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const lineEnding = {\n  name: 'lineEnding',\n  tokenize: tokenizeLineEnding\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeLineEnding(effects, ok) {\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    return factorySpace(effects, ok, 'linePrefix')\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const thematicBreak = {\n  name: 'thematicBreak',\n  tokenize: tokenizeThematicBreak\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeThematicBreak(effects, ok, nok) {\n  let size = 0\n  /** @type {NonNullable<Code>} */\n\n  let marker\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    effects.enter('thematicBreak')\n    marker = code\n    return atBreak(code)\n  }\n  /** @type {State} */\n\n  function atBreak(code) {\n    if (code === marker) {\n      effects.enter('thematicBreakSequence')\n      return sequence(code)\n    }\n\n    if (markdownSpace(code)) {\n      return factorySpace(effects, atBreak, 'whitespace')(code)\n    }\n\n    if (size < 3 || (code !== null && !markdownLineEnding(code))) {\n      return nok(code)\n    }\n\n    effects.exit('thematicBreak')\n    return ok(code)\n  }\n  /** @type {State} */\n\n  function sequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      size++\n      return sequence\n    }\n\n    effects.exit('thematicBreakSequence')\n    return atBreak(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @typedef {Record<string, unknown> & {marker: Code, type: string, size: number}} ListContainerState\n * @typedef {TokenizeContext & {containerState: ListContainerState}} TokenizeContextWithState\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {asciiDigit, markdownSpace} from 'micromark-util-character'\nimport {blankLine} from './blank-line.js'\nimport {thematicBreak} from './thematic-break.js'\n/** @type {Construct} */\n\nexport const list = {\n  name: 'list',\n  tokenize: tokenizeListStart,\n  continuation: {\n    tokenize: tokenizeListContinuation\n  },\n  exit: tokenizeListEnd\n}\n/** @type {Construct} */\n\nconst listItemPrefixWhitespaceConstruct = {\n  tokenize: tokenizeListItemPrefixWhitespace,\n  partial: true\n}\n/** @type {Construct} */\n\nconst indentConstruct = {\n  tokenize: tokenizeIndent,\n  partial: true\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListStart(effects, ok, nok) {\n  const self = this\n  const tail = self.events[self.events.length - 1]\n  let initialSize =\n    tail && tail[1].type === 'linePrefix'\n      ? tail[2].sliceSerialize(tail[1], true).length\n      : 0\n  let size = 0\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    const kind =\n      self.containerState.type ||\n      (code === 42 || code === 43 || code === 45\n        ? 'listUnordered'\n        : 'listOrdered')\n\n    if (\n      kind === 'listUnordered'\n        ? !self.containerState.marker || code === self.containerState.marker\n        : asciiDigit(code)\n    ) {\n      if (!self.containerState.type) {\n        self.containerState.type = kind\n        effects.enter(kind, {\n          _container: true\n        })\n      }\n\n      if (kind === 'listUnordered') {\n        effects.enter('listItemPrefix')\n        return code === 42 || code === 45\n          ? effects.check(thematicBreak, nok, atMarker)(code)\n          : atMarker(code)\n      }\n\n      if (!self.interrupt || code === 49) {\n        effects.enter('listItemPrefix')\n        effects.enter('listItemValue')\n        return inside(code)\n      }\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function inside(code) {\n    if (asciiDigit(code) && ++size < 10) {\n      effects.consume(code)\n      return inside\n    }\n\n    if (\n      (!self.interrupt || size < 2) &&\n      (self.containerState.marker\n        ? code === self.containerState.marker\n        : code === 41 || code === 46)\n    ) {\n      effects.exit('listItemValue')\n      return atMarker(code)\n    }\n\n    return nok(code)\n  }\n  /**\n   * @type {State}\n   **/\n\n  function atMarker(code) {\n    effects.enter('listItemMarker')\n    effects.consume(code)\n    effects.exit('listItemMarker')\n    self.containerState.marker = self.containerState.marker || code\n    return effects.check(\n      blankLine, // Can’t be empty when interrupting.\n      self.interrupt ? nok : onBlank,\n      effects.attempt(\n        listItemPrefixWhitespaceConstruct,\n        endOfPrefix,\n        otherPrefix\n      )\n    )\n  }\n  /** @type {State} */\n\n  function onBlank(code) {\n    self.containerState.initialBlankLine = true\n    initialSize++\n    return endOfPrefix(code)\n  }\n  /** @type {State} */\n\n  function otherPrefix(code) {\n    if (markdownSpace(code)) {\n      effects.enter('listItemPrefixWhitespace')\n      effects.consume(code)\n      effects.exit('listItemPrefixWhitespace')\n      return endOfPrefix\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function endOfPrefix(code) {\n    self.containerState.size =\n      initialSize +\n      self.sliceSerialize(effects.exit('listItemPrefix'), true).length\n    return ok(code)\n  }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListContinuation(effects, ok, nok) {\n  const self = this\n  self.containerState._closeFlow = undefined\n  return effects.check(blankLine, onBlank, notBlank)\n  /** @type {State} */\n\n  function onBlank(code) {\n    self.containerState.furtherBlankLines =\n      self.containerState.furtherBlankLines ||\n      self.containerState.initialBlankLine // We have a blank line.\n    // Still, try to consume at most the items size.\n\n    return factorySpace(\n      effects,\n      ok,\n      'listItemIndent',\n      self.containerState.size + 1\n    )(code)\n  }\n  /** @type {State} */\n\n  function notBlank(code) {\n    if (self.containerState.furtherBlankLines || !markdownSpace(code)) {\n      self.containerState.furtherBlankLines = undefined\n      self.containerState.initialBlankLine = undefined\n      return notInCurrentItem(code)\n    }\n\n    self.containerState.furtherBlankLines = undefined\n    self.containerState.initialBlankLine = undefined\n    return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n  }\n  /** @type {State} */\n\n  function notInCurrentItem(code) {\n    // While we do continue, we signal that the flow should be closed.\n    self.containerState._closeFlow = true // As we’re closing flow, we’re no longer interrupting.\n\n    self.interrupt = undefined\n    return factorySpace(\n      effects,\n      effects.attempt(list, ok, nok),\n      'linePrefix',\n      self.parser.constructs.disable.null.includes('codeIndented')\n        ? undefined\n        : 4\n    )(code)\n  }\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeIndent(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemIndent',\n    self.containerState.size + 1\n  )\n  /** @type {State} */\n\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return tail &&\n      tail[1].type === 'listItemIndent' &&\n      tail[2].sliceSerialize(tail[1], true).length === self.containerState.size\n      ? ok(code)\n      : nok(code)\n  }\n}\n/**\n * @type {Exiter}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListEnd(effects) {\n  effects.exit(this.containerState.type)\n}\n/**\n * @type {Tokenizer}\n * @this {TokenizeContextWithState}\n */\n\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n  const self = this\n  return factorySpace(\n    effects,\n    afterPrefix,\n    'listItemPrefixWhitespace',\n    self.parser.constructs.disable.null.includes('codeIndented')\n      ? undefined\n      : 4 + 1\n  )\n  /** @type {State} */\n\n  function afterPrefix(code) {\n    const tail = self.events[self.events.length - 1]\n    return !markdownSpace(code) &&\n      tail &&\n      tail[1].type === 'listItemPrefixWhitespace'\n      ? ok(code)\n      : nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {Construct} */\nexport const setextUnderline = {\n  name: 'setextUnderline',\n  tokenize: tokenizeSetextUnderline,\n  resolveTo: resolveToSetextUnderline\n}\n/** @type {Resolver} */\n\nfunction resolveToSetextUnderline(events, context) {\n  let index = events.length\n  /** @type {number|undefined} */\n\n  let content\n  /** @type {number|undefined} */\n\n  let text\n  /** @type {number|undefined} */\n\n  let definition // Find the opening of the content.\n  // It’ll always exist: we don’t tokenize if it isn’t there.\n\n  while (index--) {\n    if (events[index][0] === 'enter') {\n      if (events[index][1].type === 'content') {\n        content = index\n        break\n      }\n\n      if (events[index][1].type === 'paragraph') {\n        text = index\n      }\n    } // Exit\n    else {\n      if (events[index][1].type === 'content') {\n        // Remove the content end (if needed we’ll add it later)\n        events.splice(index, 1)\n      }\n\n      if (!definition && events[index][1].type === 'definition') {\n        definition = index\n      }\n    }\n  }\n\n  const heading = {\n    type: 'setextHeading',\n    start: Object.assign({}, events[text][1].start),\n    end: Object.assign({}, events[events.length - 1][1].end)\n  } // Change the paragraph to setext heading text.\n\n  events[text][1].type = 'setextHeadingText' // If we have definitions in the content, we’ll keep on having content,\n  // but we need move it.\n\n  if (definition) {\n    events.splice(text, 0, ['enter', heading, context])\n    events.splice(definition + 1, 0, ['exit', events[content][1], context])\n    events[content][1].end = Object.assign({}, events[definition][1].end)\n  } else {\n    events[content][1] = heading\n  } // Add the heading exit at the end.\n\n  events.push(['exit', heading, context])\n  return events\n}\n/** @type {Tokenizer} */\n\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n  const self = this\n  let index = self.events.length\n  /** @type {NonNullable<Code>} */\n\n  let marker\n  /** @type {boolean} */\n\n  let paragraph // Find an opening.\n\n  while (index--) {\n    // Skip enter/exit of line ending, line prefix, and content.\n    // We can now either have a definition or a paragraph.\n    if (\n      self.events[index][1].type !== 'lineEnding' &&\n      self.events[index][1].type !== 'linePrefix' &&\n      self.events[index][1].type !== 'content'\n    ) {\n      paragraph = self.events[index][1].type === 'paragraph'\n      break\n    }\n  }\n\n  return start\n  /** @type {State} */\n\n  function start(code) {\n    if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n      effects.enter('setextHeadingLine')\n      effects.enter('setextHeadingLineSequence')\n      marker = code\n      return closingSequence(code)\n    }\n\n    return nok(code)\n  }\n  /** @type {State} */\n\n  function closingSequence(code) {\n    if (code === marker) {\n      effects.consume(code)\n      return closingSequence\n    }\n\n    effects.exit('setextHeadingLineSequence')\n    return factorySpace(effects, closingSequenceEnd, 'lineSuffix')(code)\n  }\n  /** @type {State} */\n\n  function closingSequenceEnd(code) {\n    if (code === null || markdownLineEnding(code)) {\n      effects.exit('setextHeadingLine')\n      return ok(code)\n    }\n\n    return nok(code)\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').State} State\n */\nimport {blankLine, content} from 'micromark-core-commonmark'\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n\n/** @type {InitialConstruct} */\nexport const flow = {\n  tokenize: initializeFlow\n}\n/** @type {Initializer} */\n\nfunction initializeFlow(effects) {\n  const self = this\n  const initial = effects.attempt(\n    // Try to parse a blank line.\n    blankLine,\n    atBlankEnding, // Try to parse initial flow (essentially, only code).\n    effects.attempt(\n      this.parser.constructs.flowInitial,\n      afterConstruct,\n      factorySpace(\n        effects,\n        effects.attempt(\n          this.parser.constructs.flow,\n          afterConstruct,\n          effects.attempt(content, afterConstruct)\n        ),\n        'linePrefix'\n      )\n    )\n  )\n  return initial\n  /** @type {State} */\n\n  function atBlankEnding(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEndingBlank')\n    effects.consume(code)\n    effects.exit('lineEndingBlank')\n    self.currentConstruct = undefined\n    return initial\n  }\n  /** @type {State} */\n\n  function afterConstruct(code) {\n    if (code === null) {\n      effects.consume(code)\n      return\n    }\n\n    effects.enter('lineEnding')\n    effects.consume(code)\n    effects.exit('lineEnding')\n    self.currentConstruct = undefined\n    return initial\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').Initializer} Initializer\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Code} Code\n */\nexport const resolver = {\n  resolveAll: createResolver()\n}\nexport const string = initializeFactory('string')\nexport const text = initializeFactory('text')\n/**\n * @param {'string'|'text'} field\n * @returns {InitialConstruct}\n */\n\nfunction initializeFactory(field) {\n  return {\n    tokenize: initializeText,\n    resolveAll: createResolver(\n      field === 'text' ? resolveAllLineSuffixes : undefined\n    )\n  }\n  /** @type {Initializer} */\n\n  function initializeText(effects) {\n    const self = this\n    const constructs = this.parser.constructs[field]\n    const text = effects.attempt(constructs, start, notText)\n    return start\n    /** @type {State} */\n\n    function start(code) {\n      return atBreak(code) ? text(code) : notText(code)\n    }\n    /** @type {State} */\n\n    function notText(code) {\n      if (code === null) {\n        effects.consume(code)\n        return\n      }\n\n      effects.enter('data')\n      effects.consume(code)\n      return data\n    }\n    /** @type {State} */\n\n    function data(code) {\n      if (atBreak(code)) {\n        effects.exit('data')\n        return text(code)\n      } // Data.\n\n      effects.consume(code)\n      return data\n    }\n    /**\n     * @param {Code} code\n     * @returns {boolean}\n     */\n\n    function atBreak(code) {\n      if (code === null) {\n        return true\n      }\n\n      const list = constructs[code]\n      let index = -1\n\n      if (list) {\n        while (++index < list.length) {\n          const item = list[index]\n\n          if (!item.previous || item.previous.call(self, self.previous)) {\n            return true\n          }\n        }\n      }\n\n      return false\n    }\n  }\n}\n/**\n * @param {Resolver} [extraResolver]\n * @returns {Resolver}\n */\n\nfunction createResolver(extraResolver) {\n  return resolveAllText\n  /** @type {Resolver} */\n\n  function resolveAllText(events, context) {\n    let index = -1\n    /** @type {number|undefined} */\n\n    let enter // A rather boring computation (to merge adjacent `data` events) which\n    // improves mm performance by 29%.\n\n    while (++index <= events.length) {\n      if (enter === undefined) {\n        if (events[index] && events[index][1].type === 'data') {\n          enter = index\n          index++\n        }\n      } else if (!events[index] || events[index][1].type !== 'data') {\n        // Don’t do anything if there is one data token.\n        if (index !== enter + 2) {\n          events[enter][1].end = events[index - 1][1].end\n          events.splice(enter + 2, index - enter - 2)\n          index = enter + 2\n        }\n\n        enter = undefined\n      }\n    }\n\n    return extraResolver ? extraResolver(events, context) : events\n  }\n}\n/**\n * A rather ugly set of instructions which again looks at chunks in the input\n * stream.\n * The reason to do this here is that it is *much* faster to parse in reverse.\n * And that we can’t hook into `null` to split the line suffix before an EOF.\n * To do: figure out if we can make this into a clean utility, or even in core.\n * As it will be useful for GFMs literal autolink extension (and maybe even\n * tables?)\n *\n * @type {Resolver}\n */\n\nfunction resolveAllLineSuffixes(events, context) {\n  let eventIndex = 0 // Skip first.\n\n  while (++eventIndex <= events.length) {\n    if (\n      (eventIndex === events.length ||\n        events[eventIndex][1].type === 'lineEnding') &&\n      events[eventIndex - 1][1].type === 'data'\n    ) {\n      const data = events[eventIndex - 1][1]\n      const chunks = context.sliceStream(data)\n      let index = chunks.length\n      let bufferIndex = -1\n      let size = 0\n      /** @type {boolean|undefined} */\n\n      let tabs\n\n      while (index--) {\n        const chunk = chunks[index]\n\n        if (typeof chunk === 'string') {\n          bufferIndex = chunk.length\n\n          while (chunk.charCodeAt(bufferIndex - 1) === 32) {\n            size++\n            bufferIndex--\n          }\n\n          if (bufferIndex) break\n          bufferIndex = -1\n        } // Number\n        else if (chunk === -2) {\n          tabs = true\n          size++\n        } else if (chunk === -1) {\n          // Empty\n        } else {\n          // Replacement character, exit.\n          index++\n          break\n        }\n      }\n\n      if (size) {\n        const token = {\n          type:\n            eventIndex === events.length || tabs || size < 2\n              ? 'lineSuffix'\n              : 'hardBreakTrailing',\n          start: {\n            line: data.end.line,\n            column: data.end.column - size,\n            offset: data.end.offset - size,\n            _index: data.start._index + index,\n            _bufferIndex: index\n              ? bufferIndex\n              : data.start._bufferIndex + bufferIndex\n          },\n          end: Object.assign({}, data.end)\n        }\n        data.end = Object.assign({}, token.start)\n\n        if (data.start.offset === data.end.offset) {\n          Object.assign(data, token)\n        } else {\n          events.splice(\n            eventIndex,\n            0,\n            ['enter', token, context],\n            ['exit', token, context]\n          )\n          eventIndex += 2\n        }\n      }\n\n      eventIndex++\n    }\n  }\n\n  return events\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Point} Point\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').Effects} Effects\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').ConstructRecord} ConstructRecord\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n */\n\n/**\n * @typedef Info\n * @property {() => void} restore\n * @property {number} from\n *\n * @callback ReturnHandle\n *   Handle a successful run.\n * @param {Construct} construct\n * @param {Info} info\n * @returns {void}\n */\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {push, splice} from 'micromark-util-chunked'\nimport {resolveAll} from 'micromark-util-resolve-all'\n\n/**\n * Create a tokenizer.\n * Tokenizers deal with one type of data (e.g., containers, flow, text).\n * The parser is the object dealing with it all.\n * `initialize` works like other constructs, except that only its `tokenize`\n * function is used, in which case it doesn’t receive an `ok` or `nok`.\n * `from` can be given to set the point before the first character, although\n * when further lines are indented, they must be set with `defineSkip`.\n *\n * @param {ParseContext} parser\n * @param {InitialConstruct} initialize\n * @param {Omit<Point, '_index'|'_bufferIndex'>} [from]\n * @returns {TokenizeContext}\n */\nexport function createTokenizer(parser, initialize, from) {\n  /** @type {Point} */\n  let point = Object.assign(\n    from\n      ? Object.assign({}, from)\n      : {\n          line: 1,\n          column: 1,\n          offset: 0\n        },\n    {\n      _index: 0,\n      _bufferIndex: -1\n    }\n  )\n  /** @type {Record<string, number>} */\n\n  const columnStart = {}\n  /** @type {Array<Construct>} */\n\n  const resolveAllConstructs = []\n  /** @type {Array<Chunk>} */\n\n  let chunks = []\n  /** @type {Array<Token>} */\n\n  let stack = []\n  /** @type {boolean|undefined} */\n\n  let consumed = true\n  /**\n   * Tools used for tokenizing.\n   *\n   * @type {Effects}\n   */\n\n  const effects = {\n    consume,\n    enter,\n    exit,\n    attempt: constructFactory(onsuccessfulconstruct),\n    check: constructFactory(onsuccessfulcheck),\n    interrupt: constructFactory(onsuccessfulcheck, {\n      interrupt: true\n    })\n  }\n  /**\n   * State and tools for resolving and serializing.\n   *\n   * @type {TokenizeContext}\n   */\n\n  const context = {\n    previous: null,\n    code: null,\n    containerState: {},\n    events: [],\n    parser,\n    sliceStream,\n    sliceSerialize,\n    now,\n    defineSkip,\n    write\n  }\n  /**\n   * The state function.\n   *\n   * @type {State|void}\n   */\n\n  let state = initialize.tokenize.call(context, effects)\n  /**\n   * Track which character we expect to be consumed, to catch bugs.\n   *\n   * @type {Code}\n   */\n\n  let expectedCode\n\n  if (initialize.resolveAll) {\n    resolveAllConstructs.push(initialize)\n  }\n\n  return context\n  /** @type {TokenizeContext['write']} */\n\n  function write(slice) {\n    chunks = push(chunks, slice)\n    main() // Exit if we’re not done, resolve might change stuff.\n\n    if (chunks[chunks.length - 1] !== null) {\n      return []\n    }\n\n    addResult(initialize, 0) // Otherwise, resolve, and exit.\n\n    context.events = resolveAll(resolveAllConstructs, context.events, context)\n    return context.events\n  } //\n  // Tools.\n  //\n\n  /** @type {TokenizeContext['sliceSerialize']} */\n\n  function sliceSerialize(token, expandTabs) {\n    return serializeChunks(sliceStream(token), expandTabs)\n  }\n  /** @type {TokenizeContext['sliceStream']} */\n\n  function sliceStream(token) {\n    return sliceChunks(chunks, token)\n  }\n  /** @type {TokenizeContext['now']} */\n\n  function now() {\n    return Object.assign({}, point)\n  }\n  /** @type {TokenizeContext['defineSkip']} */\n\n  function defineSkip(value) {\n    columnStart[value.line] = value.column\n    accountForPotentialSkip()\n  } //\n  // State management.\n  //\n\n  /**\n   * Main loop (note that `_index` and `_bufferIndex` in `point` are modified by\n   * `consume`).\n   * Here is where we walk through the chunks, which either include strings of\n   * several characters, or numerical character codes.\n   * The reason to do this in a loop instead of a call is so the stack can\n   * drain.\n   *\n   * @returns {void}\n   */\n\n  function main() {\n    /** @type {number} */\n    let chunkIndex\n\n    while (point._index < chunks.length) {\n      const chunk = chunks[point._index] // If we’re in a buffer chunk, loop through it.\n\n      if (typeof chunk === 'string') {\n        chunkIndex = point._index\n\n        if (point._bufferIndex < 0) {\n          point._bufferIndex = 0\n        }\n\n        while (\n          point._index === chunkIndex &&\n          point._bufferIndex < chunk.length\n        ) {\n          go(chunk.charCodeAt(point._bufferIndex))\n        }\n      } else {\n        go(chunk)\n      }\n    }\n  }\n  /**\n   * Deal with one code.\n   *\n   * @param {Code} code\n   * @returns {void}\n   */\n\n  function go(code) {\n    consumed = undefined\n    expectedCode = code\n    state = state(code)\n  }\n  /** @type {Effects['consume']} */\n\n  function consume(code) {\n    if (markdownLineEnding(code)) {\n      point.line++\n      point.column = 1\n      point.offset += code === -3 ? 2 : 1\n      accountForPotentialSkip()\n    } else if (code !== -1) {\n      point.column++\n      point.offset++\n    } // Not in a string chunk.\n\n    if (point._bufferIndex < 0) {\n      point._index++\n    } else {\n      point._bufferIndex++ // At end of string chunk.\n      // @ts-expect-error Points w/ non-negative `_bufferIndex` reference\n      // strings.\n\n      if (point._bufferIndex === chunks[point._index].length) {\n        point._bufferIndex = -1\n        point._index++\n      }\n    } // Expose the previous character.\n\n    context.previous = code // Mark as consumed.\n\n    consumed = true\n  }\n  /** @type {Effects['enter']} */\n\n  function enter(type, fields) {\n    /** @type {Token} */\n    // @ts-expect-error Patch instead of assign required fields to help GC.\n    const token = fields || {}\n    token.type = type\n    token.start = now()\n    context.events.push(['enter', token, context])\n    stack.push(token)\n    return token\n  }\n  /** @type {Effects['exit']} */\n\n  function exit(type) {\n    const token = stack.pop()\n    token.end = now()\n    context.events.push(['exit', token, context])\n    return token\n  }\n  /**\n   * Use results.\n   *\n   * @type {ReturnHandle}\n   */\n\n  function onsuccessfulconstruct(construct, info) {\n    addResult(construct, info.from)\n  }\n  /**\n   * Discard results.\n   *\n   * @type {ReturnHandle}\n   */\n\n  function onsuccessfulcheck(_, info) {\n    info.restore()\n  }\n  /**\n   * Factory to attempt/check/interrupt.\n   *\n   * @param {ReturnHandle} onreturn\n   * @param {Record<string, unknown>} [fields]\n   */\n\n  function constructFactory(onreturn, fields) {\n    return hook\n    /**\n     * Handle either an object mapping codes to constructs, a list of\n     * constructs, or a single construct.\n     *\n     * @param {Construct|Array<Construct>|ConstructRecord} constructs\n     * @param {State} returnState\n     * @param {State} [bogusState]\n     * @returns {State}\n     */\n\n    function hook(constructs, returnState, bogusState) {\n      /** @type {Array<Construct>} */\n      let listOfConstructs\n      /** @type {number} */\n\n      let constructIndex\n      /** @type {Construct} */\n\n      let currentConstruct\n      /** @type {Info} */\n\n      let info\n      return Array.isArray(constructs)\n        ? /* c8 ignore next 1 */\n          handleListOfConstructs(constructs)\n        : 'tokenize' in constructs // @ts-expect-error Looks like a construct.\n        ? handleListOfConstructs([constructs])\n        : handleMapOfConstructs(constructs)\n      /**\n       * Handle a list of construct.\n       *\n       * @param {ConstructRecord} map\n       * @returns {State}\n       */\n\n      function handleMapOfConstructs(map) {\n        return start\n        /** @type {State} */\n\n        function start(code) {\n          const def = code !== null && map[code]\n          const all = code !== null && map.null\n          const list = [\n            // To do: add more extension tests.\n\n            /* c8 ignore next 2 */\n            ...(Array.isArray(def) ? def : def ? [def] : []),\n            ...(Array.isArray(all) ? all : all ? [all] : [])\n          ]\n          return handleListOfConstructs(list)(code)\n        }\n      }\n      /**\n       * Handle a list of construct.\n       *\n       * @param {Array<Construct>} list\n       * @returns {State}\n       */\n\n      function handleListOfConstructs(list) {\n        listOfConstructs = list\n        constructIndex = 0\n\n        if (list.length === 0) {\n          return bogusState\n        }\n\n        return handleConstruct(list[constructIndex])\n      }\n      /**\n       * Handle a single construct.\n       *\n       * @param {Construct} construct\n       * @returns {State}\n       */\n\n      function handleConstruct(construct) {\n        return start\n        /** @type {State} */\n\n        function start(code) {\n          // To do: not needed to store if there is no bogus state, probably?\n          // Currently doesn’t work because `inspect` in document does a check\n          // w/o a bogus, which doesn’t make sense. But it does seem to help perf\n          // by not storing.\n          info = store()\n          currentConstruct = construct\n\n          if (!construct.partial) {\n            context.currentConstruct = construct\n          }\n\n          if (\n            construct.name &&\n            context.parser.constructs.disable.null.includes(construct.name)\n          ) {\n            return nok(code)\n          }\n\n          return construct.tokenize.call(\n            // If we do have fields, create an object w/ `context` as its\n            // prototype.\n            // This allows a “live binding”, which is needed for `interrupt`.\n            fields ? Object.assign(Object.create(context), fields) : context,\n            effects,\n            ok,\n            nok\n          )(code)\n        }\n      }\n      /** @type {State} */\n\n      function ok(code) {\n        consumed = true\n        onreturn(currentConstruct, info)\n        return returnState\n      }\n      /** @type {State} */\n\n      function nok(code) {\n        consumed = true\n        info.restore()\n\n        if (++constructIndex < listOfConstructs.length) {\n          return handleConstruct(listOfConstructs[constructIndex])\n        }\n\n        return bogusState\n      }\n    }\n  }\n  /**\n   * @param {Construct} construct\n   * @param {number} from\n   * @returns {void}\n   */\n\n  function addResult(construct, from) {\n    if (construct.resolveAll && !resolveAllConstructs.includes(construct)) {\n      resolveAllConstructs.push(construct)\n    }\n\n    if (construct.resolve) {\n      splice(\n        context.events,\n        from,\n        context.events.length - from,\n        construct.resolve(context.events.slice(from), context)\n      )\n    }\n\n    if (construct.resolveTo) {\n      context.events = construct.resolveTo(context.events, context)\n    }\n  }\n  /**\n   * Store state.\n   *\n   * @returns {Info}\n   */\n\n  function store() {\n    const startPoint = now()\n    const startPrevious = context.previous\n    const startCurrentConstruct = context.currentConstruct\n    const startEventsIndex = context.events.length\n    const startStack = Array.from(stack)\n    return {\n      restore,\n      from: startEventsIndex\n    }\n    /**\n     * Restore state.\n     *\n     * @returns {void}\n     */\n\n    function restore() {\n      point = startPoint\n      context.previous = startPrevious\n      context.currentConstruct = startCurrentConstruct\n      context.events.length = startEventsIndex\n      stack = startStack\n      accountForPotentialSkip()\n    }\n  }\n  /**\n   * Move the current point a bit forward in the line when it’s on a column\n   * skip.\n   *\n   * @returns {void}\n   */\n\n  function accountForPotentialSkip() {\n    if (point.line in columnStart && point.column < 2) {\n      point.column = columnStart[point.line]\n      point.offset += columnStart[point.line] - 1\n    }\n  }\n}\n/**\n * Get the chunks from a slice of chunks in the range of a token.\n *\n * @param {Array<Chunk>} chunks\n * @param {Pick<Token, 'start'|'end'>} token\n * @returns {Array<Chunk>}\n */\n\nfunction sliceChunks(chunks, token) {\n  const startIndex = token.start._index\n  const startBufferIndex = token.start._bufferIndex\n  const endIndex = token.end._index\n  const endBufferIndex = token.end._bufferIndex\n  /** @type {Array<Chunk>} */\n\n  let view\n\n  if (startIndex === endIndex) {\n    // @ts-expect-error `_bufferIndex` is used on string chunks.\n    view = [chunks[startIndex].slice(startBufferIndex, endBufferIndex)]\n  } else {\n    view = chunks.slice(startIndex, endIndex)\n\n    if (startBufferIndex > -1) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view[0] = view[0].slice(startBufferIndex)\n    }\n\n    if (endBufferIndex > 0) {\n      // @ts-expect-error `_bufferIndex` is used on string chunks.\n      view.push(chunks[endIndex].slice(0, endBufferIndex))\n    }\n  }\n\n  return view\n}\n/**\n * Get the string value of a slice of chunks.\n *\n * @param {Array<Chunk>} chunks\n * @param {boolean} [expandTabs=false]\n * @returns {string}\n */\n\nfunction serializeChunks(chunks, expandTabs) {\n  let index = -1\n  /** @type {Array<string>} */\n\n  const result = []\n  /** @type {boolean|undefined} */\n\n  let atTab\n\n  while (++index < chunks.length) {\n    const chunk = chunks[index]\n    /** @type {string} */\n\n    let value\n\n    if (typeof chunk === 'string') {\n      value = chunk\n    } else\n      switch (chunk) {\n        case -5: {\n          value = '\\r'\n          break\n        }\n\n        case -4: {\n          value = '\\n'\n          break\n        }\n\n        case -3: {\n          value = '\\r' + '\\n'\n          break\n        }\n\n        case -2: {\n          value = expandTabs ? ' ' : '\\t'\n          break\n        }\n\n        case -1: {\n          if (!expandTabs && atTab) continue\n          value = ' '\n          break\n        }\n\n        default: {\n          // Currently only replacement character.\n          value = String.fromCharCode(chunk)\n        }\n      }\n\n    atTab = chunk === -2\n    result.push(value)\n  }\n\n  return result.join('')\n}\n","/**\n * @typedef {import('micromark-util-types').Extension} Extension\n */\nimport {\n  attention,\n  autolink,\n  blockQuote,\n  characterEscape,\n  characterReference,\n  codeFenced,\n  codeIndented,\n  codeText,\n  definition,\n  hardBreakEscape,\n  headingAtx,\n  htmlFlow,\n  htmlText,\n  labelEnd,\n  labelStartImage,\n  labelStartLink,\n  lineEnding,\n  list,\n  setextUnderline,\n  thematicBreak\n} from 'micromark-core-commonmark'\nimport {resolver as resolveText} from './initialize/text.js'\n/** @type {Extension['document']} */\n\nexport const document = {\n  [42]: list,\n  [43]: list,\n  [45]: list,\n  [48]: list,\n  [49]: list,\n  [50]: list,\n  [51]: list,\n  [52]: list,\n  [53]: list,\n  [54]: list,\n  [55]: list,\n  [56]: list,\n  [57]: list,\n  [62]: blockQuote\n}\n/** @type {Extension['contentInitial']} */\n\nexport const contentInitial = {\n  [91]: definition\n}\n/** @type {Extension['flowInitial']} */\n\nexport const flowInitial = {\n  [-2]: codeIndented,\n  [-1]: codeIndented,\n  [32]: codeIndented\n}\n/** @type {Extension['flow']} */\n\nexport const flow = {\n  [35]: headingAtx,\n  [42]: thematicBreak,\n  [45]: [setextUnderline, thematicBreak],\n  [60]: htmlFlow,\n  [61]: setextUnderline,\n  [95]: thematicBreak,\n  [96]: codeFenced,\n  [126]: codeFenced\n}\n/** @type {Extension['string']} */\n\nexport const string = {\n  [38]: characterReference,\n  [92]: characterEscape\n}\n/** @type {Extension['text']} */\n\nexport const text = {\n  [-5]: lineEnding,\n  [-4]: lineEnding,\n  [-3]: lineEnding,\n  [33]: labelStartImage,\n  [38]: characterReference,\n  [42]: attention,\n  [60]: [autolink, htmlText],\n  [91]: labelStartLink,\n  [92]: [hardBreakEscape, characterEscape],\n  [93]: labelEnd,\n  [95]: attention,\n  [96]: codeText\n}\n/** @type {Extension['insideSpan']} */\n\nexport const insideSpan = {\n  null: [attention, resolveText]\n}\n/** @type {Extension['attentionMarkers']} */\n\nexport const attentionMarkers = {\n  null: [42, 95]\n}\n/** @type {Extension['disable']} */\n\nexport const disable = {\n  null: []\n}\n","/**\n * @typedef {import('micromark-util-types').InitialConstruct} InitialConstruct\n * @typedef {import('micromark-util-types').FullNormalizedExtension} FullNormalizedExtension\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').ParseContext} ParseContext\n * @typedef {import('micromark-util-types').Create} Create\n */\nimport {combineExtensions} from 'micromark-util-combine-extensions'\nimport {content} from './initialize/content.js'\nimport {document} from './initialize/document.js'\nimport {flow} from './initialize/flow.js'\nimport {text, string} from './initialize/text.js'\nimport {createTokenizer} from './create-tokenizer.js'\nimport * as defaultConstructs from './constructs.js'\n/**\n * @param {ParseOptions} [options]\n * @returns {ParseContext}\n */\n\nexport function parse(options = {}) {\n  /** @type {FullNormalizedExtension} */\n  // @ts-expect-error `defaultConstructs` is full, so the result will be too.\n  const constructs = combineExtensions(\n    // @ts-expect-error Same as above.\n    [defaultConstructs].concat(options.extensions || [])\n  )\n  /** @type {ParseContext} */\n\n  const parser = {\n    defined: [],\n    lazy: {},\n    constructs,\n    content: create(content),\n    document: create(document),\n    flow: create(flow),\n    string: create(string),\n    text: create(text)\n  }\n  return parser\n  /**\n   * @param {InitialConstruct} initial\n   */\n\n  function create(initial) {\n    return creator\n    /** @type {Create} */\n\n    function creator(from) {\n      return createTokenizer(parser, initial, from)\n    }\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Value} Value\n * @typedef {import('micromark-util-types').Chunk} Chunk\n * @typedef {import('micromark-util-types').Code} Code\n */\n\n/**\n * @callback Preprocessor\n * @param {Value} value\n * @param {Encoding} [encoding]\n * @param {boolean} [end=false]\n * @returns {Array<Chunk>}\n */\nconst search = /[\\0\\t\\n\\r]/g\n/**\n * @returns {Preprocessor}\n */\n\nexport function preprocess() {\n  let column = 1\n  let buffer = ''\n  /** @type {boolean|undefined} */\n\n  let start = true\n  /** @type {boolean|undefined} */\n\n  let atCarriageReturn\n  return preprocessor\n  /** @type {Preprocessor} */\n\n  function preprocessor(value, encoding, end) {\n    /** @type {Array<Chunk>} */\n    const chunks = []\n    /** @type {RegExpMatchArray|null} */\n\n    let match\n    /** @type {number} */\n\n    let next\n    /** @type {number} */\n\n    let startPosition\n    /** @type {number} */\n\n    let endPosition\n    /** @type {Code} */\n\n    let code // @ts-expect-error `Buffer` does allow an encoding.\n\n    value = buffer + value.toString(encoding)\n    startPosition = 0\n    buffer = ''\n\n    if (start) {\n      if (value.charCodeAt(0) === 65279) {\n        startPosition++\n      }\n\n      start = undefined\n    }\n\n    while (startPosition < value.length) {\n      search.lastIndex = startPosition\n      match = search.exec(value)\n      endPosition =\n        match && match.index !== undefined ? match.index : value.length\n      code = value.charCodeAt(endPosition)\n\n      if (!match) {\n        buffer = value.slice(startPosition)\n        break\n      }\n\n      if (code === 10 && startPosition === endPosition && atCarriageReturn) {\n        chunks.push(-3)\n        atCarriageReturn = undefined\n      } else {\n        if (atCarriageReturn) {\n          chunks.push(-5)\n          atCarriageReturn = undefined\n        }\n\n        if (startPosition < endPosition) {\n          chunks.push(value.slice(startPosition, endPosition))\n          column += endPosition - startPosition\n        }\n\n        switch (code) {\n          case 0: {\n            chunks.push(65533)\n            column++\n            break\n          }\n\n          case 9: {\n            next = Math.ceil(column / 4) * 4\n            chunks.push(-2)\n\n            while (column++ < next) chunks.push(-1)\n\n            break\n          }\n\n          case 10: {\n            chunks.push(-4)\n            column = 1\n            break\n          }\n\n          default: {\n            atCarriageReturn = true\n            column = 1\n          }\n        }\n      }\n\n      startPosition = endPosition + 1\n    }\n\n    if (end) {\n      if (atCarriageReturn) chunks.push(-5)\n      if (buffer) chunks.push(buffer)\n      chunks.push(null)\n    }\n\n    return chunks\n  }\n}\n","/**\n * @typedef {import('micromark-util-types').Event} Event\n */\nimport {subtokenize} from 'micromark-util-subtokenize'\n/**\n * @param {Array<Event>} events\n * @returns {Array<Event>}\n */\n\nexport function postprocess(events) {\n  while (!subtokenize(events)) {\n    // Empty\n  }\n\n  return events\n}\n","/**\n * Turn the number (in string form as either hexa- or plain decimal) coming from\n * a numeric character reference into a character.\n *\n * @param {string} value\n *   Value to decode.\n * @param {number} base\n *   Numeric base.\n * @returns {string}\n */\nexport function decodeNumericCharacterReference(value, base) {\n  const code = Number.parseInt(value, base)\n\n  if (\n    // C0 except for HT, LF, FF, CR, space\n    code < 9 ||\n    code === 11 ||\n    (code > 13 && code < 32) || // Control character (DEL) of the basic block and C1 controls.\n    (code > 126 && code < 160) || // Lone high surrogates and low surrogates.\n    (code > 55295 && code < 57344) || // Noncharacters.\n    (code > 64975 && code < 65008) ||\n    (code & 65535) === 65535 ||\n    (code & 65535) === 65534 || // Out of range\n    code > 1114111\n  ) {\n    return '\\uFFFD'\n  }\n\n  return String.fromCharCode(code)\n}\n","import {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nconst characterEscapeOrReference =\n  /\\\\([!-/:-@[-`{-~])|&(#(?:\\d{1,7}|x[\\da-f]{1,6})|[\\da-z]{1,31});/gi\n/**\n * Utility to decode markdown strings (which occur in places such as fenced\n * code info strings, destinations, labels, and titles).\n * The “string” content type allows character escapes and -references.\n * This decodes those.\n *\n * @param {string} value\n * @returns {string}\n */\n\nexport function decodeString(value) {\n  return value.replace(characterEscapeOrReference, decode)\n}\n/**\n * @param {string} $0\n * @param {string} $1\n * @param {string} $2\n * @returns {string}\n */\n\nfunction decode($0, $1, $2) {\n  if ($1) {\n    // Escape.\n    return $1\n  } // Reference.\n\n  const head = $2.charCodeAt(0)\n\n  if (head === 35) {\n    const head = $2.charCodeAt(1)\n    const hex = head === 120 || head === 88\n    return decodeNumericCharacterReference($2.slice(hex ? 2 : 1), hex ? 16 : 10)\n  }\n\n  return decodeNamedCharacterReference($2) || $0\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 PositionLike\n * @property {PointLike | null | undefined} [start]\n * @property {PointLike | null | undefined} [end]\n *\n * @typedef PointLike\n * @property {number | null | undefined} [line]\n * @property {number | null | undefined} [column]\n * @property {number | null | undefined} [offset]\n */\n\n/**\n * Serialize the positional info of a point, position (start and end points),\n * or node.\n *\n * @param {Node | NodeLike | Position | PositionLike | Point | PointLike | 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('micromark-util-types').Encoding} Encoding\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').ParseOptions} ParseOptions\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Value} Value\n *\n * @typedef {import('unist').Parent} UnistParent\n * @typedef {import('unist').Point} Point\n *\n * @typedef {import('mdast').PhrasingContent} PhrasingContent\n * @typedef {import('mdast').StaticPhrasingContent} StaticPhrasingContent\n * @typedef {import('mdast').Content} Content\n * @typedef {import('mdast').Break} Break\n * @typedef {import('mdast').Blockquote} Blockquote\n * @typedef {import('mdast').Code} Code\n * @typedef {import('mdast').Definition} Definition\n * @typedef {import('mdast').Emphasis} Emphasis\n * @typedef {import('mdast').Heading} Heading\n * @typedef {import('mdast').HTML} HTML\n * @typedef {import('mdast').Image} Image\n * @typedef {import('mdast').ImageReference} ImageReference\n * @typedef {import('mdast').InlineCode} InlineCode\n * @typedef {import('mdast').Link} Link\n * @typedef {import('mdast').LinkReference} LinkReference\n * @typedef {import('mdast').List} List\n * @typedef {import('mdast').ListItem} ListItem\n * @typedef {import('mdast').Paragraph} Paragraph\n * @typedef {import('mdast').Root} Root\n * @typedef {import('mdast').Strong} Strong\n * @typedef {import('mdast').Text} Text\n * @typedef {import('mdast').ThematicBreak} ThematicBreak\n * @typedef {import('mdast').ReferenceType} ReferenceType\n * @typedef {import('../index.js').CompileData} CompileData\n */\n\n/**\n * @typedef {Root | Content} Node\n * @typedef {Extract<Node, UnistParent>} Parent\n *\n * @typedef {Omit<UnistParent, 'type' | 'children'> & {type: 'fragment', children: Array<PhrasingContent>}} Fragment\n */\n\n/**\n * @callback Transform\n *   Extra transform, to change the AST afterwards.\n * @param {Root} tree\n *   Tree to transform.\n * @returns {Root | undefined | null | void}\n *   New tree or nothing (in which case the current tree is used).\n *\n * @callback Handle\n *   Handle a token.\n * @param {CompileContext} this\n *   Context.\n * @param {Token} token\n *   Current token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {Record<string, Handle>} Handles\n *   Token types mapping to handles\n *\n * @callback OnEnterError\n *   Handle the case where the `right` token is open, but it is closed (by the\n *   `left` token) or because we reached the end of the document.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token | undefined} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @callback OnExitError\n *   Handle the case where the `right` token is open but it is closed by\n *   exiting the `left` token.\n * @param {Omit<CompileContext, 'sliceSerialize'>} this\n *   Context.\n * @param {Token} left\n *   Left token.\n * @param {Token} right\n *   Right token.\n * @returns {void}\n *   Nothing.\n *\n * @typedef {[Token, OnEnterError | undefined]} TokenTuple\n *   Open token on the stack, with an optional error handler for when\n *   that token isn’t closed properly.\n */\n\n/**\n * @typedef Config\n *   Configuration.\n *\n *   We have our defaults, but extensions will add more.\n * @property {Array<string>} canContainEols\n *   Token types where line endings are used.\n * @property {Handles} enter\n *   Opening handles.\n * @property {Handles} exit\n *   Closing handles.\n * @property {Array<Transform>} transforms\n *   Tree transforms.\n *\n * @typedef {Partial<Config>} Extension\n *   Change how markdown tokens from micromark are turned into mdast.\n *\n * @typedef CompileContext\n *   mdast compiler context.\n * @property {Array<Node | Fragment>} stack\n *   Stack of nodes.\n * @property {Array<TokenTuple>} tokenStack\n *   Stack of tokens.\n * @property {<Key extends keyof CompileData>(key: Key) => CompileData[Key]} getData\n *   Get data from the key/value store.\n * @property {<Key extends keyof CompileData>(key: Key, value?: CompileData[Key]) => void} setData\n *   Set data into the key/value store.\n * @property {(this: CompileContext) => void} buffer\n *   Capture some of the output data.\n * @property {(this: CompileContext) => string} resume\n *   Stop capturing and access the output data.\n * @property {<Kind extends Node>(this: CompileContext, node: Kind, token: Token, onError?: OnEnterError) => Kind} enter\n *   Enter a token.\n * @property {(this: CompileContext, token: Token, onError?: OnExitError) => Node} exit\n *   Exit a token.\n * @property {TokenizeContext['sliceSerialize']} sliceSerialize\n *   Get the string value of a token.\n * @property {Config} config\n *   Configuration.\n *\n * @typedef FromMarkdownOptions\n *   Configuration for how to build mdast.\n * @property {Array<Extension | Array<Extension>> | null | undefined} [mdastExtensions]\n *   Extensions for this utility to change how tokens are turned into a tree.\n *\n * @typedef {ParseOptions & FromMarkdownOptions} Options\n *   Configuration.\n */\n\n// To do: micromark: create a registry of tokens?\n// To do: next major: don’t return given `Node` from `enter`.\n// To do: next major: remove setter/getter.\n\nimport {toString} from 'mdast-util-to-string'\nimport {parse} from 'micromark/lib/parse.js'\nimport {preprocess} from 'micromark/lib/preprocess.js'\nimport {postprocess} from 'micromark/lib/postprocess.js'\nimport {decodeNumericCharacterReference} from 'micromark-util-decode-numeric-character-reference'\nimport {decodeString} from 'micromark-util-decode-string'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {stringifyPosition} from 'unist-util-stringify-position'\nconst own = {}.hasOwnProperty\n\n/**\n * @param value\n *   Markdown to parse.\n * @param encoding\n *   Character encoding for when `value` is `Buffer`.\n * @param options\n *   Configuration.\n * @returns\n *   mdast tree.\n */\nexport const fromMarkdown =\n  /**\n   * @type {(\n   *   ((value: Value, encoding: Encoding, options?: Options | null | undefined) => Root) &\n   *   ((value: Value, options?: Options | null | undefined) => Root)\n   * )}\n   */\n\n  /**\n   * @param {Value} value\n   * @param {Encoding | Options | null | undefined} [encoding]\n   * @param {Options | null | undefined} [options]\n   * @returns {Root}\n   */\n  function (value, encoding, options) {\n    if (typeof encoding !== 'string') {\n      options = encoding\n      encoding = undefined\n    }\n    return compiler(options)(\n      postprocess(\n        // @ts-expect-error: micromark types need to accept `null`.\n        parse(options).document().write(preprocess()(value, encoding, true))\n      )\n    )\n  }\n\n/**\n * Note this compiler only understand complete buffering, not streaming.\n *\n * @param {Options | null | undefined} [options]\n */\nfunction compiler(options) {\n  /** @type {Config} */\n  const config = {\n    transforms: [],\n    canContainEols: ['emphasis', 'fragment', 'heading', 'paragraph', 'strong'],\n    enter: {\n      autolink: opener(link),\n      autolinkProtocol: onenterdata,\n      autolinkEmail: onenterdata,\n      atxHeading: opener(heading),\n      blockQuote: opener(blockQuote),\n      characterEscape: onenterdata,\n      characterReference: onenterdata,\n      codeFenced: opener(codeFlow),\n      codeFencedFenceInfo: buffer,\n      codeFencedFenceMeta: buffer,\n      codeIndented: opener(codeFlow, buffer),\n      codeText: opener(codeText, buffer),\n      codeTextData: onenterdata,\n      data: onenterdata,\n      codeFlowValue: onenterdata,\n      definition: opener(definition),\n      definitionDestinationString: buffer,\n      definitionLabelString: buffer,\n      definitionTitleString: buffer,\n      emphasis: opener(emphasis),\n      hardBreakEscape: opener(hardBreak),\n      hardBreakTrailing: opener(hardBreak),\n      htmlFlow: opener(html, buffer),\n      htmlFlowData: onenterdata,\n      htmlText: opener(html, buffer),\n      htmlTextData: onenterdata,\n      image: opener(image),\n      label: buffer,\n      link: opener(link),\n      listItem: opener(listItem),\n      listItemValue: onenterlistitemvalue,\n      listOrdered: opener(list, onenterlistordered),\n      listUnordered: opener(list),\n      paragraph: opener(paragraph),\n      reference: onenterreference,\n      referenceString: buffer,\n      resourceDestinationString: buffer,\n      resourceTitleString: buffer,\n      setextHeading: opener(heading),\n      strong: opener(strong),\n      thematicBreak: opener(thematicBreak)\n    },\n    exit: {\n      atxHeading: closer(),\n      atxHeadingSequence: onexitatxheadingsequence,\n      autolink: closer(),\n      autolinkEmail: onexitautolinkemail,\n      autolinkProtocol: onexitautolinkprotocol,\n      blockQuote: closer(),\n      characterEscapeValue: onexitdata,\n      characterReferenceMarkerHexadecimal: onexitcharacterreferencemarker,\n      characterReferenceMarkerNumeric: onexitcharacterreferencemarker,\n      characterReferenceValue: onexitcharacterreferencevalue,\n      codeFenced: closer(onexitcodefenced),\n      codeFencedFence: onexitcodefencedfence,\n      codeFencedFenceInfo: onexitcodefencedfenceinfo,\n      codeFencedFenceMeta: onexitcodefencedfencemeta,\n      codeFlowValue: onexitdata,\n      codeIndented: closer(onexitcodeindented),\n      codeText: closer(onexitcodetext),\n      codeTextData: onexitdata,\n      data: onexitdata,\n      definition: closer(),\n      definitionDestinationString: onexitdefinitiondestinationstring,\n      definitionLabelString: onexitdefinitionlabelstring,\n      definitionTitleString: onexitdefinitiontitlestring,\n      emphasis: closer(),\n      hardBreakEscape: closer(onexithardbreak),\n      hardBreakTrailing: closer(onexithardbreak),\n      htmlFlow: closer(onexithtmlflow),\n      htmlFlowData: onexitdata,\n      htmlText: closer(onexithtmltext),\n      htmlTextData: onexitdata,\n      image: closer(onexitimage),\n      label: onexitlabel,\n      labelText: onexitlabeltext,\n      lineEnding: onexitlineending,\n      link: closer(onexitlink),\n      listItem: closer(),\n      listOrdered: closer(),\n      listUnordered: closer(),\n      paragraph: closer(),\n      referenceString: onexitreferencestring,\n      resourceDestinationString: onexitresourcedestinationstring,\n      resourceTitleString: onexitresourcetitlestring,\n      resource: onexitresource,\n      setextHeading: closer(onexitsetextheading),\n      setextHeadingLineSequence: onexitsetextheadinglinesequence,\n      setextHeadingText: onexitsetextheadingtext,\n      strong: closer(),\n      thematicBreak: closer()\n    }\n  }\n  configure(config, (options || {}).mdastExtensions || [])\n\n  /** @type {CompileData} */\n  const data = {}\n  return compile\n\n  /**\n   * Turn micromark events into an mdast tree.\n   *\n   * @param {Array<Event>} events\n   *   Events.\n   * @returns {Root}\n   *   mdast tree.\n   */\n  function compile(events) {\n    /** @type {Root} */\n    let tree = {\n      type: 'root',\n      children: []\n    }\n    /** @type {Omit<CompileContext, 'sliceSerialize'>} */\n    const context = {\n      stack: [tree],\n      tokenStack: [],\n      config,\n      enter,\n      exit,\n      buffer,\n      resume,\n      setData,\n      getData\n    }\n    /** @type {Array<number>} */\n    const listStack = []\n    let index = -1\n    while (++index < events.length) {\n      // We preprocess lists to add `listItem` tokens, and to infer whether\n      // items the list itself are spread out.\n      if (\n        events[index][1].type === 'listOrdered' ||\n        events[index][1].type === 'listUnordered'\n      ) {\n        if (events[index][0] === 'enter') {\n          listStack.push(index)\n        } else {\n          const tail = listStack.pop()\n          index = prepareList(events, tail, index)\n        }\n      }\n    }\n    index = -1\n    while (++index < events.length) {\n      const handler = config[events[index][0]]\n      if (own.call(handler, events[index][1].type)) {\n        handler[events[index][1].type].call(\n          Object.assign(\n            {\n              sliceSerialize: events[index][2].sliceSerialize\n            },\n            context\n          ),\n          events[index][1]\n        )\n      }\n    }\n\n    // Handle tokens still being open.\n    if (context.tokenStack.length > 0) {\n      const tail = context.tokenStack[context.tokenStack.length - 1]\n      const handler = tail[1] || defaultOnError\n      handler.call(context, undefined, tail[0])\n    }\n\n    // Figure out `root` position.\n    tree.position = {\n      start: point(\n        events.length > 0\n          ? events[0][1].start\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      ),\n      end: point(\n        events.length > 0\n          ? events[events.length - 2][1].end\n          : {\n              line: 1,\n              column: 1,\n              offset: 0\n            }\n      )\n    }\n\n    // Call transforms.\n    index = -1\n    while (++index < config.transforms.length) {\n      tree = config.transforms[index](tree) || tree\n    }\n    return tree\n  }\n\n  /**\n   * @param {Array<Event>} events\n   * @param {number} start\n   * @param {number} length\n   * @returns {number}\n   */\n  function prepareList(events, start, length) {\n    let index = start - 1\n    let containerBalance = -1\n    let listSpread = false\n    /** @type {Token | undefined} */\n    let listItem\n    /** @type {number | undefined} */\n    let lineIndex\n    /** @type {number | undefined} */\n    let firstBlankLineIndex\n    /** @type {boolean | undefined} */\n    let atMarker\n    while (++index <= length) {\n      const event = events[index]\n      if (\n        event[1].type === 'listUnordered' ||\n        event[1].type === 'listOrdered' ||\n        event[1].type === 'blockQuote'\n      ) {\n        if (event[0] === 'enter') {\n          containerBalance++\n        } else {\n          containerBalance--\n        }\n        atMarker = undefined\n      } else if (event[1].type === 'lineEndingBlank') {\n        if (event[0] === 'enter') {\n          if (\n            listItem &&\n            !atMarker &&\n            !containerBalance &&\n            !firstBlankLineIndex\n          ) {\n            firstBlankLineIndex = index\n          }\n          atMarker = undefined\n        }\n      } else if (\n        event[1].type === 'linePrefix' ||\n        event[1].type === 'listItemValue' ||\n        event[1].type === 'listItemMarker' ||\n        event[1].type === 'listItemPrefix' ||\n        event[1].type === 'listItemPrefixWhitespace'\n      ) {\n        // Empty.\n      } else {\n        atMarker = undefined\n      }\n      if (\n        (!containerBalance &&\n          event[0] === 'enter' &&\n          event[1].type === 'listItemPrefix') ||\n        (containerBalance === -1 &&\n          event[0] === 'exit' &&\n          (event[1].type === 'listUnordered' ||\n            event[1].type === 'listOrdered'))\n      ) {\n        if (listItem) {\n          let tailIndex = index\n          lineIndex = undefined\n          while (tailIndex--) {\n            const tailEvent = events[tailIndex]\n            if (\n              tailEvent[1].type === 'lineEnding' ||\n              tailEvent[1].type === 'lineEndingBlank'\n            ) {\n              if (tailEvent[0] === 'exit') continue\n              if (lineIndex) {\n                events[lineIndex][1].type = 'lineEndingBlank'\n                listSpread = true\n              }\n              tailEvent[1].type = 'lineEnding'\n              lineIndex = tailIndex\n            } else if (\n              tailEvent[1].type === 'linePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefix' ||\n              tailEvent[1].type === 'blockQuotePrefixWhitespace' ||\n              tailEvent[1].type === 'blockQuoteMarker' ||\n              tailEvent[1].type === 'listItemIndent'\n            ) {\n              // Empty\n            } else {\n              break\n            }\n          }\n          if (\n            firstBlankLineIndex &&\n            (!lineIndex || firstBlankLineIndex < lineIndex)\n          ) {\n            // @ts-expect-error Patched.\n            listItem._spread = true\n          }\n\n          // Fix position.\n          listItem.end = Object.assign(\n            {},\n            lineIndex ? events[lineIndex][1].start : event[1].end\n          )\n          events.splice(lineIndex || index, 0, ['exit', listItem, event[2]])\n          index++\n          length++\n        }\n\n        // Create a new list item.\n        if (event[1].type === 'listItemPrefix') {\n          listItem = {\n            type: 'listItem',\n            // @ts-expect-error Patched\n            _spread: false,\n            start: Object.assign({}, event[1].start)\n          }\n          // @ts-expect-error: `listItem` is most definitely defined, TS...\n          events.splice(index, 0, ['enter', listItem, event[2]])\n          index++\n          length++\n          firstBlankLineIndex = undefined\n          atMarker = true\n        }\n      }\n    }\n\n    // @ts-expect-error Patched.\n    events[start][1]._spread = listSpread\n    return length\n  }\n\n  /**\n   * Set data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @param {CompileData[Key]} [value]\n   *   New value.\n   * @returns {void}\n   *   Nothing.\n   */\n  function setData(key, value) {\n    data[key] = value\n  }\n\n  /**\n   * Get data.\n   *\n   * @template {keyof CompileData} Key\n   *   Field type.\n   * @param {Key} key\n   *   Key of field.\n   * @returns {CompileData[Key]}\n   *   Value.\n   */\n  function getData(key) {\n    return data[key]\n  }\n\n  /**\n   * Create an opener handle.\n   *\n   * @param {(token: Token) => Node} create\n   *   Create a node.\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function opener(create, and) {\n    return open\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function open(token) {\n      enter.call(this, create(token), token)\n      if (and) and.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {void}\n   */\n  function buffer() {\n    this.stack.push({\n      type: 'fragment',\n      children: []\n    })\n  }\n\n  /**\n   * @template {Node} Kind\n   *   Node type.\n   * @this {CompileContext}\n   *   Context.\n   * @param {Kind} node\n   *   Node to enter.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnEnterError | undefined} [errorHandler]\n   *   Handle the case where this token is open, but it is closed by something else.\n   * @returns {Kind}\n   *   The given node.\n   */\n  function enter(node, token, errorHandler) {\n    const parent = this.stack[this.stack.length - 1]\n    // @ts-expect-error: Assume `Node` can exist as a child of `parent`.\n    parent.children.push(node)\n    this.stack.push(node)\n    this.tokenStack.push([token, errorHandler])\n    // @ts-expect-error: `end` will be patched later.\n    node.position = {\n      start: point(token.start)\n    }\n    return node\n  }\n\n  /**\n   * Create a closer handle.\n   *\n   * @param {Handle} [and]\n   *   Optional function to also run.\n   * @returns {Handle}\n   *   Handle.\n   */\n  function closer(and) {\n    return close\n\n    /**\n     * @this {CompileContext}\n     * @param {Token} token\n     * @returns {void}\n     */\n    function close(token) {\n      if (and) and.call(this, token)\n      exit.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   *   Context.\n   * @param {Token} token\n   *   Corresponding token.\n   * @param {OnExitError | undefined} [onExitError]\n   *   Handle the case where another token is open.\n   * @returns {Node}\n   *   The closed node.\n   */\n  function exit(token, onExitError) {\n    const node = this.stack.pop()\n    const open = this.tokenStack.pop()\n    if (!open) {\n      throw new Error(\n        'Cannot close `' +\n          token.type +\n          '` (' +\n          stringifyPosition({\n            start: token.start,\n            end: token.end\n          }) +\n          '): it’s not open'\n      )\n    } else if (open[0].type !== token.type) {\n      if (onExitError) {\n        onExitError.call(this, token, open[0])\n      } else {\n        const handler = open[1] || defaultOnError\n        handler.call(this, token, open[0])\n      }\n    }\n    node.position.end = point(token.end)\n    return node\n  }\n\n  /**\n   * @this {CompileContext}\n   * @returns {string}\n   */\n  function resume() {\n    return toString(this.stack.pop())\n  }\n\n  //\n  // Handlers.\n  //\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistordered() {\n    setData('expectingFirstListItemValue', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onenterlistitemvalue(token) {\n    if (getData('expectingFirstListItemValue')) {\n      const ancestor = this.stack[this.stack.length - 2]\n      ancestor.start = Number.parseInt(this.sliceSerialize(token), 10)\n      setData('expectingFirstListItemValue')\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfenceinfo() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.lang = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfencemeta() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.meta = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefencedfence() {\n    // Exit if this is the closing fence.\n    if (getData('flowCodeInside')) return\n    this.buffer()\n    setData('flowCodeInside', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodefenced() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/^(\\r?\\n|\\r)|(\\r?\\n|\\r)$/g, '')\n    setData('flowCodeInside')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcodeindented() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data.replace(/(\\r?\\n|\\r)$/g, '')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitionlabelstring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.label = label\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiontitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitdefinitiondestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitatxheadingsequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    if (!node.depth) {\n      const depth = this.sliceSerialize(token).length\n      node.depth = depth\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadingtext() {\n    setData('setextHeadingSlurpLineEnding', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheadinglinesequence(token) {\n    const node = this.stack[this.stack.length - 1]\n    node.depth = this.sliceSerialize(token).charCodeAt(0) === 61 ? 1 : 2\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitsetextheading() {\n    setData('setextHeadingSlurpLineEnding')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterdata(token) {\n    const node = this.stack[this.stack.length - 1]\n    let tail = node.children[node.children.length - 1]\n    if (!tail || tail.type !== 'text') {\n      // Add a new text node.\n      tail = text()\n      // @ts-expect-error: we’ll add `end` later.\n      tail.position = {\n        start: point(token.start)\n      }\n      // @ts-expect-error: Assume `parent` accepts `text`.\n      node.children.push(tail)\n    }\n    this.stack.push(tail)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitdata(token) {\n    const tail = this.stack.pop()\n    tail.value += this.sliceSerialize(token)\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlineending(token) {\n    const context = this.stack[this.stack.length - 1]\n    // If we’re at a hard break, include the line ending in there.\n    if (getData('atHardBreak')) {\n      const tail = context.children[context.children.length - 1]\n      tail.position.end = point(token.end)\n      setData('atHardBreak')\n      return\n    }\n    if (\n      !getData('setextHeadingSlurpLineEnding') &&\n      config.canContainEols.includes(context.type)\n    ) {\n      onenterdata.call(this, token)\n      onexitdata.call(this, token)\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithardbreak() {\n    setData('atHardBreak', true)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmlflow() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexithtmltext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcodetext() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.value = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlink() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitimage() {\n    const node = this.stack[this.stack.length - 1]\n    // Note: there are also `identifier` and `label` fields on this link node!\n    // These are used / cleaned here.\n\n    // To do: clean.\n    if (getData('inReference')) {\n      /** @type {ReferenceType} */\n      const referenceType = getData('referenceType') || 'shortcut'\n      node.type += 'Reference'\n      // @ts-expect-error: mutate.\n      node.referenceType = referenceType\n      // @ts-expect-error: mutate.\n      delete node.url\n      delete node.title\n    } else {\n      // @ts-expect-error: mutate.\n      delete node.identifier\n      // @ts-expect-error: mutate.\n      delete node.label\n    }\n    setData('referenceType')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabeltext(token) {\n    const string = this.sliceSerialize(token)\n    const ancestor = this.stack[this.stack.length - 2]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    ancestor.label = decodeString(string)\n    // @ts-expect-error: same as above.\n    ancestor.identifier = normalizeIdentifier(string).toLowerCase()\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitlabel() {\n    const fragment = this.stack[this.stack.length - 1]\n    const value = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // Assume a reference.\n    setData('inReference', true)\n    if (node.type === 'link') {\n      /** @type {Array<StaticPhrasingContent>} */\n      // @ts-expect-error: Assume static phrasing content.\n      const children = fragment.children\n      node.children = children\n    } else {\n      node.alt = value\n    }\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcedestinationstring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.url = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresourcetitlestring() {\n    const data = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    node.title = data\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitresource() {\n    setData('inReference')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onenterreference() {\n    setData('referenceType', 'collapsed')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitreferencestring(token) {\n    const label = this.resume()\n    const node = this.stack[this.stack.length - 1]\n    // @ts-expect-error: stash this on the node, as it might become a reference\n    // later.\n    node.label = label\n    // @ts-expect-error: same as above.\n    node.identifier = normalizeIdentifier(\n      this.sliceSerialize(token)\n    ).toLowerCase()\n    setData('referenceType', 'full')\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n\n  function onexitcharacterreferencemarker(token) {\n    setData('characterReferenceType', token.type)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitcharacterreferencevalue(token) {\n    const data = this.sliceSerialize(token)\n    const type = getData('characterReferenceType')\n    /** @type {string} */\n    let value\n    if (type) {\n      value = decodeNumericCharacterReference(\n        data,\n        type === 'characterReferenceMarkerNumeric' ? 10 : 16\n      )\n      setData('characterReferenceType')\n    } else {\n      const result = decodeNamedCharacterReference(data)\n      value = result\n    }\n    const tail = this.stack.pop()\n    tail.value += value\n    tail.position.end = point(token.end)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkprotocol(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = this.sliceSerialize(token)\n  }\n\n  /**\n   * @this {CompileContext}\n   * @type {Handle}\n   */\n  function onexitautolinkemail(token) {\n    onexitdata.call(this, token)\n    const node = this.stack[this.stack.length - 1]\n    node.url = 'mailto:' + this.sliceSerialize(token)\n  }\n\n  //\n  // Creaters.\n  //\n\n  /** @returns {Blockquote} */\n  function blockQuote() {\n    return {\n      type: 'blockquote',\n      children: []\n    }\n  }\n\n  /** @returns {Code} */\n  function codeFlow() {\n    return {\n      type: 'code',\n      lang: null,\n      meta: null,\n      value: ''\n    }\n  }\n\n  /** @returns {InlineCode} */\n  function codeText() {\n    return {\n      type: 'inlineCode',\n      value: ''\n    }\n  }\n\n  /** @returns {Definition} */\n  function definition() {\n    return {\n      type: 'definition',\n      identifier: '',\n      label: null,\n      title: null,\n      url: ''\n    }\n  }\n\n  /** @returns {Emphasis} */\n  function emphasis() {\n    return {\n      type: 'emphasis',\n      children: []\n    }\n  }\n\n  /** @returns {Heading} */\n  function heading() {\n    // @ts-expect-error `depth` will be set later.\n    return {\n      type: 'heading',\n      depth: undefined,\n      children: []\n    }\n  }\n\n  /** @returns {Break} */\n  function hardBreak() {\n    return {\n      type: 'break'\n    }\n  }\n\n  /** @returns {HTML} */\n  function html() {\n    return {\n      type: 'html',\n      value: ''\n    }\n  }\n\n  /** @returns {Image} */\n  function image() {\n    return {\n      type: 'image',\n      title: null,\n      url: '',\n      alt: null\n    }\n  }\n\n  /** @returns {Link} */\n  function link() {\n    return {\n      type: 'link',\n      title: null,\n      url: '',\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {List}\n   */\n  function list(token) {\n    return {\n      type: 'list',\n      ordered: token.type === 'listOrdered',\n      start: null,\n      // @ts-expect-error Patched.\n      spread: token._spread,\n      children: []\n    }\n  }\n\n  /**\n   * @param {Token} token\n   * @returns {ListItem}\n   */\n  function listItem(token) {\n    return {\n      type: 'listItem',\n      // @ts-expect-error Patched.\n      spread: token._spread,\n      checked: null,\n      children: []\n    }\n  }\n\n  /** @returns {Paragraph} */\n  function paragraph() {\n    return {\n      type: 'paragraph',\n      children: []\n    }\n  }\n\n  /** @returns {Strong} */\n  function strong() {\n    return {\n      type: 'strong',\n      children: []\n    }\n  }\n\n  /** @returns {Text} */\n  function text() {\n    return {\n      type: 'text',\n      value: ''\n    }\n  }\n\n  /** @returns {ThematicBreak} */\n  function thematicBreak() {\n    return {\n      type: 'thematicBreak'\n    }\n  }\n}\n\n/**\n * Copy a point-like value.\n *\n * @param {Point} d\n *   Point-like value.\n * @returns {Point}\n *   unist point.\n */\nfunction point(d) {\n  return {\n    line: d.line,\n    column: d.column,\n    offset: d.offset\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Array<Extension | Array<Extension>>} extensions\n * @returns {void}\n */\nfunction configure(combined, extensions) {\n  let index = -1\n  while (++index < extensions.length) {\n    const value = extensions[index]\n    if (Array.isArray(value)) {\n      configure(combined, value)\n    } else {\n      extension(combined, value)\n    }\n  }\n}\n\n/**\n * @param {Config} combined\n * @param {Extension} extension\n * @returns {void}\n */\nfunction extension(combined, extension) {\n  /** @type {keyof Extension} */\n  let key\n  for (key in extension) {\n    if (own.call(extension, key)) {\n      if (key === 'canContainEols') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'transforms') {\n        const right = extension[key]\n        if (right) {\n          combined[key].push(...right)\n        }\n      } else if (key === 'enter' || key === 'exit') {\n        const right = extension[key]\n        if (right) {\n          Object.assign(combined[key], right)\n        }\n      }\n    }\n  }\n}\n\n/** @type {OnEnterError} */\nfunction defaultOnError(left, right) {\n  if (left) {\n    throw new Error(\n      'Cannot close `' +\n        left.type +\n        '` (' +\n        stringifyPosition({\n          start: left.start,\n          end: left.end\n        }) +\n        '): a different token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is open'\n    )\n  } else {\n    throw new Error(\n      'Cannot close document, a token (`' +\n        right.type +\n        '`, ' +\n        stringifyPosition({\n          start: right.start,\n          end: right.end\n        }) +\n        ') is still open'\n    )\n  }\n}\n","import { l as log, M as decodeEntities } from \"./mermaid-b5860b54.js\";\nimport { fromMarkdown } from \"mdast-util-from-markdown\";\nimport { dedent } from \"ts-dedent\";\nfunction preprocessMarkdown(markdown) {\n  const withoutMultipleNewlines = markdown.replace(/\\n{2,}/g, \"\\n\");\n  const withoutExtraSpaces = dedent(withoutMultipleNewlines);\n  return withoutExtraSpaces;\n}\nfunction markdownToLines(markdown) {\n  const preprocessedMarkdown = preprocessMarkdown(markdown);\n  const { children } = fromMarkdown(preprocessedMarkdown);\n  const lines = [[]];\n  let currentLine = 0;\n  function processNode(node, parentType = \"normal\") {\n    if (node.type === \"text\") {\n      const textLines = node.value.split(\"\\n\");\n      textLines.forEach((textLine, index) => {\n        if (index !== 0) {\n          currentLine++;\n          lines.push([]);\n        }\n        textLine.split(\" \").forEach((word) => {\n          if (word) {\n            lines[currentLine].push({ content: word, type: parentType });\n          }\n        });\n      });\n    } else if (node.type === \"strong\" || node.type === \"emphasis\") {\n      node.children.forEach((contentNode) => {\n        processNode(contentNode, node.type);\n      });\n    }\n  }\n  children.forEach((treeNode) => {\n    if (treeNode.type === \"paragraph\") {\n      treeNode.children.forEach((contentNode) => {\n        processNode(contentNode);\n      });\n    }\n  });\n  return lines;\n}\nfunction markdownToHTML(markdown) {\n  const { children } = fromMarkdown(markdown);\n  function output(node) {\n    if (node.type === \"text\") {\n      return node.value.replace(/\\n/g, \"<br/>\");\n    } else if (node.type === \"strong\") {\n      return `<strong>${node.children.map(output).join(\"\")}</strong>`;\n    } else if (node.type === \"emphasis\") {\n      return `<em>${node.children.map(output).join(\"\")}</em>`;\n    } else if (node.type === \"paragraph\") {\n      return `<p>${node.children.map(output).join(\"\")}</p>`;\n    }\n    return `Unsupported markdown: ${node.type}`;\n  }\n  return children.map(output).join(\"\");\n}\nfunction splitTextToChars(text) {\n  if (Intl.Segmenter) {\n    return [...new Intl.Segmenter().segment(text)].map((s) => s.segment);\n  }\n  return [...text];\n}\nfunction splitWordToFitWidth(checkFit, word) {\n  const characters = splitTextToChars(word.content);\n  return splitWordToFitWidthRecursion(checkFit, [], characters, word.type);\n}\nfunction splitWordToFitWidthRecursion(checkFit, usedChars, remainingChars, type) {\n  if (remainingChars.length === 0) {\n    return [\n      { content: usedChars.join(\"\"), type },\n      { content: \"\", type }\n    ];\n  }\n  const [nextChar, ...rest] = remainingChars;\n  const newWord = [...usedChars, nextChar];\n  if (checkFit([{ content: newWord.join(\"\"), type }])) {\n    return splitWordToFitWidthRecursion(checkFit, newWord, rest, type);\n  }\n  if (usedChars.length === 0 && nextChar) {\n    usedChars.push(nextChar);\n    remainingChars.shift();\n  }\n  return [\n    { content: usedChars.join(\"\"), type },\n    { content: remainingChars.join(\"\"), type }\n  ];\n}\nfunction splitLineToFitWidth(line, checkFit) {\n  if (line.some(({ content }) => content.includes(\"\\n\"))) {\n    throw new Error(\"splitLineToFitWidth does not support newlines in the line\");\n  }\n  return splitLineToFitWidthRecursion(line, checkFit);\n}\nfunction splitLineToFitWidthRecursion(words, checkFit, lines = [], newLine = []) {\n  if (words.length === 0) {\n    if (newLine.length > 0) {\n      lines.push(newLine);\n    }\n    return lines.length > 0 ? lines : [];\n  }\n  let joiner = \"\";\n  if (words[0].content === \" \") {\n    joiner = \" \";\n    words.shift();\n  }\n  const nextWord = words.shift() ?? { content: \" \", type: \"normal\" };\n  const lineWithNextWord = [...newLine];\n  if (joiner !== \"\") {\n    lineWithNextWord.push({ content: joiner, type: \"normal\" });\n  }\n  lineWithNextWord.push(nextWord);\n  if (checkFit(lineWithNextWord)) {\n    return splitLineToFitWidthRecursion(words, checkFit, lines, lineWithNextWord);\n  }\n  if (newLine.length > 0) {\n    lines.push(newLine);\n    words.unshift(nextWord);\n  } else if (nextWord.content) {\n    const [line, rest] = splitWordToFitWidth(checkFit, nextWord);\n    lines.push([line]);\n    if (rest.content) {\n      words.unshift(rest);\n    }\n  }\n  return splitLineToFitWidthRecursion(words, checkFit, lines);\n}\nfunction applyStyle(dom, styleFn) {\n  if (styleFn) {\n    dom.attr(\"style\", styleFn);\n  }\n}\nfunction addHtmlSpan(element, node, width, classes, addBackground = false) {\n  const fo = element.append(\"foreignObject\");\n  const div = fo.append(\"xhtml:div\");\n  const label = node.label;\n  const labelClass = node.isNode ? \"nodeLabel\" : \"edgeLabel\";\n  div.html(\n    `\n    <span class=\"${labelClass} ${classes}\" ` + (node.labelStyle ? 'style=\"' + node.labelStyle + '\"' : \"\") + \">\" + label + \"</span>\"\n  );\n  applyStyle(div, node.labelStyle);\n  div.style(\"display\", \"table-cell\");\n  div.style(\"white-space\", \"nowrap\");\n  div.style(\"max-width\", width + \"px\");\n  div.attr(\"xmlns\", \"http://www.w3.org/1999/xhtml\");\n  if (addBackground) {\n    div.attr(\"class\", \"labelBkg\");\n  }\n  let bbox = div.node().getBoundingClientRect();\n  if (bbox.width === width) {\n    div.style(\"display\", \"table\");\n    div.style(\"white-space\", \"break-spaces\");\n    div.style(\"width\", width + \"px\");\n    bbox = div.node().getBoundingClientRect();\n  }\n  fo.style(\"width\", bbox.width);\n  fo.style(\"height\", bbox.height);\n  return fo.node();\n}\nfunction createTspan(textElement, lineIndex, lineHeight) {\n  return textElement.append(\"tspan\").attr(\"class\", \"text-outer-tspan\").attr(\"x\", 0).attr(\"y\", lineIndex * lineHeight - 0.1 + \"em\").attr(\"dy\", lineHeight + \"em\");\n}\nfunction computeWidthOfText(parentNode, lineHeight, line) {\n  const testElement = parentNode.append(\"text\");\n  const testSpan = createTspan(testElement, 1, lineHeight);\n  updateTextContentAndStyles(testSpan, line);\n  const textLength = testSpan.node().getComputedTextLength();\n  testElement.remove();\n  return textLength;\n}\nfunction computeDimensionOfText(parentNode, lineHeight, text) {\n  var _a;\n  const testElement = parentNode.append(\"text\");\n  const testSpan = createTspan(testElement, 1, lineHeight);\n  updateTextContentAndStyles(testSpan, [{ content: text, type: \"normal\" }]);\n  const textDimension = (_a = testSpan.node()) == null ? void 0 : _a.getBoundingClientRect();\n  if (textDimension) {\n    testElement.remove();\n  }\n  return textDimension;\n}\nfunction createFormattedText(width, g, structuredText, addBackground = false) {\n  const lineHeight = 1.1;\n  const labelGroup = g.append(\"g\");\n  const bkg = labelGroup.insert(\"rect\").attr(\"class\", \"background\");\n  const textElement = labelGroup.append(\"text\").attr(\"y\", \"-10.1\");\n  let lineIndex = 0;\n  for (const line of structuredText) {\n    const checkWidth = (line2) => computeWidthOfText(labelGroup, lineHeight, line2) <= width;\n    const linesUnderWidth = checkWidth(line) ? [line] : splitLineToFitWidth(line, checkWidth);\n    for (const preparedLine of linesUnderWidth) {\n      const tspan = createTspan(textElement, lineIndex, lineHeight);\n      updateTextContentAndStyles(tspan, preparedLine);\n      lineIndex++;\n    }\n  }\n  if (addBackground) {\n    const bbox = textElement.node().getBBox();\n    const padding = 2;\n    bkg.attr(\"x\", -padding).attr(\"y\", -padding).attr(\"width\", bbox.width + 2 * padding).attr(\"height\", bbox.height + 2 * padding);\n    return labelGroup.node();\n  } else {\n    return textElement.node();\n  }\n}\nfunction updateTextContentAndStyles(tspan, wrappedLine) {\n  tspan.text(\"\");\n  wrappedLine.forEach((word, index) => {\n    const innerTspan = tspan.append(\"tspan\").attr(\"font-style\", word.type === \"emphasis\" ? \"italic\" : \"normal\").attr(\"class\", \"text-inner-tspan\").attr(\"font-weight\", word.type === \"strong\" ? \"bold\" : \"normal\");\n    if (index === 0) {\n      innerTspan.text(word.content);\n    } else {\n      innerTspan.text(\" \" + word.content);\n    }\n  });\n}\nconst createText = (el, text = \"\", {\n  style = \"\",\n  isTitle = false,\n  classes = \"\",\n  useHtmlLabels = true,\n  isNode = true,\n  width = 200,\n  addSvgBackground = false\n} = {}) => {\n  log.info(\"createText\", text, style, isTitle, classes, useHtmlLabels, isNode, addSvgBackground);\n  if (useHtmlLabels) {\n    const htmlText = markdownToHTML(text);\n    const node = {\n      isNode,\n      label: decodeEntities(htmlText).replace(\n        /fa[blrs]?:fa-[\\w-]+/g,\n        // cspell: disable-line\n        (s) => `<i class='${s.replace(\":\", \" \")}'></i>`\n      ),\n      labelStyle: style.replace(\"fill:\", \"color:\")\n    };\n    const vertexNode = addHtmlSpan(el, node, width, classes, addSvgBackground);\n    return vertexNode;\n  } else {\n    const structuredText = markdownToLines(text);\n    const svgLabel = createFormattedText(width, el, structuredText, addSvgBackground);\n    return svgLabel;\n  }\n};\nexport {\n  createText as a,\n  computeDimensionOfText as c\n};\n"],"names":["element","decodeNamedCharacterReference","value","characterReference","char","toString","options","includeImageAlt","one","node","all","values","result","index","splice","list","start","remove","items","end","chunkStart","parameters","push","hasOwnProperty","combineExtensions","extensions","syntaxExtension","extension","hook","left","right","code","constructs","existing","before","unicodePunctuationRegex","asciiAlpha","regexCheck","asciiDigit","asciiHexDigit","asciiAlphanumeric","asciiPunctuation","asciiAtext","asciiControl","markdownLineEndingOrSpace","markdownLineEnding","markdownSpace","unicodeWhitespace","unicodePunctuation","regex","check","factorySpace","effects","ok","type","max","limit","size","prefix","content","initializeContent","contentStart","afterContentStartConstruct","paragraphInitial","previous","lineStart","token","data","document","initializeDocument","containerConstruct","tokenizeContainer","self","stack","continued","childFlow","childToken","lineStartOffset","item","documentContinue","checkNewContainers","closeFlow","indexBeforeExits","indexBeforeFlow","point","exitContainers","documentContinued","flowStart","thereIsANewContainer","thereIsNoNewContainer","containerContinue","flowContinue","writeToChild","eof","stream","seen","entry","nok","classifyCharacter","resolveAll","events","context","called","resolve","attention","tokenizeAttention","resolveAllAttention","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","movePoint","attentionMarkers","marker","sequence","after","close","autolink","tokenizeAutolink","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","blankLine","tokenizeBlankLine","afterWhitespace","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","exit","state","characterEscape","tokenizeCharacterEscape","tokenizeCharacterReference","test","numeric","codeFenced","tokenizeCodeFenced","closingFenceConstruct","tokenizeClosingFence","nonLazyLine","tokenizeNonLazyLine","tail","initialPrefix","sizeOpen","sequenceOpen","infoOpen","openAfter","info","infoAfter","meta","contentContinue","closingSequenceStart","closingSequenceEnd","codeIndented","tokenizeCodeIndented","indentedContent","tokenizeIndentedContent","afterStartPrefix","afterPrefix","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","enter","gap","subtokenize","jumps","event","lineIndex","otherIndex","otherEvent","subevents","more","subcontent","eventIndex","startPosition","startPositions","tokenizer","childEvents","gaps","current","adjust","breaks","slice","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","contentEnd","startLookahead","prefixed","factoryDestination","literalType","literalMarkerType","rawType","stringType","balance","destinationEnclosedBefore","destinationRaw","destinationEnclosed","destinationEnclosedEscape","destinationRawEscape","factoryLabel","markerType","atBreak","label","labelEscape","factoryTitle","atFirstTitleBreak","atTitleBreak","title","titleEscape","factoryWhitespace","normalizeIdentifier","definition","tokenizeDefinition","titleConstruct","tokenizeTitle","identifier","labelAfter","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","fenceOpenInside","headingBreak","htmlBlockNames","htmlRawNames","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","nextBlankConstruct","tokenizeNextBlank","kind","startTag","buffer","declarationStart","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","basicSelfClosing","completeAttributeNameBefore","completeClosingTagAfter","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCharacterDataInside","continuationAtLineEnding","htmlContinueStart","done","htmlLineEnd","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","declarationOpen","instruction","tagOpen","commentOpen","cdataOpen","declaration","commentStart","commentStartDash","comment","commentClose","atLineEnding","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","fullReferenceConstruct","tokenizeFullReference","collapsedReferenceConstruct","tokenizeCollapsedReference","media","labelStart","defined","balanced","afterLabelEnd","destinationAfter","between","afterLabel","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","thematicBreak","tokenizeThematicBreak","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","atMarker","inside","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","flow","initializeFlow","initial","atBlankEnding","afterConstruct","resolver","createResolver","string","initializeFactory","field","initializeText","resolveAllLineSuffixes","notText","extraResolver","resolveAllText","chunks","bufferIndex","tabs","chunk","createTokenizer","parser","initialize","from","columnStart","resolveAllConstructs","consume","constructFactory","onsuccessfulconstruct","onsuccessfulcheck","sliceStream","sliceSerialize","now","defineSkip","write","main","addResult","expandTabs","serializeChunks","sliceChunks","accountForPotentialSkip","chunkIndex","go","fields","construct","_","onreturn","bogusState","listOfConstructs","constructIndex","currentConstruct","handleListOfConstructs","handleMapOfConstructs","map","def","handleConstruct","store","startPoint","startPrevious","startCurrentConstruct","startEventsIndex","startStack","restore","startIndex","startBufferIndex","endIndex","endBufferIndex","view","atTab","contentInitial","flowInitial","insideSpan","resolveText","disable","parse","defaultConstructs","create","creator","search","preprocess","column","atCarriageReturn","preprocessor","encoding","match","next","endPosition","postprocess","decodeNumericCharacterReference","base","characterEscapeOrReference","decodeString","decode","$0","$1","$2","head","hex","stringifyPosition","position","pos","own","fromMarkdown","compiler","config","opener","link","onenterdata","codeFlow","emphasis","hardBreak","html","image","listItem","onenterlistitemvalue","onenterlistordered","onenterreference","strong","closer","onexitatxheadingsequence","onexitautolinkemail","onexitautolinkprotocol","onexitdata","onexitcharacterreferencemarker","onexitcharacterreferencevalue","onexitcodefenced","onexitcodefencedfence","onexitcodefencedfenceinfo","onexitcodefencedfencemeta","onexitcodeindented","onexitcodetext","onexitdefinitiondestinationstring","onexitdefinitionlabelstring","onexitdefinitiontitlestring","onexithardbreak","onexithtmlflow","onexithtmltext","onexitimage","onexitlabel","onexitlabeltext","onexitlineending","onexitlink","onexitreferencestring","onexitresourcedestinationstring","onexitresourcetitlestring","onexitresource","onexitsetextheading","onexitsetextheadinglinesequence","onexitsetextheadingtext","configure","compile","tree","resume","setData","getData","listStack","prepareList","handler","defaultOnError","length","containerBalance","listSpread","firstBlankLineIndex","tailIndex","tailEvent","key","and","errorHandler","onExitError","ancestor","depth","referenceType","fragment","children","d","combined","preprocessMarkdown","markdown","withoutMultipleNewlines","dedent","markdownToLines","preprocessedMarkdown","lines","currentLine","processNode","parentType","textLine","word","contentNode","treeNode","markdownToHTML","output","splitTextToChars","s","splitWordToFitWidth","checkFit","characters","splitWordToFitWidthRecursion","usedChars","remainingChars","nextChar","rest","newWord","splitLineToFitWidth","line","splitLineToFitWidthRecursion","words","newLine","joiner","nextWord","lineWithNextWord","applyStyle","dom","styleFn","addHtmlSpan","width","classes","addBackground","fo","div","labelClass","bbox","createTspan","textElement","lineHeight","computeWidthOfText","parentNode","testElement","testSpan","updateTextContentAndStyles","textLength","computeDimensionOfText","_a","textDimension","createFormattedText","g","structuredText","labelGroup","bkg","checkWidth","line2","linesUnderWidth","preparedLine","tspan","padding","wrappedLine","innerTspan","createText","el","style","isTitle","useHtmlLabels","isNode","addSvgBackground","log","decodeEntities"],"mappings":"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","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]}

Zerion Mini Shell 1.0