В узбекской латинице два особых знака. ʻ в буквах Oʻ и Gʻ, как в Oʻzbekiston. И ʼ — знак тутук (tutuq belgisi), разделительный знак, как в maʼno. В Юникоде у них свои номера: U+02BB и U+02BC.
На деле их почти никто так не набирает. Люди печатают обычный апостроф с клавиатуры, ', или типографскую кавычку ‘, или даже обратный штрих `. Среди встроенных раскладок Windows для узбекского есть только кириллическая (Uzbek Cyrillic); узбекской латинской нет, и встроенного способа набрать ʻ (U+02BB) нет. В Word знак можно получить так: набрать 02BB и нажать Alt+X.
Поэтому на табличках встречаются все варианты сразу. Мы решили, что шрифт должен выглядеть правильно независимо от того, что именно набрано.

Как это работает
В современном шрифте (формат OpenType), кроме рисунков букв, хранятся правила. Одни двигают буквы — это кернинг. Другие подменяют один знак другим в зависимости от соседей. Такая подмена называется контекстной альтернативой, сокращённо calt.
Браузеры и многие программы включают calt по умолчанию. Пользователю ничего нажимать не нужно: он печатает o'zbek, а видит oʻzbek.
Свои знаки
Сначала мы нарисовали сами знаки. У основы, Overpass, знака ʻ не было, а её кавычка — круглая «капля» — не подходила к прямым срезам букв.
Новые знаки — клинья с прямыми срезами. Тяжёлый конец в полтора штриха, лёгкий почти острый.
- У ʻ масса внизу, наклон 10°.
- У ʼ масса вверху, наклон 23°.

Первая версия была проще: оба знака выглядели как косая черта и различались только толщиной концов. При проверке выяснилось, что в мелком кегле их не отличить. Теперь силуэты смотрят в разные стороны.
Правила
Правил несколько, и порядок важен: срабатывает первое подошедшее. Они работают для четырёх набранных знаков: ' ‘ ’ `.
После O — только внутри слова. o'zbek → oʻzbek. Но в ‘metro’ закрывающая кавычка после o — это кавычка, а не знак. Внутри слова после неё идёт буква, в конце — нет. Это и есть признак.
После G — и в конце слова. В узбекском много слов, оканчивающихся на gʻ: bogʻ, togʻ, sogʻ. Поэтому bog' → bogʻ.
Исключение для английского 's. King's, dog's — притяжательная форма. Если после кавычки стоит s и слово кончается, знак ʻ не ставится. Но bog'siz (без сада) — внутри слова, там ʻ нужен.
ng в конце слова. В узбекском ng — одна буква, и ʻ после неё не бывает. Значит, в ‘tong’ кавычка после ng — это кавычка. Внутри слова, напротив, gʻ после n встречается: qoʻngʻiroq (звонок), changʻi (лыжи), toʻngʻich (первенец).
Между буквами — ʼ. Всё остальное, что стоит между двумя буквами, становится тутуком: ma'no → maʼno, san'at → sanʼat. В конце слова ʼ не ставится: в man' кавычка остаётся.
Языки
Правило, полезное для узбекского, вредно для английского. O'Brien не должен стать OʻBrien, don't — donʼt.
Шрифт может включать правила по-разному для разных языков. Язык берётся из разметки текста: на сайте это атрибут lang. Мы включили подстановку для узбекского (тег UZB) и для текста без указанного языка. Для английского, немецкого, французского, испанского, итальянского, португальского и русского она выключена. Выключена и для языков, для которых у Overpass есть свои настройки: турецкого, азербайджанского, казахского, каталанского, нидерландского и других.
Здесь есть ловушка, которую нашли при проверке. Если на странице не указан язык, браузер подставляет язык интерфейса — например, английский или русский. Для них правило выключено, и посетитель подстановки не увидит. Поэтому совет: узбекский текст на сайте нужно размечать — lang="uz".
А что в неразмеченном тексте? Правила работают. King's там получит тутук ʼ вместо апострофа: между g и s стоит знак между буквами. Для узбекской вывески это не страшно, а английский текст стоит разметить.
Регрессия: qoʻngʻiroq
Самая поучительная история случилась при проверке. Регрессия — ошибка, которая появляется в уже работавшем месте после исправления другого.
При проверке по узбекскому языку выяснилось: в ‘tong’ (утро, в кавычках) закрывающая кавычка превращается в ʻ. Получалось ‘tongʻ. Мы добавили правило: после ng знак не ставить.
Следующая проверка нашла блокер — ошибку, с которой шрифт нельзя выпускать. Новое правило сломало слова, где gʻ стоит после n внутри слова. После ng теперь срабатывало общее правило «между буквами», и вместо ʻ появлялся ʼ.

Исправление — два правила вместо одного. После ng внутри слова — ʻ. После ng в конце слова — кавычка остаётся кавычкой. Порядок правил важен и закреплён в сборке.
Но главное не исправление. Ошибку внесли мы сами, исправляя другую. Значит, глазами такие вещи не удержать. Мы завели тест на реальных словах. Каждый случай — что набрано, на каком языке и что должно получиться. Программа HarfBuzz раскладывает текст тем же способом, что браузер, и сравнивает выбранные знаки с ожидаемыми.
Каждое найденное замечание о подстановке становится новой строкой теста, и каждый случай проверяется в обоих начертаниях. Все проходят. В тесте есть и qoʻngʻiroq, и ‘tong’, и King's, и тексты, размеченные турецким, азербайджанским, казахским, немецким и французским, — там замены быть не должно.
Известное ограничение
Одно место правило честно не различает. Заимствованное слово на -g в кавычках, например 'pedagog', выглядит для шрифта так же, как bog'. Закрывающая кавычка становится ʻ. Отличить их можно только по словарю, а шрифт словаря не знает. Ограничение закреплено в тесте, чтобы его поведение не менялось незаметно.
Итог
Подстановка в Ipak Davlat — пять правил и список языков. Её ценность не в сложности, а в том, что она проверена на реальных словах: при проверке прогнали ещё около девяноста слов — Fargʻona, yongʻoq, Qoʻngʻirot, moʻgʻul, musʼhaf, bemaʼni — все верны.
Совет пользователям простой. Если можете, набирайте U+02BB и U+02BC. Если нет — набирайте как привыкли, а узбекский текст размечайте как узбекский. Остальное сделает шрифт.
Источники
- Номера и имена символов U+02BB, U+02BC, U+2018, U+2019 — таблицы Юникода.
- Раскладки Windows — список Microsoft «Keyboard identifiers and input method editors for Windows».
- Фича calt и языковой тег UZB — спецификация OpenType, Microsoft Typography.
- calt в браузерах: значение
normalуfont-variant-ligaturesобычно включает контекстные формы — MDN. - Атрибут
lang— MDN. - Правила, языки, тест — наши, на сборке Ipak Davlat v0.1, октябрь 2026 года.
Ссылки:
- Unicode: Spacing Modifier Letters (U+02BB, U+02BC). https://www.unicode.org/charts/PDF/U02B0.pdf
- Unicode: General Punctuation (U+2018, U+2019). https://www.unicode.org/charts/PDF/U2000.pdf
- Microsoft: Keyboard identifiers and input method editors for Windows. https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-language-pack-default-values
- Gʻ — Wikipedia. https://en.wikipedia.org/wiki/Gʻ
- Uzbek alphabet — Wikipedia. https://en.wikipedia.org/wiki/Uzbek_alphabet
- OpenType: фича calt (Microsoft Typography). https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae
- OpenType: языковые теги (UZB — узбекский). https://learn.microsoft.com/en-us/typography/opentype/spec/languagetags
- MDN: font-variant-ligatures (contextual = calt). https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant-ligatures
- MDN: атрибут lang. https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang
- HarfBuzz — движок раскладки текста. https://harfbuzz.github.io/