// DetailView.jsx — 笔记详情:时空坐标 + 正文(markdown) + 墨吞占位
const { useState: useStateDV } = React;
// —— 轻量 markdown 渲染 —— //
function mdInline(text) {
// 转义 + 行内:**粗** *斜* `代码` [链](url)
const parts = [];
let key = 0;
const re = /(\*\*[^*]+\*\*|\*[^*]+\*|`[^`]+`|\[[^\]]+\]\([^)]+\))/g;
let last = 0, m;
while ((m = re.exec(text)) !== null) {
if (m.index > last) parts.push(text.slice(last, m.index));
const tok = m[0];
if (tok.startsWith('**')) parts.push({tok.slice(2, -2)});
else if (tok.startsWith('`')) parts.push({tok.slice(1, -1)});
else if (tok.startsWith('[')) {
const mm = /\[([^\]]+)\]\(([^)]+)\)/.exec(tok);
parts.push( e.preventDefault()}>{mm[1]});
} else parts.push({tok.slice(1, -1)});
last = m.index + tok.length;
}
if (last < text.length) parts.push(text.slice(last));
return parts;
}
function Markdown({ src }) {
const lines = src.split('\n');
const out = [];
let i = 0, key = 0;
while (i < lines.length) {
const line = lines[i];
if (line.startsWith('```')) {
const buf = [];
i++;
while (i < lines.length && !lines[i].startsWith('```')) { buf.push(lines[i]); i++; }
i++;
out.push(
{buf.join('\n')});
continue;
}
if (line.startsWith('### ')) { out.push({buf.filter(Boolean).map((b, j) =>); continue; } if (/^[-*] /.test(line)) { const buf = []; while (i < lines.length && /^[-*] /.test(lines[i])) { buf.push(lines[i].slice(2)); i++; } out.push({mdInline(b)}
)}
| {mdInline(hc)} | )}
|---|
| {mdInline(c)} | )}
{mdInline(line)}
); i++; } return