+/* Kerning ('kern') table */
+typedef struct t_kern_Tag t_kern;
+struct t_kern_Tag {
+ unsigned version;
+ unsigned nTables;
+};
+sfnt_decode t_kern_v0_decode[] = {
+ { d_uint16, offsetof(t_kern, version) },
+ { d_uint16, offsetof(t_kern, nTables) },
+ { d_end }
+};
+typedef struct kern_v0_subhdr_Tag kern_v0_subhdr;
+struct kern_v0_subhdr_Tag {
+ unsigned version;
+ unsigned length;
+ unsigned coverage;
+};
+sfnt_decode kern_v0_subhdr_decode[] = {
+ { d_uint16, offsetof(kern_v0_subhdr, version) },
+ { d_uint16, offsetof(kern_v0_subhdr, length) },
+ { d_uint16, offsetof(kern_v0_subhdr, coverage) },
+ { d_end }
+};
+#define KERN_V0_HORIZ 0x0001
+#define KERN_V0_MINIMUM 0x0002
+#define KERN_V0_CROSSSTREAM 0x0004
+#define KERN_V0_OVERRIDE 0x0008
+#define KERN_V0_FORMAT 0xff00
+#define KERN_V0_FORMAT_0 0x0000
+sfnt_decode t_kern_v1_decode[] = {
+ { d_uint32, offsetof(t_kern, version) },
+ { d_uint32, offsetof(t_kern, nTables) },
+ { d_end }
+};
+typedef struct kern_v1_subhdr_Tag kern_v1_subhdr;
+struct kern_v1_subhdr_Tag {
+ unsigned length;
+ unsigned coverage;
+};
+sfnt_decode kern_v1_subhdr_decode[] = {
+ { d_uint32, offsetof(kern_v1_subhdr, length) },
+ { d_uint16, offsetof(kern_v1_subhdr, coverage) },
+ { d_skip(2) }, /* tupleIndex */
+ { d_end }
+};
+#define KERN_V1_VERTICAL 0x8000
+#define KERN_V1_CROSSSTREAM 0x4000
+#define KERN_V1_VARIATION 0x2000
+#define KERN_V1_FORMAT 0x00ff
+#define KERN_V1_FORMAT_0 0x0000
+typedef struct kern_f0_Tag kern_f0;
+struct kern_f0_Tag {
+ unsigned nPairs;
+};
+sfnt_decode kern_f0_decode[] = {
+ { d_uint16, offsetof(kern_f0, nPairs) },
+ { d_skip(6) }, /* searchRange, entrySelector, rangeShift */
+ { d_end }
+};
+typedef struct kern_f0_pair_Tag kern_f0_pair;
+struct kern_f0_pair_Tag {
+ unsigned left;
+ unsigned right;
+ int value;
+};
+sfnt_decode kern_f0_pair_decode[] = {
+ { d_uint16, offsetof(kern_f0_pair, left) },
+ { d_uint16, offsetof(kern_f0_pair, right) },
+ { d_int16, offsetof(kern_f0_pair, value) },
+ { d_end }
+};
+
+/* Maximum profile ('maxp') table */
+typedef struct t_maxp_Tag t_maxp;
+struct t_maxp_Tag {
+ unsigned version;
+ unsigned numGlyphs;
+};
+sfnt_decode t_maxp_decode[] = {
+ { d_uint32, offsetof(t_maxp, version) },
+ { d_uint16, offsetof(t_maxp, numGlyphs) },
+ { d_end }
+};
+