{"version":3,"file":"markdown.mjs","sources":["../../../../../src/_common/docs/plugins/generate-llms/markdown.ts"],"sourcesContent":["import type { FrontmatterResult } from './types';\n\n/**\n * 拆分 title：'Button 按钮' -> { title: 'Button', subtitle: '按钮' }。\n * 仅当能拆成「英文/拉丁开头 + 空格 + 中文副标题」时才拆分（兼容 'Button 按钮' 等），\n * 纯中文标题（如 '气泡提示'）或不含中文副标题的场景整体作为 title，避免误拆。\n */\nexport function splitTitle(title: string): { title: string; subtitle: string } {\n  const trimmed = (title || '').trim();\n  if (!trimmed) return { title: '', subtitle: '' };\n  // 需前段以英文字母开头、后段包含中文，才视为「英文 中文」组合\n  const match = trimmed.match(/^([A-Za-z][A-Za-z0-9\\s-]*?)\\s+([^\\s].*)$/);\n  if (match && /[\\u4e00-\\u9fa5]/.test(match[2])) {\n    return { title: match[1].trim(), subtitle: match[2].trim() };\n  }\n  return { title: trimmed, subtitle: '' };\n}\n\n/**\n * 解析 Markdown 的 frontmatter（--- 包裹的简单 key: value 格式）。\n * 替代 gray-matter，避免引入额外依赖。\n */\nexport function parseFrontmatter(raw: string): FrontmatterResult {\n  const data: Record<string, string> = {};\n  const match = raw.match(/^---\\s*\\n([\\s\\S]*?)\\n---\\s*\\n?/);\n  if (!match) return { data, content: raw };\n  const fm = match[1];\n  fm.split('\\n').forEach((line) => {\n    const kv = line.match(/^([a-zA-Z0-9_-]+)\\s*:\\s*(.*?)\\s*$/);\n    if (kv) {\n      const [key, value] = kv.slice(1);\n      data[key] = value;\n    }\n  });\n  return { data, content: raw.slice(match[0].length) };\n}\n\n/**\n * 移除站点专用说明块：渲染框架支持情况 / 版本提示 / Tips blockquote / 预览链接。\n * 通过 tag 计数处理嵌套元素，从而整块移除。\n */\nexport function removeSiteBlocks(body: string): string {\n  const blockTags = ['div', 'blockquote'];\n  let result = body;\n\n  blockTags.forEach((tag) => {\n    const openRe = new RegExp(`<${tag}\\\\b[^>]*>`, 'g');\n    let match = openRe.exec(result);\n    while (match) {\n      const openTag = match[0];\n      const isTarget =\n        (tag === 'div' &&\n          /(background:\\s*#ecf2fe|background-color:\\s*#ecf2fe|background:\\s*#d9e1ff|background-color:\\s*#d9e1ff)/.test(\n            openTag\n          )) ||\n        (tag === 'blockquote' && /background-color:\\s*#/.test(openTag)) ||\n        /渲染框架支持情况|该组件于|Tips:|预览效果/.test(openTag);\n\n      let removed = false;\n      if (isTarget) {\n        let depth = 0;\n        const tokenRe = new RegExp(`</?${tag}(?:\\\\s[^>]*)?>`, 'g');\n        tokenRe.lastIndex = match.index;\n        let token = tokenRe.exec(result);\n        while (token) {\n          if (token[0].startsWith(`</${tag}`)) {\n            depth -= 1;\n            if (depth === 0) {\n              const end = token.index + token[0].length;\n              result = result.slice(0, match.index) + result.slice(end);\n              removed = true;\n              break;\n            }\n          } else {\n            depth += 1;\n          }\n          token = tokenRe.exec(result);\n        }\n      }\n\n      if (removed) {\n        openRe.lastIndex = match.index;\n      } else {\n        openRe.lastIndex = match.index + match[0].length;\n      }\n      match = openRe.exec(result);\n    }\n  });\n  return result;\n}\n\n/**\n * 将站点专用的「在开发者工具中预览效果」链接转换为 Markdown 链接。\n */\nexport function convertPreviewLink(body: string): string {\n  return body.replace(\n    /<a\\s+href=\"(https:\\/\\/developers\\.weixin\\.qq\\.com\\/s\\/[^\"]+)\"[^>]*>[^<]*<\\/a>/g,\n    (_m, url: string) => `> [在微信开发者工具中预览效果](${url})`\n  );\n}\n\n/**\n * 将站点专用的 Tips blockquote（小程序调试提示）转换为 Markdown 引用块。\n */\nexport function convertTipsBlock(body: string): string {\n  return body.replace(/<blockquote\\b[^>]*>\\s*<p>([\\s\\S]*?)<\\/p>\\s*<\\/blockquote>/g, (_m, text: string) =>\n    text\n      .split(/<br\\s*\\/?>|\\n/)\n      .map((line) => line.replace(/<[^>]+>/g, '').trim())\n      .filter(Boolean)\n      .map((line) => `> ${line}`)\n      .join('\\n')\n  );\n}\n\n/**\n * 提取字符串中的全部顶层 `<div ...>...</div>` 块内容（含嵌套），\n * 按 tag 计数正确处理嵌套 div，避免非贪婪匹配截断嵌套内容。\n */\nfunction extractChildDivBlocks(html: string): string[] {\n  const blocks: string[] = [];\n  const tokenRe = /<\\/?div(?:\\s[^>]*)?>/g;\n  let depth = 0;\n  let start = -1;\n  let token = tokenRe.exec(html);\n  while (token) {\n    if (token[0].startsWith('</div')) {\n      depth -= 1;\n      if (depth === 0 && start !== -1) {\n        blocks.push(html.slice(start, token.index));\n        start = -1;\n      }\n    } else {\n      if (depth === 0) {\n        start = token.index + token[0].length;\n      }\n      depth += 1;\n    }\n    token = tokenRe.exec(html);\n  }\n  return blocks;\n}\n\n/**\n * 将站点顶部的说明块（版本上线提示 / 渲染框架支持情况）转换为 Markdown 引用块。\n */\nexport function convertHeaderNoticeBlocks(body: string): string {\n  const openRe = /<div\\s+style=\"background:\\s*#(?:ecf2fe|d9e1ff)[^\"]*\"[^>]*>/g;\n  let result = body;\n  let match = openRe.exec(result);\n  while (match) {\n    let depth = 0;\n    const tokenRe = /<\\/?div(?:\\s[^>]*)?>/g;\n    tokenRe.lastIndex = match.index;\n    let token = tokenRe.exec(result);\n    let end = -1;\n    while (token) {\n      if (token[0].startsWith('</div')) {\n        depth -= 1;\n        if (depth === 0) {\n          end = token.index + token[0].length;\n          break;\n        }\n      } else {\n        depth += 1;\n      }\n      token = tokenRe.exec(result);\n    }\n    if (end === -1) break;\n\n    const inner = result.slice(match.index + match[0].length, end);\n    const converted = extractChildDivBlocks(inner)\n      .map((block) =>\n        block\n          .replace(/<[^>]+>/g, '')\n          .replace(/\\s+/g, ' ')\n          .trim()\n      )\n      .filter(Boolean)\n      .map((line) => `> ${line}`)\n      .join('\\n');\n    result = result.slice(0, match.index) + converted + result.slice(end);\n    openRe.lastIndex = match.index;\n    match = openRe.exec(result);\n  }\n  return result;\n}\n\n/**\n * 清理站点专用 HTML：转换为 Markdown 语义后，移除剩余站点专用 HTML 块。\n */\nexport function cleanSiteHtml(body: string): string {\n  const converted = convertHeaderNoticeBlocks(convertTipsBlock(convertPreviewLink(body)));\n  return removeSiteBlocks(converted).replace(\n    /<a href=\"https:\\/\\/developers\\.weixin\\.qq\\.com\\/s\\/[^\"]*\"[^>]*>[^<]*<\\/a>/g,\n    ''\n  );\n}\n\n/**\n * 通用站点装饰块移除器：移除设计图块（`<div class=\"legend\">`，可能含嵌套 div）、\n * 站点专用说明块等平台无关的 HTML 装饰，保留真实内容。\n * 可作为各仓库（web/mobile/flutter）的兜底 transformer。\n */\nexport const stripSiteBlocks: (body: string) => string = (body) => {\n  let result = body;\n  // 移除设计图块：<div class=\"legend\">...</div>（flutter 设计文档常见，内部含嵌套 .item/.img）\n  const legendRe = /<div\\s+class=\"legend\"[^>]*>/g;\n  let lmatch = legendRe.exec(result);\n  while (lmatch) {\n    let depth = 0;\n    const tokenRe = /<\\/?div(?:\\s[^>]*)?>/g;\n    tokenRe.lastIndex = lmatch.index;\n    let token = tokenRe.exec(result);\n    let end = -1;\n    while (token) {\n      if (token[0].startsWith('</div')) {\n        depth -= 1;\n        if (depth === 0) {\n          end = token.index + token[0].length;\n          break;\n        }\n      } else {\n        depth += 1;\n      }\n      token = tokenRe.exec(result);\n    }\n    if (end === -1) break;\n    result = result.slice(0, lmatch.index) + result.slice(end);\n    legendRe.lastIndex = lmatch.index;\n    lmatch = legendRe.exec(result);\n  }\n  // 再移除站点专用说明块（渲染框架支持情况 / 版本提示 / Tips / 预览链接等）\n  return removeSiteBlocks(result);\n};\n\n/**\n * 将站点专用的 `<td-code-block>` 代码块转换为标准 Markdown 代码块。\n * 匹配 flutter 文档中 `panel=\"Dart\"` 的代码块结构：\n *   <td-code-block panel=\"Dart\"><pre slot=\"Dart\" lang=\"javascript\">...</pre></td-code-block>\n * 提取代码内容并输出为 ```dart 代码块。\n *\n * 这是平台无关的通用 transformer，供各仓库按需注入。\n */\nexport function convertTdCodeBlock(body: string): string {\n  // 匹配 <td-code-block panel=\"...\">...</td-code-block>，提取内部 <pre> 内容\n  return body.replace(/<td-code-block\\b[^>]*>([\\s\\S]*?)<\\/td-code-block>/g, (_match, inner: string) => {\n    // 提取 <pre> 内的代码内容（可能有 <pre slot=\"Dart\" lang=\"javascript\"> 属性）\n    const preMatch = inner.match(/<pre\\b[^>]*>([\\s\\S]*?)<\\/pre>/);\n    if (preMatch) {\n      const code = preMatch[1].replace(/^\\n+/, '').replace(/\\s+$/, '');\n      return `\\`\\`\\`dart\\n${code}\\n\\`\\`\\``;\n    }\n    return inner;\n  });\n}\n\n/**\n * 将正文中的 ATX 标题统一降一级（`##` -> `###`），跳过代码围栏内的行。\n * 用于 llms-full.txt 聚合场景：组件标题占 `##`，正文标题需要整体下移一级。\n */\nexport function demoteHeadings(body: string): string {\n  let inFence = false;\n  return body\n    .split('\\n')\n    .map((line) => {\n      if (/^\\s*(```|~~~)/.test(line)) {\n        inFence = !inFence;\n        return line;\n      }\n      if (!inFence && /^#{1,5}\\s/.test(line)) {\n        return `#${line}`;\n      }\n      return line;\n    })\n    .join('\\n');\n}\n\n/**\n * 移除站点专用 coverages-badge 徽章块。\n * 匹配 flutter 文档开头常见的 <span class=\"coverages-badge\">...</span> 装饰块。\n */\nexport function stripCoverageBadges(body: string): string {\n  return body.replace(/<span\\s+class=\"coverages-badge\"[^>]*>[\\s\\S]*?<\\/span>/g, '');\n}\n"],"names":["splitTitle","title","trimmed","trim","subtitle","match","test","parseFrontmatter","raw","data","content","fm","split","forEach","line","kv","_kv$slice","slice","_kv$slice2","_slicedToArray","key","value","length","removeSiteBlocks","body","blockTags","result","tag","openRe","RegExp","concat","exec","openTag","isTarget","removed","depth","tokenRe","lastIndex","index","token","startsWith","end","convertPreviewLink","replace","_m","url","convertTipsBlock","text","map","filter","Boolean","join","extractChildDivBlocks","html","blocks","start","push","convertHeaderNoticeBlocks","inner","converted","block","cleanSiteHtml","stripSiteBlocks","legendRe","lmatch","convertTdCodeBlock","_match","preMatch","code","demoteHeadings","inFence","stripCoverageBadges"],"mappings":"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"}