From d7df42d7ee586219475878d160f85ae5a188bd59 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 26 May 2009 13:04:59 -0400 Subject: [PATCH] [HB] Start MarkFilteringSet support --- src/hb-ot-layout-common-private.h | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/hb-ot-layout-common-private.h b/src/hb-ot-layout-common-private.h index 142a42042..4477ebf21 100644 --- a/src/hb-ot-layout-common-private.h +++ b/src/hb-ot-layout-common-private.h @@ -158,7 +158,8 @@ struct LookupFlag : USHORT IgnoreBaseGlyphs = 0x0002u, IgnoreLigatures = 0x0004u, IgnoreMarks = 0x0008u, - Reserved = 0x00F0u, + UseMarkFilteringSet = 0x0010u, + Reserved = 0x00E0u, MarkAttachmentType = 0xFF00u, }; }; @@ -177,12 +178,25 @@ struct Lookup inline unsigned int get_subtable_count (void) const { return subTable.len; } inline unsigned int get_type (void) const { return lookupType; } - inline unsigned int get_flag (void) const { return lookupFlag; } + inline unsigned int get_flag (void) const + { + unsigned int flag = lookupFlag; + if (HB_UNLIKELY (flag & LookupFlag::UseMarkFilteringSet)) + { + const USHORT &markFilteringSet = *(const USHORT*) + ((const char *) &subTable + subTable.get_size ()); + flag += markFilteringSet << 16; + } + return flag; + } - USHORT lookupType; /* Different enumerations for GSUB and GPOS */ - USHORT lookupFlag; /* Lookup qualifiers */ + USHORT lookupType; /* Different enumerations for GSUB and GPOS */ + USHORT lookupFlag; /* Lookup qualifiers */ OffsetArrayOf - subTable; /* Array of SubTables */ + subTable; /* Array of SubTables */ + USHORT markFilteringSetX[0]; /* Index (base 0) into GDEF mark glyph sets + * structure. This field is only present if bit + * UseMarkFilteringSet of lookup flags is set. */ }; ASSERT_SIZE (Lookup, 6);