summaryrefslogtreecommitdiff
path: root/fontembed/sfnt.h
diff options
context:
space:
mode:
Diffstat (limited to 'fontembed/sfnt.h')
-rw-r--r--fontembed/sfnt.h64
1 files changed, 64 insertions, 0 deletions
diff --git a/fontembed/sfnt.h b/fontembed/sfnt.h
new file mode 100644
index 000000000..1783098d2
--- /dev/null
+++ b/fontembed/sfnt.h
@@ -0,0 +1,64 @@
+#ifndef _SFNT_H
+#define _SFNT_H
+
+#include <stdio.h>
+
+typedef struct {
+ unsigned int tag;
+ unsigned int checkSum;
+ unsigned int offset;
+ unsigned int length;
+} OTF_DIRENT;
+
+typedef struct {
+ FILE *f;
+ unsigned int numTTC,useTTC;
+ unsigned int version;
+
+ unsigned short numTables;
+ OTF_DIRENT *tables;
+
+ int flags;
+ unsigned short unitsPerEm;
+ unsigned short indexToLocFormat; // 0=short, 1=long
+ unsigned short numGlyphs;
+
+ // optionally loaded data
+ unsigned int *glyphOffsets;
+ unsigned short numberOfHMetrics;
+ char *hmtx,*name,*cmap;
+ const char *unimap; // ptr to (3,1) or (3,0) cmap start
+
+ // single glyf buffer, allocated large enough by otf_load_more()
+ char *gly;
+ OTF_DIRENT *glyfTable;
+
+} OTF_FILE;
+#define OTF_F_FMT_CFF 0x10000
+#define OTF_F_DO_CHECKSUM 0x40000
+
+// to load TTC collections: append e.g. "/3" for the third font in the file.
+OTF_FILE *otf_load(const char *file);
+void otf_close(OTF_FILE *otf);
+
+#define OTF_TAG(a,b,c,d) (unsigned int)( ((a)<<24)|((b)<<16)|((c)<<8)|(d) )
+#define OTF_UNTAG(a) (((unsigned int)(a)>>24)&0xff),(((unsigned int)(a)>>16)&0xff),\
+ (((unsigned int)(a)>>8)&0xff),(((unsigned int)(a))&0xff)
+
+char *otf_get_table(OTF_FILE *otf,unsigned int tag,int *ret_len);
+
+int otf_get_width(OTF_FILE *otf,unsigned short gid);
+const char *otf_get_name(OTF_FILE *otf,int platformID,int encodingID,int languageID,int nameID,int *ret_len);
+int otf_get_glyph(OTF_FILE *otf,unsigned short gid);
+unsigned short otf_from_unicode(OTF_FILE *otf,int unicode);
+
+#include "bitset.h"
+#include "iofn.h"
+
+// TODO?! allow glyphs==NULL for non-subsetting table reduction?
+int otf_subset(OTF_FILE *otf,BITSET glyphs,OUTPUT_FN output,void *context);
+int otf_ttc_extract(OTF_FILE *otf,OUTPUT_FN output,void *context);
+int otf_subset_cff(OTF_FILE *otf,BITSET glyphs,OUTPUT_FN output,void *context);
+int otf_cff_extract(OTF_FILE *otf,OUTPUT_FN output,void *context);
+
+#endif