Markdown-it — это мощная библиотека для парсинга Markdown в JavaScript, обеспечивающая высокую скорость работы и расширяемость через плагины. Одним из ключевых аспектов работы с библиотекой является понимание внутреннего процесса парсинга и умение отлаживать преобразование Markdown в HTML.
Markdown-it работает в несколько этапов:
Лексический анализ (Tokenization) Исходный текст Markdown разбивается на токены — объекты, которые описывают отдельные элементы документа: заголовки, списки, параграфы, кодовые блоки и т.д. Каждый токен имеет следующие ключевые свойства:
type — тип токена (paragraph_open,
heading_open, inline и т.д.).tag — соответствующий HTML-тег (p,
h1, ul и т.д.).attrs — массив атрибутов.content — текстовое содержимое (для
inline-токенов).children — массив вложенных токенов (для
inline-контента).Inline-парсинг Токены, содержащие текст с возможными inline-элементами (жирный текст, ссылки, эмфазис), дополнительно разбиваются на дочерние токены. Это позволяет точно интерпретировать вложенные конструкции.
Рендеринг Токены преобразуются в HTML через рендереры. Для стандартных типов Markdown предусмотрены встроенные функции рендеринга, но их можно переопределять или расширять через плагины.
Логирование токенов Для понимания того, как Markdown-it интерпретирует текст, важно выводить массив токенов после лексического и inline-парсинга. Пример:
const md = require('markdown-it')();
const tokens = md.parse('# Заголовок\n\nТекст с **жирным**', {});
console.log(tokens);
Результат покажет структуру токенов и их вложенность, что облегчает выявление ошибок в разметке.
Использование parseInline Для отладки
конкретных строк с inline-элементами можно использовать метод
parseInline:
const result = md.parseInline('Текст с *курсивом* и [ссылкой](https://example.com)');
console.log(result);
Это позволяет локально отследить, как создаются дочерние токены для inline-содержимого без полного парсинга документа.
Переопределение рендереров Для проверки работы рендеринга можно временно заменить функцию рендеринга определенного типа токена:
md.renderer.rules.strong_open = () => '<b>';
md.renderer.rules.strong_close = () => '</b>';
Такое вмешательство помогает увидеть, как именно библиотека формирует HTML и выявить несоответствия с ожидаемым результатом.
Markdown-it поддерживает подключение плагинов и написание кастомных правил для расширения синтаксиса. При отладке важно:
console.log внутри
плагина, чтобы отслеживать создание и модификацию токенов.parseInline
помогает локализовать проблему.children для inline-токенов,
особенно если жирный, курсив или ссылки не рендерятся корректно.md.parse(src, env) — полный парсинг документа с
массивом токенов.md.parseInline(src, env) — парсинг одной строки или
блока inline-контента.md.renderer.render(tokens, options, env) — генерация
HTML из массива токенов, удобна для проверки промежуточных
результатов.md.renderer.rules — объект с функциями рендеринга
каждого типа токена, позволяет вставлять логирование или изменять
HTML.Эти подходы позволяют получить полный контроль над процессом преобразования Markdown, находить проблемы на уровне токенов и корректно настраивать поведение парсера даже для сложных документов с вложенными структурами.