Merge pull request #2077 from fonttools/feature-variations-none

[instancer] FeatureVariations table is optional in GSUB 1.1 and can be None
This commit is contained in:
Cosimo Lupo 2020-10-05 19:17:43 +01:00 committed by GitHub
commit 558b9cba7c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 3 deletions

View File

@ -683,8 +683,8 @@ def instantiateOTL(varfont, axisLimits):
def instantiateFeatureVariations(varfont, axisLimits): def instantiateFeatureVariations(varfont, axisLimits):
for tableTag in ("GPOS", "GSUB"): for tableTag in ("GPOS", "GSUB"):
if tableTag not in varfont or not hasattr( if tableTag not in varfont or not getattr(
varfont[tableTag].table, "FeatureVariations" varfont[tableTag].table, "FeatureVariations", None
): ):
continue continue
log.info("Instantiating FeatureVariations of %s table", tableTag) log.info("Instantiating FeatureVariations of %s table", tableTag)

View File

@ -257,7 +257,7 @@ def instantiateVariableFont(varfont, location, inplace=False, overlap=True):
if not tableTag in varfont: if not tableTag in varfont:
continue continue
table = varfont[tableTag].table table = varfont[tableTag].table
if not hasattr(table, 'FeatureVariations'): if not getattr(table, 'FeatureVariations', None):
continue continue
variations = table.FeatureVariations variations = table.FeatureVariations
for record in variations.FeatureVariationRecord: for record in variations.FeatureVariationRecord:

View File

@ -1666,6 +1666,19 @@ class InstantiateFeatureVariationsTest(object):
assert len(rec1.ConditionSet.ConditionTable) == 2 assert len(rec1.ConditionSet.ConditionTable) == 2
assert rec1.ConditionSet.ConditionTable[0].Format == 2 assert rec1.ConditionSet.ConditionTable[0].Format == 2
def test_GSUB_FeatureVariations_is_None(self, varfont2):
varfont2["GSUB"].table.Version = 0x00010001
varfont2["GSUB"].table.FeatureVariations = None
tmp = BytesIO()
varfont2.save(tmp)
varfont = ttLib.TTFont(tmp)
# DO NOT raise an exception when the optional 'FeatureVariations' attribute is
# present but is set to None (e.g. with GSUB 1.1); skip and do nothing.
assert varfont["GSUB"].table.FeatureVariations is None
instancer.instantiateFeatureVariations(varfont, {"wght": 400, "wdth": 100})
assert varfont["GSUB"].table.FeatureVariations is None
class LimitTupleVariationAxisRangesTest: class LimitTupleVariationAxisRangesTest:
def check_limit_single_var_axis_range(self, var, axisTag, axisRange, expected): def check_limit_single_var_axis_range(self, var, axisTag, axisRange, expected):