改进 Markdown 段落处理

根据 CommonMark 规范

段落
换行符是指换行(U+000A),或后不跟换行的回车(U+000D),或回车后跟换行

或者 GitHub Flavored Markdown 规范

段落
无法被解析为其他类型块的非空行序列构成一个段落。段落的内容是将其原始内容按行内元素解析后的结果。段落的原始内容由连接这些行并移除首尾空白字符形成。

因此,

Foo
bar

应渲染为

Foo bar

但实际渲染结果却是

Foo
bar

请参阅 CommonMark 示例GitHub 示例

这是一个 bug,还是对规范的有意偏离?

使用场景

这种段落处理方式在部分用户通过电子邮件回复时尤为令人困扰,因为许多电子邮件客户端(如 Thunderbird)会在每若干字符后自动插入换行符。不过从设计角度来看,电子邮件用户本就不应为此操心,也无需更改其邮件设置。

示例如下:

我能想到的另一种会出现此情况的情形是:新用户刚开始使用 Discourse 时,有时会手动以这种方式创建段落。

3 个赞

这是有意为之,与 GitHub 的行为一致:

管理员可以在站点设置中启用“传统 Markdown 换行”选项来更改此行为。

您可能对 此主题 感兴趣,其中介绍了该实现背后的一些理由。

5 个赞

非常感谢,我会去了解一下。

4 个赞