Шрифт формата OpenType
Шрифт OpenType в настоящее время является фактическим стандартом и лучшим в своём классе форматом цифровых шрифтов.
Возможности шрифта
Шрифт OpenType позволяет:
- Заменять глифы лигатурами.
- Применять макеты, задавать правила замены и позиционирования глифов.
- Позиционировать положение глифа. Например, задать кернинг между двумя символами.
- Форматировать строку символов и макеты для создания последовательности глифов с их окончательными позициями.
- Создавать файлы функций, записывать правила и сохранять их в файлах. В качестве примера можно привести AFDKO (Adobe Font Development Kit for OpenType) или FEA (feature.fea).
- Поддерживать кроссплатформенность: контуры TrueType и правила PostScript.
Шрифты формата OpenType используют расширение файла .otf (OpenType font).
Назначение шрифта
Программисты используют возможности шрифта OpenType для отражения нюансов контекста или языка программирования. С помощью правил в файле функций возможно модифицировать существующий шрифт.
Вариативность шрифта
Шрифт в формате OpenType вариативный. Он позволяет динамически делать глифы толще или тоньше, сжатыми или растянутыми, вносить осевые изменения.
В отличие от шрифтов в формате TrueType или PostScript пользователь шрифта OpenType может выбрать не только фиксированные начертания, но и выбрать промежуточное между ними.
Коллекция шрифтов
В OpenType каждый шрифт семейства расположен в отдельном файле.
Коллекция шрифтов позволяет пользователю создать удобную структуру семейства шрифтов.
Расширение Файл, содержащий коллекцию шрифтов, имеет расширение .ttc.
Структура шрифта OpenType
С точки зрения приложения Веба, шрифт OpenType — это база данных, содержащая связанный набор таблиц. В таблицах представлены метаданные обо всех шрифтах.
Упрощённая схема структуры шрифта могла бы выглядеть так:
- метаданные;
- контуры;
- метрики;
- типографика (лигатуры, кернинг).
Другими словами, большую часть шрифта в формате OTF занимают сведения о форматировании глифов, их высоте, ширине, боковых отступах, о расположении глифов относительно друг друга, о кернинге, лигатуре … о королях и капусте.
Для того чтобы открыть файл OTF и просмотреть таблицы можно использовать программу fonttools, которая обычно присутствует в дистрибутивах, имеющих библиотеки языка Python.
Обязательные таблицы
Внутри файла OTF сведения о шрифте расположены в формате SFNT (сплайновый шрифт). Для преобразования из двоичного представления в формат XML можно применить команду:
fonttools ttx -l fontName.otfНесомненно, формат XML человеку тоже нелегко читать. Но всё-таки гораздо легче, чем исходный двоичный формат шрифта.
Для примера рассмотрим файл шрифта Nimbus:
fonttools ttx -l NimbusMonoPS-Regular.otf
Listing table info for "NimbusMonoPS-Regular.otf":
tag checksum length offset
---- ---------- -------- --------
CFF 0x4F581E65 69375 188
GSUB 0x0302B2DF 2880 69564
OS/2 0x722FC0F8 96 72444
PCLT 0x571CBF2E 54 72540
cmap 0x19F705D8 2860 72596
head 0x0BF35358 54 75456
hhea 0x057E002C 36 75512
hmtx 0x6E546E0A 1712 75548
maxp 0x03575000 6 77260
name 0x48C9649D 636 77268
post 0xFFC10034 32 77904Все таблицы, кроме первых двух CFF и GSUB, обязательные для каждого шрифта OpenType. Давайте не будем рассматривать таблицу OS/2 для устаревших платформ прошлого века OS/2 и MS Windows. Рассмотрим полезные таблицы.
Назначение обязательных таблиц:
- cmap — сопоставление символов и глифов;
- head — метаданные шрифта;
- hhea — данные для горизонтального набора;
- hmtx — горизонтальные метрики для каждого глифа шрифта;
- maxp — сведения процессору шрифтов о загрузки шрифта;
- name — текстовые описания шрифта;
- post — описание шрифта PostScript.
Таблица GlyphOrder
Создадим TTX файл с XML описанием:
fonttools ttx -l NimbusMonoPS-Regular.otf Заглянем внутрь TTX файла:
<?xml version="1.0" encoding="UTF-8"?>
<ttFont sfntVersion="OTTO" ttLibVersion="4.57">
<GlyphOrder>
<GlyphID id="0" name=".notdef"/>
<GlyphID id="1" name="space"/>
<GlyphID id="2" name="exclam"/>
<GlyphID id="3" name="quotedbl"/>
<GlyphID id="4" name="numbersign"/>
<GlyphID id="5" name="dollar"/>
<GlyphID id="6" name="percent"/>
<GlyphID id="7" name="ampersand"/>В TTX файл добавлена таблица
Таблица head
Таблица head содержит метаданные и общие сведения о шрифте.
Наиболее интересны для проектировщиков и программистов вебсайтов значения от unitsPerEm до macStyle.
Тег unitsPerEm определяет масштабирование шрифта до значения em. Наиболее распространённые значения:
- для шрифтов CFF: upem=1000;
- для шрифтов TrueType внутри OpenType: upem=1024;
- для шрифтов Open Sans: upem=2048.
Теги created и modified это двоичное представление секунд с 1 января 1904 года. Версии Mac использовали это значение в качестве своей эпохи и точки отсчёта. К счастью, TTX преобразовывает выпендрёж от Apple в более удобный для чтения формат времени.
Теги xMin и yMax представляют самую высокую и самую низкую координаты шрифта.
Таблица hhea
Таблица hhea хранит глобальные значения по умолчанию. Эти значения используют при отображении шрифта в горизонтальном наборе. Данная таблица самый неудачный из компромиссов стандарта OpenType, объединившего файлы шрифтов MS Windows и Mac. В те времена, когда шрифты использовали лишь операционные системы MS Windows и Mac, конфликтов не возникало. Шрифты одно ОС не попадали в другую ОС. Но в современном мире ситуация катастрофическая. Шрифты использует огромное количество устройств, текстовых процессоров, браузеров и другого ПО.
Каждое приложение анализирует метрики шрифтов и интерпретирует по-своему.
Основное правило обработки данных заключается в том, что для одной переменной нельзя хранить разные значения в разных местах. В противном случае либо произойдёт нарушение синхронизации, либо значения будут использованы не так как ожидалось.
Следует обратить внимание на случай со шрифтами, отличными от латинских глифов, особенно с кириллическими глифами. Пропорции глифов и междустрочные интервалы не обеспечивают идентичных результатов в различных операционных системах, более того, даже в различных приложениях одной операционной системы. Поэтому, при проектировании интерфейсов необходимо экспериментировать и проверять значения для всех платформ, на котором будет работать приложение.
Значения тегов usWinAscent и usWinDescent обрезают в MS Windows контуры выше 1000 или ниже 200 единиц.
Apple Mac для обрезки использует значение тега lineGap.
Значение тега typo приложения вёрстки используют для позиционирования базовой линии и определения междустрочного интервала по умолчанию.
Единого мнения о «правильном способе» задания значений переменных не существует — у каждого проектировщика своя стратегия. Именно поэтому необходимо уметь корректировать метрики шрифта.
Прагматичен следующий подход:
- Разность значений sTypoAscender и sTypoDescender не должна превышать размерность глифа, т.е. 1000 единиц.
- Для кириллицы значение межстрочного интервала по умолчанию следует присвоить переменной sTypoLinegap.
- Переменной lineGap присвойте значение “0”.
- Следует следить, чтобы браузеры не обрезали шрифт. В кириллическом шрифте следует проверить все высокие глифы, особенно комбинированные «Й», «Ё». Если браузер обрезает глиф, следует уменьшить значения usWinAscent и usWinDescent. Проверьте значение по формуле: sTypoAscender - sTypoDescender + sTypoLinegap
- Значения ascent и descent следует задать такими же, как у переменных usWinAscent и usWinDescent. Учтите, что usWinAscent имеет положительное значение, а descent — отрицательное.
- У функции fsSelection следует включить 7 бит.
Таблица name
Таблица name хранит текстовые данные: названия шрифта, сведения о версии, авторских правах, авторе.
Самое привлекательное свойство OpenType — это возможность локализации записей на нескольких языках.
В таблице присутствуют идентификаторы платформы:
- ID 0 — платформа Юникода;
- ID 1 — платформа Apple Mac;
- ID 2 — платформа ISO 10646;
- ID 3 — платформа MS Windows.
Внимание!
Да-да, никакой ошибки! Платформа Юникода и платформа ISO 10646 определены в таблице как разные платформы. Они технически идентичны, а политически различные.
Для идентификации платформ устоялась некоторая практика:
- Записи имён для платформы ID 1 Apple Mac вводят на латинице. И хотя есть возможность создавать записи на других языках, этого никто не делает.
- Платформы ID 0 Юникода и ID 2 ISO 10646 никто не использует.
- Для платформы ID 3 MS Windows записи на отличных от латиницы языках кодируют в UTF-16BE.
Таблица cmap
Таблица cmap сопоставляет идентификаторы глифов с кодовыми точками Юникода.
Технически шрифт может содержать любые глифы в любой кодировке, расположенные в любом порядке. Можно произвольно смешивать кириллические буквы, специальные знаки и символы других языков.
В файле шрифта OpenType таблица cmap содержит только идентификаторы глифов. И большая польза утилиты fonttool ttx в том, что она:
- сопоставляет символы с идентификаторами глифов;
- заменяет идентификаторы глифов наименованиями, удобными для человека.