nuckty
EN
Все разделы →

Движок 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.