Расширение Markdown: функции inline wrap больше не распознают теги 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-тег содержит содержимое (например, [dpgb]Некоторый контент[/dpgb]), но не срабатывает, если тег пуст (например, [dpgb][/dpgb]). Это новое решение дизайна?

2 лайка

Не уверен, не могли бы вы проверить исходный код, чтобы найти коммит, который внес изменения в это поведение?

2 лайка

Обновление до Markdown.it v13 нарушило работу пустых встроенных BBCode-тегов. Изменилось поведение функции processDelimiters. Она больше не обновляет атрибут end для наших BBCode-разделителей, когда BBCode-тег не содержит содержимого.

Я создал PR, который восстанавливает предыдущее поведение и добавляет тест.

2 лайка