From ba2ff0a2b0bdb18f9cc7012732cd92838d5b620d Mon Sep 17 00:00:00 2001 From: imeepos Date: Tue, 22 Jul 2025 16:16:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96markdown=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/infrastructure/markdown_parser.rs | 22 +++++++++++++++---- .../components/EnhancedMarkdownRenderer.tsx | 7 ++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/apps/desktop/src-tauri/src/infrastructure/markdown_parser.rs b/apps/desktop/src-tauri/src/infrastructure/markdown_parser.rs index 7079767..f62641f 100644 --- a/apps/desktop/src-tauri/src/infrastructure/markdown_parser.rs +++ b/apps/desktop/src-tauri/src/infrastructure/markdown_parser.rs @@ -236,8 +236,24 @@ impl MarkdownParser { // 收集所有事件和位置信息 for event in parser { - events.push((event, current_offset)); - current_offset += 1; // 简化的偏移计算 + events.push((event.clone(), current_offset)); + + // 根据事件类型正确计算字节偏移 + match &event { + Event::Text(text) => { + current_offset += text.len(); + } + Event::Code(code) => { + current_offset += code.len(); + } + Event::SoftBreak | Event::HardBreak => { + current_offset += 1; // 换行符通常是1字节 + } + _ => { + // 对于其他事件类型,不增加偏移量 + // 因为它们通常是结构性的,不对应实际的文本内容 + } + } } // 构建AST @@ -347,8 +363,6 @@ impl MarkdownParser { // 处理其他事件类型 } } - - current_offset += 1; // 简化的偏移计算 } Ok(root) diff --git a/apps/desktop/src/components/EnhancedMarkdownRenderer.tsx b/apps/desktop/src/components/EnhancedMarkdownRenderer.tsx index fccd8ab..917cb9a 100644 --- a/apps/desktop/src/components/EnhancedMarkdownRenderer.tsx +++ b/apps/desktop/src/components/EnhancedMarkdownRenderer.tsx @@ -102,7 +102,8 @@ export const EnhancedMarkdownRenderer: React.FC = // 计算节点在原始文本中的字节偏移位置(与grounding数据的字节偏移匹配) const nodeStartOffset = node.range?.start?.byte_offset || 0; const nodeEndOffset = node.range?.end?.byte_offset || 0; - + const nodeStartOffset1 = node.range?.start?.offset || 0; + const nodeEndOffset1 = node.range?.end?.offset || 0; // 查找与当前节点位置重叠的grounding支持信息 const relatedSupports = groundingMetadata.grounding_supports.filter(support => { // grounding数据使用字节偏移 @@ -116,7 +117,9 @@ export const EnhancedMarkdownRenderer: React.FC = console.log({ relatedSupports, nodeStartOffset, - nodeEndOffset + nodeEndOffset, + nodeStartOffset1, + nodeEndOffset1 }) if (relatedSupports.length > 0) { // 获取相关的来源信息