• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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