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 само по себе не ограничивает его действие.