Skip to content

修复 Markdown 与 HTML 单换行粘贴到 Word 的保留问题 - #78

Merged
RICHQAQ merged 2 commits into
mainfrom
codex/fix-md-linebreaks
Jun 15, 2026
Merged

RICHQAQ merged 2 commits into
mainfrom
codex/fix-md-linebreaks

Conversation

@RICHQAQ

@RICHQAQ RICHQAQ commented Jun 15, 2026

Copy link
Copy Markdown
Owner

变更内容

  • 修复 HTML 片段中 white-space: pre-wrap/pre-line/break-spaces 的段落换行丢失问题
  • 新增 Markdown「保留段落内单换行」设置开关,默认关闭
  • 开启该设置后,Pandoc Markdown reader 会启用 hard_line_breaks,让段落内单换行在 Word 中保留为硬换行
  • 补充中英文日文设置文案

背景原因

部分来源复制出的 HTML 会把多行文本放在同一个带 white-space: pre-wrap 的 <p> 中。浏览器能按 CSS 显示换行,但 Pandoc 转 DOCX 时不会把文本节点里的 \n 写成 Word 硬换行,导致选项被合并成一行。

纯 Markdown 路径里,段落内单换行会被 Pandoc 按 Markdown 规范解析为 SoftBreak,写入 Word 时表现为空格。因此增加一个可配置开关,用于选择题、选项文本等需要逐行保留的场景。

Copilot AI review requested due to automatic review settings June 15, 2026 05:42

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

该 PR 旨在解决从 HTML/Markdown 粘贴到 Word 时,“段落内单换行(\n)被合并成一行”的问题:对 HTML 侧把依赖 CSS white-space 显示出来的换行显式转换为 <br>,对 Markdown 侧新增可配置开关以启用 Pandoc 的 hard_line_breaks reader 扩展,从而在生成 DOCX/RTF/HTML/LaTeX 时保留段落内单换行。

Changes:

  • HTML 预处理:对 style 含 white-space: pre-wrap/pre-line/break-spaces 的节点,将文本节点中的 \n 转换为 <br>,使 Pandoc 可正确输出 Word 硬换行。
  • Markdown 转换链路:新增 markdown_hard_line_breaks 配置并贯穿到 Pandoc 调用,开启时使用 markdown+hard_line_breaks+... 输入格式。
  • 设置与文案:新增设置项与中/英/日 i18n 文案,并加入默认配置。

Reviewed changes

Copilot reviewed 8 out of 8 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
pastemd/service/preprocessor/html.py 新增 HTML 预处理逻辑,将 CSS 保留的换行显式化为 <br>
pastemd/service/document/generator.py 将 markdown_hard_line_breaks 配置透传到各 Markdown 转换接口
pastemd/presentation/settings/dialog.py 设置页新增“Markdown:保留段落内单换行”开关并保存配置
pastemd/integrations/pandoc.py 抽取 Markdown reader 格式构造,支持按开关启用 hard_line_breaks
pastemd/i18n/locales/zh-CN.json 新增设置项中文文案
pastemd/i18n/locales/ja-JP.json 新增设置项日文文案
pastemd/i18n/locales/en-US.json 新增设置项英文文案
pastemd/config/defaults.py 新增默认配置 markdown_hard_line_breaks: False

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +46 to +48
for tag in soup.find_all(style=PRESERVE_NEWLINE_WHITE_SPACE_RE):
if not isinstance(tag, Tag):
continue
@RICHQAQ
RICHQAQ merged commit eb7a8d6 into main Jun 15, 2026
1 check passed
@RICHQAQ

RICHQAQ commented Jul 3, 2026

Copy link
Copy Markdown
Owner Author

修复了 #45
通过 markdown_hard_line_breaks 选项,开启后会通过 Pandoc 的 +hard_line_breaks 保留 Markdown 段落内单换行

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.

3 participants