Объект опций marked.setOptions

Библиотека Marked в JavaScript предоставляет гибкий и высокопроизводительный механизм для парсинга Markdown в HTML. Ключевым элементом настройки работы парсера является объект опций, который задается через метод marked.setOptions. Этот объект позволяет детально управлять поведением парсера, стилем генерации HTML и безопасностью вывода.

Основные свойства объекта опций

  1. renderer Позволяет указать собственный объект Renderer, который отвечает за генерацию HTML для каждого элемента Markdown. Пример создания кастомного рендерера:

    const renderer = new marked.Renderer();
    renderer.heading = (text, level) => `<h${level} class="custom-heading">${text}</h${level}>`;
    
    marked.setOptions({ renderer });

    Это свойство особенно важно, когда требуется кастомизация тегов или добавление классов для стилизации.

  2. gfm Булево значение, включающее или отключающее поддержку GitHub Flavored Markdown (GFM).

    • true — включает поддержку GFM (таблицы, задачи, автоматические ссылки).
    • false — стандартный Markdown.
  3. breaks Управляет поведением переносов строк.

    • true — переносы строк в исходном тексте преобразуются в <br>.
    • false — стандартное поведение Markdown, игнорирующее одиночные переносы.
  4. smartLists Позволяет включить «умные» списки:

    • true — правильное определение вложенных списков.
    • false — стандартная генерация списков Markdown, которая может быть менее предсказуемой при сложных вложениях.
  5. smartypants Включение замены стандартных символов на типографские:

    • true — кавычки, тире, многоточия заменяются на типографические аналоги.
    • false — стандартные символы.
  6. xhtml Управляет генерацией XHTML-совместимого HTML:

    • true — все теги самозакрывающиеся, например <br />.
    • false — обычный HTML.
  7. mangle и headerIds

    • headerIds — автоматическая генерация id для заголовков (по умолчанию true).
    • mangle — управляет экранированием email-адресов в заголовках для защиты от спама (по умолчанию true).
  8. sanitize (устаревшее, рекомендовано использовать marked.parse с sanitize: false и собственными фильтрами) Используется для очистки HTML от потенциально опасных тегов. При значении true все HTML-теги будут удалены.

  9. tokenizer Позволяет переопределить стандартный механизм токенизации Markdown, чтобы реализовать собственные синтаксические конструкции. Пример:

    const tokenizer = {
        codespan(src) {
            if (src.startsWith('^^')) {
                return { type: 'codespan', raw: src.slice(0, 4), text: src.slice(2, 4) };
            }
        }
    };
    marked.setOptions({ tokenizer });

Пример комплексной настройки marked.setOptions

marked.setOptions({
    renderer: new marked.Renderer(),
    gfm: true,
    breaks: false,
    smartLists: true,
    smartypants: true,
    xhtml: true,
    headerIds: true,
    mangle: false
});

В этом примере включены возможности GFM, интеллектуальные списки, типографические улучшения, XHTML-совместимый вывод, а также отключено маскирование email-адресов.

Влияние на работу парсера

Использование marked.setOptions изменяет поведение всего парсера глобально. Любые последующие вызовы marked.parse или marked будут использовать указанные параметры. Это позволяет настраивать библиотеку под конкретные требования проекта: безопасность, стилизацию, поддержку расширенного Markdown.

Советы по практическому применению

  • Кастомизация рендерера полезна для интеграции с CSS-фреймворками или собственными стилями.
  • Использование smartypants и breaks повышает читабельность текста без изменения Markdown-разметки.
  • Отключение mangle рекомендуется, если требуется прямое использование email-адресов в заголовках без преобразований.
  • Проверка gfm и smartLists критична для проектов, где важно корректное отображение таблиц и вложенных списков.

Настройка на уровне отдельных вызовов

Вместо глобальной настройки через marked.setOptions возможно передавать объект опций непосредственно в вызов marked.parse:

marked.parse(markdownText, {
    gfm: true,
    breaks: true,
    smartypants: true
});

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


Эти возможности делают объект опций marked.setOptions основным инструментом тонкой настройки работы Markdown-парсера, обеспечивая полное управление генерацией HTML и безопасностью вывода.