2 个版本
0.1.1 | 2020 年 7 月 20 日 |
---|---|
0.1.0 | 2020 年 7 月 20 日 |
在 文本处理 中排名第 988
22KB
302 行代码(不包括注释)
mdbook 将渲染 CJK 字符连续行的额外空间。
.....中文结尾
中文顶格...
will result in
.....中文结尾 中文顶格...
`- note the space here
此预处理器将修复此问题。
用法
- 从 发布页面 下载二进制文件并将其放入您的
PATH
。- 或者,从源代码构建:
cargo install mdbook-fix-cjk-spacing
- 或者,从源代码构建:
- 将以下配置添加到您的
book.toml
[preprocessor.fix-cjk-spacing] command = "mdbook-fix-cjk-spacing"
- 完成
它是如何工作的?
此预处理器将在 markdown 文件的 AST 上工作
- 它将使用 pulldown-cmark 来解析 markdown 文件。
- 当遇到
SoftBreak
标记时,它将在前后搜索Text
标记。 - 如果前面的文本以 CJK 结尾且下一个文本以 CJK 字符开头,则省略
SoftBreak
。
二进制有一个 "raw" 模式来显示处理后的输出
cat markdown.md | md-fix-cjk-spacing raw
问题
在 markdown 中,如果我们连续写几行,它将被解析为一个整体块
line 1
line 2
line 3
// will be parsed as
<p>line 1
line 2
line 3</p>
这意味着保留换行符,并将所有三行视为一个整体段落。
然而,浏览器会将 <p>
中的换行符转换为单个空格,所以当我们在一个浏览器中看到前面的内容时,它将看起来像
line 1 line 2 line 3
这很好,除了当我们使用中文时。中文没有空格的概念,所以当我们写
中文第一行
中文接上行
// will show as
中文第一行 中文接上行
// `- not the space here
这真的很令人沮丧!因此有两个主要的解决方案
- 修复 markdown 解析代码以正确处理。
- 将整个段落写在一行中。
第一个选项实际上并不那么实用。这个 'bug' 已经存在很长时间,而且还没有修复。第二个将会很无聊,并且不友好。
因此,我们有了使用 mdbook
的解决方案:编写一个预处理器,在解析之前自动合并中文行!
用例
仅处理以下情况
...<chinese character>[should contains no spaces]
[zero or more spaces|tab]<chinese character>
.....中文结尾
中文顶格...
// are modified to
.....中文结尾中文顶格...
// `- note no space here
请注意,代码块中的内容将不会被更改。
依赖项
~12-23MB
~325K SLoC