o' → oʻ: подстановка, которая знает узбекский · Ipak

> Люди набирают узбекский обычным апострофом. Ipak Davlat показывает правильные знаки сам — и не трогает английское King's.

[Oʻzbekcha](https://ipak.xronocode.com/maqolalar/typed-quotes/index.md) · [English](https://ipak.xronocode.com/en/maqolalar/typed-quotes/index.md) · [Русский](https://ipak.xronocode.com/ru/maqolalar/typed-quotes/index.md) · [Español](https://ipak.xronocode.com/es/maqolalar/typed-quotes/index.md) · [Português](https://ipak.xronocode.com/pt/maqolalar/typed-quotes/index.md) · [中文](https://ipak.xronocode.com/zh/maqolalar/typed-quotes/index.md)

[Статьи] · [Этап 4 · Рабочий шрифт]

# o' → oʻ: подстановка, которая знает узбекский

Люди набирают узбекский обычным апострофом. Ipak Davlat показывает правильные знаки сам — и не трогает английское King's.

В узбекской латинице два особых знака. **ʻ** в буквах Oʻ и Gʻ, как в Oʻzbekiston. И **ʼ** — знак тутук (tutuq belgisi), разделительный знак, как в maʼno. В Юникоде у них свои номера: U+02BB и U+02BC.

На деле их почти никто так не набирает. Люди печатают обычный апостроф с клавиатуры, ', или типографскую кавычку ‘, или даже обратный штрих `. Среди встроенных раскладок Windows для узбекского есть только кириллическая (Uzbek Cyrillic); узбекской латинской нет, и встроенного способа набрать ʻ (U+02BB) нет. В Word знак можно получить так: набрать 02BB и нажать Alt+X.

Поэтому на табличках встречаются все варианты сразу. Мы решили, что шрифт должен выглядеть правильно независимо от того, что именно набрано.

![Что набрано и что показывает Ipak Davlat](https://ipak.xronocode.com/images/p/typed-quotes/typed-vs-result.png)

*Слева — что набрано с клавиатуры, справа — что показывает Ipak Davlat в тексте, размеченном как узбекский. Ipak; набрано HarfBuzz (hb-view): слева подстановка выключена (-calt), справа --language=uz; шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak*

## Как это работает

В современном шрифте (формат OpenType), кроме рисунков букв, хранятся правила. Одни двигают буквы — это кернинг. Другие подменяют один знак другим в зависимости от соседей. Такая подмена называется контекстной альтернативой, сокращённо **calt**.

Браузеры и многие программы включают calt по умолчанию. Пользователю ничего нажимать не нужно: он печатает o'zbek, а видит oʻzbek.

**Справка.** Подстановка меняет только вид. В самом тексте остаётся тот знак, который набран. Если скопировать слово или искать его поиском, программа увидит апостроф ', а не ʻ. Для документов, где важна правильная запись, лучше набирать U+02BB и U+02BC напрямую. Шрифт лишь делает так, чтобы неправильно набранный текст хотя бы выглядел верно.

## Свои знаки

Сначала мы нарисовали сами знаки. У основы, Overpass, знака ʻ не было, а её кавычка — круглая «капля» — не подходила к прямым срезам букв.

Новые знаки — клинья с прямыми срезами. Тяжёлый конец в полтора штриха, лёгкий почти острый.

У **ʻ** масса внизу, наклон 10°.

У **ʼ** масса вверху, наклон 23°.

![ʻ и ʼ в Ipak Davlat Bold](https://ipak.xronocode.com/images/p/typed-quotes/okina-tutuq.png)

*Два знака Ipak Davlat Bold: ʻ с массой внизу и ʼ с массой вверху. Ipak; набрано HarfBuzz (hb-view); шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak*

Первая версия была проще: оба знака выглядели как косая черта и различались только толщиной концов. При проверке выяснилось, что в мелком кегле их не отличить. Теперь силуэты смотрят в разные стороны.

## Правила

Правил несколько, и порядок важен: срабатывает первое подошедшее. Они работают для четырёх набранных знаков: ' ‘ ’ `.

**После 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' кавычка остаётся.

**Справка.** По правилам орфографии 1995 года (пункт 32) знак тутук показывает, что гласный перед ним произносится долго или что гласный после него произносится отдельно от предыдущего согласного. Чаще всего он встречается в словах арабского происхождения: maʼno (смысл), taʼlim (образование), sanʼat (искусство).

## Языки

Правило, полезное для узбекского, вредно для английского. 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 теперь срабатывало общее правило «между буквами», и вместо ʻ появлялся ʼ.

![qoʻngʻiroq: ошибка и исправление](https://ipak.xronocode.com/images/p/typed-quotes/regression-qongiroq.png)

*Ошибка, найденная при проверке, и исправление. Верхняя строка воспроизведена вручную: знак ʼ набран напрямую. Ipak; набрано HarfBuzz (hb-view); шрифт — SIL OFL 1.1 · CC BY 4.0 · Ipak*

Исправление — два правила вместо одного. После 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](https://www.unicode.org/charts/PDF/U02B0.pdf)

Unicode: General Punctuation (U+2018, U+2019). [https://www.unicode.org/charts/PDF/U2000.pdf](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](https://learn.microsoft.com/en-us/windows-hardware/manufacture/desktop/windows-language-pack-default-values)

Gʻ — Wikipedia. [https://en.wikipedia.org/wiki/Gʻ](https://en.wikipedia.org/wiki/G%CA%BB)

Uzbek alphabet — Wikipedia. [https://en.wikipedia.org/wiki/Uzbek_alphabet](https://en.wikipedia.org/wiki/Uzbek_alphabet)

OpenType: фича calt (Microsoft Typography). [https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae](https://learn.microsoft.com/en-us/typography/opentype/spec/features_ae)

OpenType: языковые теги (UZB — узбекский). [https://learn.microsoft.com/en-us/typography/opentype/spec/languagetags](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](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](https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/lang)

HarfBuzz — движок раскладки текста. [https://harfbuzz.github.io/](https://harfbuzz.github.io/)

---
Страница: https://ipak.xronocode.com/ru/maqolalar/typed-quotes/ · SIL Open Font License 1.1 · avenex@xronocode.com
