为了提升阅读体验,我为 Quartz 编写了一个自定义 Transformer 插件,用于在中文和英文/数字之间自动添加空格。
插件实现
插件存放在 quartz/custom/Pangu/index.ts。它的核心逻辑分为两部分:
- 节点内处理:使用
mdast-util-find-and-replace对单个文本节点内的中英文边界进行正则替换。 - 跨节点处理:使用
unist-util-visit遍历所有节点,检查相邻节点(如文本节点与链接节点)的边界是否需要补全空格。
这种结合方式确保了无论是纯文本还是包含链接、加粗等语法的复杂行内内容,都能获得一致的空格体验。
如何使用
下载文件
请将以下文件下载并保存至项目的 quartz/custom/ 对应位置:
启用插件
- 在
quartz.config.ts的transformers数组中添加:
Custom.Pangu(),注意事项
- 回调函数:
mdast-util-find-and-replace的替换参数如果是字符串(如"$1 $2"),并不会像原生String.prototype.replace那样解析捕获组。因此必须使用回调函数的形式。 - 跨节点处理:单纯使用
mdast-util-find-and-replace只能处理单个文本节点内部的情况。如果中英文被链接、加粗等 Markdown 语法分隔开(属于不同的 MDAST 节点),则需要配合unist-util-visit检查相邻节点的边界。 - 类型兼容性:在
visit的回调中,parent的类型建议声明为any以避免复杂的 unist 类型推导冲突,同时应确保进行了!parent的空值检查。