Marked — это мощная и гибкая библиотека для преобразования Markdown в HTML. Одной из ключевых возможностей является поддержка расширенного синтаксиса GitHub Flavored Markdown (GFM). GFM добавляет ряд удобных элементов, таких как таблицы, списки задач и автоматическое преобразование URL в ссылки.
Для использования GFM в Marked необходимо настроить объект опций при
инициализации. Основной параметр, отвечающий за включение GFM,
называется gfm.
import { marked } from 'marked';
marked.setOptions({
gfm: true,
breaks: false,
headerIds: true,
mangle: false
});
const markdown = `
# Пример GFM
- [x] Выполнено
- [ ] В процессе
| Заголовок 1 | Заголовок 2 |
| ----------- | ----------- |
| Ячейка 1 | Ячейка 2 |
`;
const html = marked(markdown);
console.log(html);
В этом примере:
gfm: true включает поддержку GFM.| и
---.[ ] и [x].1. Таблицы
GFM поддерживает выравнивание текста в ячейках таблицы с помощью двоеточий:
| Левый | Центр | Правый |
| :---- | :---: | ----: |
| A | B | C |
Результат будет выглядеть следующим образом в HTML:
<table>
<thead>
<tr>
<th style="text-align:left">Левый</th>
<th style="text-align:center">Центр</th>
<th style="text-align:right">Правый</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">A</td>
<td style="text-align:center">B</td>
<td style="text-align:right">C</td>
</tr>
</tbody>
</table>
2. Списки задач
Списки задач позволяют создавать интерактивный вид выполнения задач:
- [x] Завершено
- [ ] В процессе
При конвертации в HTML элементы получают атрибут checked
и соответствующие классы для стилизации.
3. Автоматическое преобразование URL
При включении GFM простые URL автоматически превращаются в кликабельные ссылки:
https://example.com
Становится:
<a href="https://example.com">https://example.com</a>
true одинарный
перенос строки превращается в <br>.Пример расширенной конфигурации:
marked.setOptions({
gfm: true,
breaks: true,
headerIds: true,
mangle: false
});
Marked позволяет создавать собственные рендереры для элементов GFM. Например, можно изменить способ отображения таблиц или списков задач:
const renderer = {
table(header, body) {
return `<table class="custom-table"><thead>${header}</thead><tbody>${body}</tbody></table>`;
},
listitem(text) {
if (text.startsWith('[ ]')) {
return `<li class="task">${text.slice(3)}</li>`;
}
if (text.startsWith('[x]')) {
return `<li class="task completed">${text.slice(3)}</li>`;
}
return `<li>${text}</li>`;
}
};
marked.use({ renderer });
Это позволяет полностью контролировать вывод HTML, сохраняя преимущества расширенного синтаксиса GFM.
Включение GFM в Marked существенно расширяет возможности работы с Markdown, добавляя поддержку таблиц, списков задач и автоматических ссылок. Использование настроек и кастомных рендереров позволяет интегрировать Markdown в проекты с точным соответствием стилю и требованиям интерфейса.
Хотите, я могу написать подробный раздел с примерами всех нюансов работы с таблицами и задачами GFM, включая стили и кастомные обработчики?