Skip to content

Commit 85856ab

Browse files
committed
fix: correct table context offset calculation and dollar sign escaping in atomics
- Extract beforeStart variable to avoid redundant Math.max calls and fix offset calculation in expandTableContext - Escape $ characters in atom content during restore to prevent special replacement patterns ($&, $1, etc.) from corrupting output
1 parent 9df53b4 commit 85856ab

1 file changed

Lines changed: 8 additions & 4 deletions

File tree

‎lib/file/split-markdown/advanced/atomics.js‎

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -369,16 +369,18 @@ function expandTableContext(text, blocks, maxPrefixLen = 300, maxSuffixLen = 200
369369
// 向前查找前文段落
370370
if (block.start > 0) {
371371
// 找到表格前最近的两个 \n\n 之间的段落
372-
const beforeText = text.substring(Math.max(0, block.start - maxPrefixLen), block.start);
372+
const beforeStart = Math.max(0, block.start - maxPrefixLen);
373+
const beforeText = text.substring(beforeStart, block.start);
373374
const lastParaBreak = beforeText.lastIndexOf('\n\n');
374375
if (lastParaBreak >= 0) {
375376
const paragraphText = beforeText.substring(lastParaBreak + 2).trim();
376377
if (paragraphText.length > 0 && paragraphText.length <= maxPrefixLen) {
377-
newStart = Math.max(0, block.start - maxPrefixLen) + lastParaBreak + 2;
378+
// lastParaBreak 是 beforeText 的相对偏移,需要加上 beforeStart 得到绝对位置
379+
newStart = beforeStart + lastParaBreak + 2;
378380
}
379381
} else if (beforeText.trim().length > 0 && beforeText.trim().length <= maxPrefixLen) {
380382
// 没有段落分隔,整段前文都纳入
381-
newStart = Math.max(0, block.start - maxPrefixLen);
383+
newStart = beforeStart;
382384
}
383385
}
384386

@@ -480,7 +482,9 @@ function restore(protectedText, atomMap) {
480482
let text = protectedText;
481483
for (let i = 0; i < atomMap.length; i++) {
482484
const placeholder = makePlaceholder(i);
483-
text = text.replace(placeholder, atomMap[i].content);
485+
// 转义替换字符串中的 $ 特殊字符($$ → $, $& → 匹配等)
486+
const escapedContent = atomMap[i].content.replace(/\$/g, '$$$$');
487+
text = text.replace(placeholder, escapedContent);
484488
}
485489
return text;
486490
}

0 commit comments

Comments
 (0)