From 4ebbeb7c50e5c1e934d230ceacf792602c6eb9b9 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sat, 10 Sep 2016 04:52:34 -0700 Subject: [PATCH] [GX] Make FeatureVariations actually work Yay!!!! --- src/hb-ot-layout-common-private.hh | 19 +++++++------------ src/hb-ot-layout-gsubgpos-private.hh | 3 ++- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh index cdf43bf40..971c95a0a 100644 --- a/src/hb-ot-layout-common-private.hh +++ b/src/hb-ot-layout-common-private.hh @@ -1417,17 +1417,12 @@ struct ConditionSet struct FeatureTableSubstitutionRecord { - inline const Feature *find_substitute (unsigned int feature_index) const - { - if (featureIndex == feature_index) - return &(this+feature); - return NULL; - } + friend struct FeatureTableSubstitution; - inline bool sanitize (hb_sanitize_context_t *c) const + inline bool sanitize (hb_sanitize_context_t *c, const void *base) const { TRACE_SANITIZE (this); - return_trace (c->check_struct (this) && feature.sanitize (c, this)); + return_trace (c->check_struct (this) && feature.sanitize (c, base)); } protected: @@ -1444,9 +1439,9 @@ struct FeatureTableSubstitution unsigned int count = substitutions.len; for (unsigned int i = 0; i < count; i++) { - const Feature *feature = (this+substitutions.array[i]).find_substitute (feature_index); - if (feature) - return feature; + const FeatureTableSubstitutionRecord &record = substitutions.array[i]; + if (record.featureIndex == feature_index) + return &(this+record.feature); } return NULL; } @@ -1461,7 +1456,7 @@ struct FeatureTableSubstitution protected: FixedVersion<> version; /* Version--0x00010000u */ - OffsetArrayOf + ArrayOf substitutions; public: DEFINE_SIZE_ARRAY (6, substitutions); diff --git a/src/hb-ot-layout-gsubgpos-private.hh b/src/hb-ot-layout-gsubgpos-private.hh index adea32f23..b90af9ca0 100644 --- a/src/hb-ot-layout-gsubgpos-private.hh +++ b/src/hb-ot-layout-gsubgpos-private.hh @@ -2281,7 +2281,8 @@ struct GSUBGPOS if (FeatureVariations::NOT_FOUND_INDEX != variations_index && version.to_int () >= 0x00010001u) { - const Feature *feature = (this+featureVars).find_substitute (variations_index, feature_index); + const Feature *feature = (this+featureVars).find_substitute (variations_index, + feature_index); if (feature) return *feature; }