{"version":3,"file":"static/module-micromark-core-commonmark.4ba1fec4.js","mappings":"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","sources":["webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/attention.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/autolink.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/blank-line.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/block-quote.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/character-escape.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/character-reference.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/code-fenced.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/code-indented.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/code-text.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/content.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/definition.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/hard-break-escape.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/heading-atx.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/html-flow.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/html-text.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/label-end.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/label-start-image.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/label-start-link.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/line-ending.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/list.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/setext-underline.js","webpack://@spotify-confidence/app/../../node_modules/micromark-core-commonmark/lib/thematic-break.js"],"sourcesContent":["/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\n * @typedef {import('micromark-util-types').Point} Point\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').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {push, splice} from 'micromark-util-chunked'\nimport {classifyCharacter} from 'micromark-util-classify-character'\nimport {resolveAll} from 'micromark-util-resolve-all'\n/** @type {Construct} */\nexport const attention = {\n name: 'attention',\n tokenize: tokenizeAttention,\n resolveAll: resolveAllAttention\n}\n\n/**\n * Take all events and resolve attention to emphasis or strong.\n *\n * @type {Resolver}\n */\nfunction resolveAllAttention(events, context) {\n let index = -1\n /** @type {number} */\n let open\n /** @type {Token} */\n let group\n /** @type {Token} */\n let text\n /** @type {Token} */\n let openingSequence\n /** @type {Token} */\n let closingSequence\n /** @type {number} */\n let use\n /** @type {Array} */\n let nextEvents\n /** @type {number} */\n let offset\n\n // 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 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\n\n // Now walk back to find an opener.\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 &&\n // 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 }\n\n // Number of markers to use from the sequence.\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 = []\n\n // If there are more markers in the opening, add them before.\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 }\n\n // Opening.\n nextEvents = push(nextEvents, [\n ['enter', group, context],\n ['enter', openingSequence, context],\n ['exit', openingSequence, context],\n ['enter', text, context]\n ])\n\n // Always populated by defaults.\n\n // Between.\n nextEvents = push(\n nextEvents,\n resolveAll(\n context.parser.constructs.insideSpan.null,\n events.slice(open + 1, index),\n context\n )\n )\n\n // Closing.\n nextEvents = push(nextEvents, [\n ['exit', text, context],\n ['enter', closingSequence, context],\n ['exit', closingSequence, context],\n ['exit', group, context]\n ])\n\n // If there are more markers in the closing, add them after.\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 splice(events, open - 1, index - open + 3, nextEvents)\n index = open + nextEvents.length - offset - 2\n break\n }\n }\n }\n }\n\n // Remove remaining sequences.\n index = -1\n while (++index < events.length) {\n if (events[index][1].type === 'attentionSequence') {\n events[index][1].type = 'data'\n }\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\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\n /** @type {NonNullable} */\n let marker\n return start\n\n /**\n * Before a sequence.\n *\n * ```markdown\n * > | **\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n marker = code\n effects.enter('attentionSequence')\n return inside(code)\n }\n\n /**\n * In a sequence.\n *\n * ```markdown\n * > | **\n * ^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n const token = effects.exit('attentionSequence')\n\n // To do: next major: move this to resolver, just like `markdown-rs`.\n const after = classifyCharacter(code)\n\n // Always populated by defaults.\n\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/**\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 */\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').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n asciiAtext,\n asciiControl\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const autolink = {\n name: 'autolink',\n tokenize: tokenizeAutolink\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeAutolink(effects, ok, nok) {\n let size = 0\n return start\n\n /**\n * Start of an autolink.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\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\n /**\n * After `<`, at protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n return schemeOrEmailAtext\n }\n return emailAtext(code)\n }\n\n /**\n * At second byte of protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeOrEmailAtext(code) {\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) {\n // Count the previous alphabetical from `open` too.\n size = 1\n return schemeInsideOrEmailAtext(code)\n }\n return emailAtext(code)\n }\n\n /**\n * In ambiguous protocol or atext.\n *\n * ```markdown\n * > | ab\n * ^\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function schemeInsideOrEmailAtext(code) {\n if (code === 58) {\n effects.consume(code)\n size = 0\n return urlInside\n }\n\n // ASCII alphanumeric and `+`, `-`, and `.`.\n if (\n (code === 43 || code === 45 || code === 46 || asciiAlphanumeric(code)) &&\n size++ < 32\n ) {\n effects.consume(code)\n return schemeInsideOrEmailAtext\n }\n size = 0\n return emailAtext(code)\n }\n\n /**\n * After protocol, in URL.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function urlInside(code) {\n if (code === 62) {\n effects.exit('autolinkProtocol')\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n\n // ASCII control, space, or `<`.\n if (code === null || code === 32 || code === 60 || asciiControl(code)) {\n return nok(code)\n }\n effects.consume(code)\n return urlInside\n }\n\n /**\n * In email atext.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailAtext(code) {\n if (code === 64) {\n effects.consume(code)\n return emailAtSignOrDot\n }\n if (asciiAtext(code)) {\n effects.consume(code)\n return emailAtext\n }\n return nok(code)\n }\n\n /**\n * In label, after at-sign or dot.\n *\n * ```markdown\n * > | ab\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function emailAtSignOrDot(code) {\n return asciiAlphanumeric(code) ? emailLabel(code) : nok(code)\n }\n\n /**\n * In label, where `.` and `>` are allowed.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\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 if (code === 62) {\n // Exit, then change the token type.\n effects.exit('autolinkProtocol').type = 'autolinkEmail'\n effects.enter('autolinkMarker')\n effects.consume(code)\n effects.exit('autolinkMarker')\n effects.exit('autolink')\n return ok\n }\n return emailValue(code)\n }\n\n /**\n * In label, where `.` and `>` are *not* allowed.\n *\n * Though, this is also used in `emailLabel` to parse other values.\n *\n * ```markdown\n * > | ab\n * ^\n * ```\n *\n * @type {State}\n */\n function emailValue(code) {\n // ASCII alphanumeric or `-`.\n if ((code === 45 || asciiAlphanumeric(code)) && size++ < 63) {\n const next = code === 45 ? emailValue : emailLabel\n effects.consume(code)\n return next\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blankLine = {\n tokenize: tokenizeBlankLine,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLine(effects, ok, nok) {\n return start\n\n /**\n * Start of blank line.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n return markdownSpace(code)\n ? factorySpace(effects, after, 'linePrefix')(code)\n : after(code)\n }\n\n /**\n * At eof/eol, after optional whitespace.\n *\n * > 👉 **Note**: `␠` represents a space character.\n *\n * ```markdown\n * > | ␠␠␊\n * ^\n * > | ␊\n * ^\n * ```\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').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const blockQuote = {\n name: 'blockQuote',\n tokenize: tokenizeBlockQuoteStart,\n continuation: {\n tokenize: tokenizeBlockQuoteContinuation\n },\n exit\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteStart(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of block quote.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n if (code === 62) {\n const state = self.containerState\n if (!state.open) {\n effects.enter('blockQuote', {\n _container: true\n })\n state.open = true\n }\n effects.enter('blockQuotePrefix')\n effects.enter('blockQuoteMarker')\n effects.consume(code)\n effects.exit('blockQuoteMarker')\n return after\n }\n return nok(code)\n }\n\n /**\n * After `>`, before optional whitespace.\n *\n * ```markdown\n * > | > a\n * ^\n * ```\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 effects.exit('blockQuotePrefix')\n return ok(code)\n }\n}\n\n/**\n * Start of block quote continuation.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlockQuoteContinuation(effects, ok, nok) {\n const self = this\n return contStart\n\n /**\n * Start of block quote continuation.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contStart(code) {\n if (markdownSpace(code)) {\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n contBefore,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n }\n return contBefore(code)\n }\n\n /**\n * At `>`, after optional whitespace.\n *\n * Also used to parse the first block quote opening.\n *\n * ```markdown\n * | > a\n * > | > b\n * ^\n * ```\n *\n * @type {State}\n */\n function contBefore(code) {\n return effects.attempt(blockQuote, ok, nok)(code)\n }\n}\n\n/** @type {Exiter} */\nfunction exit(effects) {\n effects.exit('blockQuote')\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {asciiPunctuation} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterEscape = {\n name: 'characterEscape',\n tokenize: tokenizeCharacterEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of character escape.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\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 inside\n }\n\n /**\n * After `\\`, at punctuation.\n *\n * ```markdown\n * > | a\\*b\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n // ASCII punctuation.\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 return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {decodeNamedCharacterReference} from 'decode-named-character-reference'\nimport {\n asciiAlphanumeric,\n asciiDigit,\n asciiHexDigit\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const characterReference = {\n name: 'characterReference',\n tokenize: tokenizeCharacterReference\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCharacterReference(effects, ok, nok) {\n const self = this\n let size = 0\n /** @type {number} */\n let max\n /** @type {(code: Code) => boolean} */\n let test\n return start\n\n /**\n * Start of character reference.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\n *\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\n /**\n * After `&`, at `#` for numeric references or alphanumeric for named\n * references.\n *\n * ```markdown\n * > | a&b\n * ^\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\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 effects.enter('characterReferenceValue')\n max = 31\n test = asciiAlphanumeric\n return value(code)\n }\n\n /**\n * After `#`, at `x` for hexadecimals or digit for decimals.\n *\n * ```markdown\n * > | a{b\n * ^\n * > | a b\n * ^\n * ```\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 effects.enter('characterReferenceValue')\n max = 7\n test = asciiDigit\n return value(code)\n }\n\n /**\n * After markers (`&#x`, `&#`, or `&`), in value, before `;`.\n *\n * The character reference kind defines what and how many characters are\n * allowed.\n *\n * ```markdown\n * > | a&b\n * ^^^\n * > | a{b\n * ^^^\n * > | a b\n * ^\n * ```\n *\n * @type {State}\n */\n function value(code) {\n if (code === 59 && size) {\n const token = effects.exit('characterReferenceValue')\n if (\n test === asciiAlphanumeric &&\n !decodeNamedCharacterReference(self.sliceSerialize(token))\n ) {\n return nok(code)\n }\n\n // To do: `markdown-rs` uses a different name:\n // `CharacterReferenceMarkerSemi`.\n effects.enter('characterReferenceMarker')\n effects.consume(code)\n effects.exit('characterReferenceMarker')\n effects.exit('characterReference')\n return ok\n }\n if (test(code) && size++ < max) {\n effects.consume(code)\n return value\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nconst nonLazyContinuation = {\n tokenize: tokenizeNonLazyContinuation,\n partial: true\n}\n\n/** @type {Construct} */\nexport const codeFenced = {\n name: 'codeFenced',\n tokenize: tokenizeCodeFenced,\n concrete: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeFenced(effects, ok, nok) {\n const self = this\n /** @type {Construct} */\n const closeStart = {\n tokenize: tokenizeCloseStart,\n partial: true\n }\n let initialPrefix = 0\n let sizeOpen = 0\n /** @type {NonNullable} */\n let marker\n return start\n\n /**\n * Start of code.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse whitespace like `markdown-rs`.\n return beforeSequenceOpen(code)\n }\n\n /**\n * In opening fence, after prefix, at sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeSequenceOpen(code) {\n const tail = self.events[self.events.length - 1]\n initialPrefix =\n tail && tail[1].type === 'linePrefix'\n ? tail[2].sliceSerialize(tail[1], true).length\n : 0\n marker = code\n effects.enter('codeFenced')\n effects.enter('codeFencedFence')\n effects.enter('codeFencedFenceSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening fence sequence.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === marker) {\n sizeOpen++\n effects.consume(code)\n return sequenceOpen\n }\n if (sizeOpen < 3) {\n return nok(code)\n }\n effects.exit('codeFencedFenceSequence')\n return markdownSpace(code)\n ? factorySpace(effects, infoBefore, 'whitespace')(code)\n : infoBefore(code)\n }\n\n /**\n * In opening fence, after the sequence (and optional whitespace), before info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function infoBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return self.interrupt\n ? ok(code)\n : effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n effects.enter('codeFencedFenceInfo')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return info(code)\n }\n\n /**\n * In info.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function info(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return infoBefore(code)\n }\n if (markdownSpace(code)) {\n effects.exit('chunkString')\n effects.exit('codeFencedFenceInfo')\n return factorySpace(effects, metaBefore, 'whitespace')(code)\n }\n if (code === 96 && code === marker) {\n return nok(code)\n }\n effects.consume(code)\n return info\n }\n\n /**\n * In opening fence, after info and whitespace, before meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function metaBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return infoBefore(code)\n }\n effects.enter('codeFencedFenceMeta')\n effects.enter('chunkString', {\n contentType: 'string'\n })\n return meta(code)\n }\n\n /**\n * In meta.\n *\n * ```markdown\n * > | ~~~js eval\n * ^\n * | alert(1)\n * | ~~~\n * ```\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 infoBefore(code)\n }\n if (code === 96 && code === marker) {\n return nok(code)\n }\n effects.consume(code)\n return meta\n }\n\n /**\n * At eol/eof in code, before a non-lazy closing fence or content.\n *\n * ```markdown\n * > | ~~~js\n * ^\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function atNonLazyBreak(code) {\n return effects.attempt(closeStart, after, contentBefore)(code)\n }\n\n /**\n * Before code content, not a closing fence, at eol.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentBefore(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return contentStart\n }\n\n /**\n * Before code content, not a closing fence.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentStart(code) {\n return initialPrefix > 0 && markdownSpace(code)\n ? factorySpace(\n effects,\n beforeContentChunk,\n 'linePrefix',\n initialPrefix + 1\n )(code)\n : beforeContentChunk(code)\n }\n\n /**\n * Before code content, after optional prefix.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function beforeContentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n return effects.check(nonLazyContinuation, atNonLazyBreak, after)(code)\n }\n effects.enter('codeFlowValue')\n return contentChunk(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * | ~~~js\n * > | alert(1)\n * ^^^^^^^^\n * | ~~~\n * ```\n *\n * @type {State}\n */\n function contentChunk(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return beforeContentChunk(code)\n }\n effects.consume(code)\n return contentChunk\n }\n\n /**\n * After code.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n effects.exit('codeFenced')\n return ok(code)\n }\n\n /**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\n function tokenizeCloseStart(effects, ok, nok) {\n let size = 0\n return startBefore\n\n /**\n *\n *\n * @type {State}\n */\n function startBefore(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return start\n }\n\n /**\n * Before closing fence, at optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Always populated by defaults.\n\n // To do: `enter` here or in next state?\n effects.enter('codeFencedFence')\n return markdownSpace(code)\n ? factorySpace(\n effects,\n beforeSequenceClose,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n : beforeSequenceClose(code)\n }\n\n /**\n * In closing fence, after optional whitespace, at sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeSequenceClose(code) {\n if (code === marker) {\n effects.enter('codeFencedFenceSequence')\n return sequenceClose(code)\n }\n return nok(code)\n }\n\n /**\n * In closing fence sequence.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n if (code === marker) {\n size++\n effects.consume(code)\n return sequenceClose\n }\n if (size >= sizeOpen) {\n effects.exit('codeFencedFenceSequence')\n return markdownSpace(code)\n ? factorySpace(effects, sequenceCloseAfter, 'whitespace')(code)\n : sequenceCloseAfter(code)\n }\n return nok(code)\n }\n\n /**\n * After closing fence sequence, after optional whitespace.\n *\n * ```markdown\n * | ~~~js\n * | alert(1)\n * > | ~~~\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceCloseAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFencedFence')\n return ok(code)\n }\n return nok(code)\n }\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuation(effects, ok, nok) {\n const self = this\n return start\n\n /**\n *\n *\n * @type {State}\n */\n function start(code) {\n if (code === null) {\n return nok(code)\n }\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineStart\n }\n\n /**\n *\n *\n * @type {State}\n */\n function lineStart(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeIndented = {\n name: 'codeIndented',\n tokenize: tokenizeCodeIndented\n}\n\n/** @type {Construct} */\nconst furtherStart = {\n tokenize: tokenizeFurtherStart,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeIndented(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of code (indented).\n *\n * > **Parsing note**: it is not needed to check if this first line is a\n * > filled line (that it has a non-whitespace character), because blank lines\n * > are parsed already, so we never run into that.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: manually check if interrupting like `markdown-rs`.\n\n effects.enter('codeIndented')\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\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 ? atBreak(code)\n : nok(code)\n }\n\n /**\n * At a break.\n *\n * ```markdown\n * > | aaa\n * ^ ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === null) {\n return after(code)\n }\n if (markdownLineEnding(code)) {\n return effects.attempt(furtherStart, atBreak, after)(code)\n }\n effects.enter('codeFlowValue')\n return inside(code)\n }\n\n /**\n * In code content.\n *\n * ```markdown\n * > | aaa\n * ^^^^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('codeFlowValue')\n return atBreak(code)\n }\n effects.consume(code)\n return inside\n }\n\n /** @type {State} */\n function after(code) {\n effects.exit('codeIndented')\n // To do: allow interrupting like `markdown-rs`.\n // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeFurtherStart(effects, ok, nok) {\n const self = this\n return furtherStart\n\n /**\n * At eol, trying to parse another indent.\n *\n * ```markdown\n * > | aaa\n * ^\n * | bbb\n * ```\n *\n * @type {State}\n */\n function furtherStart(code) {\n // To do: improve `lazy` / `pierce` handling.\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 if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return furtherStart\n }\n\n // To do: the code here in `micromark-js` is a bit different from\n // `markdown-rs` because there it can attempt spaces.\n // We can’t yet.\n //\n // To do: use an improved `space_or_tab` function like `markdown-rs`,\n // so that we can drop the next state.\n return factorySpace(effects, afterPrefix, 'linePrefix', 4 + 1)(code)\n }\n\n /**\n * At start, after 1 or 4 spaces.\n *\n * ```markdown\n * > | aaa\n * ^\n * ```\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 ? furtherStart(code)\n : nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Previous} Previous\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').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const codeText = {\n name: 'codeText',\n tokenize: tokenizeCodeText,\n resolve: resolveCodeText,\n previous\n}\n\n// To do: next major: don’t resolve, like `markdown-rs`.\n/** @type {Resolver} */\nfunction resolveCodeText(events) {\n let tailExitIndex = events.length - 4\n let headEnterIndex = 3\n /** @type {number} */\n let index\n /** @type {number | undefined} */\n let enter\n\n // If we start and end with an EOL or a space.\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\n\n // And we have data.\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 }\n\n // Merge adjacent spaces and data.\n index = headEnterIndex - 1\n tailExitIndex++\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 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 enter = undefined\n }\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\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\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeCodeText(effects, ok, nok) {\n const self = this\n let sizeOpen = 0\n /** @type {number} */\n let size\n /** @type {Token} */\n let token\n return start\n\n /**\n * Start of code (text).\n *\n * ```markdown\n * > | `a`\n * ^\n * > | \\`a`\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('codeText')\n effects.enter('codeTextSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 96) {\n effects.consume(code)\n sizeOpen++\n return sequenceOpen\n }\n effects.exit('codeTextSequence')\n return between(code)\n }\n\n /**\n * Between something and something else.\n *\n * ```markdown\n * > | `a`\n * ^^\n * ```\n *\n * @type {State}\n */\n function between(code) {\n // EOF.\n if (code === null) {\n return nok(code)\n }\n\n // To do: next major: don’t do spaces in resolve, but when compiling,\n // like `markdown-rs`.\n // Tabs don’t work, and virtual spaces don’t make sense.\n if (code === 32) {\n effects.enter('space')\n effects.consume(code)\n effects.exit('space')\n return between\n }\n\n // Closing fence? Could also be data.\n if (code === 96) {\n token = effects.enter('codeTextSequence')\n size = 0\n return sequenceClose(code)\n }\n if (markdownLineEnding(code)) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return between\n }\n\n // Data.\n effects.enter('codeTextData')\n return data(code)\n }\n\n /**\n * In data.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\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 between(code)\n }\n effects.consume(code)\n return data\n }\n\n /**\n * In closing sequence.\n *\n * ```markdown\n * > | `a`\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceClose(code) {\n // More.\n if (code === 96) {\n effects.consume(code)\n size++\n return sequenceClose\n }\n\n // Done!\n if (size === sizeOpen) {\n effects.exit('codeTextSequence')\n effects.exit('codeText')\n return ok(code)\n }\n\n // More or less accents: mark as data.\n token.type = 'codeTextData'\n return data(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').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\nimport {subtokenize} from 'micromark-util-subtokenize'\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\n/** @type {Construct} */\nconst continuationConstruct = {\n tokenize: tokenizeContinuation,\n partial: true\n}\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 */\nfunction resolveContent(events) {\n subtokenize(events)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContent(effects, ok) {\n /** @type {Token | undefined} */\n let previous\n return chunkStart\n\n /**\n * Before a content chunk.\n *\n * ```markdown\n * > | abc\n * ^\n * ```\n *\n * @type {State}\n */\n function chunkStart(code) {\n effects.enter('content')\n previous = effects.enter('chunkContent', {\n contentType: 'content'\n })\n return chunkInside(code)\n }\n\n /**\n * In a content chunk.\n *\n * ```markdown\n * > | abc\n * ^^^\n * ```\n *\n * @type {State}\n */\n function chunkInside(code) {\n if (code === null) {\n return contentEnd(code)\n }\n\n // To do: in `markdown-rs`, each line is parsed on its own, and everything\n // is stitched together resolving.\n if (markdownLineEnding(code)) {\n return effects.check(\n continuationConstruct,\n contentContinue,\n contentEnd\n )(code)\n }\n\n // Data.\n effects.consume(code)\n return chunkInside\n }\n\n /**\n *\n *\n * @type {State}\n */\n function contentEnd(code) {\n effects.exit('chunkContent')\n effects.exit('content')\n return ok(code)\n }\n\n /**\n *\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 chunkInside\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeContinuation(effects, ok, nok) {\n const self = this\n return startLookahead\n\n /**\n *\n *\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\n /**\n *\n *\n * @type {State}\n */\n function prefixed(code) {\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n\n // Always populated by defaults.\n\n const tail = self.events[self.events.length - 1]\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 return effects.interrupt(self.parser.constructs.flow, nok, ok)(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\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 {\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\nimport {normalizeIdentifier} from 'micromark-util-normalize-identifier'\n/** @type {Construct} */\nexport const definition = {\n name: 'definition',\n tokenize: tokenizeDefinition\n}\n\n/** @type {Construct} */\nconst titleBefore = {\n tokenize: tokenizeTitleBefore,\n partial: true\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeDefinition(effects, ok, nok) {\n const self = this\n /** @type {string} */\n let identifier\n return start\n\n /**\n * At start of a definition.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // Do not interrupt paragraphs (but do follow definitions).\n // To do: do `interrupt` the way `markdown-rs` does.\n // To do: parse whitespace the way `markdown-rs` does.\n effects.enter('definition')\n return before(code)\n }\n\n /**\n * After optional whitespace, at `[`.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n // To do: parse whitespace the way `markdown-rs` does.\n\n return factoryLabel.call(\n self,\n effects,\n labelAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n 'definitionLabel',\n 'definitionLabelMarker',\n 'definitionLabelString'\n )(code)\n }\n\n /**\n * After label.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\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 if (code === 58) {\n effects.enter('definitionMarker')\n effects.consume(code)\n effects.exit('definitionMarker')\n return markerAfter\n }\n return nok(code)\n }\n\n /**\n * After marker.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function markerAfter(code) {\n // Note: whitespace is optional.\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, destinationBefore)(code)\n : destinationBefore(code)\n }\n\n /**\n * Before destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationBefore(code) {\n return factoryDestination(\n effects,\n destinationAfter,\n // Note: we don’t need to reset the way `markdown-rs` does.\n nok,\n 'definitionDestination',\n 'definitionDestinationLiteral',\n 'definitionDestinationLiteralMarker',\n 'definitionDestinationRaw',\n 'definitionDestinationString'\n )(code)\n }\n\n /**\n * After destination.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function destinationAfter(code) {\n return effects.attempt(titleBefore, after, after)(code)\n }\n\n /**\n * After definition.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return markdownSpace(code)\n ? factorySpace(effects, afterWhitespace, 'whitespace')(code)\n : afterWhitespace(code)\n }\n\n /**\n * After definition, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function afterWhitespace(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('definition')\n\n // Note: we don’t care about uniqueness.\n // It’s likely that that doesn’t happen very frequently.\n // It is more likely that it wastes precious time.\n self.parser.defined.push(identifier)\n\n // To do: `markdown-rs` interrupt.\n // // You’d be interrupting.\n // tokenizer.interrupt = true\n return ok(code)\n }\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeTitleBefore(effects, ok, nok) {\n return titleBefore\n\n /**\n * After destination, at whitespace.\n *\n * ```markdown\n * > | [a]: b\n * ^\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleBefore(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, beforeMarker)(code)\n : nok(code)\n }\n\n /**\n * At title.\n *\n * ```markdown\n * | [a]: b\n * > | \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function beforeMarker(code) {\n return factoryTitle(\n effects,\n titleAfter,\n nok,\n 'definitionTitle',\n 'definitionTitleMarker',\n 'definitionTitleString'\n )(code)\n }\n\n /**\n * After title.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfter(code) {\n return markdownSpace(code)\n ? factorySpace(effects, titleAfterOptionalWhitespace, 'whitespace')(code)\n : titleAfterOptionalWhitespace(code)\n }\n\n /**\n * After title, after optional whitespace.\n *\n * ```markdown\n * > | [a]: b \"c\"\n * ^\n * ```\n *\n * @type {State}\n */\n function titleAfterOptionalWhitespace(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').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const hardBreakEscape = {\n name: 'hardBreakEscape',\n tokenize: tokenizeHardBreakEscape\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHardBreakEscape(effects, ok, nok) {\n return start\n\n /**\n * Start of a hard break (escape).\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('hardBreakEscape')\n effects.consume(code)\n return after\n }\n\n /**\n * After `\\`, at eol.\n *\n * ```markdown\n * > | a\\\n * ^\n * | b\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (markdownLineEnding(code)) {\n effects.exit('hardBreakEscape')\n return ok(code)\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').State} State\n * @typedef {import('micromark-util-types').Token} Token\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\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/** @type {Construct} */\nexport const headingAtx = {\n name: 'headingAtx',\n tokenize: tokenizeHeadingAtx,\n resolve: resolveHeadingAtx\n}\n\n/** @type {Resolver} */\nfunction resolveHeadingAtx(events, context) {\n let contentEnd = events.length - 2\n let contentStart = 3\n /** @type {Token} */\n let content\n /** @type {Token} */\n let text\n\n // Prefix whitespace, part of the opening.\n if (events[contentStart][1].type === 'whitespace') {\n contentStart += 2\n }\n\n // Suffix whitespace, part of the closing.\n if (\n contentEnd - 2 > contentStart &&\n events[contentEnd][1].type === 'whitespace'\n ) {\n contentEnd -= 2\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 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 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 return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHeadingAtx(effects, ok, nok) {\n let size = 0\n return start\n\n /**\n * Start of a heading (atx).\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n effects.enter('atxHeading')\n return before(code)\n }\n\n /**\n * After optional whitespace, at `#`.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('atxHeadingSequence')\n return sequenceOpen(code)\n }\n\n /**\n * In opening sequence.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceOpen(code) {\n if (code === 35 && size++ < 6) {\n effects.consume(code)\n return sequenceOpen\n }\n\n // Always at least one `#`.\n if (code === null || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingSequence')\n return atBreak(code)\n }\n return nok(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === 35) {\n effects.enter('atxHeadingSequence')\n return sequenceFurther(code)\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('atxHeading')\n // To do: interrupt like `markdown-rs`.\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n return ok(code)\n }\n if (markdownSpace(code)) {\n return factorySpace(effects, atBreak, 'whitespace')(code)\n }\n\n // To do: generate `data` tokens, add the `text` token later.\n // Needs edit map, see: `markdown.rs`.\n effects.enter('atxHeadingText')\n return data(code)\n }\n\n /**\n * In further sequence (after whitespace).\n *\n * Could be normal “visible” hashes in the heading or a final sequence.\n *\n * ```markdown\n * > | ## aa ##\n * ^\n * ```\n *\n * @type {State}\n */\n function sequenceFurther(code) {\n if (code === 35) {\n effects.consume(code)\n return sequenceFurther\n }\n effects.exit('atxHeadingSequence')\n return atBreak(code)\n }\n\n /**\n * In text.\n *\n * ```markdown\n * > | ## aa\n * ^\n * ```\n *\n * @type {State}\n */\n function data(code) {\n if (code === null || code === 35 || markdownLineEndingOrSpace(code)) {\n effects.exit('atxHeadingText')\n return atBreak(code)\n }\n effects.consume(code)\n return data\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\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\n/** @type {Construct} */\nexport const htmlFlow = {\n name: 'htmlFlow',\n tokenize: tokenizeHtmlFlow,\n resolveTo: resolveToHtmlFlow,\n concrete: true\n}\n\n/** @type {Construct} */\nconst blankLineBefore = {\n tokenize: tokenizeBlankLineBefore,\n partial: true\n}\nconst nonLazyContinuationStart = {\n tokenize: tokenizeNonLazyContinuationStart,\n partial: true\n}\n\n/** @type {Resolver} */\nfunction resolveToHtmlFlow(events) {\n let index = events.length\n while (index--) {\n if (events[index][0] === 'enter' && events[index][1].type === 'htmlFlow') {\n break\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\n // Add the prefix start to the HTML line token.\n events[index + 1][1].start = events[index - 2][1].start\n // Remove the line prefix.\n events.splice(index - 2, 2)\n }\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlFlow(effects, ok, nok) {\n const self = this\n /** @type {number} */\n let marker\n /** @type {boolean} */\n let closingTag\n /** @type {string} */\n let buffer\n /** @type {number} */\n let index\n /** @type {Code} */\n let markerB\n return start\n\n /**\n * Start of HTML (flow).\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * At `<`, after optional whitespace.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('htmlFlow')\n effects.enter('htmlFlowData')\n effects.consume(code)\n return open\n }\n\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n if (code === 47) {\n effects.consume(code)\n closingTag = true\n return tagCloseStart\n }\n if (code === 63) {\n effects.consume(code)\n marker = 3\n // To do:\n // tokenizer.concrete = true\n // To do: use `markdown-rs` style interrupt.\n // 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 return self.interrupt ? ok : continuationDeclarationInside\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n marker = 2\n return commentOpenInside\n }\n if (code === 91) {\n effects.consume(code)\n marker = 5\n index = 0\n return cdataOpenInside\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n marker = 4\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuationDeclarationInside\n }\n return nok(code)\n }\n\n /**\n * After ` | &<]]>\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = 'CDATA['\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n if (index === value.length) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n return cdataOpenInside\n }\n return nok(code)\n }\n\n /**\n * After ` | \n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n if (asciiAlpha(code)) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer = String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * In tag name.\n *\n * ```markdown\n * > | \n * ^^\n * > | \n * ^^\n * ```\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 const slash = code === 47\n const name = buffer.toLowerCase()\n if (!slash && !closingTag && htmlRawNames.includes(name)) {\n marker = 1\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n if (htmlBlockNames.includes(buffer.toLowerCase())) {\n marker = 6\n if (slash) {\n effects.consume(code)\n return basicSelfClosing\n }\n\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok(code) : continuation(code)\n }\n marker = 7\n // Do not support complete HTML when interrupting.\n return self.interrupt && !self.parser.lazy[self.now().line]\n ? nok(code)\n : closingTag\n ? completeClosingTagAfter(code)\n : completeAttributeNameBefore(code)\n }\n\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n buffer += String.fromCharCode(code)\n return tagName\n }\n return nok(code)\n }\n\n /**\n * After closing slash of a basic tag name.\n *\n * ```markdown\n * > |
\n * ^\n * ```\n *\n * @type {State}\n */\n function basicSelfClosing(code) {\n if (code === 62) {\n effects.consume(code)\n // // Do not form containers.\n // tokenizer.concrete = true\n return self.interrupt ? ok : continuation\n }\n return nok(code)\n }\n\n /**\n * After closing slash of a complete tag name.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeClosingTagAfter(code) {\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeClosingTagAfter\n }\n return completeEnd(code)\n }\n\n /**\n * At an attribute name.\n *\n * At first, this state is used after a complete tag name, after whitespace,\n * where it expects optional attributes or the end of the tag.\n * It is also reused after attributes, when expecting more optional\n * attributes.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameBefore(code) {\n if (code === 47) {\n effects.consume(code)\n return completeEnd\n }\n\n // ASCII alphanumerical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return completeAttributeName\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameBefore\n }\n return completeEnd(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeName(code) {\n // ASCII alphanumerical and `-`, `.`, `:`, and `_`.\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 return completeAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, at an optional initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeNameAfter\n }\n return completeAttributeNameBefore(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\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 if (code === 34 || code === 39) {\n effects.consume(code)\n markerB = code\n return completeAttributeValueQuoted\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAttributeValueBefore\n }\n return completeAttributeValueUnquoted(code)\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuoted(code) {\n if (code === markerB) {\n effects.consume(code)\n markerB = null\n return completeAttributeValueQuotedAfter\n }\n if (code === null || markdownLineEnding(code)) {\n return nok(code)\n }\n effects.consume(code)\n return completeAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueUnquoted(code) {\n if (\n code === null ||\n code === 34 ||\n code === 39 ||\n code === 47 ||\n code === 60 ||\n code === 61 ||\n code === 62 ||\n code === 96 ||\n markdownLineEndingOrSpace(code)\n ) {\n return completeAttributeNameAfter(code)\n }\n effects.consume(code)\n return completeAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the\n * end of the tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownSpace(code)) {\n return completeAttributeNameBefore(code)\n }\n return nok(code)\n }\n\n /**\n * In certain circumstances of a complete tag where only an `>` is allowed.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeEnd(code) {\n if (code === 62) {\n effects.consume(code)\n return completeAfter\n }\n return nok(code)\n }\n\n /**\n * After `>` in a complete tag.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function completeAfter(code) {\n if (code === null || markdownLineEnding(code)) {\n // // Do not form containers.\n // tokenizer.concrete = true\n return continuation(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return completeAfter\n }\n return nok(code)\n }\n\n /**\n * In continuation of any HTML kind.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuation(code) {\n if (code === 45 && marker === 2) {\n effects.consume(code)\n return continuationCommentInside\n }\n if (code === 60 && marker === 1) {\n effects.consume(code)\n return continuationRawTagOpen\n }\n if (code === 62 && marker === 4) {\n effects.consume(code)\n return continuationClose\n }\n if (code === 63 && marker === 3) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n if (code === 93 && marker === 5) {\n effects.consume(code)\n return continuationCdataInside\n }\n if (markdownLineEnding(code) && (marker === 6 || marker === 7)) {\n effects.exit('htmlFlowData')\n return effects.check(\n blankLineBefore,\n continuationAfter,\n continuationStart\n )(code)\n }\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return continuationStart(code)\n }\n effects.consume(code)\n return continuation\n }\n\n /**\n * In continuation, at eol.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStart(code) {\n return effects.check(\n nonLazyContinuationStart,\n continuationStartNonLazy,\n continuationAfter\n )(code)\n }\n\n /**\n * In continuation, at eol, before non-lazy content.\n *\n * ```markdown\n * > | \n * ^\n * | asd\n * ```\n *\n * @type {State}\n */\n function continuationStartNonLazy(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return continuationBefore\n }\n\n /**\n * In continuation, before non-lazy content.\n *\n * ```markdown\n * | \n * > | asd\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationBefore(code) {\n if (code === null || markdownLineEnding(code)) {\n return continuationStart(code)\n }\n effects.enter('htmlFlowData')\n return continuation(code)\n }\n\n /**\n * In comment continuation, after one `-`, expecting another.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCommentInside(code) {\n if (code === 45) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In raw continuation, after `<`, at `/`.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationRawTagOpen(code) {\n if (code === 47) {\n effects.consume(code)\n buffer = ''\n return continuationRawEndTag\n }\n return continuation(code)\n }\n\n /**\n * In raw continuation, after ` | \n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function continuationRawEndTag(code) {\n if (code === 62) {\n const name = buffer.toLowerCase()\n if (htmlRawNames.includes(name)) {\n effects.consume(code)\n return continuationClose\n }\n return continuation(code)\n }\n if (asciiAlpha(code) && buffer.length < 8) {\n effects.consume(code)\n // @ts-expect-error: not null.\n buffer += String.fromCharCode(code)\n return continuationRawEndTag\n }\n return continuation(code)\n }\n\n /**\n * In cdata continuation, after `]`, expecting `]>`.\n *\n * ```markdown\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationCdataInside(code) {\n if (code === 93) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In declaration or instruction continuation, at `>`.\n *\n * ```markdown\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | \n * ^\n * > | &<]]>\n * ^\n * ```\n *\n * @type {State}\n */\n function continuationDeclarationInside(code) {\n if (code === 62) {\n effects.consume(code)\n return continuationClose\n }\n\n // More dashes.\n if (code === 45 && marker === 2) {\n effects.consume(code)\n return continuationDeclarationInside\n }\n return continuation(code)\n }\n\n /**\n * In closed continuation: everything we get until the eol/eof is part of it.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationClose(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('htmlFlowData')\n return continuationAfter(code)\n }\n effects.consume(code)\n return continuationClose\n }\n\n /**\n * Done.\n *\n * ```markdown\n * > | \n * ^\n * ```\n *\n * @type {State}\n */\n function continuationAfter(code) {\n effects.exit('htmlFlow')\n // // Feel free to interrupt.\n // tokenizer.interrupt = false\n // // No longer concrete.\n // tokenizer.concrete = false\n return ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeNonLazyContinuationStart(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * At eol, before continuation.\n *\n * ```markdown\n * > | * ```js\n * ^\n * | b\n * ```\n *\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 return after\n }\n return nok(code)\n }\n\n /**\n * A continuation.\n *\n * ```markdown\n * | * ```js\n * > | b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n return self.parser.lazy[self.now().line] ? nok(code) : ok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeBlankLineBefore(effects, ok, nok) {\n return start\n\n /**\n * Before eol, expecting blank line.\n *\n * ```markdown\n * > |
\n * ^\n * |\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return effects.attempt(blankLine, ok, nok)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {\n asciiAlpha,\n asciiAlphanumeric,\n markdownLineEnding,\n markdownLineEndingOrSpace,\n markdownSpace\n} from 'micromark-util-character'\n/** @type {Construct} */\nexport const htmlText = {\n name: 'htmlText',\n tokenize: tokenizeHtmlText\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeHtmlText(effects, ok, nok) {\n const self = this\n /** @type {NonNullable | undefined} */\n let marker\n /** @type {number} */\n let index\n /** @type {State} */\n let returnState\n return start\n\n /**\n * Start of HTML (text).\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\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\n /**\n * After `<`, at tag name or other stuff.\n *\n * ```markdown\n * > | a c\n * ^\n * > | a c\n * ^\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function open(code) {\n if (code === 33) {\n effects.consume(code)\n return declarationOpen\n }\n if (code === 47) {\n effects.consume(code)\n return tagCloseStart\n }\n if (code === 63) {\n effects.consume(code)\n return instruction\n }\n\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagOpen\n }\n return nok(code)\n }\n\n /**\n * After ` | a c\n * ^\n * > | a c\n * ^\n * > | a &<]]> c\n * ^\n * ```\n *\n * @type {State}\n */\n function declarationOpen(code) {\n if (code === 45) {\n effects.consume(code)\n return commentOpenInside\n }\n if (code === 91) {\n effects.consume(code)\n index = 0\n return cdataOpenInside\n }\n if (asciiAlpha(code)) {\n effects.consume(code)\n return declaration\n }\n return nok(code)\n }\n\n /**\n * In a comment, after ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentOpenInside(code) {\n if (code === 45) {\n effects.consume(code)\n return commentEnd\n }\n return nok(code)\n }\n\n /**\n * In comment.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function comment(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 45) {\n effects.consume(code)\n return commentClose\n }\n if (markdownLineEnding(code)) {\n returnState = comment\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return comment\n }\n\n /**\n * In comment, after `-`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentClose(code) {\n if (code === 45) {\n effects.consume(code)\n return commentEnd\n }\n return comment(code)\n }\n\n /**\n * In comment, after `--`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function commentEnd(code) {\n return code === 62\n ? end(code)\n : code === 45\n ? commentClose(code)\n : comment(code)\n }\n\n /**\n * After ` | a &<]]> b\n * ^^^^^^\n * ```\n *\n * @type {State}\n */\n function cdataOpenInside(code) {\n const value = 'CDATA['\n if (code === value.charCodeAt(index++)) {\n effects.consume(code)\n return index === value.length ? cdata : cdataOpenInside\n }\n return nok(code)\n }\n\n /**\n * In CDATA.\n *\n * ```markdown\n * > | a &<]]> b\n * ^^^\n * ```\n *\n * @type {State}\n */\n function cdata(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 93) {\n effects.consume(code)\n return cdataClose\n }\n if (markdownLineEnding(code)) {\n returnState = cdata\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return cdata\n }\n\n /**\n * In CDATA, after `]`, at another `]`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataClose(code) {\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n return cdata(code)\n }\n\n /**\n * In CDATA, after `]]`, at `>`.\n *\n * ```markdown\n * > | a &<]]> b\n * ^\n * ```\n *\n * @type {State}\n */\n function cdataEnd(code) {\n if (code === 62) {\n return end(code)\n }\n if (code === 93) {\n effects.consume(code)\n return cdataEnd\n }\n return cdata(code)\n }\n\n /**\n * In declaration.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function declaration(code) {\n if (code === null || code === 62) {\n return end(code)\n }\n if (markdownLineEnding(code)) {\n returnState = declaration\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return declaration\n }\n\n /**\n * In instruction.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instruction(code) {\n if (code === null) {\n return nok(code)\n }\n if (code === 63) {\n effects.consume(code)\n return instructionClose\n }\n if (markdownLineEnding(code)) {\n returnState = instruction\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return instruction\n }\n\n /**\n * In instruction, after `?`, at `>`.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function instructionClose(code) {\n return code === 62 ? end(code) : instruction(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseStart(code) {\n // ASCII alphabetical.\n if (asciiAlpha(code)) {\n effects.consume(code)\n return tagClose\n }\n return nok(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagClose(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagClose\n }\n return tagCloseBetween(code)\n }\n\n /**\n * In closing tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagCloseBetween(code) {\n if (markdownLineEnding(code)) {\n returnState = tagCloseBetween\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagCloseBetween\n }\n return end(code)\n }\n\n /**\n * After ` | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpen(code) {\n // ASCII alphanumerical and `-`.\n if (code === 45 || asciiAlphanumeric(code)) {\n effects.consume(code)\n return tagOpen\n }\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n return nok(code)\n }\n\n /**\n * In opening tag, after tag name.\n *\n * ```markdown\n * > | a c\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenBetween(code) {\n if (code === 47) {\n effects.consume(code)\n return end\n }\n\n // ASCII alphabetical and `:` and `_`.\n if (code === 58 || code === 95 || asciiAlpha(code)) {\n effects.consume(code)\n return tagOpenAttributeName\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenBetween\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenBetween\n }\n return end(code)\n }\n\n /**\n * In attribute name.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeName(code) {\n // ASCII alphabetical and `-`, `.`, `:`, and `_`.\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 return tagOpenAttributeNameAfter(code)\n }\n\n /**\n * After attribute name, before initializer, the end of the tag, or\n * whitespace.\n *\n * ```markdown\n * > | a d\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeNameAfter(code) {\n if (code === 61) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeNameAfter\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeNameAfter\n }\n return tagOpenBetween(code)\n }\n\n /**\n * Before unquoted, double quoted, or single quoted attribute value, allowing\n * whitespace.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\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 if (code === 34 || code === 39) {\n effects.consume(code)\n marker = code\n return tagOpenAttributeValueQuoted\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueBefore\n return lineEndingBefore(code)\n }\n if (markdownSpace(code)) {\n effects.consume(code)\n return tagOpenAttributeValueBefore\n }\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * In double or single quoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuoted(code) {\n if (code === marker) {\n effects.consume(code)\n marker = undefined\n return tagOpenAttributeValueQuotedAfter\n }\n if (code === null) {\n return nok(code)\n }\n if (markdownLineEnding(code)) {\n returnState = tagOpenAttributeValueQuoted\n return lineEndingBefore(code)\n }\n effects.consume(code)\n return tagOpenAttributeValueQuoted\n }\n\n /**\n * In unquoted attribute value.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\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 if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n effects.consume(code)\n return tagOpenAttributeValueUnquoted\n }\n\n /**\n * After double or single quoted attribute value, before whitespace or the end\n * of the tag.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\n *\n * @type {State}\n */\n function tagOpenAttributeValueQuotedAfter(code) {\n if (code === 47 || code === 62 || markdownLineEndingOrSpace(code)) {\n return tagOpenBetween(code)\n }\n return nok(code)\n }\n\n /**\n * In certain circumstances of a tag where only an `>` is allowed.\n *\n * ```markdown\n * > | a e\n * ^\n * ```\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 return nok(code)\n }\n\n /**\n * At eol.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * > | a \n * ```\n *\n * @type {State}\n */\n function lineEndingBefore(code) {\n effects.exit('htmlTextData')\n effects.enter('lineEnding')\n effects.consume(code)\n effects.exit('lineEnding')\n return lineEndingAfter\n }\n\n /**\n * After eol, at optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfter(code) {\n // Always populated by defaults.\n\n return markdownSpace(code)\n ? factorySpace(\n effects,\n lineEndingAfterPrefix,\n 'linePrefix',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4\n )(code)\n : lineEndingAfterPrefix(code)\n }\n\n /**\n * After eol, after optional whitespace.\n *\n * > 👉 **Note**: we can’t have blank lines in text, so no need to worry about\n * > empty tokens.\n *\n * ```markdown\n * | a \n * ^\n * ```\n *\n * @type {State}\n */\n function lineEndingAfterPrefix(code) {\n effects.enter('htmlTextData')\n return returnState(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Event} Event\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').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\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/** @type {Construct} */\nexport const labelEnd = {\n name: 'labelEnd',\n tokenize: tokenizeLabelEnd,\n resolveTo: resolveToLabelEnd,\n resolveAll: resolveAllLabelEnd\n}\n\n/** @type {Construct} */\nconst resourceConstruct = {\n tokenize: tokenizeResource\n}\n/** @type {Construct} */\nconst referenceFullConstruct = {\n tokenize: tokenizeReferenceFull\n}\n/** @type {Construct} */\nconst referenceCollapsedConstruct = {\n tokenize: tokenizeReferenceCollapsed\n}\n\n/** @type {Resolver} */\nfunction resolveAllLabelEnd(events) {\n let index = -1\n while (++index < events.length) {\n const token = events[index][1]\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 return events\n}\n\n/** @type {Resolver} */\nfunction resolveToLabelEnd(events, context) {\n let index = events.length\n let offset = 0\n /** @type {Token} */\n let token\n /** @type {number | undefined} */\n let open\n /** @type {number | undefined} */\n let close\n /** @type {Array} */\n let media\n\n // Find an opening.\n while (index--) {\n token = events[index][1]\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 }\n\n // Mark other link openings as inactive, as we can’t have links in\n // links.\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 if (token.type !== 'labelLink') {\n offset = 2\n break\n }\n }\n } else if (token.type === 'labelEnd') {\n close = index\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 ]\n\n // Opening marker.\n media = push(media, events.slice(open + 1, open + offset + 3))\n\n // Text open.\n media = push(media, [['enter', text, context]])\n\n // Always populated by defaults.\n\n // Between.\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 )\n\n // Text close, marker close, label close.\n media = push(media, [\n ['exit', text, context],\n events[close - 2],\n events[close - 1],\n ['exit', label, context]\n ])\n\n // Reference, resource, or so.\n media = push(media, events.slice(close + 1))\n\n // Media close.\n media = push(media, [['exit', group, context]])\n splice(events, open, events.length, media)\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelEnd(effects, ok, nok) {\n const self = this\n let index = self.events.length\n /** @type {Token} */\n let labelStart\n /** @type {boolean} */\n let defined\n\n // Find an opening.\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 return start\n\n /**\n * Start of label end.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ```\n *\n * @type {State}\n */\n function start(code) {\n // If there is not an okay opening.\n if (!labelStart) {\n return nok(code)\n }\n\n // If the corresponding label (link) start is marked as inactive,\n // it means we’d be wrapping a link, like this:\n //\n // ```markdown\n // > | a [b [c](d) e](f) g.\n // ^\n // ```\n //\n // We can’t have that, so it’s just balanced brackets.\n if (labelStart._inactive) {\n return labelEndNok(code)\n }\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 after\n }\n\n /**\n * After `]`.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // Note: `markdown-rs` also parses GFM footnotes here, which for us is in\n // an extension.\n\n // Resource (`[asd](fgh)`)?\n if (code === 40) {\n return effects.attempt(\n resourceConstruct,\n labelEndOk,\n defined ? labelEndOk : labelEndNok\n )(code)\n }\n\n // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference?\n if (code === 91) {\n return effects.attempt(\n referenceFullConstruct,\n labelEndOk,\n defined ? referenceNotFull : labelEndNok\n )(code)\n }\n\n // Shortcut (`[asd]`) reference?\n return defined ? labelEndOk(code) : labelEndNok(code)\n }\n\n /**\n * After `]`, at `[`, but not at a full reference.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceNotFull(code) {\n return effects.attempt(\n referenceCollapsedConstruct,\n labelEndOk,\n labelEndNok\n )(code)\n }\n\n /**\n * Done, we found something.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * > | [a][b] c\n * ^\n * > | [a][] b\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndOk(code) {\n // Note: `markdown-rs` does a bunch of stuff here.\n return ok(code)\n }\n\n /**\n * Done, it’s nothing.\n *\n * There was an okay opening, but we didn’t match anything.\n *\n * ```markdown\n * > | [a](b c\n * ^\n * > | [a][b c\n * ^\n * > | [a] b\n * ^\n * ```\n *\n * @type {State}\n */\n function labelEndNok(code) {\n labelStart._balanced = true\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeResource(effects, ok, nok) {\n return resourceStart\n\n /**\n * At a resource.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceStart(code) {\n effects.enter('resource')\n effects.enter('resourceMarker')\n effects.consume(code)\n effects.exit('resourceMarker')\n return resourceBefore\n }\n\n /**\n * In resource, after `(`, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBefore(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceOpen)(code)\n : resourceOpen(code)\n }\n\n /**\n * In resource, after optional whitespace, at `)` or a destination.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceOpen(code) {\n if (code === 41) {\n return resourceEnd(code)\n }\n return factoryDestination(\n effects,\n resourceDestinationAfter,\n resourceDestinationMissing,\n 'resourceDestination',\n 'resourceDestinationLiteral',\n 'resourceDestinationLiteralMarker',\n 'resourceDestinationRaw',\n 'resourceDestinationString',\n 32\n )(code)\n }\n\n /**\n * In resource, after destination, at optional whitespace.\n *\n * ```markdown\n * > | [a](b) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceBetween)(code)\n : resourceEnd(code)\n }\n\n /**\n * At invalid destination.\n *\n * ```markdown\n * > | [a](<<) b\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceDestinationMissing(code) {\n return nok(code)\n }\n\n /**\n * In resource, after destination and whitespace, at `(` or title.\n *\n * ```markdown\n * > | [a](b ) c\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceBetween(code) {\n if (code === 34 || code === 39 || code === 40) {\n return factoryTitle(\n effects,\n resourceTitleAfter,\n nok,\n 'resourceTitle',\n 'resourceTitleMarker',\n 'resourceTitleString'\n )(code)\n }\n return resourceEnd(code)\n }\n\n /**\n * In resource, after title, at optional whitespace.\n *\n * ```markdown\n * > | [a](b \"c\") d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceTitleAfter(code) {\n return markdownLineEndingOrSpace(code)\n ? factoryWhitespace(effects, resourceEnd)(code)\n : resourceEnd(code)\n }\n\n /**\n * In resource, at `)`.\n *\n * ```markdown\n * > | [a](b) d\n * ^\n * ```\n *\n * @type {State}\n */\n function resourceEnd(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 return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceFull(effects, ok, nok) {\n const self = this\n return referenceFull\n\n /**\n * In a reference (full), at the `[`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFull(code) {\n return factoryLabel.call(\n self,\n effects,\n referenceFullAfter,\n referenceFullMissing,\n 'reference',\n 'referenceMarker',\n 'referenceString'\n )(code)\n }\n\n /**\n * In a reference (full), after `]`.\n *\n * ```markdown\n * > | [a][b] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullAfter(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 /**\n * In reference (full) that was missing.\n *\n * ```markdown\n * > | [a][b d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceFullMissing(code) {\n return nok(code)\n }\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeReferenceCollapsed(effects, ok, nok) {\n return referenceCollapsedStart\n\n /**\n * In reference (collapsed), at `[`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedStart(code) {\n // We only attempt a collapsed label if there’s a `[`.\n\n effects.enter('reference')\n effects.enter('referenceMarker')\n effects.consume(code)\n effects.exit('referenceMarker')\n return referenceCollapsedOpen\n }\n\n /**\n * In reference (collapsed), at `]`.\n *\n * > 👉 **Note**: we only get here if the label is defined.\n *\n * ```markdown\n * > | [a][] d\n * ^\n * ```\n *\n * @type {State}\n */\n function referenceCollapsedOpen(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 return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartImage = {\n name: 'labelStartImage',\n tokenize: tokenizeLabelStartImage,\n resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartImage(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of label (image) start.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\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\n /**\n * After `!`, at `[`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\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 return nok(code)\n }\n\n /**\n * After `![`.\n *\n * ```markdown\n * > | a ![b] c\n * ^\n * ```\n *\n * This is needed in because, when GFM footnotes are enabled, images never\n * form when started with a `^`.\n * Instead, links form:\n *\n * ```markdown\n * ![^a](b)\n *\n * ![^a][b]\n *\n * [b]: c\n * ```\n *\n * ```html\n *

!^a

\n *

!^a

\n * ```\n *\n * @type {State}\n */\n function after(code) {\n // To do: use a new field to do this, this is still needed for\n // `micromark-extension-gfm-footnote`, but the `label-start-link`\n // behavior isn’t.\n // Hidden footnotes hook.\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').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {labelEnd} from './label-end.js'\n\n/** @type {Construct} */\nexport const labelStartLink = {\n name: 'labelStartLink',\n tokenize: tokenizeLabelStartLink,\n resolveAll: labelEnd.resolveAll\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLabelStartLink(effects, ok, nok) {\n const self = this\n return start\n\n /**\n * Start of label (link) start.\n *\n * ```markdown\n * > | a [b] c\n * ^\n * ```\n *\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\n /** @type {State} */\n function after(code) {\n // To do: this isn’t needed in `micromark-extension-gfm-footnote`,\n // remove.\n // Hidden footnotes hook.\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').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding} from 'micromark-util-character'\n/** @type {Construct} */\nexport const lineEnding = {\n name: 'lineEnding',\n tokenize: tokenizeLineEnding\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeLineEnding(effects, ok) {\n return start\n\n /** @type {State} */\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').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').ContainerState} ContainerState\n * @typedef {import('micromark-util-types').Exiter} Exiter\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\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\n/** @type {Construct} */\nexport const list = {\n name: 'list',\n tokenize: tokenizeListStart,\n continuation: {\n tokenize: tokenizeListContinuation\n },\n exit: tokenizeListEnd\n}\n\n/** @type {Construct} */\nconst listItemPrefixWhitespaceConstruct = {\n tokenize: tokenizeListItemPrefixWhitespace,\n partial: true\n}\n\n/** @type {Construct} */\nconst indentConstruct = {\n tokenize: tokenizeIndent,\n partial: true\n}\n\n// To do: `markdown-rs` parses list items on their own and later stitches them\n// together.\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\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\n /** @type {State} */\n function start(code) {\n const kind =\n self.containerState.type ||\n (code === 42 || code === 43 || code === 45\n ? 'listUnordered'\n : 'listOrdered')\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 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 if (!self.interrupt || code === 49) {\n effects.enter('listItemPrefix')\n effects.enter('listItemValue')\n return inside(code)\n }\n }\n return nok(code)\n }\n\n /** @type {State} */\n function inside(code) {\n if (asciiDigit(code) && ++size < 10) {\n effects.consume(code)\n return inside\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 return nok(code)\n }\n\n /**\n * @type {State}\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,\n // Can’t be empty when interrupting.\n self.interrupt ? nok : onBlank,\n effects.attempt(\n listItemPrefixWhitespaceConstruct,\n endOfPrefix,\n otherPrefix\n )\n )\n }\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.initialBlankLine = true\n initialSize++\n return endOfPrefix(code)\n }\n\n /** @type {State} */\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 return nok(code)\n }\n\n /** @type {State} */\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/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListContinuation(effects, ok, nok) {\n const self = this\n self.containerState._closeFlow = undefined\n return effects.check(blankLine, onBlank, notBlank)\n\n /** @type {State} */\n function onBlank(code) {\n self.containerState.furtherBlankLines =\n self.containerState.furtherBlankLines ||\n self.containerState.initialBlankLine\n\n // We have a blank line.\n // Still, try to consume at most the items size.\n return factorySpace(\n effects,\n ok,\n 'listItemIndent',\n self.containerState.size + 1\n )(code)\n }\n\n /** @type {State} */\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 self.containerState.furtherBlankLines = undefined\n self.containerState.initialBlankLine = undefined\n return effects.attempt(indentConstruct, ok, notInCurrentItem)(code)\n }\n\n /** @type {State} */\n function notInCurrentItem(code) {\n // While we do continue, we signal that the flow should be closed.\n self.containerState._closeFlow = true\n // As we’re closing flow, we’re no longer interrupting.\n self.interrupt = undefined\n // Always populated by defaults.\n\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/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\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\n /** @type {State} */\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/**\n * @type {Exiter}\n * @this {TokenizeContext}\n */\nfunction tokenizeListEnd(effects) {\n effects.exit(this.containerState.type)\n}\n\n/**\n * @type {Tokenizer}\n * @this {TokenizeContext}\n */\nfunction tokenizeListItemPrefixWhitespace(effects, ok, nok) {\n const self = this\n\n // Always populated by defaults.\n\n return factorySpace(\n effects,\n afterPrefix,\n 'listItemPrefixWhitespace',\n self.parser.constructs.disable.null.includes('codeIndented')\n ? undefined\n : 4 + 1\n )\n\n /** @type {State} */\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').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').Resolver} Resolver\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const setextUnderline = {\n name: 'setextUnderline',\n tokenize: tokenizeSetextUnderline,\n resolveTo: resolveToSetextUnderline\n}\n\n/** @type {Resolver} */\nfunction resolveToSetextUnderline(events, context) {\n // To do: resolve like `markdown-rs`.\n let index = events.length\n /** @type {number | undefined} */\n let content\n /** @type {number | undefined} */\n let text\n /** @type {number | undefined} */\n let definition\n\n // Find the opening of the content.\n // It’ll always exist: we don’t tokenize if it isn’t there.\n while (index--) {\n if (events[index][0] === 'enter') {\n if (events[index][1].type === 'content') {\n content = index\n break\n }\n if (events[index][1].type === 'paragraph') {\n text = index\n }\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 if (!definition && events[index][1].type === 'definition') {\n definition = index\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 }\n\n // Change the paragraph to setext heading text.\n events[text][1].type = 'setextHeadingText'\n\n // If we have definitions in the content, we’ll keep on having content,\n // but we need move it.\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 }\n\n // Add the heading exit at the end.\n events.push(['exit', heading, context])\n return events\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeSetextUnderline(effects, ok, nok) {\n const self = this\n /** @type {NonNullable} */\n let marker\n return start\n\n /**\n * At start of heading (setext) underline.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n let index = self.events.length\n /** @type {boolean | undefined} */\n let paragraph\n // Find an opening.\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 // To do: handle lazy/pierce like `markdown-rs`.\n // To do: parse indent like `markdown-rs`.\n if (!self.parser.lazy[self.now().line] && (self.interrupt || paragraph)) {\n effects.enter('setextHeadingLine')\n marker = code\n return before(code)\n }\n return nok(code)\n }\n\n /**\n * After optional whitespace, at `-` or `=`.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n effects.enter('setextHeadingLineSequence')\n return inside(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function inside(code) {\n if (code === marker) {\n effects.consume(code)\n return inside\n }\n effects.exit('setextHeadingLineSequence')\n return markdownSpace(code)\n ? factorySpace(effects, after, 'lineSuffix')(code)\n : after(code)\n }\n\n /**\n * After sequence, after optional whitespace.\n *\n * ```markdown\n * | aa\n * > | ==\n * ^\n * ```\n *\n * @type {State}\n */\n function after(code) {\n if (code === null || markdownLineEnding(code)) {\n effects.exit('setextHeadingLine')\n return ok(code)\n }\n return nok(code)\n }\n}\n","/**\n * @typedef {import('micromark-util-types').Code} Code\n * @typedef {import('micromark-util-types').Construct} Construct\n * @typedef {import('micromark-util-types').State} State\n * @typedef {import('micromark-util-types').TokenizeContext} TokenizeContext\n * @typedef {import('micromark-util-types').Tokenizer} Tokenizer\n */\n\nimport {factorySpace} from 'micromark-factory-space'\nimport {markdownLineEnding, markdownSpace} from 'micromark-util-character'\n/** @type {Construct} */\nexport const thematicBreak = {\n name: 'thematicBreak',\n tokenize: tokenizeThematicBreak\n}\n\n/**\n * @this {TokenizeContext}\n * @type {Tokenizer}\n */\nfunction tokenizeThematicBreak(effects, ok, nok) {\n let size = 0\n /** @type {NonNullable} */\n let marker\n return start\n\n /**\n * Start of thematic break.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function start(code) {\n effects.enter('thematicBreak')\n // To do: parse indent like `markdown-rs`.\n return before(code)\n }\n\n /**\n * After optional whitespace, at marker.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function before(code) {\n marker = code\n return atBreak(code)\n }\n\n /**\n * After something, before something else.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function atBreak(code) {\n if (code === marker) {\n effects.enter('thematicBreakSequence')\n return sequence(code)\n }\n if (size >= 3 && (code === null || markdownLineEnding(code))) {\n effects.exit('thematicBreak')\n return ok(code)\n }\n return nok(code)\n }\n\n /**\n * In sequence.\n *\n * ```markdown\n * > | ***\n * ^\n * ```\n *\n * @type {State}\n */\n function sequence(code) {\n if (code === marker) {\n effects.consume(code)\n size++\n return sequence\n }\n effects.exit('thematicBreakSequence')\n return markdownSpace(code)\n ? factorySpace(effects, atBreak, 'whitespace')(code)\n : atBreak(code)\n }\n}\n"],"names":["attention","tokenizeAttention","resolveAllAttention","events","context","index","open","group","text","openingSequence","closingSequence","use","nextEvents","offset","start","end","movePoint","effects","ok","attentionMarkers","previous","before","marker","code","inside","token","after","close","point","autolink","tokenizeAutolink","nok","size","schemeOrEmailAtext","emailAtext","schemeInsideOrEmailAtext","urlInside","emailAtSignOrDot","emailLabel","emailValue","next","blankLine","tokenizeBlankLine","blockQuote","tokenizeBlockQuoteStart","tokenizeBlockQuoteContinuation","exit","self","state","contStart","contBefore","characterEscape","tokenizeCharacterEscape","characterReference","tokenizeCharacterReference","max","test","numeric","value","nonLazyContinuation","tokenizeNonLazyContinuation","codeFenced","tokenizeCodeFenced","closeStart","tokenizeCloseStart","initialPrefix","sizeOpen","beforeSequenceOpen","tail","sequenceOpen","infoBefore","atNonLazyBreak","info","metaBefore","meta","contentBefore","contentStart","beforeContentChunk","contentChunk","startBefore","beforeSequenceClose","sequenceClose","sequenceCloseAfter","lineStart","codeIndented","tokenizeCodeIndented","furtherStart","tokenizeFurtherStart","afterPrefix","atBreak","codeText","tokenizeCodeText","resolveCodeText","tailExitIndex","headEnterIndex","enter","between","data","content","tokenizeContent","resolveContent","continuationConstruct","tokenizeContinuation","chunkStart","chunkInside","contentEnd","contentContinue","startLookahead","prefixed","definition","tokenizeDefinition","titleBefore","tokenizeTitleBefore","identifier","labelAfter","markerAfter","destinationBefore","destinationAfter","afterWhitespace","beforeMarker","titleAfter","titleAfterOptionalWhitespace","hardBreakEscape","tokenizeHardBreakEscape","headingAtx","tokenizeHeadingAtx","resolveHeadingAtx","sequenceFurther","htmlFlow","tokenizeHtmlFlow","resolveToHtmlFlow","blankLineBefore","tokenizeBlankLineBefore","nonLazyContinuationStart","tokenizeNonLazyContinuationStart","closingTag","buffer","markerB","declarationOpen","tagCloseStart","continuationDeclarationInside","tagName","commentOpenInside","cdataOpenInside","continuation","slash","name","basicSelfClosing","completeClosingTagAfter","completeAttributeNameBefore","completeEnd","completeAttributeName","completeAttributeNameAfter","completeAttributeValueBefore","completeAttributeValueQuoted","completeAttributeValueUnquoted","completeAttributeValueQuotedAfter","completeAfter","continuationCommentInside","continuationRawTagOpen","continuationClose","continuationCdataInside","continuationAfter","continuationStart","continuationStartNonLazy","continuationBefore","continuationRawEndTag","htmlText","tokenizeHtmlText","returnState","instruction","tagOpen","declaration","commentEnd","comment","commentClose","lineEndingBefore","cdata","cdataClose","cdataEnd","instructionClose","tagClose","tagCloseBetween","tagOpenBetween","tagOpenAttributeName","tagOpenAttributeNameAfter","tagOpenAttributeValueBefore","tagOpenAttributeValueQuoted","tagOpenAttributeValueUnquoted","tagOpenAttributeValueQuotedAfter","lineEndingAfter","lineEndingAfterPrefix","labelEnd","tokenizeLabelEnd","resolveToLabelEnd","resolveAllLabelEnd","resourceConstruct","tokenizeResource","referenceFullConstruct","tokenizeReferenceFull","referenceCollapsedConstruct","tokenizeReferenceCollapsed","media","label","labelStart","defined","labelEndNok","labelEndOk","referenceNotFull","resourceStart","resourceBefore","resourceOpen","resourceEnd","resourceDestinationAfter","resourceDestinationMissing","resourceBetween","resourceTitleAfter","referenceFull","referenceFullAfter","referenceFullMissing","referenceCollapsedStart","referenceCollapsedOpen","labelStartImage","tokenizeLabelStartImage","labelStartLink","tokenizeLabelStartLink","lineEnding","tokenizeLineEnding","list","tokenizeListStart","tokenizeListContinuation","tokenizeListEnd","listItemPrefixWhitespaceConstruct","tokenizeListItemPrefixWhitespace","indentConstruct","tokenizeIndent","initialSize","kind","atMarker","onBlank","endOfPrefix","otherPrefix","notBlank","notInCurrentItem","setextUnderline","tokenizeSetextUnderline","resolveToSetextUnderline","heading","paragraph","thematicBreak","tokenizeThematicBreak","sequence"],"sourceRoot":""}