94 lines
2.5 KiB
C
94 lines
2.5 KiB
C
|
|
|
|
#define tag_cmap 0x70616d63 // 'cmap'
|
|
#define tag_gasp 0x70736167 // 'gasp'
|
|
#define tag_head 0x64616568 // 'head'
|
|
#define tag_hdmx 0x786d6468 // 'hdmx'
|
|
#define tag_hhea 0x61656868 // 'hhea'
|
|
#define tag_hmtx 0x78746d68 // 'hmtx'
|
|
#define tag_kern 0x6e72656b // 'kern'
|
|
#define tag_LTSH 0x4853544c // 'LTSH'
|
|
#define tag_maxp 0x7078616d // 'maxp'
|
|
#define tag_name 0x656d616e // 'name'
|
|
#define tag_OS2 0x322f534f // 'OS/2'
|
|
#define tag_post 0x74736f70 // 'post'
|
|
#define tag_VDMX 0x584d4456 // 'VDMX'
|
|
|
|
|
|
|
|
typedef signed char int8;
|
|
typedef unsigned char uint8;
|
|
typedef short int16;
|
|
typedef unsigned short uint16;
|
|
typedef long int32;
|
|
typedef unsigned long uint32;
|
|
|
|
typedef short FUnit;
|
|
typedef unsigned short uFUnit;
|
|
|
|
typedef long Fixed;
|
|
typedef long Fract;
|
|
|
|
|
|
|
|
#define FS_2BYTE(p) ( ((unsigned short)((p)[0]) << 8) | (p)[1])
|
|
#define FS_4BYTE(p) ( FS_2BYTE((p)+2) | ( (FS_2BYTE(p)+0L) << 16) )
|
|
|
|
#define SWAPW(a) ((int16) FS_2BYTE( (unsigned char *)(&a) ))
|
|
#define SWAPL(a) ((int32) FS_4BYTE( (unsigned char *)(&a) ))
|
|
|
|
|
|
|
|
typedef struct {
|
|
uint32 bc;
|
|
uint32 ad;
|
|
} BigDate;
|
|
|
|
|
|
typedef uint32 sfnt_TableTag;
|
|
|
|
typedef struct {
|
|
sfnt_TableTag tag;
|
|
uint32 checkSum;
|
|
uint32 offset;
|
|
uint32 length;
|
|
} sfnt_DirectoryEntry, *sfnt_DirectoryEntryPtr;
|
|
|
|
typedef struct {
|
|
int32 version; // 0x10000 (1.0)
|
|
uint16 numOffsets; // number of tables
|
|
uint16 searchRange; // (max2 <= numOffsets)*16
|
|
uint16 entrySelector; // log2 (max2 <= numOffsets)
|
|
uint16 rangeShift; // numOffsets*16-searchRange
|
|
sfnt_DirectoryEntry table[1]; // table[numOffsets]
|
|
} sfnt_OffsetTable, *sfnt_OffsetTablePtr;
|
|
|
|
|
|
#define SFNT_MAGIC 0x5F0F3CF5
|
|
|
|
typedef struct {
|
|
Fixed version; // for this table, set to 1.0
|
|
Fixed fontRevision; // For Font Manufacturer
|
|
uint32 checkSumAdjustment;
|
|
uint32 magicNumber; // signature, should always be 0x5F0F3CF5 == MAGIC
|
|
uint16 flags;
|
|
uint16 unitsPerEm; // Specifies how many in Font Units we have per EM
|
|
|
|
BigDate created;
|
|
BigDate modified;
|
|
|
|
FUnit xMin;
|
|
FUnit yMin;
|
|
FUnit xMax;
|
|
FUnit yMax;
|
|
|
|
uint16 macStyle; // macintosh style word
|
|
uint16 lowestRecPPEM; // lowest recommended pixels per Em
|
|
|
|
int16 fontDirectionHint;
|
|
|
|
int16 indexToLocFormat;
|
|
int16 glyphDataFormat;
|
|
} sfnt_FontHeader, *sfnt_FontHeaderPtr;
|
|
|