kemitchell
(Kyle E. Mitchell)
1
是否有可能调整当前的 Markdown 排版器(也称为“智能标点”)配置,以启用 Unicode 标点符号(如引号和破折号),同时禁用 (c)、™ 以及其他此类专用符号?
我是一名律师,经常就商标和版权提供咨询,包括在 Discourse 论坛上。我从未建议任何人修改帖子以添加版权或商标符号,而非法律专业人士往往严重高估这些符号的实用性和必要性。相反,我曾无数次编辑帖子,试图让 Markdown 渲染器 不 渲染 © 符号。
这个问题在列举列表中尤为常见。例如:
(a) 苹果
(b) 香蕉
(c) 版权?
(d) 日期
这种列举方式在法律、合同、政策及其他受法律风格影响的正式写作中非常普遍。它也是一种常见的提纲格式。我在美国读小学时,就被教导这是“标准”的提纲格式。
我看到当前的设置在 标点符号 方面提供了一定的灵活性,但据我所知,似乎没有任何方法可以在启用智能标点的同时禁用智能符号。
9 个赞
我对此并没有强烈的看法。我觉得“需要”输入版权符号的情况极为罕见,因此这个快捷键可以保留。考虑到其“极其罕见”的实用性,与相对常见但略显不雅观的 (a) (b) (c) 格式列表相比……我完全同意 @sam 的意见,可以直接移除这个特定的快捷键。
6 个赞
kemitchell
(Kyle E. Mitchell)
3
我也支持直接移除 (c)。
毕竟搜索“版权符号”、复制并粘贴并不困难。极客们也可以输入 ©。
从可用性的角度来看,我会提供一个包含所有扩展的列表。我强烈怀疑这些扩展带来的惊讶感多于实际帮助。
5 个赞
好吧,对于这一项,收益(微乎其微)似乎要大于风险(相当大!)。
5 个赞
sam
(Sam Saffron)
5
这看起来不太可配置,我们需要打补丁来让 markdown.it 支持这种灵活性,或者基于 markdown.it 自己写一个 prettify 实现。
唯一的简单修复方案就是直接关闭整个功能。
5 个赞
嗯,奇怪,它竟然完全无法配置。真遗憾。所以
(c) (tm) (r) (p) → (c) ™ (r) (p)
3 个赞
sam
(Sam Saffron)
7
好处是引擎的可配置性很高,我们可以关闭 markdown.it 中的规则,复制代码并实现我们自己的替换逻辑,就像 @Roman 所实现的那样。
花几天时间进行工程优化以清理这部分代码固然可惜,但如果我们要进行分支开发,重复发布相同代码的情况在一定程度上是不可避免的。
3 个赞
kemitchell
(Kyle E. Mitchell)
8
自 markdown-it master 分支的提交 7b8969ce5cb2edc54f2c1aa39a85a3a08076337d 起,相关源文件为 lib/rules_core/replacements.js,相关测试数据文件为 test/fixtures/markdown-it/typographer.txt。
所有的替换规则都是硬编码的。它们包括 (c) → ©、(tm) → ™、(r) → ® 以及 (p) → ℗,这些被归类为“限定缩写”。
顺便提一下,我并未将 (p) 映射为 §。这几乎肯定应该是 ℗,即录音符号。
我打算对此进行一些探索,看看能否提出一个补丁,使“排版符号”功能更具可配置性。
7 个赞
kemitchell
(Kyle E. Mitchell)
10
7 个赞
kemitchell
(Kyle E. Mitchell)
11
3 个赞
kemitchell
(Kyle E. Mitchell)
12
维护者的响应非常迅速,他几分钟内就会关闭我的 PR 
据我了解,他极其不愿意引入任何破坏性变更,即使是在新版本中,哪怕只是像将 (P) 渲染为 § 这样的小事。他还非常排斥允许 typographer: {A: true, B: false} 这类选项,即使 typographer: true 仍然可用,因为他认为这会增加复杂度。
我从中读出了言外之意:他是一位用英语写作的俄罗斯开发者。但我感觉他认为 markdown-it 已经定型了。
怀着感激之情,或许值得 fork 这个实现,将其重写为 ES Modules,并移除当前捆绑的所有类插件功能,包括链接化和替换功能,其中也包含排版符号的标点替换。
3 个赞
kemitchell
(Kyle E. Mitchell)
13
维护者对捆绑包中无编号的重复代码问题不感兴趣。同样,对于并非“所有用户都必需”或阻碍插件实现的 API 非破坏性变更,他们也不感兴趣。这导致了一种两难境地:按照该理念,他们正在分发的两个高度插件化的子模块(用于链接化和智能标点)本应作为独立的 npm 包发布。但这种情况确实发生了。
作为背景,markdown-it 近期曾有过重要版本发布。值得一提的是,Alex Kocharin 在去年 11 月带来了一项性能改进。
要修复 (c) 问题、处理 (p) 问题,并实现我们对箭头等其他符号的构想,最佳方案可能是提交一个补丁,将链接化和智能标点子模块从核心中移除,改为在 Discourse 中以插件形式加载。可以使用 GitHub Action 或定时任务来监控 markdown-it 的主分支,并尝试自动变基。如果维护者继续如此保守地对待变更,该补丁在相当长一段时间内都应能顺利应用。除非他们做出重大跨越,例如将项目从 CommonJS 重写为 ES 模块。
6 个赞
sam
(Sam Saffron)
14
我们内部讨论了此事,决定对 typographer 进行硬分叉。
我们基本上将在 markdown.it 中禁用 typographer,并在 Discourse 中实现其副本。markdown.it 具有极高的可扩展性,这主要只是“复制粘贴”。
完成复制粘贴后,我们可以添加测试,并自定义和修改部分规则。
9 个赞
Lorthirk
(Claudio Mezzasalma)
15
嘿,抱歉再次提起这个话题。由于我正在寻找禁用 ... -> … 的方法,我想知道这个功能是否有进展,以及未来是否有可能启用或禁用单独的规则。
谢谢!
2 个赞
Lorthirk
(Claudio Mezzasalma)
17
好吧,我已经试过那个方法了,但显然不起作用。无论我启用还是禁用排版器,替换都会执行(顺便一提,(c) 似乎也不起作用)。
2 个赞
sam
(Sam Saffron)
18
您需要先禁用,然后在您想要的帖子中重新构建 HTML。
5 个赞