Що таке файл CFF2?
Формат файлу CFF2 є версією 2.0 формату файлу CFF і дозволяє ефективно зберігати контури гліфів і метадані, подібні до формату файлу CFF. CFF2 відрізняється від CFF тим, що він призначений для використання в контексті шрифту OpenType як таблиці «sfnt» з тегом CFF2. Його не можна використовувати як окрему програму та залежить від даних в інших таблицях OpenType.
Формат файлу CFF2
Специфікації формату файлу CFF2 містять відомості про внутрішній макет даних, типи даних, таблиці та іншу внутрішню інформацію про формат файлу. Його можна передати для довідки розробника. Нижче наведено деякі подробиці про це.
Макет даних
Двійкові дані формату файлу CFF2 логічно організовані як кілька окремих структур даних. Розташування двійкових даних показано в наведеній нижче таблиці.
Запис | Коментарі |
---|---|
Заголовок | Фіксоване розташування |
Верхній DICT | Фіксоване розташування |
Глобальний підіндекс | Фіксоване розташування |
Варіант | Зберігати |
FDSelect | Присутній, лише якщо в індексі Font DICT INDEX є більше ніж один шрифт DICT. |
Шрифт DICT INDEX | |
Масив шрифтів DICT | Включено до шрифту DICT INDEX. |
Приватний DICT | Один на шрифт DICT. |
Лише перші три структури базуються на фіксованих місцях. Решта досягаються через зміщення, і їх порядок можна змінити.
Типи даних
Формат файлу CFF2 використовує такі типи даних.
Найменування | Діапазон | Опис |
---|---|---|
uint8 | від 0 до 255 | 8-розрядне число без знака |
uint16 | від 0 до 65535 | 16-розрядне число без знаку |
uint32 | від 0 до 4294967295 | 32-розрядне число без знаку |
Зміщення | змінюється | 1, 2, 3 або 4-байтові зсуви (зазначені полем OffSize у таблиці Index) |
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 | b1 « 8 |
5 | 29 | -(2^31) до +(2^31 - 1) | b1 « 24 | b2 « 16 | b3 « 8 | b4 |
Заголовок
Двійкові дані починаються із заголовка, який має формат, наведений у таблиці нижче.
Тип | Найменування | Опис |
---|---|---|
uint8 | majorVersion | Відформатувати основну версію. Встановити 2. |
uint8 | minorVersion | Відформатувати додаткову версію. Встановити нуль. |
uint8 | headerSize | Розмір заголовка (байти). |
uint16 | topDictLength | Довжина верхньої структури DICT у байтах. |