Перейти к содержимому

Матрица поддержки шрифтов и письменностей

Поддержка письменностей зависит от двух классов шрифтов. Стандартные 14 шрифтов (Helvetica, Times, Courier) покрывают только репертуар WinAnsiEncoding. Зарегистрированный встроенный шрифт TrueType или OpenType отрисовывает письменность только тогда, когда её покрывают и таблица символов шрифта, и текущий путь формирования. Ни один класс шрифтов не отрисовывает весь Unicode сам по себе.

ПисьменностьСтандартные 14 шрифтовЗарегистрированный встроенный шрифт
Западноевропейская латиницаДа — полный репертуар WinAnsiEncoding (Windows-1252)Да
Латинские диакритики за пределами WinAnsi, греческий, кириллицаНетЕсли их покрывает таблица символов шрифта
Китайский, японский, корейский (CJK)НетЕсли их покрывает таблица символов шрифта
Арабский, персидский, урдуНетС контекстным формированием, если таблица символов покрывает блок Arabic Presentation Forms-B
ИвритНетПереупорядочивается в визуальный порядок; не формируется
Тайский и другие сложные письменностиНетЕсли их покрывает таблица символов; расширенное формирование ограничено

Семейства из набора стандартных 14 шрифтов — Helvetica, Times и Courier — отрисовывают полный репертуар WinAnsiEncoding (кодовая страница Windows 1252): западноевропейскую латиницу с диакритиками, знак евро и распространённую типографскую пунктуацию, включая короткое и длинное тире, фигурные кавычки, маркер списка, многоточие и знак товарного знака (ISO 32000-2 Annex D.2). Никакие другие письменности они не отрисовывают. Для любого символа за пределами этого репертуара регистрируйте встроенный шрифт. Symbol и ZapfDingbats — это два шрифта из стандартных 14, у которых нет метрически совместимой замены; регистрируйте встраиваемый шрифт, если вам нужен один из них.

Рабочий процесс со стандартными шрифтами описан в Размещение текста: шрифты и выравнивание.

Зарегистрированный шрифт TrueType или OpenType отрисовывает Unicode только там, где покрытие обеспечивают и таблица символов выбранного шрифта, и текущий путь формирования. Одна лишь регистрация шрифта не гарантирует глиф для каждой кодовой точки.

  • Покрытие определяется таблицей символов. Движок рисует кодовую точку только если встроенный шрифт сопоставляет ей глиф. Шрифт, созданный для одной письменности, не отрисует другую письменность.
  • Латиница, греческий, кириллица и CJK отрисовываются напрямую из таблицы символов, по одному глифу на кодовую точку, если шрифт их покрывает.
  • Арабский дополнительно требует контекстного формирования начальной, срединной, конечной и изолированной форм букв, а также лигатур Lam-Alef — и шрифта, чья таблица символов покрывает блок Arabic Presentation Forms-B. Шрифты, которые опираются только на подстановку глифов OpenType (GSUB), и путь формирования HarfBuzz остаются будущей работой.
  • Письменности справа налево (арабский, иврит, персидский, урду) переупорядочиваются в визуальный порядок по алгоритму двунаправленного письма Unicode из Unicode Standard Annex (UAX) #9. Иврит переупорядочивается, но не формируется, что для этой письменности корректно.

Разобранный арабский пример и текущие ограничения направления справа налево см. в Рендеринг арабского HTML с направлением справа налево.