支持 Markdownit Ruler 用于 BBCode 的计划?

我的用例是在使用 bbcode 的 replace 规则时禁用/启用 bbcode 规则。

replace: function (state, tagInfo, content) {
  const source = state.push("my_token", "div", 0);
  try {
    md.block.bbcode.ruler.disable("ruleName")
    source.children = state.md.parse(content, {});
  } finally {
    md.block.bbcode.ruler.enable("ruleName")
  }
  return true
}

我注意到这里的 TODO 注释很久以前就有了,有什么计划实现它吗?

我在这里最大的疑问是为什么?这会解决什么问题?

1 个赞

我们的项目是否会让你感兴趣?我们正在接近尾声:

我们发现使用 markdownit 来处理任何复杂的 bbcode 都很痛苦,所以我们正在将 bbob 插入到 Discourse 中。

移动到 markdownit ruler 将允许在开始新的解析时启用/禁用规则,这使得它具有灵活性和类似于原生 markdownit 规则的行为。

例如,我想推送一些 bbcode 规则但默认不启用它们,然后在需要时启用它们(就像 OP 中的示例一样)。目前,自定义 Ruler 无法做到这一点,也许可以通过一些技巧(通过解析环境或手动修改 ruler 的规则)来实现?

[foo]
不在 bar 内的包装不应进行标记
[/foo]

[bar]
[foo]
在 bar 内的包装应进行标记
[/foo]
[/bar]

我不创建原生 markdownit 规则而使用 bbcode 的原因是,实现像 bbcode 这样的规则将是困难且难以维护的,而且 bbcode 已经存在了。


做得很好,但我的用例有所不同。

而且我喜欢你这里的代码,它启发了我对其他问题的担忧。

1 个赞

就像现在对待 [wrap] 这样的所有 bbcode 一样?将它们包装在 div 中?

我想说你所描述的听起来更像是自定义的 markdownit 规则/插件,而不是核心需要实现的东西?