Skip to content

fix(converter): 修复引用块导入导出多个问题#61

Merged
riba2534 merged 1 commit intoriba2534:mainfrom
azbh111:fix/quote-block-import-export
Mar 29, 2026
Merged

fix(converter): 修复引用块导入导出多个问题#61
riba2534 merged 1 commit intoriba2534:mainfrom
azbh111:fix/quote-block-import-export

Conversation

@azbh111
Copy link
Copy Markdown
Contributor

@azbh111 azbh111 commented Mar 28, 2026

Summary

  • 修复 goldmark lazy continuation 导致引用块后紧跟的文本被错误吞入引用块
  • 修复多段落引用块导入时段落间空行丢失
  • 修复引用块导出时段落间距消失
  • 修复空引用块使用空 Elements 数组导致 API 异常

Background

三个独立 bug,均与 QuoteContainer 相关:

  1. lazy continuation 吞文本:goldmark 将引用块后紧跟的非引用行视为引用块的一部分(如 > 引用\n这行被吞掉
  2. 多段落空行丢失> 段落1\n>\n> 段落2 中间的空行在导入时丢失,两个段落合并为一个
  3. 导出空行未还原:导出时跳过了所有空文本子块,多段落引用块的段落间空行消失

Usage

导入导出行为修复,无新增 API 或命令。修复前后对比:

输入 Markdown:
  123
  > 第一段
  >
  > 第二段
  321

修复前:
  - "321" 被吞入引用块
  - 引用块内两段落间无空行
  - 导出后空行丢失

修复后:
  - "123" 和 "321" 作为独立段落
  - 引用块内段落间正确保留空行
  - 导入 → 导出 roundtrip 保持一致

Changes

文件 改动说明
internal/converter/markdown_to_block.go 新增 normalizeBlockquoteEnding 预处理函数;convertBlockquote 段落间插入空 Text 块;空引用块 fallback 改为含空内容 TextRun
internal/converter/block_to_markdown.go convertQuoteContainerWithDepth 跳过开头空行,保留中间空行输出 >
internal/converter/markdown_to_block_test.go 新增 2 个测试函数

Test Plan

常规检查

  • go build ./... 编译通过
  • go vet ./... 静态检查通过
  • go clean -testcache && go test ./... 全部测试通过(除上游已有的 TestInit_DefaultValues

新增用例

用例 覆盖场景
TestConvert_BlockquoteMultiParagraphWithSurrounding 引用块前后文本不被吞入 + 多段落空行保留 + QuoteContainer 子块数量和内容验证
TestNormalizeBlockquoteEnding(4 个子用例) 引用块后紧跟非引用行、已有空行不重复插入、代码块内 > 不处理、末尾空行不插入

1. lazy continuation 吞文本:引用块后紧跟的非引用行被 goldmark 错误解析为引用块内容,
   通过 normalizeBlockquoteEnding 在引用块末尾插入空行终止
2. 多段落空行丢失:> 段落1\n>\n> 段落2 中间的空行在导入时丢失,
   convertBlockquote 用计数器在段落间插入空 Text 块
3. 导出空行未还原:convertQuoteContainerWithDepth 跳过了所有空文本子块,
   改为跳过开头空行、保留中间空行输出 >
4. 空引用块 fallback:空 QuoteContainer 的子块改为含空内容的 TextRun,
   避免飞书 API 拒绝空 Elements 数组
@riba2534 riba2534 merged commit 67b2cae into riba2534:main Mar 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants