1 #ifndef _SFNT_H 2 #define _SFNT_H 3 4 #include <stdio.h> 5 6 typedef struct { 7 unsigned int tag; 8 unsigned int checkSum; 9 unsigned int offset; 10 unsigned int length; 11 } OTF_DIRENT; 12 13 typedef struct { 14 FILE *f; 15 unsigned int numTTC,useTTC; 16 unsigned int version; 17 18 unsigned short numTables; 19 OTF_DIRENT *tables; 20 21 int flags; 22 unsigned short unitsPerEm; 23 unsigned short indexToLocFormat; // 0=short, 1=long 24 unsigned short numGlyphs; 25 26 // optionally loaded data 27 unsigned int *glyphOffsets; 28 unsigned short numberOfHMetrics; 29 char *hmtx,*name,*cmap; 30 const char *unimap; // ptr to (3,1) or (3,0) cmap start 31 32 // single glyf buffer, allocated large enough by otf_load_more() 33 char *gly; 34 OTF_DIRENT *glyfTable; 35 36 } OTF_FILE; 37 #define OTF_F_FMT_CFF 0x10000 38 #define OTF_F_DO_CHECKSUM 0x40000 39 40 // to load TTC collections: append e.g. "/3" for the third font in the file. 41 OTF_FILE *otf_load(const char *file); 42 void otf_close(OTF_FILE *otf); 43 44 #define OTF_TAG(a,b,c,d) (unsigned int)( ((a)<<24)|((b)<<16)|((c)<<8)|(d) ) 45 #define OTF_UNTAG(a) (((unsigned int)(a)>>24)&0xff),(((unsigned int)(a)>>16)&0xff),\ 46 (((unsigned int)(a)>>8)&0xff),(((unsigned int)(a))&0xff) 47 48 char *otf_get_table(OTF_FILE *otf,unsigned int tag,int *ret_len); 49 50 int otf_get_width(OTF_FILE *otf,unsigned short gid); 51 const char *otf_get_name(OTF_FILE *otf,int platformID,int encodingID,int languageID,int nameID,int *ret_len); 52 int otf_get_glyph(OTF_FILE *otf,unsigned short gid); 53 unsigned short otf_from_unicode(OTF_FILE *otf,int unicode); 54 55 #include "bitset.h" 56 #include "iofn.h" 57 58 // TODO?! allow glyphs==NULL for non-subsetting table reduction? 59 int otf_subset(OTF_FILE *otf,BITSET glyphs,OUTPUT_FN output,void *context); 60 int otf_ttc_extract(OTF_FILE *otf,OUTPUT_FN output,void *context); 61 int otf_subset_cff(OTF_FILE *otf,BITSET glyphs,OUTPUT_FN output,void *context); 62 int otf_cff_extract(OTF_FILE *otf,OUTPUT_FN output,void *context); 63 64 #endif 65