{"version":3,"sources":["../src/index.ts"],"sourcesContent":["export type RegexReplacer = (substring: string, ...args: any[]) => string;\n\nexport interface SlimdownRenderHookInput {\n  /** Escape text for safe HTML text-node output. */\n  escapeHtml: (value: string) => string;\n}\n\nexport interface SlimdownCodeBlockInput extends SlimdownRenderHookInput {\n  lang: string;\n  code: string;\n}\n\nexport interface SlimdownMathInput extends SlimdownRenderHookInput {\n  math: string;\n}\n\nexport interface SlimdownExtension {\n  /**\n   * Render a fenced code block. Return undefined to let the next extension or\n   * the built-in renderer handle it.\n   */\n  renderCodeBlock?: (input: SlimdownCodeBlockInput) => string | undefined;\n  /** Render a block math expression captured from $$...$$. */\n  renderMathBlock?: (input: SlimdownMathInput) => string | undefined;\n  /** Render an inline math expression captured from $...$. */\n  renderInlineMath?: (input: SlimdownMathInput) => string | undefined;\n}\n\n/**\n * Slimdown - A very basic regex-based Markdown parser. Supports the\n * following elements (and can be extended via Slimdown::add_rule()):\n *\n * - Headers\n * - Images\n * - Links\n * - Bold\n * - Emphasis\n * - Deletions\n * - Quotes\n * - Inline code\n * - Code blocks\n * - Blockquotes\n * - Ordered/unordered lists (one level only)\n * - Horizontal rules\n * - Superscript and subscript (`z_1_` or `a^2^`)\n *\n * Original author: Johnny Broadway <johnny@johnnybroadway.com>\n * Website: https://gist.github.com/jbroadway/2836900\n * Inspiration:\n * - https://gist.github.com/plugnburn/f0d12e38b6416a77c098\n * - https://github.com/Chalarangelo/parse-md-js/blob/master/parsemd.js\n * - https://gist.github.com/plugnburn/f0d12e38b6416a77c098\n *\n * Author: Erik Vullings <erik.vullings@gmail.com>\n * Conversion from PHP to TypeScript, applying fixes and tests, adding more elements, and publishing to npm:\n * Website: https://github.com/erikvullings/slimdown-js\n * License: MIT\n */\n\n// Store code blocks temporarily to prevent markdown processing within them\nconst codeBlocks: Array<{ lang: string; code: string }> = [];\nconst inlineCode: string[] = [];\n// Store math expressions to prevent markdown processing within them\nconst mathBlocks: string[] = [];\nconst inlineMath: string[] = [];\n// Store footnotes\nconst footnotes: Array<[id: string, text: string]> = [];\n\nconst escapeMap: Record<string, string> = {\n  '&': '&amp;',\n  '<': '&lt;',\n  '>': '&gt;',\n  '\"': '&quot;',\n  \"'\": '&#39;',\n};\n\nconst escRegex = new RegExp(`[${Object.keys(escapeMap).join('')}]`, 'g');\n\nexport const escapeHtml = (s: string): string =>\n  s.replace(escRegex, (match) => escapeMap[match]);\n\nconst para = (_: string, line: string) => {\n  const trimmed = line.trim();\n  return /^<\\/?(ul|ol|li|h|p|bl|table|tbody|tr|td|th|caption)/i.test(trimmed) || trimmed === ''\n    ? `\\n${line}\\n`\n    : `\\n<p>\\n${trimmed}\\n</p>\\n`;\n};\n\nconst ulList = (\n  _text: string,\n  indent: string,\n  _bullet: string,\n  item: string,\n) => {\n  const level = Math.floor(indent.length / 2);\n  return `\\n{{LISTITEM:ul:${level}:::${item.trim()}}}\\n`;\n};\n\nconst olList = (\n  _text: string,\n  indent: string,\n  bullet: string,\n  item: string,\n) => {\n  const level = Math.floor(indent.length / 2);\n  const start = Number.parseInt(bullet, 10);\n  return `\\n{{LISTITEM:ol:${level}::${start}:${item.trim()}}}\\n`;\n};\n\nconst alphaOlList = (\n  indent: string,\n  orderedStyle: 'a' | 'A',\n  start: number,\n  item: string,\n) => {\n  const level = Math.floor(indent.length / 2);\n  return `\\n{{LISTITEM:ol:${level}:${orderedStyle}:${start}:${item.trim()}}}\\n`;\n};\n\nconst parseAlphaListLine = (line: string) => {\n  const match = line.match(/^( *)([A-Za-z][.)]|\\([A-Za-z]\\)) (.*)$/);\n  if (!match) return undefined;\n\n  const letter = match[2].match(/[A-Za-z]/)?.[0] ?? 'a';\n  const orderedStyle: 'a' | 'A' = letter === letter.toUpperCase() ? 'A' : 'a';\n  return {\n    indent: match[1],\n    orderedStyle,\n    start: letter.toLowerCase().charCodeAt(0) - 96,\n    item: match[3],\n  };\n};\n\nconst processAlphaListItems = (markdown: string): string => {\n  const lines = markdown.split('\\n');\n\n  for (let i = 0; i < lines.length; i++) {\n    const first = parseAlphaListLine(lines[i]);\n    if (!first) continue;\n\n    const run = [i];\n    let expectedStart = first.start + 1;\n    const baseIndent = first.indent.length;\n\n    for (let j = i + 1; j < lines.length; j++) {\n      const next = parseAlphaListLine(lines[j]);\n      if (\n        next &&\n        next.indent === first.indent &&\n        next.orderedStyle === first.orderedStyle &&\n        next.start === expectedStart\n      ) {\n        run.push(j);\n        expectedStart++;\n        continue;\n      }\n\n      if (!lines[j].trim()) {\n        break;\n      }\n\n      if (!next && lines[j].match(/^ */)![0].length > baseIndent) {\n        continue;\n      }\n\n      if (\n        next &&\n        next.indent.length > baseIndent\n      ) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (run.length < 2) continue;\n\n    for (const index of run) {\n      const parsed = parseAlphaListLine(lines[index])!;\n      lines[index] = alphaOlList(\n        parsed.indent,\n        parsed.orderedStyle,\n        parsed.start,\n        parsed.item,\n      );\n    }\n    i = run[run.length - 1];\n  }\n\n  return lines.join('\\n');\n};\n\nconst blockquote = (_: string, __: string, item = '') =>\n  `\\n<blockquote>${item.trim()}</blockquote>`;\n\nconst taskList = (\n  _text: string,\n  indent: string,\n  checkboxState: string,\n  item: string,\n) => {\n  const level = Math.floor(indent.length / 2);\n  const checked = checkboxState.toLowerCase() === 'x';\n  const checkboxHtml = `<input type=\"checkbox\"${\n    checked ? ' checked' : ''\n  } disabled>`;\n  return `\\n{{LISTITEM:ul:${level}:::${checkboxHtml} ${item.trim()}}}\\n`;\n};\n\nconst definitionList = (_: string, term: string, definition: string) => {\n  return `\\n<dl><dt>${term.trim()}</dt><dd>${definition.trim()}</dd></dl>\\n`;\n};\n\n// Function to process list items into proper nested HTML\nconst processListItems = (markdown: string): string => {\n  if (!markdown.includes('{{LISTITEM:')) return markdown;\n\n  // Find groups of consecutive list items separated by non-list content\n  const lines = markdown.split('\\n');\n  const groups: Array<\n    Array<{\n      type: 'ul' | 'ol';\n      level: number;\n      orderedStyle?: 'a' | 'A';\n      start?: number;\n      content: string;\n      originalLine: string;\n    }>\n  > = [];\n  let currentGroup: Array<{\n    type: 'ul' | 'ol';\n    level: number;\n    orderedStyle?: 'a' | 'A';\n    start?: number;\n    content: string;\n    originalLine: string;\n  }> = [];\n\n  let hasEmptyLineSinceLastItem = false;\n\n  for (const line of lines) {\n    const listMatch = line.match(/\\{\\{LISTITEM:([^:]+):([^:]+):([^:]*):([^:]*):(.+)\\}\\}/);\n    if (listMatch) {\n      const itemType = listMatch[1] as 'ul' | 'ol';\n      const itemLevel = parseInt(listMatch[2]);\n      const itemOrderedStyle = listMatch[3] as 'a' | 'A' | '';\n      const itemStart = listMatch[4] ? parseInt(listMatch[4]) : undefined;\n\n      // Check if we should break the group due to type change after empty line\n      if (hasEmptyLineSinceLastItem && currentGroup.length > 0) {\n        const lastItem = currentGroup[currentGroup.length - 1];\n        // Break group if type changes at the same level after empty line\n        if (lastItem.type !== itemType && lastItem.level === itemLevel) {\n          groups.push([...currentGroup]);\n          currentGroup = [];\n        }\n      }\n\n      currentGroup.push({\n        type: itemType,\n        level: itemLevel,\n        orderedStyle: itemOrderedStyle || undefined,\n        start: itemStart,\n        content: listMatch[5],\n        originalLine: line,\n      });\n      hasEmptyLineSinceLastItem = false;\n    } else if (line.trim() !== '') {\n      // Non-empty, non-list line - end current group\n      if (currentGroup.length > 0) {\n        groups.push([...currentGroup]);\n        currentGroup = [];\n      }\n      hasEmptyLineSinceLastItem = false;\n    } else if (line.trim() === '') {\n      // Empty line\n      hasEmptyLineSinceLastItem = true;\n    }\n  }\n\n  // Add final group if any\n  if (currentGroup.length > 0) {\n    groups.push(currentGroup);\n  }\n\n  if (groups.length === 0) return markdown;\n\n  // Process each group separately\n  for (const group of groups) {\n    const html = buildNestedList(group);\n\n    // Replace first item in group with the complete HTML\n    const firstItem = group[0];\n    markdown = markdown.replace(firstItem.originalLine, html);\n\n    // Remove remaining items in group\n    for (let i = 1; i < group.length; i++) {\n      markdown = markdown.replace(group[i].originalLine, '');\n    }\n  }\n\n  return markdown;\n};\n\n// Build nested HTML from a group of list items\nconst buildNestedList = (\n  listItems: Array<{\n    type: 'ul' | 'ol';\n    level: number;\n    orderedStyle?: 'a' | 'A';\n    start?: number;\n    content: string;\n    originalLine: string;\n  }>,\n): string => {\n  if (listItems.length === 0) return '';\n\n  let html = '';\n  const stack: Array<{\n    type: 'ul' | 'ol';\n    level: number;\n    orderedStyle?: 'a' | 'A';\n    hasOpenLi: boolean;\n  }> = [];\n\n  for (let i = 0; i < listItems.length; i++) {\n    const item = listItems[i];\n    const nextItem = i < listItems.length - 1 ? listItems[i + 1] : null;\n\n    // Close lists that are deeper than current level\n    while (stack.length > 0 && stack[stack.length - 1].level > item.level) {\n      const last = stack.pop()!;\n      if (last.hasOpenLi) {\n        html += '</li>';\n      }\n      html += `</${last.type}>`;\n    }\n\n    // Close current list if switching types at same level\n    if (\n      stack.length > 0 &&\n      stack[stack.length - 1].level === item.level &&\n      (stack[stack.length - 1].type !== item.type ||\n        stack[stack.length - 1].orderedStyle !== item.orderedStyle)\n    ) {\n      const last = stack.pop()!;\n      if (last.hasOpenLi) {\n        html += '</li>';\n      }\n      html += `</${last.type}>`;\n    }\n\n    // Open new list if needed\n    if (stack.length === 0 || stack[stack.length - 1].level < item.level) {\n      const styleAttr =\n        item.type === 'ol' && item.orderedStyle\n          ? ` type=\"${item.orderedStyle}\"`\n          : '';\n      const startAttr =\n        item.type === 'ol' && item.start && item.start !== 1\n          ? ` start=\"${item.start}\"`\n          : '';\n      html += `<${item.type}${styleAttr}${startAttr}>`;\n      stack.push({\n        type: item.type,\n        level: item.level,\n        orderedStyle: item.orderedStyle,\n        hasOpenLi: false,\n      });\n    }\n\n    // Close previous li at same level if needed\n    if (\n      stack.length > 0 &&\n      stack[stack.length - 1].hasOpenLi &&\n      stack[stack.length - 1].level === item.level\n    ) {\n      html += '</li>';\n      stack[stack.length - 1].hasOpenLi = false;\n    }\n\n    // Add list item\n    html += `<li>${item.content}`;\n    stack[stack.length - 1].hasOpenLi = true;\n\n    // Close li if next item is not deeper\n    if (!nextItem || nextItem.level <= item.level) {\n      html += '</li>';\n      stack[stack.length - 1].hasOpenLi = false;\n    }\n  }\n\n  // Close remaining lists\n  while (stack.length > 0) {\n    const last = stack.pop()!;\n    if (last.hasOpenLi) {\n      html += '</li>';\n    }\n    html += `</${last.type}>`;\n  }\n\n  return html;\n};\n\n// Process footnote references in the text [^1]\nconst footnoteReferenceReplacer = (_match: string, id: string) => {\n  // Create a link inside a superscript tag with proper references\n  return `<sup id=\"fnref:${id}\"><a href=\"#fn:${id}\">[${id}]</a></sup>`;\n};\n\n// Process footnote definitions [^1]: Footnote text\nconst footnoteDefinitionReplacer = (\n  _match: string,\n  id: string,\n  text: string,\n) => {\n  footnotes.push([id, text.trim()]);\n  return ''; // Remove the definition from the main text\n};\n\n// Generate the footnotes section\nconst generateFootnotesSection = () => {\n  if (footnotes.length === 0) return '';\n\n  const footnotesHtml = footnotes\n    .map(\n      ([id, text]) => `\n    <li id=\"fn:${id}\">\n      ${text}\n      <sup><a href=\"#fnref:${id}\">↩</a></sup>\n    </li>`,\n    )\n    .join('\\n');\n\n  return `\n<div class=\"footnotes\">\n  <hr>\n  <ol>\n    ${footnotesHtml}\n  </ol>\n</div>`;\n};\n\nconst table = (\n  _: string,\n  headers: string,\n  format: string,\n  content: string = '',\n) => {\n  const align = format\n    .split('|')\n    .filter((__, i, arr) => i > 0 && i < arr.length - 1)\n    .map((col) =>\n      /:-+:/g.test(col)\n        ? 'center'\n        : /-+:/g.test(col)\n        ? 'right'\n        : /:-+/.test(col)\n        ? 'left'\n        : '',\n    );\n\n  // Return attribute string (keeps compatibility with original code's template)\n  const td = (col: number) => {\n    const a = align[col];\n    return a ? ` align=\"${a}\"` : '';\n  };\n\n  // Parse header cells (keep both raw and trimmed for emptiness checks)\n  const rawHeaderCells = headers.split('|').slice(1, -1); // remove first and last empty elements\n  const headerCells = rawHeaderCells.map((hd) => hd.trim());\n\n  const headerResults: string[] = [];\n  let skipNext = 0;\n\n  for (let i = 0; i < headerCells.length; i++) {\n    if (skipNext > 0) {\n      skipNext--;\n      continue;\n    }\n\n    const hd = headerCells[i];\n    const rawHd = rawHeaderCells[i];\n    \n    if (hd && hd.length) {\n      // count how many consecutive empty header cells follow -> colspan\n      // Only do colspan if there's at least one truly empty cell (from ||) in the sequence\n      let spanCount = 1;\n      let hasTrulyEmptyCell = false;\n      \n      // Check if there are any truly empty cells following this cell\n      for (let j = i + 1; j < headerCells.length && headerCells[j].length === 0; j++) {\n        if (rawHeaderCells[j] === '') {\n          hasTrulyEmptyCell = true;\n          break;\n        }\n      }\n      \n      // Only count consecutive empty cells for colspan if we found truly empty cells\n      if (hasTrulyEmptyCell) {\n        for (\n          let j = i + 1;\n          j < headerCells.length && headerCells[j].length === 0;\n          j++\n        ) {\n          spanCount++;\n        }\n      }\n\n      if (spanCount > 1) {\n        skipNext = spanCount - 1;\n        headerResults.push(`<th${td(i)} colspan=\"${spanCount}\">${hd}</th>`);\n      } else {\n        headerResults.push(`<th${td(i)}>${hd}</th>`);\n      }\n    } else {\n      // Check if this is a truly empty cell (from ||) or just whitespace\n      if (rawHd === '') {\n        // This is a truly empty cell that should be skipped for colspan\n        // But if we reach here, it means it wasn't part of a colspan, so render empty th\n        headerResults.push(`<th${td(i)}></th>`);\n      } else {\n        // This is a whitespace-only cell that should remain as individual cell\n        headerResults.push(`<th${td(i)}></th>`);\n      }\n    }\n  }\n\n  const h = `<tr>\\n  ${headerResults.join('\\n  ')}\\n</tr>\\n`;\n\n  // body rows\n  const rows = content\n    .split('\\n')\n    .map((row) => row.trim())\n    .filter((row) => row && row.length);\n\n  const c = rows\n    .map((row) => {\n      // Split by | but keep track of truly empty cells (from ||)\n      const rawCells = row.split('|').slice(1, -1); // remove first and last empty elements\n      const cells = rawCells.map((cell) => cell.trim());\n\n      const cellResults: string[] = [];\n      let skipNext = 0;\n\n      for (let i = 0; i < cells.length; i++) {\n        if (skipNext > 0) {\n          skipNext--;\n          continue;\n        }\n\n        const cell = cells[i];\n        const rawCell = rawCells[i];\n        \n        if (cell && cell.length) {\n          // Count consecutive empty cells after this one -> colspan\n          // Only do colspan if there's at least one truly empty cell (from ||) in the sequence\n          let spanCount = 1;\n          let hasTrulyEmptyCell = false;\n          \n          // Check if there are any truly empty cells following this cell\n          for (let j = i + 1; j < cells.length && cells[j].length === 0; j++) {\n            if (rawCells[j] === '') {\n              hasTrulyEmptyCell = true;\n              break;\n            }\n          }\n          \n          // Only count consecutive empty cells for colspan if we found truly empty cells\n          if (hasTrulyEmptyCell) {\n            for (\n              let j = i + 1;\n              j < cells.length && cells[j].length === 0;\n              j++\n            ) {\n              spanCount++;\n            }\n          }\n          if (spanCount > 1) {\n            skipNext = spanCount - 1;\n            cellResults.push(`<td${td(i)} colspan=\"${spanCount}\">${cell}</td>`);\n          } else {\n            cellResults.push(`<td${td(i)}>${cell}</td>`);\n          }\n        } else {\n          // Check if this is a truly empty cell (from ||) or just whitespace\n          if (rawCell === '') {\n            // This is a truly empty cell that should be skipped for colspan\n            // But if we reach here, it means it wasn't part of a colspan, so render empty td\n            cellResults.push(`<td${td(i)}></td>`);\n          } else {\n            // This is a whitespace-only cell that should remain as individual cell\n            cellResults.push(`<td${td(i)}></td>`);\n          }\n        }\n      }\n\n      return `<tr>\\n  ${cellResults.join('\\n  ')}\\n</tr>\\n`;\n    })\n    .join('');\n\n  // keep the original surrounding newlines/structure to stay compatible\n  return `\\n<table><tbody>${h}${c}</tbody></table>\\n`;\n};\n\n// Enhanced table with caption support\nconst tableWithCaption = (\n  _: string,\n  caption: string,\n  headers: string,\n  format: string,\n  content: string = '',\n) => {\n  const tableHtml = table(_, headers, format, content);\n  // Insert caption after <table> tag\n  return tableHtml.replace(\n    '<table>',\n    `<table><caption>${caption.trim()}</caption>`,\n  );\n};\n\nconst cleanUpUrl = (link: string) => link.replace(/<\\/?em>/g, '_');\n\nconst header = (_: string, match: string, h = '') => {\n  const level = match.length;\n  return `<h${level}>${h.trim()}</h${level}>`;\n};\n\n/** Slugify heading text: lowercase, strip diacritics, replace non `[a-z0-9]` runs with `-`. */\nconst slugify = (text: string): string => {\n  const stripped = text\n    .normalize('NFD')\n    .replace(/[\\u0300-\\u036f]/g, '') // strip combining diacritical marks\n    .toLowerCase()\n    .replace(/[^a-z0-9]+/g, '-')\n    .replace(/^-+|-+$/g, '');\n  return stripped || 'section';\n};\n\n/**\n * Add slugified `id` attributes to `<h1>`-`<h6>` tags in already-rendered HTML.\n * Duplicate slugs within a single call get a `-2`, `-3`, ... suffix.\n */\nconst addHeadingIds = (html: string): string => {\n  const slugCounts = new Map<string, number>();\n  return html.replace(\n    /<(h[1-6])>([\\s\\S]*?)<\\/\\1>/g,\n    (_match, tag: string, inner: string) => {\n      const text = inner.replace(/<[^>]+>/g, '');\n      const base = slugify(text);\n      const count = slugCounts.get(base) ?? 0;\n      slugCounts.set(base, count + 1);\n      const slug = count === 0 ? base : `${base}-${count + 1}`;\n      return `<${tag} id=\"${slug}\">${inner}</${tag}>`;\n    },\n  );\n};\n\n// Function to extract and store code blocks\nconst extractCodeBlocks = (markdown: string): string => {\n  return markdown.replace(\n    /\\n\\s*```(\\w*)\\n([^]*?)\\n\\s*```\\s*\\n/g,\n    (_match, lang, code) => {\n      codeBlocks.push({ lang, code });\n      return `\\n<pre>{{CODEBLOCKPH${codeBlocks.length - 1}}}</pre>\\n`;\n    },\n  );\n};\n\n// Function to extract and store inline code\nconst extractInlineCode = (markdown: string): string => {\n  return markdown.replace(/`([^`]+)`/g, (_match, code) => {\n    inlineCode.push(code);\n    return `{{INLINECODEPH${inlineCode.length - 1}}}`;\n  });\n};\n\nconst renderWithExtension = <Input>(\n  extensions: SlimdownExtension[],\n  method: keyof SlimdownExtension,\n  input: Input,\n  fallback: () => string,\n) => {\n  for (const extension of extensions) {\n    const renderer = extension[method] as\n      | ((input: Input) => string | undefined)\n      | undefined;\n    const html = renderer?.(input);\n    if (typeof html === 'string') return html;\n  }\n  return fallback();\n};\n\n// Function to restore code blocks with proper HTML escaping\nconst restoreCodeBlocks = (\n  markdown: string,\n  extensions: SlimdownExtension[],\n): string => {\n  return markdown.replace(\n    /<pre>{{CODEBLOCKPH(\\d+)}}<\\/pre>/g,\n    (_match, index) => {\n      const { lang, code } = codeBlocks[parseInt(index)];\n      return renderWithExtension(\n        extensions,\n        'renderCodeBlock',\n        { lang, code, escapeHtml },\n        () => {\n          const classAttr = lang ? ` class=\"language-${lang}\"` : '';\n          return `<pre><code${classAttr}>${escapeHtml(code)}</code></pre>`;\n        },\n      );\n    },\n  );\n};\n\n// Function to restore inline code with proper HTML escaping\nconst restoreInlineCode = (markdown: string): string => {\n  return markdown.replace(/{{INLINECODEPH(\\d+)}}/g, (_match, index) => {\n    const code = inlineCode[parseInt(index)];\n    return `<code>${escapeHtml(code)}</code>`;\n  });\n};\n\n// Function to extract and store math blocks\nconst extractMathBlocks = (markdown: string): string => {\n  return markdown.replace(/\\n\\s*\\$\\$([^]*?)\\$\\$\\s*\\n/g, (_match, math) => {\n    mathBlocks.push(math.trim());\n    return `\\n{{MATHBLOCKPH${mathBlocks.length - 1}}}\\n`;\n  });\n};\n\n// Function to extract and store inline math\nconst extractInlineMath = (markdown: string): string => {\n  return markdown.replace(/\\$([^$\\n]+)\\$/g, (_match, math) => {\n    inlineMath.push(math);\n    return `{{INLINEMATHPH${inlineMath.length - 1}}}`;\n  });\n};\n\n// Function to restore math blocks\nconst restoreMathBlocks = (\n  markdown: string,\n  extensions: SlimdownExtension[],\n): string => {\n  return markdown.replace(/{{MATHBLOCKPH(\\d+)}}/g, (_match, index) => {\n    const math = mathBlocks[parseInt(index)];\n    return renderWithExtension(\n      extensions,\n      'renderMathBlock',\n      { math, escapeHtml },\n      () => `<div class=\"math-block\">${escapeHtml(math)}</div>`,\n    );\n  });\n};\n\n// Function to restore inline math\nconst restoreInlineMath = (\n  markdown: string,\n  extensions: SlimdownExtension[],\n): string => {\n  return markdown.replace(/{{INLINEMATHPH(\\d+)}}/g, (_match, index) => {\n    const math = inlineMath[parseInt(index)];\n    return renderWithExtension(\n      extensions,\n      'renderInlineMath',\n      { math, escapeHtml },\n      () => `<span class=\"math-inline\">${escapeHtml(math)}</span>`,\n    );\n  });\n};\n\n/** Pre-paragraph rules (everything except paragraph processing) */\nconst preParaRules = [\n  [/\\r\\n/g, '\\n'], // Remove \\r\n  [/\\n(#+)(.*)/g, header], // headers\n  [/<(https?:\\/\\/[^\\s>]+)>/g, '<a href=\"$1\">$1</a>'], // autolinks\n  [/!\\[([^\\[]*)\\]\\((?:javascript:)?([^\\)]+)\\)/g, '<img src=\"$2\" alt=\"$1\">'], // images, invoked before links\n  [/\\[([^\\[]+)\\]\\((?:javascript:)?([^\\)]+)\\)/g, '<a href=\"$2\">$1</a>'], // links\n  [/([^\\s]) {2,}\\n/g, '$1<br>\\n'], // hard line breaks (two+ trailing spaces after non-whitespace)\n  [/([^\\\\])(\\*\\*|__)(.*?(_|\\*)?)\\2/g, '$1<strong>$3</strong>'], // bold\n  [/([^\\\\])(\\*|_)(.*?)\\2/g, '$1<em>$3</em>'], // emphasis\n  [/\\\\_/g, '&#95;'], // underscores part 1\n  [/\\~\\~(.*?)\\~\\~/g, '<del>$1</del>'], // del\n  [/\\:\\\"(.*?)\\\"\\:/g, '<q>$1</q>'], // quote\n  [/\\n-{3,}/g, '\\n<hr />'], // horizontal rule (must come before ul lists)\n  [/\\n( *)[-*+] \\[([xX ])\\](.*)/g, taskList], // task lists with checkboxes (must come before regular ul lists)\n  [/\\n( *)(\\*|-|\\+)(.*)/g, ulList], // ul lists using +, - or * to denote an entry\n  [/\\n( *)([0-9]+[.)]) (.*)/g, olList], // ol lists\n  [/\\n(&gt;|\\>)(.*)/g, blockquote], // blockquotes\n  [/(\\^)(.*?)\\1/g, '<sup>$2</sup>'], // superscript\n  [/(\\~)(.*?)\\1/g, '<sub>$2</sub>'], // subscript\n  [\n    /\\n\\[(.+?)\\]\\n( *\\|[^\\n]+\\|\\r?\\n)((?: *\\|:?[ -]+:?)+ *\\|)(\\n(?: *\\|[^\\n]+\\|\\r?\\n?)*)?/g,\n    tableWithCaption,\n  ], // tables with captions\n  [\n    /( *\\|[^\\n]+\\|\\r?\\n)((?: *\\|:?[ -]+:?)+ *\\|)(\\n(?: *\\|[^\\n]+\\|\\r?\\n?)*)?/g,\n    table,\n  ], // regular tables\n  [/\\[\\^([^\\]]+)\\](?!:)/g, footnoteReferenceReplacer], // footnote references\n  [/\\[\\^([^\\]]+)\\]:\\s*((?:[^\\n]*\\n?)*)/g, footnoteDefinitionReplacer], // footnote definitions\n  [/\\n([A-Z][A-Za-z\\s]*?)\\s:\\s*([A-Z][^\\n]*)/g, definitionList], // definition lists (Capitalized Term : Capitalized Definition)\n] as Array<[RegExp, RegexReplacer | string]>;\n\n/** Post-paragraph rules (cleanup rules that run after paragraph processing) */\nconst postParaRules = [\n  [/\\s?<\\/[ou]l>\\s?<[ou]l>/g, '', 3], // fix extra ol and ul\n  [/<\\/blockquote>\\n<blockquote>/g, '<br>\\n'], // fix extra blockquote\n  [/https?:\\/\\/[^\"']*/g, cleanUpUrl], // fix em in links\n  [/&#95;/g, '_'], // underscores part 2\n] as Array<[RegExp, RegexReplacer | string]>;\n\n/** Options for the {@link render} function. */\nexport interface RenderOptions {\n  /** If true, remove the `<p>...</p>` wrapper around top-level paragraphs. Default: false. */\n  removeParagraphs?: boolean;\n  /** If true, add `target=\"_blank\"` to all links. Default: false. */\n  externalLinks?: boolean;\n  /** If true, parse alpha ordered lists such as `a.`, `A)`, or `(b)`. Default: false. */\n  alphaLists?: boolean;\n  /** If true, add a slugified `id` attribute to each heading. Default: false. */\n  headingIds?: boolean;\n  /** Optional render hooks for code blocks and math placeholders. */\n  extensions?: SlimdownExtension[];\n}\n\n/**\n * Render Markdown text into HTML.\n *\n * @param markdown Markdown text\n * @param optionsOrRemoveParagraphs Either a {@link RenderOptions} object, or a boolean to remove\n * the `<p>` wrapper around paragraphs (legacy positional form).\n * @param externalLinks If true (default false), add `target=\"_blank\"` to all links.\n * Only used when the second argument is a boolean (legacy form).\n */\nexport function render(markdown: string, options?: RenderOptions): string;\nexport function render(markdown: string, removeParagraphs?: boolean, externalLinks?: boolean): string;\nexport function render(\n  markdown: string,\n  optionsOrRemoveParagraphs: RenderOptions | boolean = false,\n  externalLinksArg = false,\n) {\n  let removeParagraphs: boolean;\n  let externalLinks: boolean;\n  let alphaLists: boolean;\n  let headingIds: boolean;\n  let extensions: SlimdownExtension[];\n  if (typeof optionsOrRemoveParagraphs === 'object') {\n    removeParagraphs = optionsOrRemoveParagraphs.removeParagraphs ?? false;\n    externalLinks = optionsOrRemoveParagraphs.externalLinks ?? false;\n    alphaLists = optionsOrRemoveParagraphs.alphaLists ?? false;\n    headingIds = optionsOrRemoveParagraphs.headingIds ?? false;\n    extensions = optionsOrRemoveParagraphs.extensions ?? [];\n  } else {\n    removeParagraphs = optionsOrRemoveParagraphs;\n    externalLinks = externalLinksArg;\n    alphaLists = false;\n    headingIds = false;\n    extensions = [];\n  }\n  // Reset the storage arrays\n  codeBlocks.length = 0;\n  inlineCode.length = 0;\n  mathBlocks.length = 0;\n  inlineMath.length = 0;\n  footnotes.length = 0;\n\n  // Extract code blocks, math, and inline code before processing\n  markdown = extractCodeBlocks(`\\n${markdown}\\n`);\n  markdown = extractMathBlocks(markdown);\n  markdown = extractInlineCode(markdown);\n  markdown = extractInlineMath(markdown);\n\n  if (alphaLists) {\n    markdown = processAlphaListItems(markdown);\n  }\n\n  // Apply pre-paragraph rules\n  preParaRules.forEach(([regex, subst, repeat = 1]) => {\n    for (let i = 0; i < repeat; i++) {\n      markdown = markdown.replace(regex, subst as any);\n    }\n  });\n\n  // Process collected list items into proper nested structure\n  markdown = processListItems(markdown);\n\n  // Apply paragraph processing\n  markdown = markdown.replace(/\\n([^\\n]+)\\n/g, para);\n\n  // Apply post-paragraph cleanup rules\n  postParaRules.forEach(([regex, subst, repeat = 1]) => {\n    for (let i = 0; i < repeat; i++) {\n      markdown = markdown.replace(regex, subst as any);\n    }\n  });\n\n  // Restore code blocks, math, and inline code with proper escaping\n  markdown = restoreCodeBlocks(markdown, extensions);\n  markdown = restoreMathBlocks(markdown, extensions);\n  markdown = restoreInlineCode(markdown);\n  markdown = restoreInlineMath(markdown, extensions);\n\n  // Add footnotes section if there are any footnotes\n  markdown = markdown.trim() + generateFootnotesSection();\n\n  if (headingIds) {\n    markdown = addHeadingIds(markdown);\n  }\n  if (removeParagraphs) {\n    markdown = markdown.replace(/^<p>(.*)<\\/p>$/s, '$1');\n  }\n  if (externalLinks) {\n    markdown = markdown.replace(/<a href=\"/g, '<a target=\"_blank\" href=\"');\n  }\n  return markdown;\n}\n\n/**\n * Add a new rule: The regex should be global and not use multiline mode.\n */\nexport const addRule = (regex: RegExp, replacement: RegexReplacer | string) => {\n  preParaRules.push([regex, replacement]);\n};\n"],"mappings":"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","names":["skipNext"]}