Движок Markdown
Решение
Разбирать Markdown в mdast с помощью remark/unified, затем преобразовывать его в дерево BEMJSON. В версии 1.0.0 этот конвейер уже реализован.
Контекст
Шаблонизатору nuckty нужна структура контента Markdown, а расширениям — точки подключения директив и преобразований. Строка HTML сама по себе не предоставляет эту структуру.
Альтернативы
Парсер с потоком токенов. Мост может восстановить вложенность по токенам, но должен отслеживать пары открывающих и закрывающих токенов и их контекст.
Компилятор в HTML. Он выдаёт готовую разметку, но для структурных шаблонов nu потребуется другая модель или разбор HTML.
Типизированное синтаксическое дерево. mdast непосредственно описывает вложенные узлы Markdown. Мост преобразует заголовки, списки, ссылки и изображения по типу узла.
Аргумент
remark-parse строит mdast; remark-gfm и remark-directive добавляют поддерживаемый nuckty синтаксис. unified объединяет разбор и преобразования. Мост создаёт узлы для того же рендерера nu, который обрабатывает блоки документа.
Markdown-расширения регистрируют remark-плагин или обработчик директивы. Видео, галереи и русская типографика остаются отдельными пакетами.
Выбор основан на структуре данных и контракте расширений. Документация не обещает преимущества в скорости без воспроизводимого измерения полной сборки.
Последствия
Мост Markdown и его преобразования работают с mdast. Обработчик директивы получает дочерние узлы mdast, а не HTML или BEMJSON.
Русская типографика необязательна. Для англоязычного сайта это расширение можно не подключать. Поддерживаемый синтаксис и правила преобразования ссылок описаны в руководстве по Markdown.