diff --git a/src/hb-ot-layout-gsub-private.h b/src/hb-ot-layout-gsub-private.h index 87221057dd55d1202c38aecc76450a551ee2f241..d09fd766fa527a174488f03325eee3c116fb55eb 100644 --- a/src/hb-ot-layout-gsub-private.h +++ b/src/hb-ot-layout-gsub-private.h @@ -29,6 +29,16 @@ #include "hb-ot-layout-gsubgpos-private.h" +/* XXX */ +#include "harfbuzz-impl.h" +HB_INTERNAL HB_Error +_hb_buffer_add_output_glyph_ids( HB_Buffer buffer, + HB_UShort num_in, + HB_UShort num_out, + const GlyphID *glyph_data, + HB_UShort component, + HB_UShort ligID ); + struct SingleSubstFormat1 { friend struct SingleSubst; @@ -47,7 +57,7 @@ struct SingleSubstFormat1 { } private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ OffsetTo coverage; /* Offset to Coverage table--from * beginning of Substitution table */ @@ -74,7 +84,7 @@ struct SingleSubstFormat2 { } private: - USHORT substFormat; /* Format identifier--format = 2 */ + USHORT format; /* Format identifier--format = 2 */ OffsetTo coverage; /* Offset to Coverage table--from * beginning of Substitution table */ @@ -180,7 +190,7 @@ struct MultipleSubstFormat1 { } private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ OffsetTo coverage; /* Offset to Coverage table--from * beginning of Substitution table */ @@ -258,7 +268,7 @@ struct AlternateSubstFormat1 { } private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ OffsetTo coverage; /* Offset to Coverage table--from * beginning of Substitution table */ @@ -415,7 +425,7 @@ struct LigatureSubstFormat1 { } private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ OffsetTo coverage; /* Offset to Coverage table--from * beginning of Substitution table */ @@ -504,7 +514,7 @@ struct ChainContextSubstFormat1 { } private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ Offset coverage; /* Offset to Coverage table--from * beginning of Substitution table */ USHORT chainSubRuleSetCount; /* Number of ChainSubRuleSet @@ -564,7 +574,7 @@ struct ChainContextSubstFormat2 { } private: - USHORT substFormat; /* Format identifier--format = 2 */ + USHORT format; /* Format identifier--format = 2 */ Offset coverage; /* Offset to Coverage table--from * beginning of Substitution table */ Offset backtrackClassDef; /* Offset to glyph ClassDef table @@ -594,7 +604,7 @@ struct ChainContextSubstFormat3 { } private: - USHORT substFormat; /* Format identifier--format = 3 */ + USHORT format; /* Format identifier--format = 3 */ USHORT backtrackGlyphCount; /* Number of glyphs in the backtracking * sequence */ Offset backtrackCoverage[]; /* Array of offsets to coverage tables @@ -651,7 +661,7 @@ struct ExtensionSubstFormat1 { inline bool substitute (LOOKUP_ARGS_DEF) const; private: - USHORT substFormat; /* Format identifier. Set to 1. */ + USHORT format; /* Format identifier. Set to 1. */ USHORT extensionLookupType; /* Lookup type of subtable referenced * by ExtensionOffset (i.e. the * extension subtable). */ @@ -697,7 +707,7 @@ struct ReverseChainSingleSubstFormat1 { /* TODO */ private: - USHORT substFormat; /* Format identifier--format = 1 */ + USHORT format; /* Format identifier--format = 1 */ Offset coverage; /* Offset to Coverage table -- from * beginning of Substitution table */ USHORT backtrackGlyphCount; /* Number of glyphs in the backtracking @@ -740,17 +750,17 @@ struct SubstLookupSubTable { unsigned int lookup_type) const { switch (lookup_type) { - case GSUB_Single: return u.single.substitute (LOOKUP_ARGS); - case GSUB_Multiple: return u.multiple.substitute (LOOKUP_ARGS); - case GSUB_Alternate: return u.alternate.substitute (LOOKUP_ARGS); - case GSUB_Ligature: return u.ligature.substitute (LOOKUP_ARGS); - case GSUB_Context: return u.context.substitute (LOOKUP_ARGS); + case GSUB_Single: return u.single->substitute (LOOKUP_ARGS); + case GSUB_Multiple: return u.multiple->substitute (LOOKUP_ARGS); + case GSUB_Alternate: return u.alternate->substitute (LOOKUP_ARGS); + case GSUB_Ligature: return u.ligature->substitute (LOOKUP_ARGS); + case GSUB_Context: return u.context->substitute (LOOKUP_ARGS); /* - case GSUB_ChainingContext: return u.chainingContext.substitute (LOOKUP_ARGS); + case GSUB_ChainingContext: return u.chainingContext->substitute (LOOKUP_ARGS); */ - case GSUB_Extension: return u.extension.substitute (LOOKUP_ARGS); + case GSUB_Extension: return u.extension->substitute (LOOKUP_ARGS); /* - case GSUB_ReverseChainingContextSingle: return u.reverseChainingContextSingle.substitute (LOOKUP_ARGS); + case GSUB_ReverseChainingContextSingle: return u.reverseChainingContextSingle->substitute (LOOKUP_ARGS); */ default:return false; } @@ -758,21 +768,22 @@ struct SubstLookupSubTable { private: union { - USHORT substFormat; - SingleSubst single; - MultipleSubst multiple; - AlternateSubst alternate; - LigatureSubst ligature; - ContextSubst context; + USHORT format; + SingleSubst single[]; + MultipleSubst multiple[]; + AlternateSubst alternate[]; + LigatureSubst ligature[]; + ContextSubst context[]; /* - ChainingContextSubst chainingContext; + ChainingContextSubst chainingContext[]; */ - ExtensionSubst extension; + ExtensionSubst extension[]; /* - ReverseChainingContextSingleSubst reverseChainingContextSingle; + ReverseChainingContextSingleSubst reverseChainingContextSingle[]; */ } u; }; +ASSERT_SIZE (SubstLookupSubTable, 2); struct SubstLookup : Lookup { @@ -790,7 +801,7 @@ struct SubstLookup : Lookup { /* Return lookup type of first extension subtable. * The spec says all of them should have the same type. * XXX check for that somehow */ - type = get_subtable(0).u.extension.get_type (); + type = get_subtable(0).u.extension->get_type (); } return type; @@ -875,6 +886,7 @@ struct SubstLookup : Lookup { return ret; } }; +ASSERT_SIZE (SubstLookup, 6); /* @@ -899,8 +911,7 @@ struct GSUB : GSUBGPOS { } }; - - +ASSERT_SIZE (GSUB, 10); /* Out-of-class implementation for methods chaining */ diff --git a/src/hb-ot-layout-gsubgpos-private.h b/src/hb-ot-layout-gsubgpos-private.h index 43f81c97ae91416090da6d64d69851a22717a20c..374148480ed6a942bc8ae9e53ac9f20ca7fd81ce 100644 --- a/src/hb-ot-layout-gsubgpos-private.h +++ b/src/hb-ot-layout-gsubgpos-private.h @@ -332,5 +332,35 @@ struct Context { }; ASSERT_SIZE (Context, 2); +/* + * GSUB/GPOS Common + */ + +struct GSUBGPOS { + static const hb_tag_t GSUBTag = HB_TAG ('G','S','U','B'); + static const hb_tag_t GPOSTag = HB_TAG ('G','P','O','S'); + + STATIC_DEFINE_GET_FOR_DATA (GSUBGPOS); + /* XXX check version here? */ + + DEFINE_TAG_LIST_INTERFACE (Script, script ); /* get_script_count (), get_script (i), get_script_tag (i) */ + DEFINE_TAG_LIST_INTERFACE (Feature, feature); /* get_feature_count(), get_feature(i), get_feature_tag(i) */ + DEFINE_LIST_INTERFACE (Lookup, lookup ); /* get_lookup_count (), get_lookup (i) */ + + // LONGTERMTODO bsearch + DEFINE_TAG_FIND_INTERFACE (Script, script ); /* find_script_index (), get_script_by_tag (tag) */ + DEFINE_TAG_FIND_INTERFACE (Feature, feature); /* find_feature_index(), get_feature_by_tag(tag) */ + + private: + Fixed_Version version; /* Version of the GSUB/GPOS table--initially set + * to 0x00010000 */ + OffsetTo + scriptList; /* ScriptList table */ + OffsetTo + featureList; /* FeatureList table */ + OffsetTo + lookupList; /* LookupList table */ +}; +ASSERT_SIZE (GSUBGPOS, 10); #endif /* HB_OT_LAYOUT_GSUBGPOS_PRIVATE_H */ diff --git a/src/hb-ot-layout-open-private.h b/src/hb-ot-layout-open-private.h index 1876057789ac082f7fb1be005b53957f93f4c13b..9d1274e3ba87cd068ef5402ccf3abb2a3531ce8f 100644 --- a/src/hb-ot-layout-open-private.h +++ b/src/hb-ot-layout-open-private.h @@ -908,45 +908,4 @@ struct Device { }; ASSERT_SIZE (Device, 6); -/* - * GSUB/GPOS Common - */ - -struct GSUBGPOS { - static const hb_tag_t GSUBTag = HB_TAG ('G','S','U','B'); - static const hb_tag_t GPOSTag = HB_TAG ('G','P','O','S'); - - STATIC_DEFINE_GET_FOR_DATA (GSUBGPOS); - /* XXX check version here? */ - - DEFINE_TAG_LIST_INTERFACE (Script, script ); /* get_script_count (), get_script (i), get_script_tag (i) */ - DEFINE_TAG_LIST_INTERFACE (Feature, feature); /* get_feature_count(), get_feature(i), get_feature_tag(i) */ - DEFINE_LIST_INTERFACE (Lookup, lookup ); /* get_lookup_count (), get_lookup (i) */ - - // LONGTERMTODO bsearch - DEFINE_TAG_FIND_INTERFACE (Script, script ); /* find_script_index (), get_script_by_tag (tag) */ - DEFINE_TAG_FIND_INTERFACE (Feature, feature); /* find_feature_index(), get_feature_by_tag(tag) */ - - private: - Fixed_Version version; /* Version of the GSUB/GPOS table--initially set - * to 0x00010000 */ - OffsetTo - scriptList; /* ScriptList table */ - OffsetTo - featureList; /* FeatureList table */ - OffsetTo - lookupList; /* LookupList table */ -}; -ASSERT_SIZE (GSUBGPOS, 10); - -/* XXX */ -#include "harfbuzz-impl.h" -HB_INTERNAL HB_Error -_hb_buffer_add_output_glyph_ids( HB_Buffer buffer, - HB_UShort num_in, - HB_UShort num_out, - const GlyphID *glyph_data, - HB_UShort component, - HB_UShort ligID ); - #endif /* HB_OT_LAYOUT_OPEN_PRIVATE_H */