Marked — это библиотека для парсинга Markdown в JavaScript, которая предоставляет мощные возможности для работы с исходным текстом на уровне токенов. Инспектирование токенов позволяет понять, как библиотека разбивает Markdown на логические элементы, и управлять процессом генерации HTML более гибко.
Основной метод для работы с токенами — это lexer. Он
принимает строку Markdown и возвращает массив объектов, каждый из
которых представляет отдельный токен.
const marked = require('marked');
const markdown = `
# Заголовок первого уровня
- Элемент списка 1
- Элемент списка 2
`;
const tokens = marked.lexer(markdown);
console.log(tokens);
Результат будет массивом объектов, где каждый объект имеет ключи
type, text и дополнительные свойства,
зависящие от типа токена. Например, заголовок (heading)
будет содержать depth, список (list) —
ordered и items.
Каждый токен имеет базовую структуру:
type — определяет тип токена
(heading, paragraph, list,
list_item, code, blockquote и
др.).
text — текстовое содержимое токена.
raw — исходный Markdown фрагмент, соответствующий токену.
Дополнительные свойства зависят от типа токена, например:
depth для заголовков.lang для блоков кода.ordered для списков.Пример токена заголовка:
{
"type": "heading",
"depth": 1,
"text": "Заголовок первого уровня",
"raw": "# Заголовок первого уровня"
}
Токены могут быть вложенными. Например, список (list)
содержит массив items, каждый элемент которого является
токеном list_item. Внутри list_item может
находиться paragraph, code или даже вложенный
список.
tokens.forEach(token => {
if (token.type === 'list') {
token.items.forEach(item => {
console.log(item.text); // текст каждого элемента списка
});
}
});
Инспектирование токенов открывает возможности для кастомной генерации HTML или анализа Markdown без полного рендеринга. Пример — подсветка определенных слов:
tokens.forEach(token => {
if (token.type === 'paragraph') {
token.text = token.text.replace(/\bImportant\b/g, '<strong>Important</strong>');
}
});
После модификации токены можно преобразовать обратно в HTML с помощью
marked.parser:
const html = marked.parser(tokens);
console.log(html);
Некоторые из ключевых типов токенов:
#,
## и т.д.)Каждый тип токена имеет уникальные свойства, обеспечивающие полное описание Markdown-содержимого.
lexer для получения массива токенов вместо
прямого рендеринга через marked(markdown).raw для отладки и контроля
преобразований.parser.Инспектирование токенов в Marked — это инструмент тонкой настройки и контроля над Markdown-контентом, позволяющий точно понимать, как библиотека интерпретирует текст, и создавать гибкие решения для рендеринга, анализа или модификации документа.