В библиотеке Marked параметр pedantic
используется для управления поведением парсера Markdown в строгом
соответствии с оригинальной спецификацией Markdown, как она была
определена Джоном Грубером. Включение этого параметра изменяет обработку
некоторых синтаксических конструкций, делая их более консервативными и
предсказуемыми для старых текстов Markdown.
По умолчанию Marked допускает ряд «нестрогих»
расширений Markdown, которые упрощают работу с текстом и делают парсинг
более гибким. Параметр pedantic отключает эти расширения,
заставляя парсер вести себя так, как это делал бы классический
Markdown:
# обрабатываются строго,
без дополнительных пробелов или интерпретаций.---,
***) требуют точного соблюдения формата.Параметр задаётся при конфигурации Marked:
import { marked } from 'marked';
marked.setOptions({
pedantic: true
});
Также его можно передавать при вызове функции marked
напрямую:
const markdownText = "# Заголовок\n\n* Элемент списка";
const html = marked(markdownText, { pedantic: true });
Когда pedantic включён, парсер обрабатывает заголовки по
оригинальным правилам Markdown:
#, за
которым обязательно следует пробел.# без пробела не будут интерпретироваться
как заголовки, а останутся обычным текстом.=== и ---) сохраняется, но также строго
проверяется на корректность расположения символов.Пример:
#Правильный заголовок
# Неправильный заголовок
При pedantic: true только второй вариант будет корректно
обработан как заголовок.
Параметр pedantic влияет на распознавание маркированных
и нумерованных списков:
*, - или +) и пробела.1. Элемент), иначе элемент не считается частью
списка.Пример:
- Элемент 1
- Элемент 2
С pedantic: true второй элемент не будет восприниматься
как вложенный, а останется обычным текстом с тире.
С включённым pedantic:
[текст](URL) и 
должен точно соответствовать оригинальной спецификации.Пример:
[Пример]( https://example.com ) // В pedantic:true пробелы запрещены
В классическом Markdown перенос строки в конце строки без двойного
пробела не создаёт <br>:
pedantic: false библиотека может автоматически
добавлять <br> для удобства.pedantic: true <br> появляется
только при наличии двух пробелов в конце строки или явного HTML-тега
<br>.Параметр pedantic полезен в следующих случаях:
Однако включение pedantic ограничивает гибкость
Markdown, делая невозможными некоторые расширения, используемые
современными редакторами.
const markdown = `
# Заголовок 1
## Заголовок 2
- Элемент списка
- Вложенный элемент
[Ссылка](https://example.com)
`;
const htmlStrict = marked(markdown, { pedantic: true });
console.log(htmlStrict);
Результат будет соответствовать строгому стандарту Markdown, без
автоматических интерпретаций или добавления <br> там,
где это не предусмотрено спецификацией.
#.[текст](URL) и .<br> добавляется
только при двойном пробеле.Использование pedantic позволяет создать парсер, который
ведёт себя предсказуемо в старых проектах и строго соблюдает
классическую разметку Markdown без расширений.