GitHub Flavored Markdown (GFM) расширяет стандартный Markdown,
добавляя поддержку таблиц, что позволяет структурировать данные в виде
строк и столбцов. В библиотеке Marked для JavaScript
таблицы обрабатываются через встроенный парсер, который распознаёт
синтаксис GFM и преобразует его в HTML-элементы
, ,
,
,
и
.
Синтаксис таблиц
Основной синтаксис таблиц в GFM выглядит следующим образом:
После этого функция marked.parse корректно обработает
таблицы:
const markdown = `
| Имя | Возраст | Город |
|-------|:-------:|-----------:|
| Иван | 25 | Москва |
| Ольга | 30 | Санкт-Петербург |
`;
const html = marked.parse(markdown);
console.log(html);
Результат будет следующим HTML:
Имя
Возраст
Город
Иван
25
Москва
Ольга
30
Санкт-Петербург
Кастомизация вывода таблиц
Marked позволяет переопределять рендеринг таблиц с
помощью собственного рендерера. Для этого создается объект
Renderer и определяется метод table:
import { marked, Renderer } from 'marked';
const renderer = new Renderer();
renderer.table = function(header, body) {
return `
${header}
${body}
`;
};
const html = marked.parse(markdown, { renderer });
console.log(html);
Это позволяет добавлять дополнительные классы, оборачивать таблицы в
контейнеры, применять собственные стили.
Обработка пустых ячеек и
пробелов
Пустые ячейки автоматически превращаются в пустые
.
Пробелы в начале и конце ячеек удаляются, но можно сохранить их
через или использовать нестандартное
форматирование с HTML.
Наличие лишних вертикальных черт в конце строки игнорируется, что
делает синтаксис более гибким.
Поддержка многострочных
ячеек
GFM и Marked стандартно не поддерживают перенос текста через строки
внутри одной ячейки. Для многострочных данных рекомендуется использовать
или форматировать таблицу через HTML:
| Имя | Описание |
|-------|----------|
| Иван | Разработчик JavaScript |
Примечания по совместимости
Таблицы в GFM требуют обязательной строки-разделителя между
заголовком и телом таблицы.
Marked корректно интерпретирует таблицы только в режиме
gfm: true.
Любой Markdown внутри ячеек (курсив, ссылки, выделение) будет
обработан как обычно, при условии, что renderer не
переопределяет рендеринг ячеек.
Оптимизация больших таблиц
Для больших таблиц рекомендуется отключать генерацию
headerIds или mangle, если ссылки на заголовки
не нужны, чтобы ускорить парсинг.
Можно использовать ленивую загрузку таблиц на стороне фронтенда,
если HTML генерируется для большого объема данных, чтобы не перегружать
DOM.
Интеграция с CSS
HTML, сгенерированный Marked, легко стилизовать через CSS.
Например: