Markdown-it — это мощная и гибкая библиотека для преобразования текста в формате Markdown в HTML. Она написана на JavaScript и ориентирована на высокую скорость работы и расширяемость. Основная задача — корректная генерация HTML с поддержкой плагинов и расширений, обеспечивающих кастомные синтаксические конструкции.
Установка через npm:
npm install markdown-it
Подключение и создание экземпляра парсера:
const MarkdownIt = require('markdown-it');
const md = new MarkdownIt();
Базовое преобразование Markdown в HTML выполняется методом
render:
const result = md.render('# Заголовок\n\nТекст с **жирным** выделением.');
console.log(result);
Результатом будет корректно сгенерированный HTML:
<h1>Заголовок</h1>
<p>Текст с <strong>жирным</strong> выделением.</p>
Markdown-it предоставляет ряд встроенных опций, влияющих на рендеринг:
const md = new MarkdownIt({
html: true, // разрешает HTML внутри Markdown
xhtmlOut: false, // генерировать XHTML
breaks: true, // перевод строки при одинарном переносе
linkify: true, // автоматически превращает URL в ссылки
typographer: true // включает типографические улучшения (кавычки, тире)
});
Ключевые опции:
... в
многоточие …).Markdown-it использует промежуточное представление текста в виде токенов. Каждый элемент Markdown конвертируется в токены, которые затем рендерятся в HTML. Это позволяет расширять функциональность через плагины или кастомные правила.
Пример просмотра токенов:
const tokens = md.parse('**Жирный текст**', {});
console.log(tokens);
Типичный токен имеет структуру:
{
"type": "strong_open",
"tag": "strong",
"attrs": null,
"map": [0, 1],
"nesting": 1,
"level": 0,
"children": null,
"content": ""
}
Понимание токенов критично для создания собственных правил обработки Markdown.
Markdown-it позволяет добавлять правила через метод use.
Пример добавления правила для конвертации кастомного синтаксиса:
function myPlugin(md) {
md.inline.ruler.after('emphasis', 'highlight', function(state, silent) {
const start = state.pos;
if (state.src[start] !== '^') return false;
let end = state.src.indexOf('^', start + 1);
if (end === -1) return false;
if (!silent) {
const token = state.push('highlight_open', 'mark', 1);
token.markup = '^';
const text = state.src.slice(start + 1, end);
const textToken = state.push('text', '', 0);
textToken.content = text;
state.push('highlight_close', 'mark', -1);
}
state.pos = end + 1;
return true;
});
}
md.use(myPlugin);
console.log(md.render('Это ^важно^'));
Результат:
<p>Это <mark>важно</mark></p>
Многоточие в Markdown-it можно обработать через
типографику. Опция typographer
автоматически преобразует три точки ... в правильный символ
….
const md = new MarkdownIt({ typographer: true });
console.log(md.render('Пример... продолжение'));
Результат:
<p>Пример… продолжение</p>
Для расширенной кастомизации можно использовать плагин
markdown-it-replace или создавать собственное правило:
function ellipsisPlugin(md) {
md.core.ruler.push('ellipsis', function(state) {
state.tokens.forEach(token => {
if (token.type === 'inline') {
token.children.forEach(child => {
if (child.type === 'text') {
child.content = child.content.replace(/\.{3}/g, '…');
}
});
}
});
});
}
md.use(ellipsisPlugin);
console.log(md.render('Тест... три точки'));
Результат:
<p>Тест… три точки</p>
Markdown-it легко интегрируется с синтаксическим подсветчиком кода:
const hljs = require('highlight.js');
const md = new MarkdownIt({
highlight: function(str, lang) {
if (lang && hljs.getLanguage(lang)) {
try {
return '<pre class="hljs"><code>' +
hljs.highlight(str, { language: lang }).value +
'</code></pre>';
} catch (__) {}
}
return '<pre class="hljs"><code>' + md.utils.escapeHtml(str) + '</code></pre>';
}
});
Это позволяет использовать Markdown с подсветкой синтаксиса, сохраняя при этом поддержку всех стандартных функций библиотеки.
Markdown-it поддерживает множество официальных и сторонних плагинов:
:smile:.Плагины подключаются методом use и могут быть
комбинированы в любой последовательности для создания богатого
Markdown-рендеринга.
MarkdownIt для повторного
рендеринга большого количества текста.parse
для получения токенов и оптимизированного обхода дерева.Markdown-it сочетает высокую скорость, гибкость и расширяемость, что делает его идеальным инструментом для проектов, где требуется точный контроль над рендерингом Markdown и поддержка нестандартных синтаксических конструкций.