Справочник правил
Файл СГЕНЕРИРОВАН тестом RulesDocumentTests из реестра правил, XML-комментариев ядра и тестовых данных. Руками не править: правка потеряется при перегенерации, а тест в CI упадёт.
Пример подобран автоматически — это первый из тестовых входов, на котором правило, включённое в одиночку, что-то меняет. Неразрывный пробел показан подчёркиванием _, перевод строки — знаком ⏎.
Всего правил: 107. В пресете Default: 76. В пресете Lebedev: 73. В пресете Typograf: 80. В пресете Gost: 75. В пресете Minimal: 3.
Фаза Prepare (4)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/html/quot |
Сущность прямой кавычки декодируется в символ до расстановки кавычек. | Default, Lebedev, Typograf, Gost | "цитата" и " → "цитата" и " |
common/nbsp/replaceNbsp |
Замена неразрывного пробела на обычный ДО типографирования. Вне Default: неразрывный пробел во входе поставлен руками и означает «здесь рвать нельзя», а правило это решение стирает. Работает только вместе с правилами фазы Bind — без них текст останется вовсе без неразрывных пробелов. | — | слово_- слово → слово - слово |
common/other/delBOM |
Удаление метки порядка байт в начале документа. | Default, Lebedev, Typograf, Gost | текст с BOM → текст с BOM |
common/space/replaceTab |
Замена табуляции на четыре пробела. Вне Default. | — | "цитата" → "цитата" |
Фаза Protect (1)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/html/processingAttrs |
Типографирование значений атрибутов. НЕ РЕАЛИЗУЕТСЯ: гарантия 3 обещает атрибуты байт в байт, а реализация требует разбора значений внутри тега и повторного запуска всего конвейера на каждом из них. | — | — |
Фаза Scan (60)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/number/digitGrouping |
Разбиение длинных чисел по разрядам. Вне Default. | Lebedev, Typograf | Разряды 1000000 рублей и 25-ый дом в 2026году. → Разряды 1_000_000 рублей и 25-ый дом в 2026году. |
common/number/fraction |
Простые дроби одной восьмой доли: половина, четверть и три четверти. | Default, Lebedev, Typograf, Gost | 8 != 9, 5 <= 6, 10 x 5 и 1/2 → 8 != 9, 5 <= 6, 10 x 5 и ½ |
common/number/mathSigns |
Знаки сравнения и «плюс-минус» из двухсимвольной записи. | Default, Lebedev, Typograf, Gost | 8 != 9, 5 <= 6, 10 x 5 и 1/2 → 8 ≠ 9, 5 ≤ 6, 10 x 5 и 1/2 |
common/number/times |
Знак умножения вместо латинской буквы между числами. | Default, Lebedev, Typograf, Gost | 8 != 9, 5 <= 6, 10 x 5 и 1/2 → 8 != 9, 5 <= 6, 10×5 и 1/2 |
common/punctuation/apostrophe |
Расстановка правильного апострофа. | Default, Lebedev, Typograf, Gost | д'Артаньян, O'Neil, Кот-д'Ивуар → д’Артаньян, O’Neil, Кот-д’Ивуар |
common/punctuation/delDoublePunctuation |
Удаление двойной пунктуации: «слово,,ещё» становится «слово,ещё». | Default, Lebedev, Typograf, Gost | раз,,два и три,.четыре и пять,;шесть → раз,два и три,.четыре и пять,;шесть |
common/punctuation/hellip |
Замена трёх точек на многоточие. | Default, Lebedev, Typograf, Gost, Minimal | раз,...два → раз,…два |
common/punctuation/quote |
Расстановка кавычек правильного вида. | Default, Lebedev, Typograf, Gost, Minimal | "цитата" → «цитата» |
common/punctuation/quoteLink |
Вынос кавычек за пределы ссылки. НЕ РЕАЛИЗУЕТСЯ: правило перемещает текст через границу тега, а гарантия 3 спецификации обещает разметку байт в байт. Имя зарегистрировано ради паритета с JS-typograf, чтобы RuleId@) его узнавал, а справочник правил был полным. | — | — |
common/space/afterColon |
Пробел после двоеточия. | Default, Lebedev, Typograf, Gost | текст:ещё и раз;два → текст: ещё и раз;два |
common/space/afterComma |
Пробел после запятой. | Default, Lebedev, Typograf, Gost | он сказал,"да" → он сказал, "да" |
common/space/afterExclamationMark |
Пробел после восклицательного знака. | Default, Lebedev, Typograf, Gost | Ура!Победа и Как?Так и знак №№ 5 → Ура! Победа и Как?Так и знак №№ 5 |
common/space/afterQuestionMark |
Пробел после вопросительного знака. | Default, Lebedev, Typograf, Gost | Ура!Победа и Как?Так и знак №№ 5 → Ура!Победа и Как? Так и знак №№ 5 |
common/space/afterSemicolon |
Пробел после точки с запятой. | Default, Lebedev, Typograf, Gost | текст:ещё и раз;два → текст:ещё и раз; два |
common/space/beforeBracket |
Пробел перед открывающей скобкой. | Default, Lebedev, Typograf, Gost | слово(текст) и [ ещё ] → слово (текст) и [ ещё ] |
common/space/bracket |
Удаление лишних пробелов внутри круглых скобок. | Default, Lebedev, Typograf, Gost | он ( в скобках ) и стрелка -> и обратно <- → он (в скобках) и стрелка -> и обратно <- |
common/space/delBeforeDot |
Удаление пробела перед точкой. | Default, Lebedev, Typograf, Gost | текст. .. → текст... |
common/space/delBeforePercent |
Удаление пробела перед знаком процента, промилле и продецимилле. | Default, Typograf | 10 км/ч, 100 %, 25 °C, № 5, § 3 → 10 км/ч, 100%, 25 °C, № 5, § 3 |
common/space/delBeforePunctuation |
Удаление пробелов перед знаками пунктуации. | Default, Lebedev, Typograf, Gost | Ура ! ! ! и Что?... и Ох!... → Ура!!! и Что?... и Ох!... |
common/space/delBetweenExclamationMarks |
Удаление пробелов между восклицательными знаками. | Default, Lebedev, Typograf, Gost | Ура ! ! ! и Что?... и Ох!... → Ура !!! и Что?... и Ох!... |
common/space/delLeadingBlanks |
Удаление пробелов в начале строки. Вне Default. | — | → `` |
common/space/delRepeatN |
Удаление повторяющихся переводов строки. Вне Default. | — | ⏎⏎⏎ → ⏎⏎ |
common/space/delRepeatSpace |
Удаление повторяющихся пробелов. | Default, Lebedev, Typograf, Gost | текст - 5 → текст - 5 |
common/space/delTrailingBlanks |
Удаление пробелов в конце строки. Вне Default. | — | → `` |
common/space/insertFinalNewline |
Перевод строки в конце текста. Вне Default. | — | → ⏎ |
common/space/squareBracket |
Удаление лишних пробелов внутри квадратных скобок. | Default, Lebedev, Typograf, Gost | слово(текст) и [ ещё ] → слово(текст) и [ещё] |
common/space/trimLeft |
Удаление пробелов и переводов строк в начале текста. Вне Default. | — | → `` |
common/space/trimRight |
Удаление пробелов и переводов строк в конце текста. Вне Default. | — | → `` |
common/symbols/arrow |
Стрелки из дефиса и угловой скобки. | Default, Lebedev, Typograf, Gost | он ( в скобках ) и стрелка -> и обратно <- → он ( в скобках ) и стрелка → и обратно ← |
common/symbols/cf |
Добавление знака градуса к «C» и «F». | Default, Lebedev, Typograf, Gost | Проценты 50 % и 100%, градусы 25 C. → Проценты 50 % и 100%, градусы 25 °C. |
common/symbols/copy |
Знаки копирайта, торговой марки и регистрации из скобочной записи. | Default, Lebedev, Typograf, Gost | (c) 2026, (tm) и (r) → © 2026, ™ и ® |
en-GB/dash/main |
Дефис с пробелами становится коротким тире с отбивкой. | — | текст - 5 → текст – 5 |
en-US/dash/main |
Дефис с пробелами становится длинным тире без отбивки. | — | текст - 5 → текст— 5 |
ru/dash/centuries |
Тире в диапазоне веков. | Default, Lebedev, Typograf, Gost | XIX-XX вв. и 80-90-е гг. → XIX—XX вв. и 80-90-е гг. |
ru/dash/daysMonth |
Тире между днями одного месяца. | Default, Lebedev, Typograf, Gost | 10:00-11:00 и 5-10 января → 10:00-11:00 и 5—10 января |
ru/dash/de |
Дефис перед частицей «де». Вне Default: частица омонимична предлогу в иностранных фамилиях («Шарль де Голль»), и без словаря фамилий правило ошибается. | — | — |
ru/dash/decade |
Тире в десятилетиях. | Default, Lebedev, Typograf, Gost | XIX-XX вв. и 80-90-е гг. → XIX-XX вв. и 80—90-е гг. |
ru/dash/directSpeech |
Тире в прямой речи. | Default, Lebedev, Typograf, Gost | Привет<br />- Пока → Привет<br />— Пока |
ru/dash/izpod |
Дефис в «из-под». | Default, Lebedev, Typograf, Gost | кое что из под стола → кое что из-под стола |
ru/dash/izza |
Дефис в «из-за». | Default, Lebedev, Typograf, Gost | — |
ru/dash/ka |
Дефис перед «ка» и «кась». | Default, Lebedev, Typograf, Gost | — |
ru/dash/kakto |
Дефис в «как-то». Вне Default по той же причине, что и To: «как то» бывает союзом с местоимением — «как то: раз, два». | Typograf | что то, как то, кое что и все таки → что то, как-то, кое что и все таки |
ru/dash/koe |
Дефис после «кое» и «кой». | Default, Lebedev, Typograf, Gost | кое что из под стола → кое-что из под стола |
ru/dash/main |
Замена дефиса на тире. | Default, Lebedev, Typograf, Gost, Minimal | слово_- слово → слово_— слово |
ru/dash/month |
Тире между месяцами. | Default, Lebedev, Typograf, Gost | январь-февраль, понедельник-среда → январь—февраль, понедельник-среда |
ru/dash/surname |
Защита дефиса в двойных фамилиях: «Салтыков-Щедрин» не становится тире. | Default, Lebedev, Typograf, Gost | — |
ru/dash/taki |
Дефис перед «таки». | Default, Lebedev, Typograf, Gost | что то, как то, кое что и все таки → что то, как то, кое что и все-таки |
ru/dash/time |
Тире в интервалах времени. | Default, Lebedev, Typograf, Gost | 10:00-11:00 и 5-10 января → 10:00—11:00 и 5-10 января |
ru/dash/to |
Дефис перед «то», «либо», «нибудь». Вне Default: «то» омонимично указательному местоимению, и «Я знал, что то было ошибкой» правило испортило бы, сменив смысл фразы. | Typograf | что то, как то, кое что и все таки → что-то, как-то, кое что и все таки |
ru/dash/weekday |
Тире между днями недели. | Default, Lebedev, Typograf, Gost | январь-февраль, понедельник-среда → январь-февраль, понедельник—среда |
ru/dash/years |
Замена дефиса на тире в годах. | Default, Typograf, Gost | - Привет, - сказал он. 1941-1945 → - Привет, - сказал он. 1941—1945 |
ru/number/comma |
Десятичная запятая вместо точки. | Default, Lebedev, Typograf, Gost | 3.14 и 25-ый дом в 2026году → 3,14 и 25-ый дом в 2026году |
ru/number/ordinals |
Краткая форма порядковых числительных. | Default, Lebedev, Typograf, Gost | 3.14 и 25-ый дом в 2026году → 3.14 и 25-й дом в 2026году |
ru/punctuation/ano |
Расстановка запятых перед «а» и «но». Вне Default: правило само расставляет знаки, то есть меняет текст, а не оформление. Включается по имени или через пресет Typograf. | Typograf | Пушкин А. → Пушкин, А. |
ru/punctuation/exclamation |
Удвоенный восклицательный знак сводится к одному. | Default, Typograf, Gost | де Голль и NN 5 и Что?.. Ура!!! → де Голль и NN 5 и Что?.. Ура! |
ru/punctuation/exclamationQuestion |
Восклицательный знак с вопросительным ставятся в принятом порядке. | Default, Lebedev, Typograf, Gost | Что!? Ура!... Текст?..Как → Что?! Ура!... Текст?..Как |
ru/punctuation/hellipQuestion |
Многоточие после знака конца предложения сокращается до двух точек. | Default, Lebedev, Typograf, Gost | Вопрос?… и ответ!… и просто… → Вопрос?.. и ответ!.. и просто… |
ru/space/afterHellip |
Пробел после многоточия и его сочетаний со знаком конца предложения. | Default, Lebedev, Typograf, Gost | раз,...два → раз,... два |
ru/space/year |
Пробел между числом и словом «год». | Default, Lebedev, Typograf, Gost | 3.14 и 25-ый дом в 2026году → 3.14 и 25-ый дом в 2026 году |
ru/symbols/NN |
Сдвоенный знак номера сводится к одному. | Default, Lebedev, Typograf, Gost | Ура!Победа и Как?Так и знак №№ 5 → Ура!Победа и Как?Так и знак № 5 |
Фаза Bind (33)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/nbsp/afterNumber |
Неразрывный пробел между числом и следующим за ним словом. | Default, Lebedev, Gost | №5 и §3 и ¶3 и 600 dpi → №5_и §3_и ¶3_и 600_dpi |
common/nbsp/afterParagraphMark |
Неразрывный пробел после знака абзаца. | Default, Lebedev, Typograf, Gost | №5 и §3 и ¶3 и 600 dpi → №5 и §3 и ¶_3 и 600 dpi |
common/nbsp/afterSectionMark |
Узкий неразрывный пробел после знака параграфа. | Default, Lebedev, Typograf, Gost | №5 и §3 и ¶3 и 600 dpi → №5 и §_3 и ¶3 и 600 dpi |
common/nbsp/afterShortWord |
Неразрывный пробел после короткого слова. | Default, Lebedev, Typograf, Gost | текст с BOM → текст с_BOM |
common/nbsp/afterShortWordByList |
Неразрывный пробел после предлога или союза из словаря. | Default, Lebedev, Typograf, Gost | так ли это, он же, если бы через дорогу → так ли это, он же, если_бы через_дорогу |
common/nbsp/beforeShortLastNumber |
Неразрывный пробел перед числом не длиннее двух цифр в конце предложения. | Default, Lebedev, Typograf, Gost | ул. Ленина, д. 5, кв. 7 и стр. 15, см. рис. 3 → ул. Ленина, д. 5, кв. 7 и стр. 15, см. рис._3 |
common/nbsp/beforeShortLastWord |
Неразрывный пробел перед последним коротким словом предложения. Конец предложения распознаётся по точке ВНУТРИ токена, поэтому правило срабатывает и перед сокращением: «Улица ул. Ленина». Отличить точку сокращения от точки конца предложения без разбора смысла нельзя — за сокращением часто стоит имя собственное с прописной буквы, — а лишний неразрывный пробел безвреден и не противоречит Мильчину, который требует не отрывать сокращение от слова. | Default, Lebedev, Typograf, Gost | Пушкин А. → Пушкин_А. |
common/nbsp/dpi |
Неразрывный пробел перед «dpi», «lpi» и «ppi». | Default, Lebedev, Typograf, Gost | №5 и §3 и ¶3 и 600 dpi → №5 и §3 и ¶3 и 600_dpi |
common/nbsp/nowrap |
Снятие неразрывных пробелов внутри тегов nobr и nowrap. | Default, Lebedev, Typograf, Gost | <nobr>в_доме</nobr> и в доме → <nobr>в доме</nobr> и в доме |
common/other/repeatWord |
Удаление повтора слова. Вне Default: правило стирает слово, то есть меняет текст, а не оформление. | — | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990 г.г. и XIX в. и P.S. и 100 м2 |
ru/date/fromISO |
Дата вида ГГГГ-ММ-ДД приводится к виду ДД.ММ.ГГГГ. | Default, Lebedev, Typograf, Gost | Дата 2026-09-10, 9 Сентября 2026, 2 мая, Понедельник → Дата 10.09.2026, 9 Сентября 2026, 2 мая, Понедельник |
ru/date/weekday |
Название месяца и дня недели пишется со строчной буквы. | Default, Lebedev, Typograf, Gost | Дата 2026-09-10, 9 Сентября 2026, 2 мая, Понедельник → Дата 2026-09-10, 9 сентября 2026, 2 мая, понедельник |
ru/money/currency |
Символ валюты переносится за число: «$100» становится «100 $». | — | $100 и 50 руб. и повтор повтор слова и зАмок → 100_$ и 50 руб. и повтор повтор слова и зАмок |
ru/money/ruble |
«1 руб.» становится «1 ₽». | — | $100 и 50 руб. и повтор повтор слова и зАмок → $100 и 50_₽ и повтор повтор слова и зАмок |
ru/nbsp/abbr |
Неразрывный пробел в сокращениях, например «т. д.». | Default, Lebedev, Typograf, Gost | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990 г.г. и XIX в._в._и P.S. и 100 м2 |
ru/nbsp/addr |
Неразрывный пробел после адресных сокращений: «г.», «ул.», «д.», «кв.». | Default, Typograf, Gost | А. С. Пушкин.</p> → А. С._Пушкин.</p> |
ru/nbsp/afterNumberSign |
Узкий неразрывный пробел после знака номера. | Default, Lebedev, Typograf, Gost | №5 и §3 и ¶3 и 600 dpi → №_5 и §3 и ¶3 и 600 dpi |
ru/nbsp/beforeParticle |
Неразрывный пробел перед частицами «ли», «ль», «же», «бы», «б». | Default, Lebedev, Typograf, Gost | <b>А</b>- б → <b>А</b>-_б |
ru/nbsp/centuries |
«в. в.» приводится к «вв.» с неразрывным пробелом перед ним. | Default, Lebedev, Typograf, Gost | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990 г.г. и XIX_вв. и P.S. и 100 м2 |
ru/nbsp/dayMonth |
Неразрывный пробел между числом и названием месяца. | Default, Lebedev, Typograf, Gost | 10:00-11:00 и 5-10 января → 10:00-11:00 и 5-10_января |
ru/nbsp/initials |
Привязка инициалов к фамилии. | Default, Lebedev, Typograf, Gost | Пушкин А. → Пушкин_А. |
ru/nbsp/m |
«м2» и «м3» с квадратным и кубическим знаком и неразрывным пробелом. | Default, Lebedev, Typograf, Gost | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990 г.г. и XIX в. в. и P.S. и 100_м² |
ru/nbsp/mln |
Неразрывный пробел перед «тыс.», «млн», «млрд» и «трлн». | Default, Lebedev, Typograf, Gost | ООО Ромашка купило 10 млн на 5 тыс. руб. в 2012 г. → ООО Ромашка купило 10_млн на 5_тыс. руб. в 2012 г. |
ru/nbsp/ooo |
Неразрывный пробел после «ООО», «ОАО», «ЗАО», «НИИ» и им подобных. | Default, Lebedev, Typograf, Gost | ООО Ромашка купило 10 млн на 5 тыс. руб. в 2012 г. → ООО_Ромашка купило 10 млн на 5 тыс. руб. в 2012 г. |
ru/nbsp/page |
Неразрывный пробел после «стр.», «гл.», «рис.», «илл.». | Default, Lebedev, Typograf, Gost | А. С. Пушкин.</p> → А. С._Пушкин.</p> |
ru/nbsp/ps |
Неразрывный пробел внутри «P. S.» и «P. P. S.». | Default, Lebedev, Typograf, Gost | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990 г.г. и XIX в. в. и P._S. и 100 м2 |
ru/nbsp/rubleKopek |
Неразрывный пробел перед «руб.», «коп.» и их однобуквенными формами. | Default, Lebedev, Typograf, Gost | $100 и 50 руб. и повтор повтор слова и зАмок → $100 и 50_руб. и повтор повтор слова и зАмок |
ru/nbsp/see |
Неразрывный пробел после «см.» и «им.». | Default, Lebedev, Typograf, Gost | ул. Ленина, д. 5, кв. 7 и стр. 15, см. рис. 3 → ул. Ленина, д. 5, кв. 7 и стр. 15, см._рис. 3 |
ru/nbsp/year |
Неразрывный пробел между годом и сокращением «г.» или «гг.». | Default, Lebedev, Typograf, Gost | А.С. Пушкин писал в 3 г. IV в. до н. э. → А.С. Пушкин писал в 3_г. IV в. до н. э. |
ru/nbsp/years |
«г.г.» приводится к «гг.» с неразрывным пробелом перед ним. | Default, Lebedev, Typograf, Gost | 1990 г.г. и XIX в. в. и P.S. и 100 м2 → 1990_гг. и XIX в. в. и P.S. и 100 м2 |
ru/other/accent |
Ударение: единственная прописная буква внутри слова становится строчной со знаком ударения. Вне Default: правило меняет запись слова. | — | $100 и 50 руб. и повтор повтор слова и зАмок → $100 и 50 руб. и повтор повтор слова и за́мок |
ru/other/phone-number |
Телефонный номер приводится к виду «+7 999 123-45-67» с неразрывными пробелами. | Default, Lebedev, Typograf, Gost | Телефон +7 (999) 123-45-67 и артикул 89991234567890 → Телефон +7_999_123-45-67 и артикул 89991234567890 |
ru/typo/switchingKeyboardLayout |
Замена латинских букв на русские при ошибке раскладки. По умолчанию выключено. Правило зарегистрировано (участвует в RuleSet, проходит RuleId@)), но пока НЕ ДЕЙСТВУЕТ: ни одна фаза конвейера его не читает, включение через RuleId[]) ничего не меняет в выводе. Реализация ждёт следующей версии. | Typograf | — |
Фаза Layout (7)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/html/e-mail |
Адрес электронной почты становится ссылкой. Вне Default по той же причине, что и Url. | — | <a href="#">http://a.ru</a> и m@e.com → <a href="#">http://a.ru</a> и <a href="mailto:m@e.com">m@e.com</a> |
common/html/nbr |
Перевод строки размечается тегом переноса. То же, что UseBr: включено любое из двух — тег ставится. Вне Default; гарантия 5 на него не распространяется — прогон по собственному выводу вкладывает теги повторно. | — | ⏎⏎⏎ → <br />⏎<br />⏎<br />⏎ |
common/html/p |
Абзацы оборачиваются тегом абзаца. То же, что UseP: включено любое из двух — теги ставятся. Вне Default. | — | → <p> </p> |
common/html/url |
Веб-адрес в тексте становится ссылкой. Вне Default: правило делает тег из текста, а гарантия 4 обещает, что правила Default так не поступают. | — | Ссылка https://a.ru/?x=1&y=2 в тексте → Ссылка <a href="https://a.ru/?x=1&y=2">https://a.ru/?x=1&y=2</a> в тексте |
ru/optalign/bracket |
Открывающая скобка выносится за левый край набора. | — | (c) 2026, (tm) и (r) → <span class="typograf-oa-n-lbracket">(</span>c) 2026,<span class="typograf-oa-sp-lbracket"> </span><span class="typograf-oa-lbracket">(</span>tm) и<span class="typograf-oa-sp-lbracket"> </span><span class="typograf-oa-lbracket">(</span>r) |
ru/optalign/comma |
Запятая выносится за правый край набора. | — | (c) 2026, (tm) и (r) → (c) 2026<span class="typograf-oa-comma">,</span><span class="typograf-oa-comma-sp"> </span>(tm) и (r) |
ru/optalign/quote |
Открывающая кавычка выносится за левый край набора. | — | «закон "О стандартизации"» → <span class="typograf-oa-n-lquote">«</span>закон "О стандартизации"» |
Фаза Emit (2)
| Правило | Что делает | Пресеты | Пример |
|---|---|---|---|
common/html/escape |
Экранирование разметки: документ выходит текстом. Вне Default, единственное исключение из гарантии 3, и неподвижной точки не имеет — на втором прогоне «&» станет «&», поэтому гарантия 5 на него тоже не распространяется. | — | "цитата" → "цитата" |
common/html/stripTags |
Удаление тегов. НЕ РЕАЛИЗУЕТСЯ: это санитайзинг, а не типографика, и он противоречит гарантии 3, которая обещает разметку байт в байт. Имя зарегистрировано ради паритета с JS-typograf, чтобы RuleId@) его узнавал, а справочник правил был полным. | — | — |