Все статьи
24 сентября 2026 г.9 мин чтения

Вьетнамские знаки тона в шрифте: как проверить двойную диакритику

Вьетнамские знаки тона в шрифте: как проверить двойную диакритику

Вьетнамский набор выявляет проблему, которую легко пропустить при проверке обычных латинских акцентов: над одной гласной могут одновременно стоять знак качества гласной и знак тона. Шрифт должен не только содержать нужные символы, но и корректно размещать оба знака в составном и разложенном тексте. Ниже — практический порядок проверки покрытия, позиционирования и экспорта.

Почему вьетнамская диакритика требует отдельной пробы

Вьетнамское письмо использует латинскую основу с дополнительными знаками, которые меняют форму гласной и обозначают тон. Например, у буквы e может быть циркумфлекс, а над ним — острый знак тона: в слове «ế» видны оба элемента. Похожую задачу создают «ệ» с точкой снизу и «ễ» с тильдой сверху. Это не декоративные варианты: если один элемент пропал или слился с другим, читатель может получить другую букву или неверно прочитать слово. Для европейского языка тест часто ограничивается отдельными парами вроде é, ñ, ü. Такой набор полезен, но не проверяет соединение двух надстрочных знаков. Проверять вьетнамскую поддержку лучше как самостоятельную задачу: убедиться в наличии готовых символов, затем проверить последовательности из базовой буквы и комбинируемых знаков, а после — посмотреть результат в реальной программе. Один и тот же визуальный символ может быть закодирован по-разному. В NFC некоторые сочетания представлены одним предварительно составленным символом; в NFD они представлены основной буквой и одним или несколькими комбинируемыми знаками. Эти формы канонически эквивалентны для Unicode, но шрифт, приложение и механизм формирования строк должны обработать обе. Проверка одного красивого слова в редакторе не гарантирует, что скопированный или полученный из веб-формы текст отобразится так же.

Какие знаки и сочетания включить в тест

Сначала составьте небольшой набор из букв, на которых сходятся типы отметок. Вьетнамские гласные могут иметь собственный дополнительный элемент — например, breve у ă, циркумфлекс у â, ê, ô или «рожок» у ơ и ư — и отдельный знак тона. Проверьте не только строчные, но и прописные варианты: акценты над заглавной буквой располагаются иначе относительно более высокой формы. В тестовую строку полезно включить:

  • сочетания с двумя надстрочными элементами, например ắ, ấ, ế, ố, ớ, ứ;
  • случаи с нижним тоном, например ậ, ệ, ộ, ợ, ự;
  • сочетания с крючком или тильдой, например ẳ, ẫ, ể, ỗ, ỡ, ữ;
  • пары в верхнем регистре: Ắ, Ấ, Ế, Ố, Ớ, Ứ и соответствующие формы с нижним знаком;
  • обычные латинские соседи и пунктуацию, чтобы заметить различие в размере, наклоне и ритме.

Не обязательно превращать статью или образец в полный словарь. Нужен контрольный набор, который покрывает каждую конструкцию и место размещения: только верхний знак, только нижний, два знака сверху, верхний вместе с нижним, строчная и прописная буквы. Слова из настоящего вьетнамского текста помогут дополнительно проверить естественность, но форму каждого примера лучше сверить с носителем языка или редактором.

Покрытие: символы, глифы и комбинируемые знаки

Наличие отдельного глифа для «ế» ещё не доказывает, что работает последовательность e + циркумфлекс + тон. И обратное тоже верно: поддержка базовой буквы и знаков сама по себе не означает, что все предварительно составленные символы доступны в файле. Поэтому проверяйте две вещи: покрытие кодированных символов и позиционирование отдельных комбинируемых глифов. Для карты символов полезно выбрать реальные тестовые слова и посмотреть, как они представлены в Unicode. Подготовьте две версии строки: предварительно составленную и канонически разложенную. Нормализация NFC обычно сводит последовательность к доступному предварительно составленному символу, если он существует; NFD раскладывает его на основу и комбинируемые знаки. Сравните кодовые точки инструментом или скриптом, не полагаясь на вид строки: два визуально одинаковых фрагмента могут содержать разные последовательности. Не следует чинить покрытие заменой на визуально похожую латинскую букву, удалением тонового знака или вставкой частного символа. Такое исправление меняет данные: поиск, копирование, сортировка и ввод текста могут стать непредсказуемыми. Шрифт меняет отображение, но не должен подменять исходные символы. В технической проверке полезно сверяться с первоисточниками. Unicode Core Specification, раздел о латинских буквах с диакритикой описывает составные и комбинируемые формы, а спецификация OpenType GPOS приводит вьетнамскую тоновую диакритику как пример для позиционирования одного знака относительно другого. Эти материалы помогают отделить проблему кодирования от проблемы рисунка и размещения.

Как устроено двойное позиционирование

Если текст пришёл в разложенном виде, формирователю строки нужно разместить базовую гласную, её диакритику и тоновый знак. В OpenType таблица GPOS может задавать привязку комбинируемого знака к букве (MarkToBase), а затем привязку второго знака к первому (MarkToMark). Microsoft прямо описывает MarkToMark на примере позиционирования тоновых знаков относительно знаков гласной во вьетнамском. Это не означает, что достаточно добавить два lookup: метки должны иметь разумные классы и якоря, а тесты должны показывать, что нужные приложения используют таблицы. В редакторе шрифта проверьте, что сами диакритики сделаны как отдельные глифы там, где этого требует ваша схема, и что у них есть подходящие якоря. Для каждой базовой формы расположите точку привязки с учётом ширины гласной и наклона штриха; для знака над буквой задайте исходную точку, которой он соединится с якорем основы. Затем предусмотрите якорь на первом надстрочном знаке, чтобы второй знак мог встать выше без столкновения. Узкая гласная и широкая гласная создают разные условия. Один универсальный якорь может оставить слишком много пустоты над одной буквой и наложить знак на соседний контур у другой. Для рукописного или контрастного шрифта особенно важны оптические поправки: линия может быть наклонной, штрихи — неодинаковой толщины, а крючок или «рожок» — занимать часть привычной зоны для акцента. Сравнивайте не только математические точки, но и визуальный просвет после формирования строки. Не всякий шрифт проектируют со сборкой из отдельных компонентов. Можно предусмотреть готовые контурные формы для наиболее важных сочетаний. Это может улучшить контроль над сложной композицией, но не отменяет проверки разложенных последовательностей: реальные тексты могут поступать в любой канонически эквивалентной форме. Выбирайте архитектуру с учётом инструментария, диапазона символов и возможности сопровождать файл.

Порядок проверки от набора до приложения

  1. **Определите требования.** Уточните, нужен ли полный набор вьетнамского языка, только несколько имён или короткие подписи. Зафиксируйте регистр, начертания и программы, где будет использоваться файл.
  2. **Проверьте таблицу символов.** Сверьте базовые латинские буквы, варианты гласных, предварительно составленные формы с тоном и отдельные комбинируемые знаки. Отсутствующий глиф должен быть виден как отдельный пробел в покрытии, а не скрываться за общим названием «поддержка диакритики».
  3. **Соберите NFC- и NFD-пробы.** Нормализуйте контрольную строку двумя способами. Убедитесь, что результаты одинаково читаемы и что ни один знак не исчезает, не превращается в квадрат и не уходит далеко от основы.
  4. **Настройте якоря.** Сначала проверьте привязку знаков к базовым гласным, затем — связь второго знака с первым. Изучайте глифы вместе с метриками и таблицами подстановки, а не только в изолированном окне редактора.
  5. **Сравните регистры и ширины.** Вставьте строки в прописной и строчный набросок, сравните узкие и широкие буквы, круглые и наклонные формы. Отдельно отметьте случаи с точкой снизу: она должна оставаться различимой и не задевать линию текста.
  6. **Экспортируйте и повторите тест.** Установите или загрузите именно итоговый файл в целевую программу. Просмотрите NFC и NFD в редакторе текста, браузере и приложении, если они входят в задачу. Если результат разный, запишите версию шрифта, приложение, способ ввода строки и конкретный тестовый образец.
  7. **Сохраните регрессионную строку.** После каждой правки прогоняйте тот же набор и сравнивайте рендеринг. Так локальная коррекция якоря для «ế» не останется незамеченной, если она ухудшила «ở» или прописную форму.

Что делать при наложении или потере знака

Если составленный символ отображается, а разложенный нет, проверьте наличие комбинируемых глифов и MarkToBase/MarkToMark позиционирования, затем повторите пробу в другом приложении. Если обе формы дают пропуск, проверьте покрытие экспортного файла и то, не выбирается ли запасной шрифт. Квадрат вместо символа обычно указывает на отсутствие глифа в используемом шрифте или сбой выбора шрифта, а не на плохой якорь. Если два знака есть, но соприкасаются, сначала выясните, какой из них стоит неверно. Посмотрите на NFD-строку посимвольно: отдельный тон должен быть привязан к оптической позиции, а не просто поднят на фиксированную высоту. Попробуйте разные гласные и начертания. Исправление только для одной буквы может потребовать отдельного якоря или контекстной правки; глобальный сдвиг всех акцентов способен испортить обычные знаки. Если визуально идентичные NFC и NFD различаются, не меняйте текстовую последовательность наугад. Сначала сравните коды символов и проверьте, нормализует ли данные приложение до набора. Затем установите, идёт ли проблема от cmap, последовательности GSUB/GPOS, запасающего шрифта или конкретного механизма формирования строки. Это четыре разные точки поиска, и решение в одной из них не всегда исправит остальные.

Чек-лист приёмки

Перед передачей шрифта убедитесь, что:

  • нужные предварительно составленные символы и комбинируемые знаки покрыты;
  • NFC и NFD дают читаемый результат без пропавшей диакритики;
  • отметки не пересекают друг друга, соседние буквы и линию строки;
  • строчные и прописные формы проверены отдельно;
  • узкие, широкие и наклонные гласные не зависят от одной случайной коррекции;
  • повторный экспорт сохраняет таблицы позиционирования;
  • тест выполнен в целевых приложениях на фактическом файле, а ограничения задокументированы.

Частые ошибки

**Проверить только é и считать набор готовым.** Одиночный акцент ничего не говорит о двух знаках над одной гласной. Добавьте тесты на циркумфлекс или другой элемент формы плюс тон. **Проверить только готовые составные символы.** Пользователь может вставить разложенную строку из веб-формы, редактора или базы данных. Обе формы нужно рассматривать как ожидаемый ввод. **Поднять все верхние знаки на одинаковую высоту.** Это часто создаёт пересечения и чрезмерные промежутки. Настройте классы и якоря, затем оценивайте зрительный результат на разных гласных. **Исправить только предпросмотр редактора.** Экспорт, приложение и резервный шрифт могут сформировать строку по-другому. Принимайте шрифт по пробе итогового файла. **Пытаться решить проблемы кодирования рисунком.** Если символ отсутствует или подменён, корректный якорь не поможет. Сначала проверяйте коды и покрытие, затем контуры и позиционирование.

FAQ

Нужен ли отдельный глиф для каждого вьетнамского сочетания?

Не всегда. Части сочетания могут формироваться из базовой буквы и комбинируемых знаков, если все компоненты и правила размещения поддерживаются. Готовые составные глифы тоже могут быть частью дизайна, но их наличие не заменяет проверку разложенного ввода.

Что такое MarkToMark?

Это тип позиционирования OpenType GPOS, который размещает один комбинируемый знак относительно другого. В спецификации Microsoft в качестве примера приведены тоновые знаки вьетнамского относительно знаков формы гласной.

Почему NFC и NFD выглядят одинаково, но дают разные результаты в шрифте?

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

Нужно ли добавлять все вьетнамские символы, если текст короткий?

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

Можно ли обойтись заменой тонового знака на готовую картинку?

Для статичного заголовка картинка иногда служит макетным обходом, но она не поддерживает поиск, копирование, изменение текста и масштабирование как текстовый шрифт. Для рабочего набора решайте проблему в покрытии и формировании строки.

Что проверить, если символ превращается в квадрат?

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

Итог

Вьетнамская диакритика проверяет не количество латинских символов в таблице, а способность шрифта собрать и разместить два знака вокруг одной гласной. Сохраните NFC- и NFD-строки как повторяемую пробу, проверяйте якоря на разных буквах и принимайте только экспортный файл в целевых приложениях. Если создаёте собственный набор букв, начать работу над формами и затем собрать их в цифровой шрифт можно в Fontgenerator.