Настраиваемая обработка HTML при вставке в редакторе?

Заметив то, что я считаю ошибкой, я теперь задумался, можно ли настроить способ парсинга HTML при вставке его в редактор.

Наш форум посвящён сайту с переводами древних писаний с указанием языков-источников. (Например, английский с пали.) Поэтому пользователи могут вставлять что-то вроде этого:

<span lang="en">So I have heard.</span><span lang="pli"><span lang="la">Evaṁ me sutaṁ—</span></span><span lang="en">At one time the Buddha was staying near Sāvatthī in Jeta’s Grove, Anāthapiṇḍika’s monastery.</span><span lang="pli"><span lang="la">ekaṁ samayaṁ bhagavā sāvatthiyaṁ viharati jetavane anāthapiṇḍikassa ārāme.</span></span>

На сайте с писаниями это выглядит так:

До появления упомянутой выше ошибки вставка этого текста приводила к следующему результату на нашем форуме:

So I have heard. Evaṁ me sutaṁ— At one time the Buddha was staying near Sāvatthī in Jeta’s Grove, Anāthapiṇḍika’s monastery. ekaṁ samayaṁ bhagavā sāvatthiyaṁ viharati jetavane anāthapiṇḍikassa ārāme.

Не очень идеально! Все языки слились в одну кучу. Читать трудно. Ответственный пользователь мог бы оформить это с помощью Markdown так:

So I have heard.
*Evaṁ me sutaṁ—* 

At one time the Buddha was staying near Sāvatthī in Jeta’s Grove, Anāthapiṇḍika’s monastery. 
*ekaṁ samayaṁ bhagavā sāvatthiyaṁ viharati jetavane anāthapiṇḍikassa ārāme.* 

Что отображалось бы так:

По сути, каждый span выносится на отдельную строку, а span с lang="pli" делается курсивом с пустой строкой после.

Пока я не увидел упомянутую в начале этой темы ошибку, я не задумывался о том, что уже существует процесс конвертации некоторого HTML в Markdown. Теперь я задумался о том, возможно ли с помощью компонента или плагина добавить код, который конвертировал бы указанные выше span с атрибутом lang нужным мне образом. В идеале — через компонент, но возможно и через плагин.

Конкретнее говоря, это будет либо

  <--start repeat-->
<p>
  <--start repeat-->
  <a href="..." title="здесь всегда один и тот же текст">int</a>
  <span lang="a">...</span>
  <span lang="b">...</span>
   <!-- end repeat-->
</p>
<!-- end repeat-->

либо

<p>
  <a href="..." title="здесь всегда один и тот же текст">int</a>
  <span lang="a">...</span><span lang="a">...</span>
</p>
<!-- repeated-->

Где язык a и язык b могут варьироваться.

Ссылка может присутствовать или отсутствовать, и у нее всегда будет одно и то же значение атрибута title. Жирным шрифтом следует выделить только ссылки с этим значением title. После этого должен быть включен мягкий перенос строки.

Язык b следует оформить курсивом и добавить мягкий перенос строки.

Discourse уже преобразует тег <p> ожидаемым образом.

В случае повторения языка a:
после первого вхождения span нужно добавить пробел. Это можно сделать в первом случае, так как он не будет виден :person_shrugging:

Язык b — это выбор из двух языков, которые могут быть предоставлены в виде массива. Либо pli, либо lzh.

Спасибо!

(@delightful и я работаем над этим вместе)