Markdown 扩展:内联换行函数不再识别没有内容的 BBCode 标签

我在插件中使用了这段代码:

helper.allowList(['span.dpg-balloon-text'])

helper.registerPlugin(md => {
  md.inline.bbcode.ruler.push('dpgb', {
    tag: 'dpgb',
    wrap: function (startToken, endToken, tagInfo) {
      startToken.tag = endToken.tag = 'span'
      startToken.content = endToken.content = ''
      startToken.type = "span_open";
      endToken.type = "span_close";    
      startToken.nesting = 1;
      endToken.nesting = -1;    
      startToken.attrs = [['class', 'dpg-balloon-text']].concat(
        Object.keys(tagInfo.attrs).map(key => [
          `data-dpg-${key}`,
          tagInfo.attrs[key]
        ])
      )
    }
  })
})

上面这段代码以前在处理空 BBCode 标签和非空 BBCode 标签时都能正常工作。但今天我发现,现在它只在 BBCode 标签有内容时(例如 [dpgb]Some content[/dpgb])触发,而在 BBCode 标签没有内容时(例如 [dpgb][/dpgb])则不触发。这是新的设计选择吗?

2 个赞

不确定,你能深入挖掘源代码,看看是哪个提交改变了这种行为吗?

2 个赞

Markdown.it v13 的升级破坏了空的内联 BBCode。[processDelimiters](https://github.com/markdown-it/markdown-it/blob/2b6cac25823af011ff3bc7628bc9b06e483c5a08/lib/rules_inline/balance_pairs.js#L6-L115) 函数的行为已更改。当 BBCode 不包含任何内容时,它不再更新我们的 BBCode 分隔符的 end 属性。

我创建了一个 PR,它恢复了以前的行为并添加了一个测试。

2 个赞