Настройка типографических правил

Библиотека Markdown-it предоставляет гибкий механизм обработки текста и расширения стандартного синтаксиса Markdown. Одним из важных аспектов является контроль над типографикой, то есть автоматическое преобразование символов, расстановка кавычек, тире, апострофов и других элементов, влияющих на читаемость и оформление текста.

Типографические возможности реализуются через плагин markdown-it-typographer, который встроен в библиотеку, но требует явной активации.

const MarkdownIt = require('markdown-it');
const md = new MarkdownIt({
  typographer: true
});

Флаг typographer: true включает стандартные типографические замены. После этого Markdown-it автоматически преобразует:

  • Прямые кавычки " в «ёлочки» (« ») или “умные” кавычки (“ ”) в зависимости от локали.
  • Одинарные кавычки ' в апострофы или одиночные «ёлочки» (‘ ’).
  • Дефисы -- в длинное тире .
  • Простые многоточия ... в единственный символ .
  • Пробелы вокруг знаков пунктуации для корректного отображения.

Расширение правил типографики

Markdown-it позволяет настраивать собственные правила типографики через объект quotes и методы плагина.

const md = new MarkdownIt({
  typographer: true,
  quotes: '«»„“'
});

Параметр quotes задаёт последовательность символов для замены:

  1. Первый и второй символ — открывающая и закрывающая двойная кавычка.
  2. Третий и четвёртый символ — открывающая и закрывающая одинарная кавычка.

Пример:

md.render('"Пример одинарных и двойных кавычек"');

Будет преобразован в:

<p>«Пример одинарных и двойных кавычек»</p>

Настройка тире и дефисов

Стандартный механизм превращает двойное тире -- в длинное тире . Для более тонкой настройки можно использовать регулярные выражения в плагинах или собственные inline-правила.

md.core.ruler.push('custom_dash', function(state) {
  state.src = state.src.replace(/ - /g, ' — ');
});

Эта функция заменяет одиночные дефисы, окружённые пробелами, на длинное тире. Порядок добавления правил критичен: новые правила должны выполняться после стандартной обработки, чтобы не ломать другие преобразования.

Добавление собственных символов и сокращений

Markdown-it позволяет создавать свои сокращения и спецсимволы через typographer:

md.use(require('markdown-it-replace'), {
  patterns: [
    { regex: /\(c\)/gi, replacement: '©' },
    { regex: /\(r\)/gi, replacement: '®' },
    { regex: /\(tm\)/gi, replacement: '™' }
  ]
});

Каждое выражение в массиве patterns заменяет найденный текст на указанный символ. Это особенно удобно для автоматической замены авторских обозначений или математических сокращений.

Управление локализацией

По умолчанию Markdown-it использует европейские правила типографики, но при необходимости их можно переопределять через собственные функции рендера.

md.renderer.rules.text = function(tokens, idx) {
  return tokens[idx].content.replace(/"/g, '«»');
};

Этот метод позволяет заменить любой текстовый токен на кастомизированный, сохраняя при этом все остальные преобразования Markdown.

Пошаговое применение правил

  1. Активация плагина typographer: включение базовых правил кавычек, тире, многоточий.
  2. Настройка кавычек через quotes: выбор символов для двойных и одинарных кавычек.
  3. Добавление кастомных тире: через core.ruler или inline-правила.
  4. Расширение сокращений и спецсимволов: через сторонние плагины или собственные регулярные выражения.
  5. Локализация и переопределение рендеринга: через правила рендера renderer.rules.

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

  • Использовать typographer: true только если требуется точная типографика, так как это добавляет дополнительную обработку текста.
  • Для крупных проектов с множеством специфических сокращений лучше создавать отдельный плагин с кастомными правилами.
  • При добавлении новых правил необходимо контролировать порядок их применения, чтобы стандартные преобразования не были перезаписаны преждевременно.
  • Тестировать рендеринг на реальных текстах с разными кавычками, тире и символами, чтобы избежать неожиданных замен.

Типографические возможности Markdown-it делают текст более читабельным и эстетически аккуратным без ручной коррекции символов. Правильная настройка плагина и расширений позволяет адаптировать библиотеку под любые требования оформления и локализации.