/** * AI 日复盘 / 周复盘:Markdown 子集渲染 + 五节大标题图标兜底 */ (function (global) { "use strict"; var SECTION_FIXES = [ { re: /^\*\*1\.\s*(?!📊)总体盈亏结构\*\*/m, rep: "**1. 📊 总体盈亏结构**" }, { re: /^\*\*2\.\s*(?!🧠)心态与执行\*\*/m, rep: "**2. 🧠 心态与执行**" }, { re: /^\*\*3\.\s*(?!🏷️)行为标签\*\*/m, rep: "**3. 🏷️ 行为标签**" }, { re: /^\*\*4\.\s*(?!✅)改进建议\*\*/m, rep: "**4. ✅ 改进建议**" }, { re: /^\*\*5\.\s*(?!📈)图表(?:分析)?\*\*/m, rep: "**5. 📈 图表分析**" }, { re: /^1\.\s*(?!📊)总体盈亏结构/m, rep: "**1. 📊 总体盈亏结构**" }, { re: /^2\.\s*(?!🧠)心态与执行/m, rep: "**2. 🧠 心态与执行**" }, { re: /^3\.\s*(?!🏷️)行为标签/m, rep: "**3. 🏷️ 行为标签**" }, { re: /^4\.\s*(?!✅)改进建议/m, rep: "**4. ✅ 改进建议**" }, { re: /^5\.\s*(?!📈)图表/m, rep: "**5. 📈 图表分析**" }, ]; function escapeHtml(s) { return String(s || "") .replace(/&/g, "&") .replace(//g, ">") .replace(/"/g, """); } function parseInline(raw) { var s = escapeHtml(raw); s = s.replace(/\*\*([^*]+)\*\*/g, "$1"); s = s.replace(/`([^`]+)`/g, "$1"); return s; } function enhanceReviewHeadings(text) { var out = String(text || ""); SECTION_FIXES.forEach(function (item) { out = out.replace(item.re, item.rep); }); if (/^【系统说明/m.test(out) && !/^ℹ️/m.test(out)) { out = out.replace(/^【系统说明/gm, "ℹ️ 【系统说明"); } if (/^原始记录:/m.test(out) && !/^📎/m.test(out)) { out = out.replace(/^原始记录:/gm, "📎 **原始记录**"); } return out; } function renderMarkdown(text) { var src = enhanceReviewHeadings(text); var lines = src.replace(/\r\n/g, "\n").split("\n"); var html = []; var inUl = false; var inOl = false; function closeLists() { if (inUl) { html.push(""); inUl = false; } if (inOl) { html.push(""); inOl = false; } } lines.forEach(function (line) { var trimmed = line.trim(); if (!trimmed) { closeLists(); return; } var hm = trimmed.match(/^(#{1,3})\s+(.+)$/); if (hm) { closeLists(); var level = hm[1].length + 1; if (level > 4) level = 4; html.push("" + parseInline(hm[2]) + ""); return; } var ulm = trimmed.match(/^[-*]\s+(.+)$/); if (ulm) { if (!inUl) { closeLists(); html.push("