diff --git a/src/hb-ot-layout-gsubgpos.hh b/src/hb-ot-layout-gsubgpos.hh index b2d80ab87..4f65c5233 100644 --- a/src/hb-ot-layout-gsubgpos.hh +++ b/src/hb-ot-layout-gsubgpos.hh @@ -4142,8 +4142,11 @@ struct GSUBGPOSVersion1_2 bool subset (hb_subset_layout_context_t *c) const { TRACE_SUBSET (this); - auto *out = c->subset_context->serializer->embed (*this); - if (unlikely (!out)) return_trace (false); + + auto *out = c->subset_context->serializer->start_embed (this); + if (unlikely (!c->subset_context->serializer->extend_min (out))) return_trace (false); + + out->version = version; typedef LookupOffsetList TLookupList; reinterpret_cast &> (out->lookupList) @@ -4166,9 +4169,23 @@ struct GSUBGPOSVersion1_2 #ifndef HB_NO_VAR if (version.to_int () >= 0x00010001u) { - bool ret = out->featureVars.serialize_subset (c->subset_context, featureVars, this, c); + auto snapshot = c->subset_context->serializer->snapshot (); + if (!c->subset_context->serializer->extend_min (&out->featureVars)) + return_trace (false); + + // TODO(qxliu76): the current implementation doesn't correctly handle feature variations + // that are dropped by instancing when the associated conditions don't trigger. + // Since partial instancing isn't yet supported this isn't an issue yet but will + // need to be fixed for partial instancing. + + + + // if all axes are pinned all feature vars are dropped. + bool ret = !c->subset_context->plan->all_axes_pinned + && out->featureVars.serialize_subset (c->subset_context, featureVars, this, c); if (!ret && version.major == 1) { + c->subset_context->serializer->revert (snapshot); out->version.major = 1; out->version.minor = 0; } diff --git a/src/hb-subset-plan.cc b/src/hb-subset-plan.cc index 3b4e33cee..b0a83b365 100644 --- a/src/hb-subset-plan.cc +++ b/src/hb-subset-plan.cc @@ -188,7 +188,17 @@ static void _collect_layout_indices (hb_subset_plan_t *plan, f->add_lookup_indexes_to (lookup_indices); } - table.feature_variation_collect_lookups (feature_indices, feature_substitutes_map, lookup_indices); + // If all axes are pinned then all feature variations will be dropped so there's no need + // to collect lookups from them. + if (!plan->all_axes_pinned) + { + // TODO(qxliu76): this collection doesn't work correctly for feature variations that are dropped + // but not applied. The collection will collect and retain the lookup indices + // associated with those dropped but not activated rules. Since partial instancing + // isn't yet supported this isn't an issue yet but will need to be fixed for + // partial instancing. + table.feature_variation_collect_lookups (feature_indices, feature_substitutes_map, lookup_indices); + } } diff --git a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=100.ttf b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=100.ttf new file mode 100644 index 000000000..2f3e913a5 Binary files /dev/null and b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=100.ttf differ diff --git a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=400.ttf b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=400.ttf new file mode 100644 index 000000000..3dc7fe39e Binary files /dev/null and b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.30DD.wght=400.ttf differ diff --git a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.retain-all-codepoint.wght=400.ttf b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.retain-all-codepoint.wght=400.ttf deleted file mode 100644 index 6a76402e7..000000000 Binary files a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.default.retain-all-codepoint.wght=400.ttf and /dev/null differ diff --git a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.notdef-outline.retain-all-codepoint.wght=400.ttf b/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.notdef-outline.retain-all-codepoint.wght=400.ttf deleted file mode 100644 index 3214a7781..000000000 Binary files a/test/subset/data/expected/instance_feature_variations/MPLUS1-Variable.notdef-outline.retain-all-codepoint.wght=400.ttf and /dev/null differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf index e939b0bcf..428bf0f79 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43,57.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf index 798b8565a..81ff8282c 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42,43.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf index a0d7fee1e..46db5bbb9 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,42.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf index 68654ea0a..f3ae184f2 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41,56,57.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf index 6e0aa21cf..c48482166 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.41.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf index 600edf9ab..0dfcfc499 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test-retain-gids.42,57.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf index 0606b0208..f7b7a363b 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43,57.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf index 76fb186a0..294bfad72 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42,43.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf index 13437bc86..8c2c8da7b 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,42.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf index 64e299ae7..8f454b724 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41,56,57.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf index ada8cb646..bea211759 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.41.otf differ diff --git a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf index e38300e3f..8419d4ecc 100644 Binary files a/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf and b/test/subset/data/expected/layout.gdef-varstore/AdobeVFPrototype.layout-test.42,57.otf differ diff --git a/test/subset/data/expected/variable/Fraunces.default.61.ttf b/test/subset/data/expected/variable/Fraunces.default.61.ttf index bc03e407f..fb6aebda0 100644 Binary files a/test/subset/data/expected/variable/Fraunces.default.61.ttf and b/test/subset/data/expected/variable/Fraunces.default.61.ttf differ diff --git a/test/subset/data/tests/instance_feature_variations.tests b/test/subset/data/tests/instance_feature_variations.tests index 4166b13ca..2a681085b 100644 --- a/test/subset/data/tests/instance_feature_variations.tests +++ b/test/subset/data/tests/instance_feature_variations.tests @@ -3,10 +3,10 @@ MPLUS1-Variable.ttf PROFILES: default.txt -notdef-outline.txt SUBSETS: -* +ポ INSTANCES: +wght=100 wght=400