Шрифты в PalmOS
В этой статье я опишу внутреннее устройство
шрифтов используемых в PalmOS. Это описание
построено на результатах полученных опытным
путем и из косвенных источников поэтому не
гарантирует всю полноту информации как и ее
безошибочность. Со временем это описание будет
более детализированно. +-----------------------------------------------------------------+ | Заголовок шрифта (Font Header) - 26 байт. | +-----------------------------------------------------------------+ | Таблица изображений шрифта (BitImage Table). | +-----------------------------------------------------------------+ | Таблица указателей (BitMap Location Table). | +-----------------------------------------------------------------+ | Таблица смещений/ширин символов. (Width/offset table). | +-----------------------------------------------------------------+ . Glyph Width table. . ................................................................... . Image height table. . ................................................................... Заголовок шрифта это таблица размером 26 байт и
ее можно представить в виде струкутры данных
языка Си: --- [begin part of .../m68k-palmos-coff/include/PalmOS3/UI/Font.h: --- typedef struct { SWord fontType; // font type SWord firstChar; // ASCII code of first character SWord lastChar; // ASCII code of last character SWord maxWidth; // maximum character width SWord kernMax; // negative of maximum character kern SWord nDescent; // negative of descent SWord fRectWidth; // width of font rectangle SWord fRectHeight; // height of font rectangle SWord owTLoc; // offset to offset/width table SWord ascent; // ascent SWord descent; // descent SWord leading; // leading SWord rowWords; // row width of bit image / 2 } FontType; --- [end part of .../m68k-palmos-coff/include/PalmOS3/UI/Font.h: ----
Таблица изображений шрифта (BitImage Table).Размер этой таблицы равен BitImageTableSize =
rowWords * fRectHeight. Распределение данных идет с верхней
битовой строки изображения шрифта до нижней
строкой. +--------+-------+------+....... 00000000000000000000000000000000 00111111011111100111111110000000 01000010001000010100000010000000 01000010001111100100000010000000 01111110001000010100000010000000 01000010001000010100000010000000 11100111011111100111111110000000 00000000000000000000000000000000 +--------+-------+------+....... То же самое в шестнадцатеричном представлении: 0000 0000 3F7D EF80 4221 4080 423D 4080 7E21 4080 4221 4080 E77D 4F80 0000 0000 Битовая строка дополнена нулевыми битами до
кратности 16. Таблица указателей (BitMap Location Table).Эта таблица содержит указатели на
изображение каждого символа в BitImageTable. Последнее
значение этой таблицы указывает на бит следующий
за последним битом картинки от default символа. 0000 000A 0012 0020 По этой таблице можно узнать ширину
символа по разнице его смещения и смещения
последующего символа. Таблица смещений/ширин символов. (Width/offset table).В элементах этой таблицы находятся
значения для всех символов шрифта. Эти значения
содержат: в старшем байте смещение прибавляемое
к kernMax и указывющее на керн символа, а в младшем
байте ширину символа. Glyph Width table.- таблица не используется. Image height table.- эта таблица создается менеджером
шрифтов.
Эти программы можно взять с www.pilotgear.com.
FIDO: 2:5065/1, E-mail: sandy@mail.sochi.ru Благодарности: Timothy Lyangouzov - за уточнения в FontHeader'е. -- |
||||||||||||||||||||||||||