{"version":3,"sources":["jsdelivr-header.js","/npm/marked@18.1.1/src/defaults.ts","/npm/marked@18.1.1/src/rules.ts","/npm/marked@18.1.1/src/helpers.ts","/npm/marked@18.1.1/src/Tokenizer.ts","/npm/marked@18.1.1/src/Lexer.ts","/npm/marked@18.1.1/src/Renderer.ts","/npm/marked@18.1.1/src/TextRenderer.ts","/npm/marked@18.1.1/src/Parser.ts","/npm/marked@18.1.1/src/Hooks.ts","/npm/marked@18.1.1/src/Instance.ts","/npm/marked@18.1.1/src/marked.ts"],"names":[],"mappings":"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","file":"/npm/marked@18.1.1/lib/marked.esm.js/+esm","sourceRoot":"","sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v4.62.2 and esbuild v0.28.1.\n * Original file: /npm/marked@18.1.1/lib/marked.esm.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","import type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Gets the original marked default options.\n */\nexport function _getDefaults<ParserOutput = string, RendererOutput = string>(): MarkedOptions<ParserOutput, RendererOutput> {\n  return {\n    async: false,\n    breaks: false,\n    extensions: null,\n    gfm: true,\n    hooks: null,\n    pedantic: false,\n    renderer: null,\n    silent: false,\n    tokenizer: null,\n    walkTokens: null,\n  };\n}\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport let _defaults: MarkedOptions<any, any> = _getDefaults();\n\nexport function changeDefaults<ParserOutput = string, RendererOutput = string>(newDefaults: MarkedOptions<ParserOutput, RendererOutput>) {\n  _defaults = newDefaults;\n}\n","const noopTest = { exec: () => null } as unknown as RegExp;\n\nfunction cachedIndentRegex(createRegex: (indent: number) => RegExp) {\n  const cache: RegExp[] = [];\n  return (indent: number) => {\n    const cacheIndex = Math.max(0, Math.min(3, indent - 1));\n    let regex = cache[cacheIndex];\n    if (!regex) {\n      regex = createRegex(cacheIndex);\n      cache[cacheIndex] = regex;\n    }\n    return regex;\n  };\n}\n\nfunction edit(regex: string | RegExp, opt = '') {\n  let source = typeof regex === 'string' ? regex : regex.source;\n  const obj = {\n    replace: (name: string | RegExp, val: string | RegExp) => {\n      let valSource = typeof val === 'string' ? val : val.source;\n      valSource = valSource.replace(other.caret, '$1');\n      source = source.replace(name, valSource);\n      return obj;\n    },\n    getRegex: () => {\n      return new RegExp(source, opt);\n    },\n  };\n  return obj;\n}\n\n// use a default variable to ensure the regex is evaluated on client an not removed by minifiers\nconst supportsLookbehind = ((a = '') => {\ntry {\n  return !!new RegExp('(?<=1)(?<!1)' + a);\n} catch {\n  // See browser support here:\n  // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Regular_expressions/Lookbehind_assertion\n  return false;\n}\n})();\n\nexport const other = {\n  codeRemoveIndent: /^(?: {0,3}\\t| {1,4})/gm,\n  outputLinkReplace: /\\\\([\\[\\]])/g,\n  indentCodeCompensation: /^(\\s+)(?:```)/,\n  beginningSpace: /^\\s+/,\n  endingHash: /#$/,\n  startingSpaceChar: /^ /,\n  endingSpaceChar: / $/,\n  endingSpaceTabChar: /[ \\t]$/,\n  nonSpaceChar: /[^ ]/,\n  newLineCharGlobal: /\\n/g,\n  tabCharGlobal: /\\t/g,\n  leadingSpaceTab: /^[ \\t]+/,\n  multipleSpaceGlobal: /\\s+/g,\n  blankLine: /^[ \\t]*$/,\n  doubleBlankLine: /\\n[ \\t]*\\n[ \\t]*$/,\n  blockquoteStart: /^ {0,3}>/,\n  blockquoteSetextReplace: /\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,\n  blockquoteSetextReplace2: /^ {0,3}>[ \\t]?/gm,\n  listReplaceNesting: /^ {1,4}(?=( {4})*[^ ])/g,\n  listIsTask: /^\\[[ xX]\\] +\\S/,\n  listReplaceTask: /^\\[[ xX]\\] +/,\n  listTaskCheckbox: /\\[[ xX]\\]/,\n  anyLine: /\\n.*\\n/,\n  hrefBrackets: /^<(.*)>$/,\n  tableDelimiter: /[:|]/,\n  tableAlignChars: /^\\||\\| *$/g,\n  tableRowBlankLine: /\\n[ \\t]*$/,\n  tableAlignRight: /^ *-+: *$/,\n  tableAlignCenter: /^ *:-+: *$/,\n  tableAlignLeft: /^ *:-+ *$/,\n  startATag: /^<a /i,\n  endATag: /^<\\/a>/i,\n  startPreScriptTag: /^<(pre|code|kbd|script)(\\s|>)/i,\n  endPreScriptTag: /^<\\/(pre|code|kbd|script)(\\s|>)/i,\n  startAngleBracket: /^</,\n  endAngleBracket: />$/,\n  pedanticHrefTitle: /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,\n  unicodeAlphaNumeric: /[\\p{L}\\p{N}]/u,\n  numericCharacterReference: /&#(?:(\\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));/,\n  numericCharacterReferenceOrAmpersand: /&#(?:(\\d{1,7})|[Xx]([A-Fa-f0-9]{1,6}));|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n  escapeTest: /[&<>\"']/,\n  escapeReplace: /[&<>\"']/g,\n  escapeTestNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,\n  escapeReplaceNoEncode: /[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,\n  caret: /(^|[^\\[])\\^/g,\n  percentDecode: /%25/g,\n  findPipe: /\\|/g,\n  splitPipe: / \\|/,\n  slashPipe: /\\\\\\|/g,\n  carriageReturn: /\\r\\n|\\r/g,\n  spaceLine: /^ +$/gm,\n  notSpaceStart: /^\\S*/,\n  endingNewline: /\\n$/,\n  listItemRegex: (bull: string) => new RegExp(`^( {0,3}${bull})((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))`),\n  nextBulletRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \\t][^\\\\n]*)?(?:\\\\n|$))`)),\n  hrRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}((?:-[ \\t]*){3,}|(?:_[ \\t]*){3,}|(?:\\\\*[ \\t]*){3,})(?:\\\\n+|$)`)),\n  fencesBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:\\`\\`\\`|~~~)`)),\n  headingBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}#`)),\n  // a list item ends where a paragraph would be interrupted, so this mirrors the\n  // html start conditions in the paragraph rule below; type 7 is excluded there\n  htmlBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}(?:</?(?:${_tag})(?: +|$|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)`, 'i')),\n  blockquoteBeginRegex: cachedIndentRegex((indent: number) => new RegExp(`^ {0,${indent}}>`)),\n};\n\n/**\n * Block-Level Grammar\n */\n\nconst newline = /^(?:[ \\t]*(?:\\n|$))+/;\nconst blockCode = /^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/;\nconst fences = /^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/;\nconst hr = /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/;\nconst heading = /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/;\nconst bullet = / {0,3}(?:[*+-]|\\d{1,9}[.)])/;\nconst lheadingCore = /^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |fences|blockquote|heading|hr|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/;\nconst lheading = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code can start a block but cannot interrupt a paragraph\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}(?:\\s|$)/) // ATX heading can interrupt\n  .replace(/hr/g, / {0,3}(?:(?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/) // thematic break can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/\\|table/g, '') // table not in commonmark\n  .getRegex();\nconst lheadingGfm = edit(lheadingCore)\n  .replace(/bull/g, bullet) // lists can interrupt\n  .replace(/blockCode/g, /(?: {4}| {0,3}\\t)/) // indented code can start a block but cannot interrupt a paragraph\n  .replace(/fences/g, / {0,3}(?:`{3,}|~{3,})/) // fenced code blocks can interrupt\n  .replace(/blockquote/g, / {0,3}>/) // blockquote can interrupt\n  .replace(/heading/g, / {0,3}#{1,6}(?:\\s|$)/) // ATX heading can interrupt\n  .replace(/hr/g, / {0,3}(?:(?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/) // thematic break can interrupt\n  .replace(/html/g, / {0,3}<[^\\n>]+>\\n/) // block html can interrupt\n  .replace(/table/g, / {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/) // table can interrupt\n  .getRegex();\nconst _paragraph = /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \\t]+\\n)[^\\n]+)*)/;\nconst blockText = /^[^\\n]+/;\nconst _blockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/;\nconst def = edit(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/)\n  .replace('label', _blockLabel)\n  .replace('title', /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/)\n  .getRegex();\n\nconst list = edit(/^(bull)([ \\t][^\\n]*?)?(?:\\n|$)/)\n  .replace(/bull/g, bullet)\n  .getRegex();\n\nconst _tag = 'address|article|aside|base|basefont|blockquote|body|caption'\n  + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption'\n  + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe'\n  + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option'\n  + '|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title'\n  + '|tr|track|ul';\nconst _comment = /<!--(?:-?>|[\\s\\S]*?(?:-->|$))/;\nconst html = edit(\n  '^ {0,3}(?:' // optional indentation\n+ '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n*|$)' // (1)\n+ '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n+ '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>[^\\\\n]*\\\\n*|$)' // (3)\n+ '|<![A-Z][\\\\s\\\\S]*?(?:>[^\\\\n]*\\\\n*|$)' // (4)\n+ '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>[^\\\\n]*\\\\n*|$)' // (5)\n+ '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (6)\n+ '|<(?!(?:script|pre|style|textarea)(?![a-z0-9-]))([a-z][a-z0-9-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) open tag\n+ '|</[a-z][a-z0-9-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \\t]*)+\\\\n|$)' // (7) closing tag\n+ ')', 'i')\n  .replace('comment', _comment)\n  .replace('tag', _tag)\n  .replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\nconst createParagraph = (listInterrupt: RegExp) => edit(_paragraph)\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n  .replace('|table', '')\n  .replace('blockquote', ' {0,3}>')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)')\n  .replace('list', listInterrupt)\n  .replace('html', ' {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)')\n  .replace('tag', _tag) // pars can be interrupted by html blocks of types (1) to (6)\n  .getRegex();\n\n// only non-empty lists starting from 1 can interrupt paragraphs\nconst paragraph = createParagraph(/ {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]/);\n// inside a blockquote a bare list marker (any number) starts a sibling list,\n// so it must not be lazily continued as paragraph text (unlike a top level\n// paragraph, where an empty list cannot interrupt)\nconst blockquoteParagraph = createParagraph(/ {0,3}(?:[*+-]|\\d{1,9}[.)])(?:[ \\t]|\\n|$)/);\n\nconst blockquote = edit(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/)\n  .replace('paragraph', blockquoteParagraph)\n  .getRegex();\n\n/**\n * Normal Block Grammar\n */\n\nconst blockNormal = {\n  blockquote,\n  code: blockCode,\n  def,\n  fences,\n  heading,\n  hr,\n  html,\n  lheading,\n  list,\n  newline,\n  paragraph,\n  table: noopTest,\n  text: blockText,\n};\n\ntype BlockKeys = keyof typeof blockNormal;\n\n/**\n * GFM Block Grammar\n */\n\nconst gfmTable = edit(\n  '^ *([^\\\\n ].*)\\\\n' // Header\n+ ' {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)' // Align\n+ '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)') // Cells\n  .replace('hr', hr)\n  .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n  .replace('blockquote', ' {0,3}>')\n  .replace('code', '(?: {4}| {0,3}\\t)[^\\\\n]')\n  .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)')\n  .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]') // any bullet ends the table rows\n  .replace('html', ' {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)')\n  .replace('tag', _tag) // tables can be interrupted by html blocks of types (1) to (6)\n  .getRegex();\n\nconst blockGfm: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  lheading: lheadingGfm,\n  table: gfmTable,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' {0,3}#{1,6}(?:\\\\s|$)')\n    .replace('|lheading', '') // setext headings don't interrupt commonmark paragraphs\n    .replace('table', gfmTable) // interrupt paragraphs with table\n    .replace('blockquote', ' {0,3}>')\n    .replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*(?:\\\\n|$))|~~~)[^\\\\n]*(?:\\\\n|$)')\n    .replace('list', ' {0,3}(?:[*+-]|1[.)])[ \\\\t]+[^ \\\\t\\\\n]') // only non-empty lists starting from 1 can interrupt\n    .replace('html', ' {0,3}(?:</?(?:tag)(?: +|\\\\n|/?>)|<(?:(?:script|pre|style|textarea)(?:[\\\\s>]|$)|!--)|<\\\\?|<![A-Za-z]|<!\\\\[CDATA\\\\[)')\n    .replace('tag', _tag) // pars can be interrupted by html blocks of types (1) to (6)\n    .getRegex(),\n};\n\n/**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\nconst blockPedantic: Record<BlockKeys, RegExp> = {\n  ...blockNormal,\n  html: edit(\n    '^ *(?:comment *(?:\\\\n|\\\\s*$)'\n    + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n    + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))')\n    .replace('comment', _comment)\n    .replace(/tag/g, '(?!(?:'\n      + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub'\n      + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)'\n      + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b')\n    .getRegex(),\n  def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n  heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n  fences: noopTest, // fences not supported\n  lheading: /^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n  paragraph: edit(_paragraph)\n    .replace('hr', hr)\n    .replace('heading', ' *#{1,6} *[^\\n]')\n    .replace('lheading', lheading)\n    .replace('|table', '')\n    .replace('blockquote', ' {0,3}>')\n    .replace('|fences', '')\n    .replace('|list', '')\n    .replace('|html', '')\n    .replace('|tag', '')\n    .getRegex(),\n};\n\n/**\n * Inline-Level Grammar\n */\n\nconst escape = /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/;\nconst inlineCode = /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/;\nconst br = /^( {2,}|\\\\)\\n(?!\\s*$)[ \\t]*/;\nconst inlineText = /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/;\n\n// list of unicode punctuation marks, plus any missing characters from CommonMark spec\nconst _punctuation = /[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpace = /[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpace = /[^\\s\\p{P}\\p{S}]/u;\nconst punctuation = edit(/^((?![*_])punctSpace)/, 'u')\n  .replace(/punctSpace/g, _punctuationOrSpace).getRegex();\n\n/**\n * Opening punct/quotes excluded from pedantic LDelim nextChar so\n * `aa**\"A\"**bb` / `aa**(A)**bb` can start strong (Pi + Ps + ASCII straight quotes).\n */\nconst _openQuote = /[\\p{Pi}\\p{Ps}\"']/u;\n\n// GFM allows ~ inside strong and em for strikethrough\nconst _punctuationGfmStrongEm = /(?!~)[\\p{P}\\p{S}]/u;\nconst _punctuationOrSpaceGfmStrongEm = /(?!~)[\\s\\p{P}\\p{S}]/u;\nconst _notPunctuationOrSpaceGfmStrongEm = /(?:[^\\s\\p{P}\\p{S}]|~)/u;\n\n// sequences em should skip over [title](link), `code`, <html>\nconst blockSkip = edit(/link|precode-code|html/, 'g')\n  .replace('link', /\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/)\n  .replace('precode-', supportsLookbehind ? '(?<!`)()' : '(^^|[^`])')\n  .replace('code', /(?<b>`+)[^`]+\\k<b>(?!`)/)\n  .replace('html', /<(?! )[^<>]*?>/)\n  .getRegex();\n\nconst emStrongLDelimCore = /^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/;\n\nconst emStrongLDelim = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongLDelimGfm = edit(emStrongLDelimCore, 'u')\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\n// Pedantic: do not treat opening punct/quotes as left-delim punct (e.g. **( / **\").\nconst emStrongLDelimPedanticCore = /^(?:\\*+(?:((?!\\*)(?!openQuote)punct)|([^\\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\\s_]))?/;\n\nconst emStrongLDelimPedantic = edit(emStrongLDelimPedanticCore, 'u')\n  .replace(/openQuote/g, _openQuote)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongRDelimAstCore =\n  '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)' // (3) #***a, ***a can only be Left Delimiter\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?=notPunctSpace)'; // (6) a***a can be either Left or Right Delimiter\n\nconst emStrongRDelimAst = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst emStrongRDelimAstGfm = edit(emStrongRDelimAstCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpaceGfmStrongEm)\n  .replace(/punctSpace/g, _punctuationOrSpaceGfmStrongEm)\n  .replace(/punct/g, _punctuationGfmStrongEm)\n  .getRegex();\n\n// Pedantic: rule 3 requires whitespace before left delim; rule 6 allows punct before close (e.g. `:**bar`).\nconst emStrongRDelimAstPedanticCore =\n  '^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)' // Skip orphan inside strong\n+ '|[^*]+(?=[^*])' // Consume to delim\n+ '|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)' // (1) #*** can only be a Right Delimiter\n+ '|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)' // (2) a***#, a*** can only be a Right Delimiter\n+ '|(?!\\\\*)[\\\\s](\\\\*+)(?=notPunctSpace)' // (3) ***a can only be Left Delimiter (whitespace required; not #***a)\n+ '|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)' // (4) ***# can only be Left Delimiter\n+ '|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)' // (5) #***# can be either Left or Right Delimiter\n+ '|(?:(?!\\\\*)punct|notPunctSpace)(\\\\*+)(?!\\\\*)(?=notPunctSpace)'; // (6) a***a, #***a, and :** (e.g. **foo:**bar)\n\nconst emStrongRDelimAstPedantic = edit(emStrongRDelimAstPedanticCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Normal: no rule 6 for _ (a___a cannot close as emphasis).\nconst emStrongRDelimUnd = edit(\n  '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)punctSpace(_+)(?=notPunctSpace)' // (3) #___a, ___a can only be Left Delimiter\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)', 'gu') // (5) #___# can be either Left or Right Delimiter\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Pedantic: same rule 3/6 adjustments as emStrongRDelimAstPedantic (e.g. `_foo:_bar`).\nconst emStrongRDelimUndPedanticCore =\n  '^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)' // Skip orphan inside strong\n+ '|[^_]+(?=[^_])' // Consume to delim\n+ '|(?!_)punct(_+)(?=[\\\\s]|$)' // (1) #___ can only be a Right Delimiter\n+ '|notPunctSpace(_+)(?!_)(?=punctSpace|$)' // (2) a___#, a___ can only be a Right Delimiter\n+ '|(?!_)[\\\\s](_+)(?=notPunctSpace)' // (3) ___a can only be Left Delimiter (whitespace required; not #___a)\n+ '|[\\\\s](_+)(?!_)(?=punct)' // (4) ___# can only be Left Delimiter\n+ '|(?!_)punct(_+)(?!_)(?=punct)' // (5) #___# can be either Left or Right Delimiter\n+ '|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)'; // (6) a___a, #___a, and :__ (e.g. _foo:_bar)\n\nconst emStrongRDelimUndPedantic = edit(emStrongRDelimUndPedanticCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Tilde left delimiter for strikethrough (similar to emStrongLDelim for asterisk)\nconst delLDelim = edit(/^~~?(?:((?!~)punct)|[^\\s~])/, 'u')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// Tilde delimiter patterns for strikethrough (similar to asterisk)\nconst delRDelimCore =\n  '^[^~]+(?=[^~])' // Consume to delim\n+ '|(?!~)punct(~~?)(?=[\\\\s]|$)' // (1) #~~ can only be a Right Delimiter\n+ '|notPunctSpace(~~?)(?!~)(?=punctSpace|$)' // (2) a~~#, a~~ can only be a Right Delimiter\n+ '|(?!~)punctSpace(~~?)(?=notPunctSpace)' // (3) #~~a, ~~a can only be Left Delimiter\n+ '|[\\\\s](~~?)(?!~)(?=punct)' // (4) ~~# can only be Left Delimiter\n+ '|(?!~)punct(~~?)(?!~)(?=punct)' // (5) #~~# can be either Left or Right Delimiter\n+ '|notPunctSpace(~~?)(?=notPunctSpace)'; // (6) a~~a can be either Left or Right Delimiter\n\nconst delRDelim = edit(delRDelimCore, 'gu')\n  .replace(/notPunctSpace/g, _notPunctuationOrSpace)\n  .replace(/punctSpace/g, _punctuationOrSpace)\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst anyPunctuation = edit(/\\\\(punct)/, 'gu')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\n// `anyPunctuation` for the em/strong mask. A backslash is literal inside a code\n// span, so a code span (matched like `inline.code`), or a backtick run that\n// opens none, is matched whole and kept; only the escapes outside code spans\n// are masked.\nconst anyPunctuationOutsideCode = edit(/(`+)(?:[^`]|[^`][\\s\\S]*?[^`])\\1(?!`)|`+|\\\\(punct)/, 'gu')\n  .replace(/punct/g, _punctuation)\n  .getRegex();\n\nconst autolink = edit(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/)\n  .replace('scheme', /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/)\n  .replace('email', /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/)\n  .getRegex();\n\nconst _inlineComment = edit(_comment).replace('(?:-->|$)', '-->').getRegex();\nconst tag = edit(\n  '^comment'\n    + '|^</[a-zA-Z][a-zA-Z0-9-]*\\\\s*>' // self-closing tag\n    + '|^<[a-zA-Z][a-zA-Z0-9-]*(?:attribute)*?\\\\s*/?>' // open tag\n    + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n    + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n    + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>') // CDATA section\n  .replace('comment', _inlineComment)\n  .replace('attribute', /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/)\n  .getRegex();\n\n// One matched pair of brackets, holding no bracket of its own.\nconst _inlineLabelBrackets = /\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]/;\n// CommonMark lets the brackets in a link label nest to any depth, which a regex\n// cannot follow, so it stops at a fixed one. Two levels is what the spec suite\n// asks for: a third and a fourth flip no further example.\nconst _inlineLabel = edit(/(?:\\[(?:brackets|\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/)\n  .replace('brackets', _inlineLabelBrackets)\n  .getRegex();\n\nconst link = edit(/^!?\\[(label)\\]\\([ \\t\\n]*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?[ \\t\\n]*\\)/)\n  .replace('label', _inlineLabel)\n  .replace('href', /<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]+|(?=\\))/)\n  .replace('title', /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/)\n  .getRegex();\n\nconst reflink = edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n  .replace('label', _inlineLabel)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\nconst nolink = edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n  .replace('ref', _blockLabel)\n  .getRegex();\n\n// `reflink` and `nolink` are anchored, so the tokenizer tries each of them at a\n// single position. `reflinkSearch` drops the anchors and runs with the global\n// flag, which makes every '[' in the source a start position. A label crosses a\n// bracket only by escaping it, and nothing caps how often it does, so a\n// candidate that can never match still scans to the end of the source and the\n// whole pass costs O(n^2).\n//\n// The labels below bound that scan. `_boundedInlineLabel` limits how many\n// escapes, code spans and nested brackets a link text may hold, leaving runs of\n// ordinary characters unbounded so link text of any length is still found.\n// `_boundedBlockLabel` limits the label itself to 999 items, which is every\n// label CommonMark allows: \"A link label can have at most 999 characters\n// inside the square brackets.\"\nconst _boundedBlockLabel = /(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\]){1,999}/;\nconst _boundedInlineLabel = edit(/(?:[^\\[\\]\\\\`]*(?:\\[(?:brackets|\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\]))){0,999}?[^\\[\\]\\\\`]*?/)\n  .replace('brackets', _inlineLabelBrackets)\n  .getRegex();\n\nconst reflinkSearch = edit('reflink|nolink(?!\\\\()', 'g')\n  .replace('reflink', edit(/^!?\\[(label)\\]\\[(ref)\\]/)\n    .replace('label', _boundedInlineLabel)\n    .replace('ref', _boundedBlockLabel)\n    .getRegex())\n  .replace('nolink', edit(/^!?\\[(ref)\\](?:\\[\\])?/)\n    .replace('ref', _boundedBlockLabel)\n    .getRegex())\n  .getRegex();\n\nconst _caseInsensitiveProtocol = /[hH][tT][tT][pP][sS]?|[fF][tT][pP]/;\nconst _extendedEmail = /[A-Za-z0-9._+-]+@[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\\w-])/;\nconst _extendedEmailProtocol = edit(/(?:mailto:email|xmpp:email(?:\\/[A-Za-z0-9@.]+)?)/)\n  .replace(/email/g, _extendedEmail)\n  .getRegex();\n\n/**\n * Normal Inline Grammar\n */\n\nconst inlineNormal = {\n  _backpedal: noopTest, // only used for GFM url\n  anyPunctuation,\n  anyPunctuationOutsideCode,\n  autolink,\n  blockSkip,\n  br,\n  code: inlineCode,\n  del: noopTest,\n  delLDelim: noopTest,\n  delRDelim: noopTest,\n  emStrongLDelim,\n  emStrongRDelimAst,\n  emStrongRDelimUnd,\n  escape,\n  link,\n  nolink,\n  punctuation,\n  reflink,\n  reflinkSearch,\n  tag,\n  text: inlineText,\n  url: noopTest,\n};\n\ntype InlineKeys = keyof typeof inlineNormal;\n\n/**\n * Pedantic Inline Grammar\n */\n\nconst inlinePedantic: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  emStrongLDelim: emStrongLDelimPedantic,\n  emStrongRDelimAst: emStrongRDelimAstPedantic,\n  emStrongRDelimUnd: emStrongRDelimUndPedantic,\n  link: edit(/^!?\\[(label)\\]\\((.*?)\\)/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n  reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/)\n    .replace('label', _inlineLabel)\n    .getRegex(),\n};\n\n/**\n * GFM Inline Grammar\n */\n\nconst inlineGfm: Record<InlineKeys, RegExp> = {\n  ...inlineNormal,\n  emStrongRDelimAst: emStrongRDelimAstGfm,\n  emStrongLDelim: emStrongLDelimGfm,\n  delLDelim,\n  delRDelim,\n  url: edit(/^emailProtocol|^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/)\n    .replace('emailProtocol', _extendedEmailProtocol)\n    .replace('protocol', _caseInsensitiveProtocol)\n    .replace('email', /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![\\w-])/)\n    .getRegex(),\n  _backpedal: /(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,\n  del: /^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,\n  text: edit(/^(?:[^a-zA-Z0-9](?=emailProtocol)|(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9](?=emailProtocol)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@))))/)\n    .replace('protocol', _caseInsensitiveProtocol)\n    .replace(/emailProtocol/g, /(?:mailto|xmpp):/)\n    .getRegex(),\n};\n\n/**\n * GFM + Line Breaks Inline Grammar\n */\n\nconst inlineBreaks: Record<InlineKeys, RegExp> = {\n  ...inlineGfm,\n  br: edit(br).replace('{2,}', '*').getRegex(),\n  text: edit(inlineGfm.text)\n    .replace('\\\\b_', '\\\\b_| {2,}\\\\n')\n    .replace(/\\{2,\\}/g, '*')\n    .getRegex(),\n};\n\n/**\n * exports\n */\n\nexport const block = {\n  normal: blockNormal,\n  gfm: blockGfm,\n  pedantic: blockPedantic,\n};\n\nexport const inline = {\n  normal: inlineNormal,\n  gfm: inlineGfm,\n  breaks: inlineBreaks,\n  pedantic: inlinePedantic,\n};\n\nexport interface Rules {\n  other: typeof other\n  block: Record<BlockKeys, RegExp>\n  inline: Record<InlineKeys, RegExp>\n}\n","import { other } from './rules.ts';\n\n/**\n * Helpers\n */\nconst escapeReplacements: { [index: string]: string } = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n};\nconst getEscapeReplacement = (ch: string) => escapeReplacements[ch];\n\nexport function escapeHtmlEntities(html: string, encode?: boolean) {\n  if (encode) {\n    if (other.escapeTest.test(html)) {\n      return html.replace(other.escapeReplace, getEscapeReplacement);\n    }\n  } else {\n    if (other.escapeTestNoEncode.test(html)) {\n      return html.replace(other.escapeReplaceNoEncode, getEscapeReplacement);\n    }\n  }\n\n  return html;\n}\n\n/**\n * Numeric character references are recognized outside code and are equivalent to the\n * character they name. Values that are zero, out of range, or a surrogate become the\n * replacement character.\n */\nexport function decodeNumericCharacterReferences(text: string) {\n  if (!other.numericCharacterReference.test(text)) {\n    return text;\n  }\n  // A decoded character must not join its neighbours into a new reference,\n  // so every `&` that is not already one is escaped here.\n  return text.replace(other.numericCharacterReferenceOrAmpersand, (ref: string, dec?: string, hex?: string) => {\n    if (dec === undefined && hex === undefined) {\n      return '&amp;';\n    }\n    const code = dec === undefined ? Number.parseInt(hex!, 16) : Number.parseInt(dec, 10);\n    if (code === 0 || code > 0x10ffff || (code >= 0xd800 && code <= 0xdfff)) {\n      return '�';\n    }\n    return code === 38 ? '&amp;' : String.fromCodePoint(code);\n  });\n}\n\nexport function cleanUrl(href: string) {\n  try {\n    href = encodeURI(href).replace(other.percentDecode, '%');\n  } catch {\n    return null;\n  }\n  return href;\n}\n\nexport function splitCells(tableRow: string, count?: number) {\n  // ensure that every cell-delimiting pipe has a space\n  // before it to distinguish it from an escaped pipe\n  const row = tableRow.replace(other.findPipe, (match, offset, str) => {\n      let escaped = false;\n      let curr = offset;\n      while (--curr >= 0 && str[curr] === '\\\\') escaped = !escaped;\n      if (escaped) {\n        // odd number of slashes means | is escaped\n        // so we leave it alone\n        return '|';\n      } else {\n        // add space before unescaped |\n        return ' |';\n      }\n    }),\n    cells = row.split(other.splitPipe);\n  let i = 0;\n\n  // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n  if (!cells[0].trim()) {\n    cells.shift();\n  }\n  if (cells.length > 0 && !cells.at(-1)?.trim()) {\n    cells.pop();\n  }\n\n  if (count) {\n    if (cells.length > count) {\n      cells.splice(count);\n    } else {\n      while (cells.length < count) cells.push('');\n    }\n  }\n\n  for (; i < cells.length; i++) {\n    // leading or trailing whitespace is ignored per the gfm spec\n    cells[i] = cells[i].trim().replace(other.slashPipe, '|');\n  }\n  return cells;\n}\n\n/**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param str\n * @param c\n * @param invert Remove suffix of non-c chars instead. Default falsey.\n */\nexport function rtrim(str: string, c: string, invert?: boolean) {\n  const l = str.length;\n  if (l === 0) {\n    return '';\n  }\n\n  // Length of suffix matching the invert condition.\n  let suffLen = 0;\n\n  // Step left until we fail to match the invert condition.\n  while (suffLen < l) {\n    const currChar = str.charAt(l - suffLen - 1);\n    if (currChar === c && !invert) {\n      suffLen++;\n    } else if (currChar !== c && invert) {\n      suffLen++;\n    } else {\n      break;\n    }\n  }\n\n  return str.slice(0, l - suffLen);\n}\n\nexport function trimTrailingBlankLines(str: string) {\n  const lines = str.split('\\n');\n  let end = lines.length - 1;\n  while (end >= 0 && other.blankLine.test(lines[end])) {\n    end--;\n  }\n  if (lines.length - end <= 2) {\n    // we want to keep single trailing blank lines\n    return str;\n  }\n\n  return lines.slice(0, end + 1).join('\\n');\n}\n\n/**\n * Normalizes a link label so definitions and references can be matched.\n * CommonMark asks for a Unicode case fold, which `toLowerCase()` does not\n * reach: `ẞ` lowercases to `ß` and so never meets `SS`. Round-tripping\n * through upper case does, as in commonmark.js; the final `toLowerCase()`\n * keeps the folded label lower case, the form `def.tag` has always used.\n */\nexport function normalizeLabel(label: string) {\n  // The spec also asks for leading and trailing spaces, tabs and line endings\n  // to be stripped. Doing it here keeps every call site in agreement: the\n  // definition and the reference have to normalize to the same key.\n  return label.trim().toLowerCase().toUpperCase().toLowerCase();\n}\n\nexport function findClosingBracket(str: string, b: string) {\n  // an opening bracket on its own is still unbalanced, so both have to be absent\n  if (str.indexOf(b[0]) === -1 && str.indexOf(b[1]) === -1) {\n    return -1;\n  }\n\n  let level = 0;\n  for (let i = 0; i < str.length; i++) {\n    if (str[i] === '\\\\') {\n      i++;\n    } else if (str[i] === b[0]) {\n      level++;\n    } else if (str[i] === b[1]) {\n      level--;\n      if (level < 0) {\n        return i;\n      }\n    }\n  }\n  if (level > 0) {\n    return -2;\n  }\n\n  return -1;\n}\n\nexport function expandTabs(line: string, indent = 0) {\n  let col = indent;\n  let expanded = '';\n  for (const char of line) {\n    if (char === '\\t') {\n      const added = 4 - (col % 4);\n      expanded += ' '.repeat(added);\n      col += added;\n    } else {\n      expanded += char;\n      col++;\n    }\n  }\n\n  return expanded;\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  rtrim,\n  splitCells,\n  findClosingBracket,\n  expandTabs,\n  normalizeLabel,\n  decodeNumericCharacterReferences,\n  trimTrailingBlankLines,\n} from './helpers.ts';\nimport type { Rules } from './rules.ts';\nimport type { _Lexer } from './Lexer.ts';\nimport type { Links, Tokens, Token } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\nfunction outputLink(cap: string[], link: Pick<Tokens.Link, 'href' | 'title'>, raw: string, lexer: _Lexer, rules: Rules): Tokens.Link | Tokens.Image | undefined {\n  const href = link.href;\n  const title = link.title || null;\n  const text = cap[1].replace(rules.other.outputLinkReplace, '$1');\n  const isImage = cap[0].charAt(0) === '!';\n\n  const outerInLink = lexer.state.inLink;\n  const outerLinkEmitted = lexer.state.linkEmitted;\n  const outerInRawBlock = lexer.state.inRawBlock;\n  lexer.state.inLink = true;\n  lexer.state.linkEmitted = false;\n  const tokens = lexer.inlineTokens(text);\n  const textHasLink = lexer.state.linkEmitted;\n  lexer.state.linkEmitted = outerLinkEmitted;\n  lexer.state.inLink = outerInLink;\n\n  if (!isImage) {\n    // CommonMark: \"Links may not contain other links, at any level of nesting.\"\n    // Bail so the caller falls through to text and the inner link is the one kept.\n    // Images are exempt: their text is flattened into an alt attribute.\n    if (textHasLink) {\n      // these tokens are discarded, so undo the raw-block state they opened;\n      // leaving it set would suppress escaping for the text that is re-scanned\n      lexer.state.inRawBlock = outerInRawBlock;\n      return;\n    }\n    lexer.state.linkEmitted = true;\n  }\n\n  return {\n    type: isImage ? 'image' : 'link',\n    raw,\n    href,\n    title,\n    text,\n    tokens,\n  };\n}\n\nfunction indentCodeCompensation(raw: string, text: string, rules: Rules) {\n  const matchIndentToCode = raw.match(rules.other.indentCodeCompensation);\n\n  if (matchIndentToCode === null) {\n    return text;\n  }\n\n  const indentToCode = matchIndentToCode[1];\n\n  return text\n    .split('\\n')\n    .map(node => {\n      const matchIndentInNode = node.match(rules.other.beginningSpace);\n      if (matchIndentInNode === null) {\n        return node;\n      }\n\n      const [indentInNode] = matchIndentInNode;\n\n      // Up to the fence's own indentation is removed from each line, so a line\n      // indented less than the fence loses whatever indentation it has.\n      return node.slice(Math.min(indentInNode.length, indentToCode.length));\n    })\n    .join('\\n');\n}\n\nfunction isLabelEndInsideToken(src: string, label: string, labelStart: number, rules: Rules) {\n  if (!label.includes('<')) {\n    return false;\n  }\n\n  for (let i = 0; i < label.length; i++) {\n    if (label[i] === '\\\\') {\n      i++;\n      continue;\n    }\n\n    if (label[i] === '`') {\n      const code = rules.inline.code.exec(label.slice(i));\n      if (code) {\n        i += code[0].length - 1;\n        continue;\n      }\n    }\n\n    if (label[i] !== '<') {\n      continue;\n    }\n\n    const tokenSrc = src.slice(labelStart + i);\n    const token = rules.inline.tag.exec(tokenSrc) || rules.inline.autolink.exec(tokenSrc);\n    if (!token) {\n      continue;\n    }\n\n    if (token[0].length > label.length - i) {\n      return true;\n    }\n    i += token[0].length - 1;\n  }\n  return false;\n}\n\n/**\n * Tokenizer\n */\nexport class _Tokenizer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  rules!: Rules; // set by the lexer\n  lexer!: _Lexer<ParserOutput, RendererOutput>; // set by the lexer\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(src: string): Tokens.Space | undefined {\n    const cap = this.rules.block.newline.exec(src);\n    if (cap && cap[0].length > 0) {\n      return {\n        type: 'space',\n        raw: cap[0],\n      };\n    }\n  }\n\n  code(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.code.exec(src);\n    if (cap) {\n      const raw = this.options.pedantic\n        ? cap[0]\n        : trimTrailingBlankLines(cap[0]);\n      const text = raw.replace(this.rules.other.codeRemoveIndent, '');\n      return {\n        type: 'code',\n        raw,\n        codeBlockStyle: 'indented',\n        text,\n      };\n    }\n  }\n\n  fences(src: string): Tokens.Code | undefined {\n    const cap = this.rules.block.fences.exec(src);\n    if (cap) {\n      const raw = cap[0];\n      const text = indentCodeCompensation(raw, cap[3] || '', this.rules);\n\n      return {\n        type: 'code',\n        raw,\n        lang: cap[2] ? cap[2].trim().replace(this.rules.inline.anyPunctuation, '$1') : cap[2],\n        text,\n      };\n    }\n  }\n\n  heading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.heading.exec(src);\n    if (cap) {\n      let text = cap[2].trim();\n\n      // remove trailing #s\n      if (this.rules.other.endingHash.test(text)) {\n        const trimmed = rtrim(text, '#');\n        if (this.options.pedantic) {\n          text = trimmed.trim();\n        } else if (!trimmed || this.rules.other.endingSpaceTabChar.test(trimmed)) {\n          // CommonMark requires a space or tab before trailing #s\n          text = trimmed.trim();\n        }\n      }\n\n      return {\n        type: 'heading',\n        raw: rtrim(cap[0], '\\n'),\n        depth: cap[1].length,\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  hr(src: string): Tokens.Hr | undefined {\n    const cap = this.rules.block.hr.exec(src);\n    if (cap) {\n      return {\n        type: 'hr',\n        raw: rtrim(cap[0], '\\n'),\n      };\n    }\n  }\n\n  blockquote(src: string): Tokens.Blockquote | undefined {\n    const cap = this.rules.block.blockquote.exec(src);\n    if (cap) {\n      let lines = rtrim(cap[0], '\\n').split('\\n');\n      let raw = '';\n      let text = '';\n      const tokens: Token[] = [];\n\n      while (lines.length > 0) {\n        let inBlockquote = false;\n        const currentLines = [];\n\n        let i;\n        for (i = 0; i < lines.length; i++) {\n          // get lines up to a continuation\n          if (this.rules.other.blockquoteStart.test(lines[i])) {\n            currentLines.push(lines[i]);\n            inBlockquote = true;\n          } else if (!inBlockquote) {\n            currentLines.push(lines[i]);\n          } else {\n            break;\n          }\n        }\n        lines = lines.slice(i);\n\n        const currentRaw = currentLines.join('\\n');\n        const currentText = currentRaw\n          // precede setext continuation with 4 spaces so it isn't a setext\n          .replace(this.rules.other.blockquoteSetextReplace, '\\n    $1')\n          .replace(this.rules.other.blockquoteSetextReplace2, '');\n        raw = raw ? `${raw}\\n${currentRaw}` : currentRaw;\n        text = text ? `${text}\\n${currentText}` : currentText;\n\n        // parse blockquote lines as top level tokens\n        // merge paragraphs if this is a continuation\n        const top = this.lexer.state.top;\n        this.lexer.state.top = true;\n        this.lexer.blockTokens(currentText, tokens, true);\n        this.lexer.state.top = top;\n\n        // if there is no continuation then we are done\n        if (lines.length === 0) {\n          break;\n        }\n\n        const lastToken = tokens.at(-1);\n\n        if (lastToken?.type === 'code' || lastToken?.type === 'heading' || lastToken?.type === 'hr' || lastToken?.type === 'html') {\n          // blockquote continuation cannot be preceded by a code block, heading, hr or html block\n          break;\n        } else if (lastToken?.type === 'blockquote') {\n          // include continuation in nested blockquote\n          const oldToken = lastToken as Tokens.Blockquote;\n          // The continuation lines belong to the same nesting frame as the\n          // nested blockquote, which already had one '>' marker stripped, so\n          // strip one marker from them too. Otherwise a restated marker after a\n          // lazy line is re-parsed as a spurious deeper blockquote.\n          const continuation = lines.join('\\n');\n          const newText = oldToken.raw + '\\n' + continuation.replace(this.rules.other.blockquoteSetextReplace2, '');\n          const newToken = this.blockquote(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          // Only include continuation lines the nested blockquote actually\n          // consumed. Unconsumed trailing lines must stay out of `raw` so the\n          // lexer can still tokenize them (paragraph, next blockquote, etc.).\n          const leftover = newText.substring(newToken.raw.length).replace(/^\\n/, '');\n          const leftoverCount = leftover ? leftover.split('\\n').length : 0;\n          const consumed = leftoverCount ? lines.slice(0, -leftoverCount) : lines;\n          if (consumed.length > 0) {\n            raw = `${raw}\\n${consumed.join('\\n')}`;\n          }\n          text = text.substring(0, text.length - oldToken.text.length) + newToken.text;\n          break;\n        } else if (lastToken?.type === 'list') {\n          // include continuation in nested list\n          const oldToken = lastToken as Tokens.List;\n          const newText = oldToken.raw + '\\n' + lines.join('\\n');\n          const newToken = this.list(newText)!;\n          tokens[tokens.length - 1] = newToken;\n\n          raw = raw.substring(0, raw.length - lastToken.raw.length) + newToken.raw;\n          text = text.substring(0, text.length - oldToken.raw.length) + newToken.raw;\n          lines = newText.substring(tokens.at(-1)!.raw.length).split('\\n');\n          continue;\n        }\n      }\n\n      return {\n        type: 'blockquote',\n        raw,\n        tokens,\n        text,\n      };\n    }\n  }\n\n  list(src: string): Tokens.List | undefined {\n    let cap = this.rules.block.list.exec(src);\n    if (cap) {\n      // src is only consumed from the front, so every raw below is a slice of\n      // listSrc rather than a string built up line by line\n      const listSrc = src;\n      const taken = () => listSrc.length - src.length;\n      let bull = cap[1].trim();\n      const isordered = bull.length > 1;\n\n      const list: Tokens.List = {\n        type: 'list',\n        raw: '',\n        ordered: isordered,\n        start: isordered ? +bull.slice(0, -1) : '',\n        loose: false,\n        items: [],\n      };\n\n      bull = isordered ? `\\\\d{1,9}\\\\${bull.slice(-1)}` : `\\\\${bull}`;\n\n      if (this.options.pedantic) {\n        bull = isordered ? bull : '[*+-]';\n      }\n\n      // Get next list item\n      const itemRegex = this.rules.other.listItemRegex(bull);\n      let endsWithBlankLine = false;\n      // Check if current bullet point can start a new List Item\n      while (src) {\n        let endEarly = false;\n        let itemContents = '';\n        if (!(cap = itemRegex.exec(src))) {\n          break;\n        }\n\n        if (this.rules.block.hr.test(src)) { // End list if bullet was actually HR (possibly move into itemRegex?)\n          break;\n        }\n\n        const itemStart = taken();\n        src = src.substring(cap[0].length);\n\n        const firstLine = cap[2].split('\\n', 1)[0];\n        const bulletIndent = cap[1].length;\n        let line = this.options.pedantic\n          ? expandTabs(firstLine, bulletIndent)\n          : firstLine.replace(this.rules.other.leadingSpaceTab, whitespace => expandTabs(whitespace, bulletIndent));\n        let nextLine = src.split('\\n', 1)[0];\n        let blankLine = !line.trim();\n\n        let indent = 0;\n        if (this.options.pedantic) {\n          indent = 2;\n          itemContents = line.trimStart();\n        } else if (blankLine) {\n          indent = bulletIndent + 1;\n        } else {\n          indent = line.search(this.rules.other.nonSpaceChar); // Find first non-space char\n          indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n          itemContents = line.slice(indent);\n          indent += bulletIndent;\n        }\n\n        if (blankLine && this.rules.other.blankLine.test(nextLine)) { // Items begin with at most one blank line\n          src = src.substring(nextLine.length + 1);\n          endEarly = true;\n        }\n\n        if (!endEarly) {\n          const nextBulletRegex = this.rules.other.nextBulletRegex(indent);\n          const hrRegex = this.rules.other.hrRegex(indent);\n          const fencesBeginRegex = this.rules.other.fencesBeginRegex(indent);\n          const headingBeginRegex = this.rules.other.headingBeginRegex(indent);\n          const htmlBeginRegex = this.rules.other.htmlBeginRegex(indent);\n          const blockquoteBeginRegex = this.rules.other.blockquoteBeginRegex(indent);\n\n          // Check if following lines should be included in List Item\n          while (src) {\n            const rawLine = src.split('\\n', 1)[0];\n            let nextLineWithoutTabs;\n            nextLine = rawLine;\n\n            // Re-align to follow commonmark nesting rules\n            if (this.options.pedantic) {\n              nextLine = nextLine.replace(this.rules.other.listReplaceNesting, '  ');\n              nextLineWithoutTabs = nextLine;\n            } else {\n              nextLineWithoutTabs = nextLine.replace(this.rules.other.leadingSpaceTab, whitespace => expandTabs(whitespace));\n            }\n\n            // End list item if found code fences\n            if (fencesBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new heading\n            if (headingBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of html block\n            if (htmlBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of blockquote\n            if (blockquoteBeginRegex.test(nextLine)) {\n              break;\n            }\n\n            // End list item if found start of new bullet\n            if (nextBulletRegex.test(nextLine)) {\n              break;\n            }\n\n            // Horizontal rule found\n            if (hrRegex.test(nextLine)) {\n              break;\n            }\n\n            if (nextLineWithoutTabs.search(this.rules.other.nonSpaceChar) >= indent || !nextLine.trim()) { // Dedent if possible\n              itemContents += '\\n' + nextLineWithoutTabs.slice(indent);\n            } else {\n              // not enough indentation\n              if (blankLine) {\n                break;\n              }\n\n              // paragraph continuation unless last line was a different block level element\n              if (line.replace(this.rules.other.tabCharGlobal, '    ').search(this.rules.other.nonSpaceChar) >= 4) { // indented code block\n                break;\n              }\n              if (fencesBeginRegex.test(line)) {\n                break;\n              }\n              if (headingBeginRegex.test(line)) {\n                break;\n              }\n              if (hrRegex.test(line)) {\n                break;\n              }\n\n              itemContents += '\\n' + nextLine;\n            }\n\n            blankLine = !nextLine.trim();\n\n            src = src.substring(rawLine.length + 1);\n            line = nextLineWithoutTabs.slice(indent);\n          }\n        }\n\n        // The loops above appended a '\\n' the source may not have had. It could\n        // only land on the item that exhausts src, whose raw is trimmed below,\n        // and after which nothing reads endsWithBlankLine\n        const raw = listSrc.slice(itemStart, taken());\n\n        if (!list.loose) {\n          // If the previous item ended with a blank line, the list is loose\n          if (endsWithBlankLine) {\n            list.loose = true;\n          } else if (this.rules.other.doubleBlankLine.test(raw)) {\n            endsWithBlankLine = true;\n          }\n        }\n\n        list.items.push({\n          type: 'list_item',\n          raw,\n          task: !!this.options.gfm && this.rules.other.listIsTask.test(itemContents),\n          loose: false,\n          text: itemContents,\n          tokens: [],\n        });\n      }\n\n      // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n      const lastItem = list.items.at(-1);\n      if (lastItem) {\n        lastItem.raw = lastItem.raw.trimEnd();\n        lastItem.text = lastItem.text.trimEnd();\n      } else {\n        // not a list since there were no items\n        return;\n      }\n      list.raw = listSrc.slice(0, taken()).trimEnd();\n\n      // Item child tokens handled here at end because we needed to have the final item to trim it first\n      // First pass: tokenize items and finalize list.loose from spacers before placing checkboxes\n      for (const item of list.items) {\n        this.lexer.state.top = false;\n        item.tokens = this.lexer.blockTokens(item.text, []);\n\n        if (!list.loose) {\n          // Check if list should be loose\n          const spacers = item.tokens.filter(t => t.type === 'space');\n          const hasMultipleLineBreaks = spacers.length > 0 && spacers.some(t => this.rules.other.anyLine.test(t.raw));\n\n          list.loose = hasMultipleLineBreaks;\n        }\n      }\n\n      // Second pass: place task checkboxes using the final list.loose\n      for (const item of list.items) {\n        const itemToken = item.tokens[0];\n        if (item.task && (itemToken?.type === 'text' || itemToken?.type === 'paragraph')) {\n          // Remove checkbox markdown from item tokens\n          item.text = item.text.replace(this.rules.other.listReplaceTask, '');\n          itemToken.raw = itemToken.raw.replace(this.rules.other.listReplaceTask, '');\n          itemToken.text = itemToken.text.replace(this.rules.other.listReplaceTask, '');\n          for (let i = this.lexer.inlineQueue.length - 1; i >= 0; i--) {\n            if (this.rules.other.listIsTask.test(this.lexer.inlineQueue[i].src)) {\n              this.lexer.inlineQueue[i].src = this.lexer.inlineQueue[i].src.replace(this.rules.other.listReplaceTask, '');\n              break;\n            }\n          }\n\n          const taskRaw = this.rules.other.listTaskCheckbox.exec(item.raw);\n          if (taskRaw) {\n            const checkboxToken: Tokens.Checkbox = {\n              type: 'checkbox',\n              raw: taskRaw[0] + ' ',\n              checked: taskRaw[0] !== '[ ]',\n            };\n            item.checked = checkboxToken.checked;\n            if (list.loose) {\n              if (item.tokens[0] && ['paragraph', 'text'].includes(item.tokens[0].type) && 'tokens' in item.tokens[0] && item.tokens[0].tokens) {\n                item.tokens[0].raw = checkboxToken.raw + item.tokens[0].raw;\n                item.tokens[0].text = checkboxToken.raw + item.tokens[0].text;\n                item.tokens[0].tokens.unshift(checkboxToken);\n              } else {\n                item.tokens.unshift({\n                  type: 'paragraph',\n                  raw: checkboxToken.raw,\n                  text: checkboxToken.raw,\n                  tokens: [checkboxToken],\n                });\n              }\n            } else {\n              item.tokens.unshift(checkboxToken);\n            }\n          }\n        } else if (item.task) {\n          item.task = false;\n        }\n      }\n\n      // Set all items to loose if list is loose\n      if (list.loose) {\n        for (const item of list.items) {\n          item.loose = true;\n          for (const token of item.tokens) {\n            if (token.type === 'text') {\n              token.type = 'paragraph';\n            }\n          }\n        }\n      }\n\n      return list;\n    }\n  }\n\n  html(src: string): Tokens.HTML | undefined {\n    const cap = this.rules.block.html.exec(src);\n    if (cap) {\n      const raw = trimTrailingBlankLines(cap[0]);\n      const token: Tokens.HTML = {\n        type: 'html',\n        block: true,\n        raw,\n        pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',\n        text: raw,\n      };\n      return token;\n    }\n  }\n\n  def(src: string): Tokens.Def | undefined {\n    const cap = this.rules.block.def.exec(src);\n    if (cap) {\n      // outside angle brackets a link destination holds only balanced parentheses\n      if (!this.rules.other.startAngleBracket.test(cap[2]) && findClosingBracket(cap[2], '()') !== -1) {\n        return;\n      }\n\n      const tag = normalizeLabel(cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const href = cap[2] ? cap[2].replace(this.rules.other.hrefBrackets, '$1').replace(this.rules.inline.anyPunctuation, '$1') : '';\n      const title = cap[3] ? cap[3].substring(1, cap[3].length - 1).replace(this.rules.inline.anyPunctuation, '$1') : cap[3];\n      return {\n        type: 'def',\n        tag,\n        raw: rtrim(cap[0], '\\n'),\n        href,\n        title,\n      };\n    }\n  }\n\n  table(src: string): Tokens.Table | undefined {\n    const cap = this.rules.block.table.exec(src);\n    if (!cap) {\n      return;\n    }\n\n    if (!this.rules.other.tableDelimiter.test(cap[2])) {\n      // delimiter row must have a pipe (|) or colon (:) otherwise it is a setext heading\n      return;\n    }\n\n    const headers = splitCells(cap[1]);\n    const aligns = cap[2].replace(this.rules.other.tableAlignChars, '').split('|');\n    const rows = cap[3]?.trim() ? cap[3].replace(this.rules.other.tableRowBlankLine, '').split('\\n') : [];\n\n    const item: Tokens.Table = {\n      type: 'table',\n      raw: rtrim(cap[0], '\\n'),\n      header: [],\n      align: [],\n      rows: [],\n    };\n\n    if (headers.length !== aligns.length) {\n      // header and align columns must be equal, rows can be different.\n      return;\n    }\n\n    for (const align of aligns) {\n      if (this.rules.other.tableAlignRight.test(align)) {\n        item.align.push('right');\n      } else if (this.rules.other.tableAlignCenter.test(align)) {\n        item.align.push('center');\n      } else if (this.rules.other.tableAlignLeft.test(align)) {\n        item.align.push('left');\n      } else {\n        item.align.push(null);\n      }\n    }\n\n    for (let i = 0; i < headers.length; i++) {\n      item.header.push({\n        text: headers[i],\n        tokens: this.lexer.inline(headers[i]),\n        header: true,\n        align: item.align[i],\n      });\n    }\n\n    for (const row of rows) {\n      item.rows.push(splitCells(row, item.header.length).map((cell, i) => {\n        return {\n          text: cell,\n          tokens: this.lexer.inline(cell),\n          header: false,\n          align: item.align[i],\n        };\n      }));\n    }\n\n    return item;\n  }\n\n  lheading(src: string): Tokens.Heading | undefined {\n    const cap = this.rules.block.lheading.exec(src);\n    if (cap) {\n      const text = cap[1].trim();\n      return {\n        type: 'heading',\n        raw: rtrim(cap[0], '\\n'),\n        depth: cap[2].charAt(0) === '=' ? 1 : 2,\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  paragraph(src: string): Tokens.Paragraph | undefined {\n    const cap = this.rules.block.paragraph.exec(src);\n    if (cap) {\n      const text = cap[1].charAt(cap[1].length - 1) === '\\n'\n        ? cap[1].slice(0, -1)\n        : cap[1];\n      return {\n        type: 'paragraph',\n        raw: cap[0],\n        text,\n        tokens: this.lexer.inline(text),\n      };\n    }\n  }\n\n  text(src: string): Tokens.Text | undefined {\n    const cap = this.rules.block.text.exec(src);\n    if (cap) {\n      return {\n        type: 'text',\n        raw: cap[0],\n        text: cap[0],\n        tokens: this.lexer.inline(cap[0]),\n      };\n    }\n  }\n\n  escape(src: string): Tokens.Escape | undefined {\n    const cap = this.rules.inline.escape.exec(src);\n    if (cap) {\n      return {\n        type: 'escape',\n        raw: cap[0],\n        text: cap[1],\n      };\n    }\n  }\n\n  tag(src: string): Tokens.Tag | undefined {\n    const cap = this.rules.inline.tag.exec(src);\n    if (cap) {\n      if (!this.lexer.state.inLink && this.rules.other.startATag.test(cap[0])) {\n        this.lexer.state.inLink = true;\n      } else if (this.lexer.state.inLink && this.rules.other.endATag.test(cap[0])) {\n        this.lexer.state.inLink = false;\n      }\n      if (!this.lexer.state.inRawBlock && this.rules.other.startPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = true;\n      } else if (this.lexer.state.inRawBlock && this.rules.other.endPreScriptTag.test(cap[0])) {\n        this.lexer.state.inRawBlock = false;\n      }\n\n      return {\n        type: 'html',\n        raw: cap[0],\n        inLink: this.lexer.state.inLink,\n        inRawBlock: this.lexer.state.inRawBlock,\n        block: false,\n        text: cap[0],\n      };\n    }\n  }\n\n  link(src: string): Tokens.Link | Tokens.Image | undefined {\n    // The link regex backtracks quadratically over unterminated-link inputs\n    // like '[a](b'.repeat(n): at every '[' its greedy unquoted-href run\n    // re-partitions the whole remainder while hunting for a ')' that never\n    // comes. inlineTokens anchors one paren scan per run in\n    // state.linkParenPossible; when it is false the regex cannot match, so\n    // bail out before running it.\n    if (this.lexer.state.linkParenPossible === false) {\n      return undefined;\n    }\n    const cap = this.rules.inline.link.exec(src);\n    if (cap) {\n      const labelStart = cap[0].charAt(0) === '!' ? 2 : 1;\n      if (!this.options.pedantic && isLabelEndInsideToken(src, cap[1], labelStart, this.rules)) {\n        return;\n      }\n\n      const trimmedUrl = cap[2].trim();\n      if (!this.options.pedantic && this.rules.other.startAngleBracket.test(trimmedUrl)) {\n        // commonmark requires matching angle brackets\n        if (!(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          return;\n        }\n\n        // ending angle bracket cannot be escaped\n        const rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n        if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n          return;\n        }\n      } else {\n        // find closing parenthesis\n        const lastParenIndex = findClosingBracket(cap[2], '()');\n        if (lastParenIndex === -2) {\n          // more open parens than closed\n          return;\n        }\n\n        if (lastParenIndex > -1) {\n          const start = cap[0].indexOf('!') === 0 ? 5 : 4;\n          const linkLen = start + cap[1].length + lastParenIndex;\n          cap[2] = cap[2].substring(0, lastParenIndex);\n          cap[0] = cap[0].substring(0, linkLen).trim();\n          cap[3] = '';\n        }\n      }\n      let href = cap[2];\n      let title = '';\n      if (this.options.pedantic) {\n        // split pedantic href and title\n        const link = this.rules.other.pedanticHrefTitle.exec(href);\n\n        if (link) {\n          href = link[1];\n          title = link[3];\n        }\n      } else {\n        title = cap[3] ? cap[3].slice(1, -1) : '';\n      }\n\n      href = href.trim();\n      if (this.rules.other.startAngleBracket.test(href)) {\n        if (this.options.pedantic && !(this.rules.other.endAngleBracket.test(trimmedUrl))) {\n          // pedantic allows starting angle bracket without ending angle bracket\n          href = href.slice(1);\n        } else {\n          href = href.slice(1, -1);\n        }\n      }\n      return outputLink(cap, {\n        href: href ? href.replace(this.rules.inline.anyPunctuation, '$1') : href,\n        title: title ? title.replace(this.rules.inline.anyPunctuation, '$1') : title,\n      }, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  reflink(src: string, links: Links): Tokens.Link | Tokens.Image | Tokens.Text | undefined {\n    let cap;\n    if ((cap = this.rules.inline.reflink.exec(src))\n      || (cap = this.rules.inline.nolink.exec(src))) {\n      const labelStart = cap[0].charAt(0) === '!' ? 2 : 1;\n      if (!this.options.pedantic && isLabelEndInsideToken(src, cap[1], labelStart, this.rules)) {\n        return;\n      }\n\n      const linkString = (cap[2] || cap[1]).replace(this.rules.other.multipleSpaceGlobal, ' ');\n      const link = links[normalizeLabel(linkString)];\n      if (!link) {\n        const text = cap[0].charAt(0);\n        return {\n          type: 'text',\n          raw: text,\n          text,\n        };\n      }\n      return outputLink(cap, link, cap[0], this.lexer, this.rules);\n    }\n  }\n\n  emStrong(src: string, maskedSrc: string, prevChar = ''): Tokens.Em | Tokens.Strong | undefined {\n    let match = this.rules.inline.emStrongLDelim.exec(src);\n    if (!match) return;\n    if (!match[1] && !match[2] && !match[3] && !match[4]) return;\n\n    // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n    if (match[4] && prevChar.match(this.rules.other.unicodeAlphaNumeric)) return;\n\n    const nextChar = match[1] || match[3] || '';\n\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      // unicode Regex counts emoji as 1 char; spread into array for proper count (used multiple times below)\n      const lLength = [...match[0]].length - 1;\n      let rDelim, rLength, delimTotal = lLength, midDelimTotal = 0;\n\n      const delimChar = match[0][0];\n      // A mid-run opener (for example the second star of an unmatched `**`) must\n      // only pair with a delimiter that can only close, otherwise it steals the\n      // opener of a later span (`**a*b*c` must be `**a<em>b</em>c`).\n      const midRun = prevChar === delimChar;\n      const endReg = delimChar === '*' ? this.rules.inline.emStrongRDelimAst : this.rules.inline.emStrongRDelimUnd;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src (move to lexer?)\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) !== null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue; // skip single * in __abc*abc__\n\n        rLength = [...rDelim].length;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        } else if (match[5] || match[6]) { // either Left or Right Delim\n          if (lLength % 3 && !((lLength + rLength) % 3)) {\n            midDelimTotal += rLength;\n            continue; // CommonMark Emphasis Rules 9-10\n          }\n          if (midRun) {\n            // A mid-run opener cannot close against an ambiguous delimiter that\n            // can also open; that delimiter opens its own emphasis span instead.\n            break;\n          }\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters. *a*** -> *a*\n        rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal);\n        // char length can be >1 for unicode characters;\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n        // Create `em` if smallest delimiter has odd char count. *a***\n        if (Math.min(lLength, rLength) % 2) {\n          const text = raw.slice(1, -1);\n          return {\n            type: 'em',\n            raw,\n            text,\n            tokens: this.lexer.inlineTokens(text),\n          };\n        }\n\n        // Create 'strong' if smallest delimiter has even char count. **a***\n        const text = raw.slice(2, -2);\n        return {\n          type: 'strong',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text),\n        };\n      }\n    }\n  }\n\n  codespan(src: string): Tokens.Codespan | undefined {\n    const cap = this.rules.inline.code.exec(src);\n    if (cap) {\n      let text = cap[2].replace(this.rules.other.newLineCharGlobal, ' ');\n      const hasNonSpaceChars = this.rules.other.nonSpaceChar.test(text);\n      const hasSpaceCharsOnBothEnds = this.rules.other.startingSpaceChar.test(text) && this.rules.other.endingSpaceChar.test(text);\n      if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n        text = text.substring(1, text.length - 1);\n      }\n      return {\n        type: 'codespan',\n        raw: cap[0],\n        text,\n      };\n    }\n  }\n\n  br(src: string): Tokens.Br | undefined {\n    const cap = this.rules.inline.br.exec(src);\n    if (cap) {\n      return {\n        type: 'br',\n        raw: cap[0],\n      };\n    }\n  }\n\n  del(src: string, maskedSrc: string, prevChar = ''): Tokens.Del | undefined {\n    let match = this.rules.inline.delLDelim.exec(src);\n    if (!match) return;\n\n    const nextChar = match[1] || '';\n\n    if (!nextChar || !prevChar || this.rules.inline.punctuation.exec(prevChar)) {\n      // unicode Regex counts emoji as 1 char; spread into array for proper count\n      const lLength = [...match[0]].length - 1;\n      let rDelim, rLength, delimTotal = lLength;\n\n      const endReg = this.rules.inline.delRDelim;\n      endReg.lastIndex = 0;\n\n      // Clip maskedSrc to same section of string as src\n      maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n      while ((match = endReg.exec(maskedSrc)) !== null) {\n        rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n\n        if (!rDelim) continue;\n\n        rLength = [...rDelim].length;\n\n        if (rLength !== lLength) continue;\n\n        if (match[3] || match[4]) { // found another Left Delim\n          delimTotal += rLength;\n          continue;\n        }\n\n        delimTotal -= rLength;\n\n        if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n\n        // Remove extra characters\n        rLength = Math.min(rLength, rLength + delimTotal);\n        // char length can be >1 for unicode characters\n        const lastCharLength = [...match[0]][0].length;\n        const raw = src.slice(0, lLength + match.index + lastCharLength + rLength);\n\n        // Create del token - only single ~ or double ~~ supported\n        const text = raw.slice(lLength, -lLength);\n        return {\n          type: 'del',\n          raw,\n          text,\n          tokens: this.lexer.inlineTokens(text),\n        };\n      }\n    }\n  }\n\n  autolink(src: string): Tokens.Link | undefined {\n    const cap = this.rules.inline.autolink.exec(src);\n    if (cap) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[1];\n        href = 'mailto:' + text;\n      } else {\n        text = cap[1];\n        href = text;\n      }\n\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        autolink: true,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  url(src: string): Tokens.Link | undefined {\n    let cap;\n    if (cap = this.rules.inline.url.exec(src)) {\n      let text, href;\n      if (cap[2] === '@') {\n        text = cap[0];\n        href = 'mailto:' + text;\n      } else {\n        // do extended autolink path validation\n        let prevCapZero;\n        do {\n          prevCapZero = cap[0];\n          cap[0] = this.rules.inline._backpedal.exec(cap[0])?.[0] ?? '';\n        } while (prevCapZero !== cap[0]);\n        text = cap[0];\n        if (cap[1] === 'www.') {\n          href = 'http://' + cap[0];\n        } else {\n          href = cap[0];\n        }\n      }\n      return {\n        type: 'link',\n        raw: cap[0],\n        text,\n        href,\n        autolink: true,\n        tokens: [\n          {\n            type: 'text',\n            raw: text,\n            text,\n          },\n        ],\n      };\n    }\n  }\n\n  inlineText(src: string): Tokens.Text | undefined {\n    const cap = this.rules.inline.text.exec(src);\n    if (cap) {\n      const escaped = this.lexer.state.inRawBlock;\n      return {\n        type: 'text',\n        raw: cap[0],\n        // raw HTML keeps whatever it was written with, everywhere else a numeric\n        // character reference stands for the character itself\n        text: escaped ? cap[0] : decodeNumericCharacterReferences(cap[0]),\n        escaped,\n      };\n    }\n  }\n}\n","import { _Tokenizer } from './Tokenizer.ts';\nimport { _defaults } from './defaults.ts';\nimport { other, block, inline } from './rules.ts';\nimport { normalizeLabel } from './helpers.ts';\nimport type { Token, TokensList, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Block Lexer\n */\nexport class _Lexer<ParserOutput = string, RendererOutput = string> {\n  tokens: TokensList;\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  state: {\n    inLink: boolean;\n    inRawBlock: boolean;\n    /** a link was produced in the inline run currently being scanned */\n    linkEmitted: boolean;\n    /**\n     * false while scanning an inline run whose source contains no ')',\n     * letting Tokenizer.link bail out before its quadratic backtracking.\n     * Anchored once per run by inlineTokens.\n     */\n    linkParenPossible: boolean;\n    top: boolean;\n  };\n\n  public inlineQueue: { src: string, tokens: Token[] }[];\n\n  private tokenizer: _Tokenizer<ParserOutput, RendererOutput>;\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    // TokenList cannot be created in one go\n    this.tokens = [] as unknown as TokensList;\n    this.tokens.links = Object.create(null);\n    this.options = options || _defaults;\n    this.options.tokenizer = this.options.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>();\n    this.tokenizer = this.options.tokenizer;\n    this.tokenizer.options = this.options;\n    this.tokenizer.lexer = this;\n    this.inlineQueue = [];\n    this.state = {\n      inLink: false,\n      inRawBlock: false,\n      linkEmitted: false,\n      linkParenPossible: true,\n      top: true,\n    };\n\n    const rules = {\n      other,\n      block: block.normal,\n      inline: inline.normal,\n    };\n\n    if (this.options.pedantic) {\n      rules.block = block.pedantic;\n      rules.inline = inline.pedantic;\n    } else if (this.options.gfm) {\n      rules.block = block.gfm;\n      if (this.options.breaks) {\n        rules.inline = inline.breaks;\n      } else {\n        rules.inline = inline.gfm;\n      }\n    }\n    this.tokenizer.rules = rules;\n  }\n\n  /**\n   * Expose Rules\n   */\n  static get rules() {\n    return {\n      block,\n      inline,\n    };\n  }\n\n  /**\n   * Static Lex Method\n   */\n  static lex<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.lex(src);\n  }\n\n  /**\n   * Static Lex Inline Method\n   */\n  static lexInline<ParserOutput = string, RendererOutput = string>(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const lexer = new _Lexer<ParserOutput, RendererOutput>(options);\n    return lexer.inlineTokens(src);\n  }\n\n  /**\n   * Preprocessing\n   */\n  lex(src: string) {\n    src = src.replace(other.carriageReturn, '\\n');\n\n    this.blockTokens(src, this.tokens);\n\n    for (let i = 0; i < this.inlineQueue.length; i++) {\n      const next = this.inlineQueue[i];\n      this.inlineTokens(next.src, next.tokens);\n    }\n    this.inlineQueue = [];\n\n    return this.tokens;\n  }\n\n  /**\n   * Lexing\n   */\n  blockTokens(src: string, tokens?: Token[], lastParagraphClipped?: boolean): Token[];\n  blockTokens(src: string, tokens?: TokensList, lastParagraphClipped?: boolean): TokensList;\n  blockTokens(src: string, tokens: Token[] = [], lastParagraphClipped = false) {\n    this.tokenizer.lexer = this;\n    if (this.options.pedantic) {\n      src = src.replace(other.tabCharGlobal, '    ').replace(other.spaceLine, '');\n    }\n\n    let srcLength = Infinity;\n    while (src) {\n      if (src.length < srcLength) {\n        srcLength = src.length;\n      } else {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n\n      let token: Tokens.Generic | undefined;\n\n      if (this.options.extensions?.block?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // newline\n      if (token = this.tokenizer.space(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.raw.length === 1 && lastToken !== undefined) {\n          // if there's a single \\n as a spacer, it's terminating the last line,\n          // so move it there so that we don't get unnecessary paragraph tags\n          lastToken.raw += '\\n';\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.code(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        // An indented code block cannot interrupt a paragraph.\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // fences\n      if (token = this.tokenizer.fences(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // heading\n      if (token = this.tokenizer.heading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // hr\n      if (token = this.tokenizer.hr(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // blockquote\n      if (token = this.tokenizer.blockquote(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // list\n      if (token = this.tokenizer.list(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // html\n      if (token = this.tokenizer.html(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // def\n      if (token = this.tokenizer.def(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'paragraph' || lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.raw;\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else if (!this.tokens.links[token.tag]) {\n          this.tokens.links[token.tag] = {\n            href: token.href,\n            title: token.title,\n          };\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // table (gfm)\n      if (token = this.tokenizer.table(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // lheading\n      if (token = this.tokenizer.lheading(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // top-level paragraph\n      // prevent paragraph consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startBlock) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startBlock.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n        const lastToken = tokens.at(-1);\n        if (lastParagraphClipped && lastToken?.type === 'paragraph') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        lastParagraphClipped = cutSrc.length !== src.length;\n        src = src.substring(token.raw.length);\n        continue;\n      }\n\n      // text\n      if (token = this.tokenizer.text(src)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += (lastToken.raw.endsWith('\\n') ? '' : '\\n') + token.raw;\n          lastToken.text += '\\n' + token.text;\n          this.inlineQueue.pop();\n          this.inlineQueue.at(-1)!.src = lastToken.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n    }\n\n    this.state.top = true;\n    return tokens;\n  }\n\n  inline(src: string, tokens: Token[] = []) {\n    this.inlineQueue.push({ src, tokens });\n    return tokens;\n  }\n\n  /**\n   * Does this link text hold a link already? An image does not count: an image\n   * may hold a link, a link may not.\n   */\n  private linkInText(text: string): boolean {\n    if (!text.includes('[')) {\n      return false;\n    }\n\n    const linkRule = this.tokenizer.rules.inline.link;\n    for (const match of text.matchAll(this.tokenizer.rules.inline.blockSkip)) {\n      // blockSkip also matches code spans and html, and the `!` of an image is\n      // left out of the match, so read the character before it.\n      if (linkRule.test(match[0]) && text.charAt(match.index - 1) !== '!') {\n        return true;\n      }\n    }\n\n    for (const match of text.matchAll(this.tokenizer.rules.inline.reflinkSearch)) {\n      const match0 = match[0];\n      const refStart = match0.lastIndexOf('[');\n      if (match0.charAt(0) === '!' || !Object.hasOwn(this.tokens.links, normalizeLabel(match0.slice(refStart + 1, -1)))) {\n        continue;\n      }\n      // a candidate holding a link is not a link either, so it does not count\n      if (refStart > 1 && this.linkInText(match0.slice(1, refStart - 1))) {\n        continue;\n      }\n      return true;\n    }\n\n    return false;\n  }\n\n  /**\n   * Lexing/Compiling\n   */\n  inlineTokens(src: string, tokens: Token[] = []): Token[] {\n    this.tokenizer.lexer = this;\n    // One paren scan per inline run, shared with Tokenizer.link: without a\n    // ')' ahead the link regex cannot match, and skipping it avoids its\n    // quadratic backtracking over unterminated-link inputs like\n    // `'[a](b'.repeat(n)`. A nested run receives a substring of the outer\n    // run, so if the outer had no ')' neither does this substring — skip\n    // the scan in that case.\n    const prevLinkParenPossible = this.state.linkParenPossible;\n    this.state.linkParenPossible = prevLinkParenPossible && src.includes(')');\n    try {\n      return this.#inlineTokensInner(src, tokens);\n    } finally {\n      // A nested run (e.g. a link label) anchored on its own substring;\n      // restore the outer run's flag for the rest of its loop.\n      this.state.linkParenPossible = prevLinkParenPossible;\n    }\n  }\n\n  #inlineTokensInner(src: string, tokens: Token[]): Token[] {\n    // String with links masked to avoid interference with em and strong\n    let maskedSrc = src;\n\n    // Mask out reflinks\n    if (this.tokens.links && src.includes('[')) {\n      const reflinkSearch = this.tokenizer.rules.inline.reflinkSearch;\n      const maskReflink = (match0: string): string => {\n        const refStart = match0.lastIndexOf('[');\n        if (!Object.hasOwn(this.tokens.links, normalizeLabel(match0.slice(refStart + 1, -1)))) {\n          return match0;\n        }\n        // CommonMark: \"Links may not contain other links, at any level of\n        // nesting.\" A candidate whose text already holds one never becomes a\n        // link, so flattening the whole span would hide the emphasis that\n        // does still apply inside it. Mask the links it holds instead.\n        // Images are exempt: their text is flattened into an alt attribute.\n        if (refStart > 1 && match0.charAt(0) !== '!') {\n          const text = match0.slice(1, refStart - 1);\n          if (this.linkInText(text)) {\n            return '[' + text.replace(reflinkSearch, maskReflink)\n              + '][' + 'a'.repeat(match0.length - refStart - 2) + ']';\n          }\n        }\n        return '[' + 'a'.repeat(match0.length - 2) + ']';\n      };\n      maskedSrc = maskedSrc.replace(reflinkSearch, maskReflink);\n    }\n\n    // Mask out escaped characters.\n    // Every mask must keep the length it replaces: emStrong and del line\n    // maskedSrc up with src by slicing from the end. `anyPunctuation` matches\n    // unicode punctuation, so an escaped astral character is 3 code units.\n    // A backslash inside a code span is literal, not an escape. Mask the\n    // backticks inside the span instead, so blockSkip still skips all of it.\n    maskedSrc = maskedSrc.replace(this.tokenizer.rules.inline.anyPunctuationOutsideCode, (match0, code, punct) => {\n      if (punct) {\n        return '+'.repeat(match0.length);\n      }\n      if (code) {\n        return code + match0.slice(code.length, -code.length).replace(/`/g, '+') + code;\n      }\n      return match0;\n    });\n\n    // Mask out other blocks\n    maskedSrc = maskedSrc.replace(this.tokenizer.rules.inline.blockSkip, (match0, _link, context) => {\n      const offset = context ? context.length : 0;\n      return match0.slice(0, offset) + '[' + 'a'.repeat(match0.length - offset - 2) + ']';\n    });\n\n    // Mask out blocks from extensions\n    maskedSrc = this.options.hooks?.emStrongMask?.call({ lexer: this }, maskedSrc) ?? maskedSrc;\n\n    let keepPrevChar = false;\n    let prevChar = '';\n    let srcLength = Infinity;\n    while (src) {\n      if (src.length < srcLength) {\n        srcLength = src.length;\n      } else {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n\n      if (!keepPrevChar) {\n        prevChar = '';\n      }\n      keepPrevChar = false;\n\n      let token: Tokens.Generic | undefined;\n\n      // extensions\n      if (this.options.extensions?.inline?.some((extTokenizer) => {\n        if (token = extTokenizer.call({ lexer: this }, src, tokens)) {\n          src = src.substring(token.raw.length);\n          tokens.push(token);\n          return true;\n        }\n        return false;\n      })) {\n        continue;\n      }\n\n      // escape\n      if (token = this.tokenizer.escape(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // tag\n      if (token = this.tokenizer.tag(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // link\n      if (token = this.tokenizer.link(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // reflink, nolink\n      if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n        src = src.substring(token.raw.length);\n        const lastToken = tokens.at(-1);\n        if (token.type === 'text' && lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      // em & strong\n      if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // code\n      if (token = this.tokenizer.codespan(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // br\n      if (token = this.tokenizer.br(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // del (gfm)\n      if (token = this.tokenizer.del(src, maskedSrc, prevChar)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // autolink\n      if (token = this.tokenizer.autolink(src)) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // url (gfm)\n      if (!this.state.inLink && (token = this.tokenizer.url(src))) {\n        src = src.substring(token.raw.length);\n        tokens.push(token);\n        continue;\n      }\n\n      // text\n      // prevent inlineText consuming extensions by clipping 'src' to extension start\n      let cutSrc = src;\n      if (this.options.extensions?.startInline) {\n        let startIndex = Infinity;\n        const tempSrc = src.slice(1);\n        let tempStart;\n        this.options.extensions.startInline.forEach((getStartIndex) => {\n          tempStart = getStartIndex.call({ lexer: this }, tempSrc);\n          if (typeof tempStart === 'number' && tempStart >= 0) {\n            startIndex = Math.min(startIndex, tempStart);\n          }\n        });\n        if (startIndex < Infinity && startIndex >= 0) {\n          cutSrc = src.substring(0, startIndex + 1);\n        }\n      }\n      if (token = this.tokenizer.inlineText(cutSrc)) {\n        src = src.substring(token.raw.length);\n        if (token.raw.slice(-1) !== '_') { // Track prevChar before string of ____ started\n          prevChar = token.raw.slice(-1);\n        }\n        keepPrevChar = true;\n        const lastToken = tokens.at(-1);\n        if (lastToken?.type === 'text') {\n          lastToken.raw += token.raw;\n          lastToken.text += token.text;\n        } else {\n          tokens.push(token);\n        }\n        continue;\n      }\n\n      if (src) {\n        this.infiniteLoopError(src.charCodeAt(0));\n        break;\n      }\n    }\n\n    return tokens;\n  }\n\n  private infiniteLoopError(byte: number) {\n    const errMsg = 'Infinite loop on byte: ' + byte;\n    if (this.options.silent) {\n      console.error(errMsg);\n    } else {\n      throw new Error(errMsg);\n    }\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport {\n  cleanUrl,\n  escapeHtmlEntities,\n} from './helpers.ts';\nimport { other } from './rules.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Tokens } from './Tokens.ts';\nimport type { _Parser } from './Parser.ts';\n\n/**\n * Renderer\n */\nexport class _Renderer<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  parser!: _Parser<ParserOutput, RendererOutput>; // set by the parser\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  space(token: Tokens.Space): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  code({ text, lang, escaped }: Tokens.Code): RendererOutput {\n    const langString = (lang || '').match(other.notSpaceStart)?.[0];\n\n    // An empty code block has no content, so it must not gain a newline.\n    const code = text ? text.replace(other.endingNewline, '') + '\\n' : '';\n\n    if (!langString) {\n      return '<pre><code>'\n        + (escaped ? code : escapeHtmlEntities(code, true))\n        + '</code></pre>\\n' as RendererOutput;\n    }\n\n    return '<pre><code class=\"language-'\n      + escapeHtmlEntities(langString)\n      + '\">'\n      + (escaped ? code : escapeHtmlEntities(code, true))\n      + '</code></pre>\\n' as RendererOutput;\n  }\n\n  blockquote({ tokens }: Tokens.Blockquote): RendererOutput {\n    const body = this.parser.parse(tokens);\n    return `<blockquote>\\n${body}</blockquote>\\n` as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  def(token: Tokens.Def): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  heading({ tokens, depth }: Tokens.Heading): RendererOutput {\n    return `<h${depth}>${this.parser.parseInline(tokens)}</h${depth}>\\n` as RendererOutput;\n  }\n\n  hr(token: Tokens.Hr): RendererOutput {\n    return '<hr>\\n' as RendererOutput;\n  }\n\n  list(token: Tokens.List): RendererOutput {\n    const ordered = token.ordered;\n    const start = token.start;\n\n    let body = '';\n    for (let j = 0; j < token.items.length; j++) {\n      const item = token.items[j];\n      body += this.listitem(item);\n    }\n\n    const type = ordered ? 'ol' : 'ul';\n    const startAttr = (ordered && start !== 1) ? (' start=\"' + start + '\"') : '';\n    return '<' + type + startAttr + '>\\n' + body + '</' + type + '>\\n' as RendererOutput;\n  }\n\n  listitem(item: Tokens.ListItem): RendererOutput {\n    return `<li>${this.parser.parse(item.tokens)}</li>\\n` as RendererOutput;\n  }\n\n  checkbox({ checked }: Tokens.Checkbox): RendererOutput {\n    return '<input '\n      + (checked ? 'checked=\"\" ' : '')\n      + 'disabled=\"\" type=\"checkbox\"> ' as RendererOutput;\n  }\n\n  paragraph({ tokens }: Tokens.Paragraph): RendererOutput {\n    return `<p>${this.parser.parseInline(tokens)}</p>\\n` as RendererOutput;\n  }\n\n  table(token: Tokens.Table): RendererOutput {\n    let header = '';\n\n    // header\n    let cell = '';\n    for (let j = 0; j < token.header.length; j++) {\n      cell += this.tablecell(token.header[j]);\n    }\n    header += this.tablerow({ text: cell as ParserOutput });\n\n    let body = '';\n    for (let j = 0; j < token.rows.length; j++) {\n      const row = token.rows[j];\n\n      cell = '';\n      for (let k = 0; k < row.length; k++) {\n        cell += this.tablecell(row[k]);\n      }\n\n      body += this.tablerow({ text: cell as ParserOutput });\n    }\n    if (body) body = `<tbody>${body}</tbody>`;\n\n    return '<table>\\n'\n      + '<thead>\\n'\n      + header\n      + '</thead>\\n'\n      + body\n      + '</table>\\n' as RendererOutput;\n  }\n\n  tablerow({ text }: Tokens.TableRow<ParserOutput>): RendererOutput {\n    return `<tr>\\n${text}</tr>\\n` as RendererOutput;\n  }\n\n  tablecell(token: Tokens.TableCell): RendererOutput {\n    const content = this.parser.parseInline(token.tokens);\n    const type = token.header ? 'th' : 'td';\n    const tag = token.align\n      ? `<${type} align=\"${token.align}\">`\n      : `<${type}>`;\n    return tag + content + `</${type}>\\n` as RendererOutput;\n  }\n\n  /**\n   * span level renderer\n   */\n  strong({ tokens }: Tokens.Strong): RendererOutput {\n    return `<strong>${this.parser.parseInline(tokens)}</strong>` as RendererOutput;\n  }\n\n  em({ tokens }: Tokens.Em): RendererOutput {\n    return `<em>${this.parser.parseInline(tokens)}</em>` as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return `<code>${escapeHtmlEntities(text, true)}</code>` as RendererOutput;\n  }\n\n  br(token: Tokens.Br): RendererOutput {\n    return '<br>' as RendererOutput;\n  }\n\n  del({ tokens }: Tokens.Del): RendererOutput {\n    return `<del>${this.parser.parseInline(tokens)}</del>` as RendererOutput;\n  }\n\n  link({ href, title, text, tokens, autolink }: Tokens.Link): RendererOutput {\n    // References are not resolved inside an autolink, so every `&` there is\n    // literal. Elsewhere only an `&` that cannot start one needs escaping.\n    const parsedText = autolink\n      ? escapeHtmlEntities(text, true)\n      : this.parser.parseInline(tokens) as string;\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return parsedText as RendererOutput;\n    }\n    href = escapeHtmlEntities(cleanHref, autolink);\n    let out = '<a href=\"' + href + '\"';\n    if (title) {\n      out += ' title=\"' + (escapeHtmlEntities(title)) + '\"';\n    }\n    out += '>' + parsedText + '</a>';\n    return out as RendererOutput;\n  }\n\n  image({ href, title, text, tokens }: Tokens.Image): RendererOutput {\n    if (tokens) {\n      text = this.parser.parseInline(tokens, this.parser.textRenderer) as string;\n    }\n    const cleanHref = cleanUrl(href);\n    if (cleanHref === null) {\n      return escapeHtmlEntities(text) as RendererOutput;\n    }\n    href = cleanHref;\n\n    let out = `<img src=\"${escapeHtmlEntities(href)}\" alt=\"${escapeHtmlEntities(text)}\"`;\n    if (title) {\n      out += ` title=\"${escapeHtmlEntities(title)}\"`;\n    }\n    out += '>';\n    return out as RendererOutput;\n  }\n\n  text(token: Tokens.Text | Tokens.Escape): RendererOutput {\n    return 'tokens' in token && token.tokens\n      ? this.parser.parseInline(token.tokens) as unknown as RendererOutput\n      : ('escaped' in token && token.escaped ? token.text as RendererOutput : escapeHtmlEntities(token.text) as RendererOutput);\n  }\n}\n","import type { Tokens } from './Tokens.ts';\n\n/**\n * TextRenderer\n * returns only the textual part of the token\n */\nexport class _TextRenderer<RendererOutput = string> {\n  // no need for block level renderers\n  strong({ text }: Tokens.Strong): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  em({ text }: Tokens.Em): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  codespan({ text }: Tokens.Codespan): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  del({ text }: Tokens.Del): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  html({ text }: Tokens.HTML | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  text({ text }: Tokens.Text | Tokens.Escape | Tokens.Tag): RendererOutput {\n    return text as RendererOutput;\n  }\n\n  link({ text }: Tokens.Link): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  image({ text }: Tokens.Image): RendererOutput {\n    return '' + text as RendererOutput;\n  }\n\n  br(): RendererOutput {\n    return '' as RendererOutput;\n  }\n\n  checkbox({ raw }: Tokens.Checkbox): RendererOutput {\n    return raw as RendererOutput;\n  }\n}\n","import { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _defaults } from './defaults.ts';\nimport type { MarkedToken, Token, Tokens } from './Tokens.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\n\n/**\n * Parsing & Compiling\n */\nexport class _Parser<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  renderer: _Renderer<ParserOutput, RendererOutput>;\n  textRenderer: _TextRenderer<RendererOutput>;\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n    this.options.renderer = this.options.renderer || new _Renderer<ParserOutput, RendererOutput>();\n    this.renderer = this.options.renderer;\n    this.renderer.options = this.options;\n    this.renderer.parser = this;\n    this.textRenderer = new _TextRenderer<RendererOutput>();\n  }\n\n  /**\n   * Static Parse Method\n   */\n  static parse<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parse(tokens);\n  }\n\n  /**\n   * Static Parse Inline Method\n   */\n  static parseInline<ParserOutput = string, RendererOutput = string>(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    const parser = new _Parser<ParserOutput, RendererOutput>(options);\n    return parser.parseInline(tokens);\n  }\n\n  /**\n   * Parse Loop\n   */\n  parse(tokens: Token[]): ParserOutput {\n    this.renderer.parser = this;\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const genericToken = anyToken as Tokens.Generic;\n        const ret = this.options.extensions.renderers[genericToken.type].call({ parser: this }, genericToken);\n        if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'checkbox', 'html', 'def', 'paragraph', 'text'].includes(genericToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'space': {\n          out += this.renderer.space(token);\n          break;\n        }\n        case 'hr': {\n          out += this.renderer.hr(token);\n          break;\n        }\n        case 'heading': {\n          out += this.renderer.heading(token);\n          break;\n        }\n        case 'code': {\n          out += this.renderer.code(token);\n          break;\n        }\n        case 'table': {\n          out += this.renderer.table(token);\n          break;\n        }\n        case 'blockquote': {\n          out += this.renderer.blockquote(token);\n          break;\n        }\n        case 'list': {\n          out += this.renderer.list(token);\n          break;\n        }\n        case 'checkbox': {\n          out += this.renderer.checkbox(token);\n          break;\n        }\n        case 'html': {\n          out += this.renderer.html(token);\n          break;\n        }\n        case 'def': {\n          out += this.renderer.def(token);\n          break;\n        }\n        case 'paragraph': {\n          out += this.renderer.paragraph(token);\n          break;\n        }\n        case 'text': {\n          out += this.renderer.text(token);\n          break;\n        }\n\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n\n    return out as ParserOutput;\n  }\n\n  /**\n   * Parse Inline Tokens\n   */\n  parseInline(tokens: Token[], renderer: _Renderer<ParserOutput, RendererOutput> | _TextRenderer<RendererOutput> = this.renderer): ParserOutput {\n    this.renderer.parser = this;\n    let out = '';\n\n    for (let i = 0; i < tokens.length; i++) {\n      const anyToken = tokens[i];\n\n      // Run any renderer extensions\n      if (this.options.extensions?.renderers?.[anyToken.type]) {\n        const ret = this.options.extensions.renderers[anyToken.type].call({ parser: this }, anyToken);\n        if (ret !== false || !['escape', 'html', 'link', 'image', 'checkbox', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(anyToken.type)) {\n          out += ret || '';\n          continue;\n        }\n      }\n\n      const token = anyToken as MarkedToken;\n\n      switch (token.type) {\n        case 'escape': {\n          out += renderer.text(token);\n          break;\n        }\n        case 'html': {\n          out += renderer.html(token);\n          break;\n        }\n        case 'link': {\n          out += renderer.link(token);\n          break;\n        }\n        case 'image': {\n          out += renderer.image(token);\n          break;\n        }\n        case 'checkbox': {\n          out += renderer.checkbox(token);\n          break;\n        }\n        case 'strong': {\n          out += renderer.strong(token);\n          break;\n        }\n        case 'em': {\n          out += renderer.em(token);\n          break;\n        }\n        case 'codespan': {\n          out += renderer.codespan(token);\n          break;\n        }\n        case 'br': {\n          out += renderer.br(token);\n          break;\n        }\n        case 'del': {\n          out += renderer.del(token);\n          break;\n        }\n        case 'text': {\n          out += renderer.text(token);\n          break;\n        }\n        default: {\n          const errMsg = 'Token with \"' + token.type + '\" type was not found.';\n          if (this.options.silent) {\n            console.error(errMsg);\n            return '' as ParserOutput;\n          } else {\n            throw new Error(errMsg);\n          }\n        }\n      }\n    }\n    return out as ParserOutput;\n  }\n}\n","import { _defaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport type { MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\n\nexport class _Hooks<ParserOutput = string, RendererOutput = string> {\n  options: MarkedOptions<ParserOutput, RendererOutput>;\n  block?: boolean;\n\n  constructor(options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.options = options || _defaults;\n  }\n\n  static passThroughHooks = new Set([\n    'preprocess',\n    'postprocess',\n    'processAllTokens',\n    'emStrongMask',\n  ]);\n\n  static passThroughHooksRespectAsync = new Set([\n    'preprocess',\n    'postprocess',\n    'processAllTokens',\n  ]);\n\n  /**\n   * Process markdown before marked\n   */\n  preprocess(markdown: string) {\n    return markdown;\n  }\n\n  /**\n   * Process HTML after marked is finished\n   */\n  postprocess(html: ParserOutput) {\n    return html;\n  }\n\n  /**\n   * Process all tokens before walk tokens\n   */\n  processAllTokens(tokens: Token[] | TokensList) {\n    return tokens;\n  }\n\n  /**\n   * Mask contents that should not be interpreted as em/strong delimiters\n   */\n  emStrongMask(src: string) {\n    return src;\n  }\n\n  /**\n   * Provide function to tokenize markdown\n   */\n  provideLexer(block = this.block) {\n    return block ? _Lexer.lex : _Lexer.lexInline;\n  }\n\n  /**\n   * Provide function to parse tokens\n   */\n  provideParser(block = this.block) {\n    return block ? _Parser.parse<ParserOutput, RendererOutput> : _Parser.parseInline<ParserOutput, RendererOutput>;\n  }\n}\n","import { _getDefaults } from './defaults.ts';\nimport { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { escapeHtmlEntities } from './helpers.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, Tokens, TokensList } from './Tokens.ts';\n\nexport type MaybePromise = void | Promise<void>;\n\ntype UnknownFunction = (...args: unknown[]) => unknown;\ntype GenericRendererFunction = (...args: unknown[]) => string | false;\n\n/**\n * Append value(s) to values in place, flattening one level like concat\n */\nfunction pushValues(values: MaybePromise[], value: MaybePromise | MaybePromise[]) {\n  if (Array.isArray(value)) {\n    for (let i = 0; i < value.length; i++) {\n      values.push(value[i]);\n    }\n  } else {\n    values.push(value);\n  }\n}\n\nexport class Marked<ParserOutput = string, RendererOutput = string> {\n  defaults = _getDefaults<ParserOutput, RendererOutput>();\n  options = this.setOptions;\n\n  /**\n   * Compiles markdown to HTML.\n   *\n   * To configure hooks, a renderer, or a tokenizer, create a separate `Marked`\n   * instance and use `Marked#use` instead of passing them on each call.\n   */\n  parse = this.parseMarkdown(true);\n\n  /**\n   * Compiles inline markdown to HTML.\n   *\n   * To configure hooks, a renderer, or a tokenizer, create a separate `Marked`\n   * instance and use `Marked#use` instead of passing them on each call.\n   */\n  parseInline = this.parseMarkdown(false);\n\n  Parser = _Parser<ParserOutput, RendererOutput>;\n  Renderer = _Renderer<ParserOutput, RendererOutput>;\n  TextRenderer = _TextRenderer<RendererOutput>;\n  Lexer = _Lexer;\n  Tokenizer = _Tokenizer<ParserOutput, RendererOutput>;\n  Hooks = _Hooks<ParserOutput, RendererOutput>;\n\n  constructor(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    this.use(...args);\n  }\n\n  /**\n   * Run callback for every token\n   */\n  walkTokens(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n    const values: MaybePromise[] = [];\n    for (const token of tokens) {\n      pushValues(values, callback.call(this, token));\n      switch (token.type) {\n        case 'table': {\n          const tableToken = token as Tokens.Table;\n          for (const cell of tableToken.header) {\n            pushValues(values, this.walkTokens(cell.tokens, callback));\n          }\n          for (const row of tableToken.rows) {\n            for (const cell of row) {\n              pushValues(values, this.walkTokens(cell.tokens, callback));\n            }\n          }\n          break;\n        }\n        case 'list': {\n          const listToken = token as Tokens.List;\n          pushValues(values, this.walkTokens(listToken.items, callback));\n          break;\n        }\n        default: {\n          const genericToken = token as Tokens.Generic;\n          if (this.defaults.extensions?.childTokens?.[genericToken.type]) {\n            this.defaults.extensions.childTokens[genericToken.type].forEach((childTokens) => {\n              const tokens = genericToken[childTokens].flat(Infinity) as Token[] | TokensList;\n              pushValues(values, this.walkTokens(tokens, callback));\n            });\n          } else if (genericToken.tokens) {\n            pushValues(values, this.walkTokens(genericToken.tokens, callback));\n          }\n        }\n      }\n    }\n    return values;\n  }\n\n  /**\n   * Registers extensions with this Marked instance.\n   *\n   * The `renderer`, `tokenizer`, and `hooks` objects may each contain only the\n   * methods that should be overridden. Their methods are merged with built-in\n   * behavior and extensions registered by earlier calls.\n   *\n   * Use this method when supplying only some hook methods.\n   */\n  use(...args: MarkedExtension<ParserOutput, RendererOutput>[]) {\n    const extensions: MarkedOptions<ParserOutput, RendererOutput>['extensions'] = this.defaults.extensions || { renderers: {}, childTokens: {} };\n\n    args.forEach((pack) => {\n      // copy options to new object\n      const opts = { ...pack } as MarkedOptions<ParserOutput, RendererOutput>;\n\n      // set async to true if it was set to true before\n      opts.async = this.defaults.async || opts.async || false;\n\n      // ==-- Parse \"addon\" extensions --== //\n      if (pack.extensions) {\n        pack.extensions.forEach((ext) => {\n          if (!ext.name) {\n            throw new Error('extension name required');\n          }\n          if ('renderer' in ext) { // Renderer extensions\n            const prevRenderer = extensions.renderers[ext.name];\n            if (prevRenderer) {\n              // Replace extension with func to run new extension but fall back if false\n              extensions.renderers[ext.name] = function(...args) {\n                let ret = ext.renderer.apply(this, args);\n                if (ret === false) {\n                  ret = prevRenderer.apply(this, args);\n                }\n                return ret;\n              };\n            } else {\n              extensions.renderers[ext.name] = ext.renderer;\n            }\n          }\n          if ('tokenizer' in ext) { // Tokenizer Extensions\n            if (!ext.level || (ext.level !== 'block' && ext.level !== 'inline')) {\n              throw new Error(\"extension level must be 'block' or 'inline'\");\n            }\n            const extLevel = extensions[ext.level];\n            if (extLevel) {\n              extLevel.unshift(ext.tokenizer);\n            } else {\n              extensions[ext.level] = [ext.tokenizer];\n            }\n            if (ext.start) { // Function to check for start of token\n              if (ext.level === 'block') {\n                if (extensions.startBlock) {\n                  extensions.startBlock.push(ext.start);\n                } else {\n                  extensions.startBlock = [ext.start];\n                }\n              } else if (ext.level === 'inline') {\n                if (extensions.startInline) {\n                  extensions.startInline.push(ext.start);\n                } else {\n                  extensions.startInline = [ext.start];\n                }\n              }\n            }\n          }\n          if ('childTokens' in ext && ext.childTokens) { // Child tokens to be visited by walkTokens\n            extensions.childTokens[ext.name] = ext.childTokens;\n          }\n        });\n        opts.extensions = extensions;\n      }\n\n      // ==-- Parse \"overwrite\" extensions --== //\n      if (pack.renderer) {\n        const renderer = this.defaults.renderer || new _Renderer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.renderer) {\n          if (!(prop in renderer)) {\n            throw new Error(`renderer '${prop}' does not exist`);\n          }\n          if (['options', 'parser'].includes(prop)) {\n            // ignore options property\n            continue;\n          }\n          const rendererProp = prop as Exclude<keyof _Renderer<ParserOutput, RendererOutput>, 'options' | 'parser'>;\n          const rendererFunc = pack.renderer[rendererProp] as GenericRendererFunction;\n          const prevRenderer = renderer[rendererProp] as GenericRendererFunction;\n          // Replace renderer with func to run extension, but fall back if false\n          renderer[rendererProp] = (...args: unknown[]) => {\n            let ret = rendererFunc.apply(renderer, args);\n            if (ret === false) {\n              ret = prevRenderer.apply(renderer, args);\n            }\n            return (ret || '') as RendererOutput;\n          };\n        }\n        opts.renderer = renderer;\n      }\n      if (pack.tokenizer) {\n        const tokenizer = this.defaults.tokenizer || new _Tokenizer<ParserOutput, RendererOutput>(this.defaults);\n        for (const prop in pack.tokenizer) {\n          if (!(prop in tokenizer)) {\n            throw new Error(`tokenizer '${prop}' does not exist`);\n          }\n          if (['options', 'rules', 'lexer'].includes(prop)) {\n            // ignore options, rules, and lexer properties\n            continue;\n          }\n          const tokenizerProp = prop as Exclude<keyof _Tokenizer<ParserOutput, RendererOutput>, 'options' | 'rules' | 'lexer'>;\n          const tokenizerFunc = pack.tokenizer[tokenizerProp] as UnknownFunction;\n          const prevTokenizer = tokenizer[tokenizerProp] as UnknownFunction;\n          // Replace tokenizer with func to run extension, but fall back if false\n          // @ts-expect-error cannot type tokenizer function dynamically\n          tokenizer[tokenizerProp] = (...args: unknown[]) => {\n            let ret = tokenizerFunc.apply(tokenizer, args);\n            if (ret === false) {\n              ret = prevTokenizer.apply(tokenizer, args);\n            }\n            return ret;\n          };\n        }\n        opts.tokenizer = tokenizer;\n      }\n\n      // ==-- Parse Hooks extensions --== //\n      if (pack.hooks) {\n        const hooks = this.defaults.hooks || new _Hooks<ParserOutput, RendererOutput>();\n        for (const prop in pack.hooks) {\n          if (!(prop in hooks)) {\n            throw new Error(`hook '${prop}' does not exist`);\n          }\n          if (['options', 'block'].includes(prop)) {\n            // ignore options and block properties\n            continue;\n          }\n          const hooksProp = prop as Exclude<keyof _Hooks<ParserOutput, RendererOutput>, 'options' | 'block'>;\n          const hooksFunc = pack.hooks[hooksProp] as UnknownFunction;\n          const prevHook = hooks[hooksProp] as UnknownFunction;\n          if (_Hooks.passThroughHooks.has(prop)) {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (arg: unknown) => {\n              if (this.defaults.async && _Hooks.passThroughHooksRespectAsync.has(prop)) {\n                return (async() => {\n                  const ret = await hooksFunc.call(hooks, arg);\n                  return prevHook.call(hooks, ret);\n                })();\n              }\n\n              const ret = hooksFunc.call(hooks, arg);\n              return prevHook.call(hooks, ret);\n            };\n          } else {\n            // @ts-expect-error cannot type hook function dynamically\n            hooks[hooksProp] = (...args: unknown[]) => {\n              if (this.defaults.async) {\n                return (async() => {\n                  let ret = await hooksFunc.apply(hooks, args);\n                  if (ret === false) {\n                    ret = await prevHook.apply(hooks, args);\n                  }\n                  return ret;\n                })();\n              }\n\n              let ret = hooksFunc.apply(hooks, args);\n              if (ret === false) {\n                ret = prevHook.apply(hooks, args);\n              }\n              return ret;\n            };\n          }\n        }\n        opts.hooks = hooks;\n      }\n\n      // ==-- Parse WalkTokens extensions --== //\n      if (pack.walkTokens) {\n        const walkTokens = this.defaults.walkTokens;\n        const packWalktokens = pack.walkTokens;\n        opts.walkTokens = function(token) {\n          const values: MaybePromise[] = [];\n          values.push(packWalktokens.call(this, token));\n          if (walkTokens) {\n            pushValues(values, walkTokens.call(this, token));\n          }\n          return values;\n        };\n      }\n\n      this.defaults = { ...this.defaults, ...opts };\n    });\n\n    return this;\n  }\n\n  setOptions(opt: MarkedOptions<ParserOutput, RendererOutput>) {\n    this.defaults = { ...this.defaults, ...opt };\n    return this;\n  }\n\n  lexer(src: string, options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Lexer.lex(src, options ?? this.defaults);\n  }\n\n  parser(tokens: Token[], options?: MarkedOptions<ParserOutput, RendererOutput>) {\n    return _Parser.parse<ParserOutput, RendererOutput>(tokens, options ?? this.defaults);\n  }\n\n  private parseMarkdown(blockType: boolean) {\n    type overloadedParse = {\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: true }): Promise<ParserOutput>;\n      (src: string, options: MarkedOptions<ParserOutput, RendererOutput> & { async: false }): ParserOutput;\n      (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): ParserOutput | Promise<ParserOutput>;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const parse: overloadedParse = (src: string, options?: MarkedOptions<ParserOutput, RendererOutput> | null): any => {\n      const origOpt = { ...options };\n      const opt = { ...this.defaults, ...origOpt };\n\n      const throwError = this.onError(!!opt.silent, !!opt.async);\n\n      // throw error if an extension set async to true but parse was called with async: false\n      if (this.defaults.async === true && origOpt.async === false) {\n        return throwError(new Error('marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.'));\n      }\n\n      // throw error in case of non string input\n      if (typeof src === 'undefined' || src === null) {\n        return throwError(new Error('marked(): input parameter is undefined or null'));\n      }\n      if (typeof src !== 'string') {\n        return throwError(new Error('marked(): input parameter is of type '\n          + Object.prototype.toString.call(src) + ', string expected'));\n      }\n\n      if (opt.hooks) {\n        opt.hooks.options = opt;\n        opt.hooks.block = blockType;\n      }\n\n      if (opt.async) {\n        return (async() => {\n          const processedSrc = opt.hooks ? await opt.hooks.preprocess(src) : src;\n          const lexer = opt.hooks ? await opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n          const tokens = await lexer(processedSrc, opt);\n          const processedTokens = opt.hooks ? await opt.hooks.processAllTokens(tokens) : tokens;\n          if (opt.walkTokens) {\n            await Promise.all(this.walkTokens(processedTokens, opt.walkTokens));\n          }\n          const parser = opt.hooks ? await opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n          const html = await parser(processedTokens, opt);\n          return opt.hooks ? await opt.hooks.postprocess(html) : html;\n        })().catch(throwError);\n      }\n\n      try {\n        if (opt.hooks) {\n          src = opt.hooks.preprocess(src) as string;\n        }\n        const lexer = opt.hooks ? opt.hooks.provideLexer(blockType) : (blockType ? _Lexer.lex : _Lexer.lexInline);\n        let tokens = lexer(src, opt);\n        if (opt.hooks) {\n          tokens = opt.hooks.processAllTokens(tokens);\n        }\n        if (opt.walkTokens) {\n          this.walkTokens(tokens, opt.walkTokens);\n        }\n        const parser = opt.hooks ? opt.hooks.provideParser(blockType) : (blockType ? _Parser.parse : _Parser.parseInline);\n        let html = parser(tokens, opt);\n        if (opt.hooks) {\n          html = opt.hooks.postprocess(html);\n        }\n        return html;\n      } catch(e) {\n        return throwError(e as Error);\n      }\n    };\n\n    return parse;\n  }\n\n  private onError(silent: boolean, async: boolean) {\n    return (e: Error): string | Promise<string> => {\n      e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n      if (silent) {\n        const msg = '<p>An error occurred:</p><pre>'\n          + escapeHtmlEntities(e.message + '', true)\n          + '</pre>';\n        if (async) {\n          return Promise.resolve(msg);\n        }\n        return msg;\n      }\n\n      if (async) {\n        return Promise.reject(e);\n      }\n      throw e;\n    };\n  }\n}\n","import { _Lexer } from './Lexer.ts';\nimport { _Parser } from './Parser.ts';\nimport { _Tokenizer } from './Tokenizer.ts';\nimport { _Renderer } from './Renderer.ts';\nimport { _TextRenderer } from './TextRenderer.ts';\nimport { _Hooks } from './Hooks.ts';\nimport { Marked } from './Instance.ts';\nimport {\n  _getDefaults,\n  changeDefaults,\n  _defaults,\n} from './defaults.ts';\nimport type { MarkedExtension, MarkedOptions } from './MarkedOptions.ts';\nimport type { Token, TokensList } from './Tokens.ts';\nimport type { MaybePromise } from './Instance.ts';\n\nconst markedInstance = new Marked();\n\n/**\n * Compiles markdown to HTML asynchronously.\n *\n * To configure hooks, a renderer, or a tokenizer, create a `Marked` instance\n * and use `Marked#use` instead of passing them as options on each call.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options, having async: true\n * @return Promise of string of compiled HTML\n */\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\n\n/**\n * Compiles markdown to HTML.\n *\n * To configure hooks, a renderer, or a tokenizer, create a `Marked` instance\n * and use `Marked#use` instead of passing them as options on each call.\n *\n * @param src String of markdown source to be compiled\n * @param options Optional hash of options\n * @return String of compiled HTML. Will be a Promise of string if async is set to true by any extensions.\n */\nexport function marked(src: string, options: MarkedOptions & { async: false }): string;\nexport function marked(src: string, options: MarkedOptions & { async: true }): Promise<string>;\nexport function marked(src: string, options?: MarkedOptions | null): string | Promise<string>;\nexport function marked(src: string, opt?: MarkedOptions | null): string | Promise<string> {\n  return markedInstance.parse(src, opt);\n}\n\nexport declare namespace marked {\n  /**\n   * Compiles inline markdown to HTML.\n   *\n   * To configure hooks, a renderer, or a tokenizer, create a `Marked` instance\n   * and use `Marked#use` instead of passing them as options on each call.\n   */\n  let parseInline: typeof markedInstance.parseInline;\n\n  /**\n   * Registers extensions with the default Marked instance.\n   *\n   * The `renderer`, `tokenizer`, and `hooks` objects may each contain only the\n   * methods that should be overridden. Their methods are merged with built-in\n   * behavior and extensions registered by earlier calls.\n   *\n   * Use this function when supplying only some hook methods.\n   */\n  let use: (...args: MarkedExtension[]) => typeof marked;\n}\n\n/**\n * Sets the default options.\n *\n * @param options Hash of options\n */\nmarked.options =\n  marked.setOptions = function(options: MarkedOptions) {\n    markedInstance.setOptions(options);\n    marked.defaults = markedInstance.defaults;\n    changeDefaults(marked.defaults);\n    return marked;\n  };\n\n/**\n * Gets the original marked default options.\n */\nmarked.getDefaults = _getDefaults;\n\nmarked.defaults = _defaults;\n\n/**\n * Registers extensions with the default Marked instance.\n *\n * The `renderer`, `tokenizer`, and `hooks` objects may each contain only the\n * methods that should be overridden. Their methods are merged with built-in\n * behavior and extensions registered by earlier calls.\n *\n * Use this function when supplying only some hook methods.\n *\n * @param args Extensions to register\n * @return The `marked` function\n */\nfunction useExtension(...args: MarkedExtension[]) {\n  markedInstance.use(...args);\n  marked.defaults = markedInstance.defaults;\n  changeDefaults(marked.defaults);\n  return marked;\n}\n\nmarked.use = useExtension;\n\n/**\n * Run callback for every token\n */\n\nmarked.walkTokens = function(tokens: Token[] | TokensList, callback: (token: Token) => MaybePromise | MaybePromise[]) {\n  return markedInstance.walkTokens(tokens, callback);\n};\n\n/**\n * Compiles markdown to HTML without enclosing `p` tag.\n *\n * To configure hooks, a renderer, or a tokenizer, create a `Marked` instance\n * and use `Marked#use` instead of passing them as options on each call.\n *\n * @param src String of markdown source to be compiled\n * @param options Hash of options\n * @return String of compiled HTML\n */\nmarked.parseInline = markedInstance.parseInline;\n\n/**\n * Expose\n */\nmarked.Parser = _Parser;\nmarked.parser = _Parser.parse;\nmarked.Renderer = _Renderer;\nmarked.TextRenderer = _TextRenderer;\nmarked.Lexer = _Lexer;\nmarked.lexer = _Lexer.lex;\nmarked.Tokenizer = _Tokenizer;\nmarked.Hooks = _Hooks;\nmarked.parse = marked;\n\nexport const options = marked.options;\nexport const setOptions = marked.setOptions;\nexport const walkTokens = marked.walkTokens;\n/**\n * Compiles inline markdown to HTML.\n *\n * To configure hooks, a renderer, or a tokenizer, create a `Marked` instance\n * and use `Marked#use` instead of passing them as options on each call.\n */\nexport const parseInline = marked.parseInline;\nexport const parse = marked;\nexport const parser = _Parser.parse;\nexport const lexer = _Lexer.lex;\nexport { _defaults as defaults, _getDefaults as getDefaults } from './defaults.ts';\nexport { _Lexer as Lexer } from './Lexer.ts';\nexport { _Parser as Parser } from './Parser.ts';\nexport { _Tokenizer as Tokenizer } from './Tokenizer.ts';\nexport { _Renderer as Renderer } from './Renderer.ts';\nexport { _TextRenderer as TextRenderer } from './TextRenderer.ts';\nexport { _Hooks as Hooks } from './Hooks.ts';\nexport { Marked } from './Instance.ts';\nexport { useExtension as use };\nexport type * from './MarkedOptions.ts';\nexport type * from './Tokens.ts';\n"]}