Класс MarkdownIt является ядром одноимённой библиотеки
для парсинга Markdown в JavaScript. Он предоставляет мощный и гибкий
интерфейс для преобразования текста в HTML с возможностью расширения
функциональности через плагины и собственные правила.
Создание экземпляра:
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt();
По умолчанию экземпляр MarkdownIt поддерживает
стандартный синтаксис Markdown. В конструктор можно передавать объект с
настройками, позволяющими управлять обработкой текста.
const md = new MarkdownIt({
html: true, // разрешает HTML в Markdown
linkify: true, // автоматически превращает URL в ссылки
typographer: true // включает типографские преобразования
});
render(src, env)Метод render принимает строку src с
Markdown-текстом и возвращает HTML:
const result = md.render('# Заголовок\n\nТекст абзаца.');
console.log(result);
Параметр env позволяет передавать дополнительные данные
в процесс рендеринга. Он используется для передачи пользовательской
информации в плагины или обработчики.
renderInline(src, env)Метод для обработки только inline-элементов, таких как ссылки, выделение, эмоджи и др.:
const inlineResult = md.renderInline('Текст с **жирным** выделением.');
console.log(inlineResult);
use(plugin, options)Позволяет подключать плагины для расширения функционала:
const markdownItFootnote = require('markdown-it-footnote');
md.use(markdownItFootnote);
Плагины могут изменять правила токенизации, добавлять новые синтаксические конструкции и изменять HTML-рендеринг.
MarkdownItКлючевые опции при создании экземпляра:
html: true/false —
разрешение HTML-тегов.xhtmlOut: true/false —
использовать самозакрывающиеся теги.breaks: true/false —
перевод строки как <br>.linkify: true/false —
автоматическая конвертация URL в ссылки.typographer: true/false —
типографские замены (например, кавычки и тире).Пример комбинирования настроек:
const md = new MarkdownIt({
html: true,
breaks: true,
linkify: true,
typographer: true
});
MarkdownIt сначала токенизирует входной текст, а затем преобразует токены в HTML. Токен — это объект с полями:
type — тип токена
(paragraph_open, inline,
strong_open и т.д.).tag — соответствующий HTML-тег
(p, strong, em и др.).content — содержимое токена для
inline-токенов.children — массив дочерних
токенов.Пример получения токенов:
const tokens = md.parse('Текст **жирный**', {});
console.log(tokens);
Это позволяет создавать собственные правила рендеринга, изменять структуру HTML или анализировать Markdown.
MarkdownIt использует Render Rules — функции, которые определяют, как токены преобразуются в HTML. Рендеринг можно изменить глобально:
md.renderer.rules.strong_open = function(tokens, idx) {
return '<b class="custom-bold">';
};
md.renderer.rules.strong_close = function() {
return '</b>';
};
Также можно добавлять свои правила для нестандартных токенов, создаваемых плагинами.
Плагины могут:
Пример плагина для вставки даты:
function datePlugin(md) {
md.inline.ruler.after('text', 'date', function(state, silent) {
const match = state.src.slice(state.pos).match(/\{\{date\}\}/);
if (!match) return false;
if (!silent) {
const token = state.push('html_inline', '', 0);
token.content = new Date().toLocaleDateString();
}
state.pos += match[0].length;
return true;
});
}
md.use(datePlugin);
env)Параметр env в методах render и
parse позволяет передавать контекст:
const env = { user: 'Alice' };
const html = md.render('Привет, {{user}}', env);
Плагины и кастомные правила могут использовать данные из
env для динамического рендеринга.
MarkdownIt ориентирован на CommonMark, но поддерживает расширения:
Подключение расширений через плагины обеспечивает гибкость и соответствие различным стандартам Markdown.
MarkdownIt сочетает высокую скорость и расширяемость, что делает его универсальным инструментом для работы с Markdown в JavaScript.