Расхождения с оракулом Лебедева
Документ сгенерирован тестом OracleSnapshotTests из снимка lebedev.md и списка
причин в самом тесте. Править руками нечего: причины живут в коде, где их видит
тест, а здесь — их читаемая проекция. Перегенерация:
TYPOGRAPHER_UPDATE_ORACLE=1 dotnet test tests/Typographer.Tests.
Наш набор правил — пресет Lebedev. Неразрывный пробел показан как _,
узкий неразрывный — как ~.
| Вход | Наш вывод | Вывод оракула | Почему расходимся | |
|---|---|---|---|---|
| Он сказал: "это важно, и т. д." - и ушёл в 1941-1945 гг. | Он_сказал: «это_важно, и_т.д.»— и_ушёл в_1941-1945_гг. | Он_сказал: «это важно, и_т.д.»— и_ушёл в_1941-1945_гг. | порог короткого слова у нас три буквы (как в JS-typograf), у оракула две: «это» мы привязываем, он нет | |
| Тире - вот так. И дефис-минус. | Тире_— вот_так. И_дефис-минус. | Тире_— вот так. И_дефис-минус. | тот же порог короткого слова: «вот» мы привязываем, оракул нет | |
| Диапазон 1941-1945 и 10-15 штук | Диапазон 1941-1945_и_10-15_штук | Диапазон 1941-1945 и_10-15 штук | тот же порог короткого слова плюс привязка числа к следующему слову: «10-15 штук» | |
| Минус -5 градусов и 5-й дом | Минус -5_градусов и_5-й_дом | Минус −5 градусов и_5-й дом | минус мы не ставим намеренно: дефис и минус в тексте неразличимы без знания замысла автора, а гарантия 4 запрещает менять смысл записи по догадке | |
| Температура 25 C и угол 90 град. | Температура 25_°C_и_угол 90_град. | Температура 25_C и_угол 90_град. | знак градуса мы дописываем сами (ГОСТ 8.417) и отбиваем от числа неразрывным пробелом (ГОСТ 9.6); оракул не делает ни того, ни другого | |
| Дробь 1/2, 3/4 и 1/4 | Дробь ½, ¾ и_¼ | Дробь 1/2, 3/4 и_1/4 | common/number/fraction собирает вульгарные дроби, оракул оставляет косую черту | |
| Неравенства 5 <= 6, 7 >= 3, 8 != 9 | Неравенства 5 ≤ 6, 7 ≥ 3, 8 ≠ 9 | Неравенства_5 <= 6, 7 >= 3, 8 != 9 | common/number/mathSigns собирает знаки сравнения, оракул оставляет их набором из двух символов | |
| Разряды 1000000 и 1 000 000 рублей | Разряды 1_000_000_и_1_000_000_рублей | Разряды 1000000 и_1_000_000 рублей | разряды мы разбиваем сами (common/number/digitGrouping в пресете) и уже стоящие пробелы между разрядами делаем неразрывными (ГОСТ 9.5), оракул не делает ни того, ни другого | |
| Копирайт (c) 2026, торговая марка (tm), знак (r) | Копирайт © 2026, торговая марка ™, знак ® | Копирайт ©2026, торговая марка (tm), знак <sup class="reg">®</sup> | мы собираем в один символ и «(tm)», и «(r)»; оракул «(tm)» не трогает, а «(r)» оборачивает в тег — разметки из текста мы не делаем (гарантия 4) | |
| Стрелки -> и <- в тексте | Стрелки → и← в_тексте | Стрелки -> и <- в_тексте | common/symbols/arrow собирает стрелки, оракул оставляет их набором из двух символов | |
| Многоточие... и ещё .... | Многоточие… и_ещё_.... | Многоточие... и_ещё .... | многоточие — один знак, а не три точки (Мильчин); оракул точки оставляет | |
| Двойная пунктуация!! и ?? и ?! | Двойная пунктуация!! и?? и?! | Двойная пунктуация!! и ?? и ?! | пробел перед знаком вопроса мы удаляем всегда, оракул — только перед одиночным | |
| "Вложенные "кавычки" внутри" и 'одинарные' | «Вложенные „кавычки“ внутри» и_'одинарные' | «Вложенные „кавычки“ внутри» и ’одинарные’ | одиночные кавычки мы не трогаем: оракул подменяет обе правой, и открывающая с закрывающей становятся неразличимы | |
| Апостроф д'Артаньян и 5" дюймов | Апостроф д’Артаньян и_5" дюймов | Апостроф д’Артаньян и_5″ дюймов | штрих после числа мы не ставим: тот же символ в тексте чаще кавычка, чем дюйм | |
| Инициалы А. С. Пушкин и Пушкин А. С. | Инициалы_А._С._Пушкин и_Пушкин_А._С. | Инициалы А._С. Пушкин и_Пушкин_А._С. | инициалы привязываются к фамилии (Мильчин), оракул связывает только инициалы между собой | |
| Улица ул. Ленина, д. 5, кв. 12 | Улица_ул. Ленина, д._5, кв._12 | Улица ул. Ленина, д._5, кв._12 | сокращение привязывается и к слову слева — «Улица ул.»; у оракула привязка только вправо | |
| Город г. Москва и с. Никольское | Город_г._Москва и_с._Никольское | Город г. Москва и_с. Никольское | «г. Москва» и «с. Никольское» мы не разрываем (Мильчин), оракул разрывает | |
| Номер № 5 и параграф § 3 | Номер №~5_и_параграф §~3 | Номер №_5_и_параграф §_3 | после № и § мы ставим УЗКИЙ неразрывный пробел (ГОСТ Р 7.0.110), оракул — обычный неразрывный | |
| Дата 2026-09-09 и 09.09.2026 | Дата 09.09.2026_и_09.09.2026 | Дата <nobr class="phone">2026-09-09</nobr> и_09.09.2026 | ISO-дату мы переписываем в русский формат, оракул оборачивает её в тег: разметки из текста мы не делаем (гарантия 4) | |
| Понедельник, 9 сентября 2026 года | Понедельник, 9_сентября 2026_года | Понедельник, 9_сентября 2026 года | «2026 года» мы не разрываем, оракул разрывает | |
| Время 10:30 и 10 ч. 30 мин. | Время 10:30_и_10_ч.30_мин. | Время_10:30 и_10_ч.30_мин. <nobr class="phone">+7</nobr> | тот же порог короткого слова: «Время» к времени мы не привязываем, а «и» привязываем к левому соседу | |
| Телефон +7 (999) 123-45-67 | Телефон +7_999_123-45-67 | Телефон(999)_123-45-67 | телефон мы переписываем неразрывными пробелами, оракул оборачивает в тег: разметки из текста мы не делаем (гарантия 4) | |
| Ударение а́ и ё вместо е | Ударение а́ и_ё_вместо_е | Ударение а́_и_ё_вместо_е | «а́» с комбинирующим ударением коротким словом не считается: в нём есть небуквенный символ |
Совпадают полностью 13 строк из 36.