nuckty
EN
Все разделы →

nuckty-ext-markdown-typography-ru

Русская типографика: в поддерживаемых сочетаниях неразрывный пробел удерживает тире рядом с предыдущим словом. Расширение проходит по дереву Markdown до рендеринга и правит только текст.

Тип

markdown — регистрирует преобразование mdast через env.markdown.use(...). Ни блока, ни команды, ни стадии оно не добавляет.

Что делает

До того как мост mdast → BEMJSON построит дерево страницы, расширение выравнивает пробелы вокруг длинного тире (em-dash, «—») по правилам русской типографики:

  • неразрывный пробел перед тире — тире не повиснет в начале строки;
  • обычный пробел после тире — каноническая форма «слово — текст».

Правило применяется ко всем вариантам исходных пробелов: с обеих сторон, с одной, вовсе без пробелов между буквами. Само тире расширение не создаёт: дефис в тире не превращается, короткое тире (en-dash, «–») не трогается. Тире в тексте пишет автор.

Повторяющиеся пробелы, табуляция и уже имеющиеся неразрывные пробелы приводятся к одному варианту. Переносы строк, тире в начале реплики и числовые диапазоны без пробелов сохраняются.

Код не трогается

Блоки и фрагменты кода (code и inlineCode) расширение пропускает. Внутри кода типографика ничего не меняет: там важен точный текст.

Только для русского

Расширение необязательное: его подключают, когда нужна русская типографика. Англоязычному сайту оно не нужно — его просто не ставят, и ядро о типографике ничего не знает. Без расширения текст выводится дословно, без типографских подстановок.

Установка

Пример продолжает быстрый старт со стандартным обработчиком nuckty-ext-block-root. Добавьте новое расширение в ext глобального config/config-nuckty.ts, сохранив остальные записи. Если обработчик документа собственный, оставьте его вместо nuckty-ext-block-root.

Команда ниже выполняется из распакованного стартового проекта: готовые архивы расширений находятся в packages/.

npm install ./packages/nuckty-ext-markdown-typography-ru-1.0.0-beta1.tgz
import { defineNucktyConfig } from 'nuckty';

export default defineNucktyConfig({
    targets: { main: { configDir: 'config/', outDir: 'site/' } },
    ext: ['nuckty-ext-block-root', 'nuckty-ext-markdown-typography-ru'],
});

При подключении в глобальном ext расширение обрабатывает Markdown всех строящихся таргетов. Значение target.lang само по себе не ограничивает его действие.