.CFF2 вариант №
Формат файла CFF2 представляет собой версию 2.0 формата файла CFF и позволяет эффективно хранить контуры глифов и метаданные, аналогичные формату файла CFF. CFF2 отличается от CFF тем, что он предназначен для использования в контексте шрифта OpenType в качестве таблицы ‘sfnt’ с тегом CFF2. Его нельзя использовать как отдельную программу, и он зависит от данных в других таблицах OpenType.
Формат файла CFF2
Спецификации формата файлов CFF2 содержат подробные сведения о внутренней структуре данных, типах данных, таблицах и другую внутреннюю информацию о формате файла. Это может быть передано для справки разработчика. Ниже приведены некоторые подробности об этом.
Макет данных
Двоичные данные файлового формата CFF2 логически организованы в виде ряда отдельных структур данных. Расположение двоичных данных показано в следующей таблице.
Запись | Комментарии |
---|---|
Заголовок | Фиксированное местоположение |
Верхний DICT | Фиксированное местоположение |
Global Subr INDEX | Фиксированное местоположение |
Вариация | Магазин |
FDSelect | Присутствует, только если в ИНДЕКСЕ DICT шрифтов имеется более одного DICT шрифта. |
Шрифт DICT INDEX | |
Массив шрифтов DICT | Включено в Font DICT INDEX. |
Частный DICT | Один на каждый шрифт DICT. |
Только первые три структуры основаны на фиксированных местоположениях. Остальные достигаются через смещения, и их порядок можно изменить.
Типы данных
Формат файла CFF2 использует следующие типы данных.
Имя | Диапазон | Описание |
---|---|---|
uint8 | от 0 до 255 | 8-битное число без знака |
uint16 | от 0 до 65535 | 16-битное число без знака |
uint32 | от 0 до 4294967295 | 32-битное число без знака |
Смещение | варьируется | Смещение 1, 2, 3 или 4 байта (указывается полем OffSize в таблице индексов) |
OffSize | от 1 до 4 | 1-байтовое число без знака указывает размер поля или полей смещения |
Он хранит все многобайтовые числовые данные и поля смещения в порядке байтов с обратным порядком байтов. Формат CFF2 свободен от байтов заполнения, поскольку он не соблюдает никаких ограничений выравнивания.
Данные DICT
Файлы CFF2 содержат данные словаря шрифтов в виде пар ключ-значение в компактном токенизированном формате. Ключи словаря кодируются как 1- или 2-байтовые операторы, а значения словаря кодируются как числовые операнды переменного размера. Есть три структуры, которые используют формат данных DICT: Top DICT, Font DICT и Private DICT. Определен ряд типов целочисленных операндов различных размеров, которые кодируются, как показано в следующей таблице (первый байт операнда — b0, второй — b1 и т. д.).
Размер | Диапазон b0 | Диапазон значений | Вычисление значения |
---|---|---|---|
1 | от 32 до 246 | от -107 до +107 | b0 - 139 |
2 | от 247 до 250 | от +108 до +1131 | (b0 - 247) * 256 + b1 + 108 |
2 | от 251 до 254 | от -1131 до -108 | -(b0 - 251) * 256 - b1 - 108 |
3 | 28 | от -32768 до +32767 | б1 « 8 |
5 | 29 | -(2^31) до +(2^31 - 1) | b1 « 24 | b2 « 16 | b3 « 8 | b4 |
Заголовок
Двоичные данные начинаются с заголовка, имеющего формат, показанный в таблице ниже.
Тип | Имя | Описание |
---|---|---|
uint8 | основная версия | Формат основной версии. Установите на 2. |
uint8 | младшая версия | Формат минорной версии. Установить на ноль. |
uint8 | размер заголовка | Размер заголовка (байты). |
uint16 | длина верхнего слова | Длина структуры Top DICT в байтах. |