В библиотеке Remark и её экосистеме для работы с Markdown и HTML корневой узел играет центральную роль. Корневой узел — это объект верхнего уровня в дереве синтаксического анализа (AST, Abstract Syntax Tree), который содержит все дочерние узлы документа. Понимание структуры корневого узла и его свойств позволяет управлять обработкой документа, трансформацией контента и генерацией конечного HTML или Markdown.
Корневой узел в Remark и Rehype имеет стандартную структуру:
{
type: 'root',
children: [],
position: { start: {...}, end: {...} }
}
type — всегда 'root'. Определяет
тип узла, что позволяет парсерам и плагинам корректно идентифицировать
его.
children — массив дочерних узлов. Каждый
дочерний узел может быть другим типом: параграф
(paragraph), заголовок (heading), список
(list), текст (text) и т.д. Для HTML через
Rehype дочерние узлы соответствуют элементам DOM:
element, text, comment.
position — объект, описывающий положение узла в исходном тексте:
start и end содержат позиции с указанием
строки и колонки.children
type и может содержать свои
children.{
type: 'paragraph',
children: [
{ type: 'text', value: 'Пример текста.' }
]
}
{
type: 'element',
tagName: 'p',
properties: {},
children: [
{ type: 'text', value: 'Пример текста.' }
]
}
data
data для добавления
информации о корневом узле.root.data = { title: 'Документ', author: 'Имя Автора' };
position
position: true.root.children.push({
type: 'paragraph',
children: [{ type: 'text', value: 'Новый параграф' }]
});
const headings = root.children.filter(node => node.type === 'heading');
function traverse(node, callback) {
callback(node);
if (node.children) {
node.children.forEach(child => traverse(child, callback));
}
}
| Свойство | Remark (Markdown AST) | Rehype (HTML AST) |
|---|---|---|
| Тип корневого узла | root |
root |
| Дочерние узлы | paragraph, heading, text |
element, text, comment |
| Метаданные | data |
data |
| Позиция в тексте | position |
position |
tagName и properties.Анализ структуры документа Корневой узел позволяет полностью просканировать документ, подсчитать заголовки, списки, параграфы и собрать статистику.
Трансформация документа Изменение содержимого
возможно через модификацию children корневого узла или
отдельных подузлов. Например, конвертация всех заголовков в заголовки
второго уровня:
traverse(root, node => {
if (node.type === 'heading') {
node.depth = 2;
}
});
remark-stringify
или rehype-stringify для генерации конечного текста.Корневой узел является фундаментом для всех операций с AST в Remark и Rehype. Он определяет структуру документа, хранит дочерние узлы и позволяет интегрировать метаданные, позиционные данные и трансформации. Глубокое понимание его свойств обеспечивает эффективное управление контентом и создание сложных плагинов для анализа и модификации Markdown и HTML.