.OTF вариант №
Файл с расширением .otf относится к формату шрифта OpenType. Формат шрифта OTF является более масштабируемым и расширяет существующие возможности форматов TTF для цифровой типографики. Разработанный Microsoft и Adobe, OTF сочетает в себе функции форматов шрифтов PostScript и TrueType. Это делает формат OTF совместимым с большинством систем письма, поэтому он повсеместно используется на основных компьютерных платформах. Формат шрифта OpenType поддерживается Mac OS X и Windows 2000 и более поздними версиями.
Краткая история
Требование к шрифтам OpenType возникло как требование к более выразительному формату шрифта, который мог бы работать с тонкой типографикой. Кроме того, он был направлен на удовлетворение требований сложного поведения многих мировых систем письма. В начале 1990-х Microsoft попыталась лицензировать передовую типографскую технологию Apple, известную как GX Typography. Это не пошло хорошо, и в результате Microsoft начала совершенствовать свою собственную технологию шрифтов TrueType в 1994 году. Модификации также включали введение более подходящего формата шрифта, который также соответствует функциям форматов шрифтов Adobe Type 1 (PostScript).
Adobe в 1996 году присоединилась к Microsoft в ее усилиях по замене как Apple TrueType, так и собственных форматов шрифтов Type 1. Это привело к объединению обоих базовых форматов шрифтов для преодоления ограничений и добавления новых расширений. Эта новая технология была представлена в том же году под названием OpenType.
Спецификации формата файла OTF
Спецификации OTF общедоступны Microsoft, и на них можно ссылаться с точки зрения разработчика. Как и TTF, он использует ту же структуру контейнера sfnt и совместим со спецификациями TrueType. Данные в файле шрифта OpenType используются для различных целей, таких как расчет макета текста, определение глифов в виде контуров TrueType или Compact Font Format (CFF), предоставление монохроматических или цветных растровых изображений или документов SVG в качестве альтернативных описаний глифов и информации о метаданных.
Типы данных OTF
Файлы OTF используют следующие типы данных, все в формате Big Endian.
Тип данных | Описание |
---|---|
uint8 | 8-битное целое число без знака. |
int8 | 8-битное целое число со знаком. |
uint16 | 16-битное целое число без знака. |
int16 | 16-битное целое число со знаком. |
uint24 | 24-битное целое число без знака. |
uint32 | 32-битное целое число без знака. |
int32 | 32-битное целое число со знаком. |
Фиксированный | 32-битное число с фиксированной точкой со знаком (16.16) |
ПЕРЕСЛОВО | int16, который описывает количество в единицах оформления шрифта. |
UFWORD | uint16, который описывает количество в единицах оформления шрифта. |
F2DOT14 | 16-битное фиксированное число со знаком с младшими 14 битами дроби (2.14). |
ДОЛГОДАТАВРЕМЯ | Дата и время в секундах с полуночи 1 января 1904 года по всемирному координированному времени. Значение представляется как 64-битное целое число со знаком. |
Тег | Массив из четырех uint8 (длина = 32 бита), используемый для идентификации таблицы, оси изменения дизайна, сценария, языковой системы, функции или базовой линии |
Смещение16 | Короткое смещение к таблице, аналогично uint16, NULL offset = 0x0000 |
Смещение32 | Длинное смещение к таблице, то же, что и uint32, NULL offset = 0x00000000 |
Версия16Dot16 | Упакованное 32-битное значение с основными и дополнительными номерами версий. (См. Таблицу номеров версий.) |
Каталог таблиц OTF
Файл OTF начинается с каталога таблицы. Этот каталог является коллекцией таблиц верхнего уровня в файле шрифта. В зависимости от количества шрифтов в файле каталог таблицы может располагаться в другом месте файла. Например, если файл шрифта имеет только один шрифт, каталог таблицы начинается с байта 0 файла. В случае нескольких коллекций шрифтов OpenType, начало каталога таблицы указано в TTCHeader.
Тип | Имя | Описание |
---|---|---|
uint32 | sfntВерсия | 0x00010000 или 0x4F54544F (“ОТТО”) |
uint16 | numTables | Количество таблиц. |
uint16 | searchRange | Максимальная степень числа 2 меньше или равна numTables, умноженная на 16 ((2**floor(log2(numTables))) * 16, где «**» — оператор возведения в степень). |
uint16 | entrySelector Log2 максимальной степени 2 меньше или равно numTables (log2(searchRange/16), что равно floor(log2(numTables))). | |
uint16 | rangeShift | numTables умножить на 16 минус searchRange ((numTables * 16) - searchRange). |
запись таблицы | tableRecords[numTables] | Массив записей таблицы — по одной для каждой таблицы верхнего уровня в шрифте |
Запись таблицы
Для каждой таблицы верхнего уровня в шрифте есть запись таблицы, которая состоит из следующих полей.
Тип | Имя | Описание |
---|---|---|
Тег | ТаблицаТег | Идентификатор таблицы. |
uint32 | контрольная сумма | Контрольная сумма для этой таблицы. |
Смещение32 | смещение | Смещение от начала файла шрифта. |
uint32 | length Длина этой таблицы. |
Каждая таблица в файле шрифтов OpenType представлена именами, известными как табличные теги. Обязательно, чтобы все записи в массиве были отсортированы в порядке возрастания по тегу.