LookupFlags

This commit is contained in:
Behdad Esfahbod 2006-12-25 09:58:02 -05:00
parent 25ad92c8a6
commit f8ba99f6f3
1 changed files with 47 additions and 5 deletions

View File

@ -241,7 +241,7 @@ struct TTCHeader {
/* OpenTypeFonts, in no particular order */
DEFINE_OFFSET_ARRAY_TYPE (OffsetTable, offsetTable, numFonts);
Tag TTCTag; /* TrueType Collection ID string: 'ttcf' */
Tag ttcTag; /* TrueType Collection ID string: 'ttcf' */
ULONG version; /* Version of the TTC Header (1.0 or 2.0),
* 0x00010000 or 0x00020000 */
ULONG numFonts; /* Number of fonts in TTC */
@ -306,7 +306,13 @@ typedef struct OpenTypeFontFile {
*/
struct Script;
struct ScriptList;
struct LangSys;
struct Feature;
struct FeatureList;
struct Lookup;
struct LookupList;
struct SubTable;
typedef struct Record {
@ -315,8 +321,6 @@ typedef struct Record {
* the Record */
} ScriptRecord, LangSysRecord, FeatureRecord;
struct Script;
struct ScriptList {
DEFINE_NOT_INSTANTIABLE(ScriptList);
/* Scripts, in sorted alphabetical tag order */
@ -376,8 +380,6 @@ struct LangSys {
* arbitrary order. featureCount entires long */
};
struct Feature;
struct FeatureList {
DEFINE_NOT_INSTANTIABLE(FeatureList);
/* Feature indices, in sorted alphabetical tag order */
@ -409,6 +411,46 @@ struct Feature {
* entries long */
};
struct LookupList {
DEFINE_NOT_INSTANTIABLE(LookupList);
/* Lookup indices, in sorted alphabetical tag order */
DEFINE_OFFSET_ARRAY_TYPE (Lookup, lookupOffset, lookupCount);
USHORT lookupCount; /* Number of lookups in this table */
Offset lookupOffset[]; /* Array of offsets to Lookup tables--from
* beginning of LookupList--zero based (first
* lookup is Lookup index = 0). lookupCount
* entries long */
};
struct LookupFlag : USHORT {
static const uint16_t RightToLeft = 0x0001u;
static const uint16_t IgnoreBaseGlyphs = 0x0002u;
static const uint16_t IgnoreLigatures = 0x0004u;
static const uint16_t IgnoreMarks = 0x0008u;
static const uint16_t Reserved = 0x00F0u;
static const uint16_t MarkAttachmentType = 0xFF00u;
};
struct Lookup {
DEFINE_NOT_INSTANTIABLE(Lookup);
/* SubTables, in the desired order */
DEFINE_OFFSET_ARRAY_TYPE (SubTable, subTableOffset, subTableCount);
inline bool is_right_to_left (void) const { return lookupFlag & LookupFlag::RightToLeft; }
inline bool ignore_base_glyphs(void) const { return lookupFlag & LookupFlag::IgnoreBaseGlyphs; }
inline bool ignore_ligatures (void) const { return lookupFlag & LookupFlag::IgnoreLigatures; }
inline bool ignore_marks (void) const { return lookupFlag & LookupFlag::IgnoreMarks; }
inline bool get_mark_attachment_type (void) const { return (lookupFlag & LookupFlag::MarkAttachmentType) >> 8; }
USHORT lookupType; /* Different enumerations for GSUB and GPOS */
USHORT lookupFlag; /* Lookup qualifiers */
USHORT subTableCount; /* Number of SubTables for this lookup */
Offset subTableOffset[];/* Array of offsets to SubTables-from
* beginning of Lookup table. subTableCount
* entries long. */
};