Параметр gfm

Библиотека Marked — это популярный парсер Markdown для JavaScript, обеспечивающий высокую скорость и гибкость в обработке текста. Одним из ключевых параметров конфигурации является gfm (GitHub Flavored Markdown), который задает поддержку расширенного синтаксиса Markdown в стиле GitHub.

Основное назначение

Параметр gfm принимает логическое значение (true или false) и определяет, будет ли Marked интерпретировать текст с учетом расширений GitHub Flavored Markdown. Если значение true, библиотека включает поддержку таких особенностей, как:

  • таблицы (tables)
  • списки задач (task lists)
  • расширенные автоматические ссылки (autolinks)
  • улучшенное распознавание переносов строк

По умолчанию значение gfm установлено в true, что соответствует поведению Markdown на GitHub.

Примеры расширенного синтаксиса

Таблицы:

| Имя      | Возраст | Город      |
|----------|--------|------------|
| Алексей  | 30     | Москва     |
| Мария    | 25     | Санкт-Петербург |

С включенным gfm: true Marked корректно преобразует таблицу в HTML:

<table>
<thead>
<tr>
<th>Имя</th>
<th>Возраст</th>
<th>Город</th>
</tr>
</thead>
<tbody>
<tr>
<td>Алексей</td>
<td>30</td>
<td>Москва</td>
</tr>
<tr>
<td>Мария</td>
<td>25</td>
<td>Санкт-Петербург</td>
</tr>
</tbody>
</table>

Списки задач:

- [x] Сделать домашнее задание
- [ ] Прочитать книгу
- [ ] Подготовить презентацию

В HTML это превратится в чекбоксы:

<ul>
<li><input type="checkbox" checked disabled> Сделать домашнее задание</li>
<li><input type="checkbox" disabled> Прочитать книгу</li>
<li><input type="checkbox" disabled> Подготовить презентацию</li>
</ul>

Автоматические ссылки и переносы строк

С включенным gfm Marked автоматически распознает URL и email-адреса и превращает их в ссылки:

https://example.com
user@example.com

Результат HTML:

<a href="https://example.com">https://example.com</a>
<a href="mailto:user@example.com">user@example.com</a>

Кроме того, обычный перенос строки в тексте также становится переносом в HTML, что соответствует поведению GitHub.

Настройка параметра gfm

Параметр gfm задается при вызове функции marked через объект опций:

import { marked } from 'marked';

const options = {
  gfm: true,
};

const markdown = `
# Заголовок

- [x] Выполнено
- [ ] В процессе
`;

const html = marked(markdown, options);
console.log(html);

Если установить gfm: false, расширенные возможности GitHub Markdown отключаются:

  • таблицы перестают распознаваться как HTML таблицы
  • списки задач выводятся как обычные списки
  • переносы строк игнорируются
  • автоматические ссылки не создаются

Это позволяет использовать Marked в более строгом стандарте классического Markdown.

Взаимодействие с другими параметрами

Параметр gfm тесно связан с настройками:

  • tables — отдельная опция, позволяющая включать или отключать таблицы независимо от gfm. При gfm: true таблицы включены по умолчанию.
  • breaks — управление переносами строк. При gfm: true переносы строк включаются по умолчанию, но можно переопределить через breaks: false.
  • smartLists — улучшенные списки, которые чаще всего используются вместе с gfm.

Практические рекомендации

  • Для полной совместимости с Markdown GitHub рекомендуется оставлять gfm: true.
  • Если нужно строгое соответствие классическому Markdown без расширений, следует явно устанавливать gfm: false.
  • Параметр удобен для динамических систем рендеринга Markdown, где текст может поступать из разных источников, а требования к форматированию различаются.

Гибкость параметра gfm делает Marked универсальным инструментом для работы с Markdown как в веб-приложениях, так и в серверных проектах на Node.js. Он позволяет выбирать между строгим стандартом Markdown и расширенным функционалом, привычным для GitHub.