From 1011d7e99672735324c805f9623a418eafc8352a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 14 May 2024 12:37:37 -0600 Subject: [PATCH] [instancer/CFF2] Add another test --- Lib/fontTools/varLib/instancer/__init__.py | 12 +- .../instancer/data/CFF2Instancer-VF-2.ttx | 615 ++++++++++++++++++ .../CFF2Instancer-VF-2-instance-400.ttx | 351 ++++++++++ Tests/varLib/instancer/instancer_test.py | 34 + 4 files changed, 1006 insertions(+), 6 deletions(-) create mode 100644 Tests/varLib/instancer/data/CFF2Instancer-VF-2.ttx create mode 100644 Tests/varLib/instancer/data/test_results/CFF2Instancer-VF-2-instance-400.ttx diff --git a/Lib/fontTools/varLib/instancer/__init__.py b/Lib/fontTools/varLib/instancer/__init__.py index 0bdb494b9..6a79fc9c2 100644 --- a/Lib/fontTools/varLib/instancer/__init__.py +++ b/Lib/fontTools/varLib/instancer/__init__.py @@ -749,6 +749,12 @@ def instantiateCFF2( setattr(private, name, newValues) + # Empty out the VarStore + for i, varData in enumerate(varStore.VarData): + assert varDataCursor[i] == varData.ItemCount, (varDataCursor[i], varData.ItemCount) + varData.Item = [] + varData.ItemCount = 0 + # Remove vsindex commands that are no longer needed, collect those that are. usedVsindex = set() for commands in allCommands: @@ -777,12 +783,6 @@ def instantiateCFF2( for cs, commands in zip(charStrings, allCommands): cs.program = commandsToProgram(commands) - # Empty out the VarStore - for i, varData in enumerate(varStore.VarData): - assert varDataCursor[i] == varData.ItemCount - varData.Item = [] - varData.ItemCount = 0 - # Remove empty VarStore if not varStore.VarData: del topDict.VarStore diff --git a/Tests/varLib/instancer/data/CFF2Instancer-VF-2.ttx b/Tests/varLib/instancer/data/CFF2Instancer-VF-2.ttx new file mode 100644 index 000000000..e26eba29d --- /dev/null +++ b/Tests/varLib/instancer/data/CFF2Instancer-VF-2.ttx @@ -0,0 +1,615 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + License same as MutatorMath. BSD 3-clause. [test-token: C] + + + Regular + + + 1.002;LTTR;MutatorMathTest-LightCondensed + + + MutatorMathTest LightCondensed + + + Version 1.002 + + + MutatorMathTest-LightCondensed + + + Width + + + Weight + + + width + + + weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 blend + hlineto + + + 2 blend + rmoveto + + + 3 blend + hlineto + + + 1 blend + hmoveto + + + 0 100 0 2 blend + rlineto + + + 1 vsindex + 20 30 -30 0 -104 callsubr + 40 7 220 63 -107 callsubr + 140 700 375 -56 -169 -103 callsubr + -35 -7 -195 -43 -107 callsubr + -90 -536 -235 96 79 60 -144 -60 -106 callsubr + 250 36 -250 450 220 -190 -6 174 16 -450 -220 190 -105 callsubr + 257 -200 585 23 -275 -54 -130 44 -106 callsubr + 44 9 296 121 -107 callsubr + -145 700 -375 29 151 -103 callsubr + -39 -9 -281 -121 -107 callsubr + -17 -39 15 -73 5 3 -221 -3 -106 callsubr + 47 39 -47 3 223 147 -3 221 3 -3 -223 -147 -105 callsubr + + + + + + + + + + -102 callsubr + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wdth + 0x0 + 0.0 + 0.0 + 1000.0 + 256 + + + + + wght + 0x0 + 100.0 + 100.0 + 900.0 + 257 + + + + diff --git a/Tests/varLib/instancer/data/test_results/CFF2Instancer-VF-2-instance-400.ttx b/Tests/varLib/instancer/data/test_results/CFF2Instancer-VF-2-instance-400.ttx new file mode 100644 index 000000000..bcee028c0 --- /dev/null +++ b/Tests/varLib/instancer/data/test_results/CFF2Instancer-VF-2-instance-400.ttx @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + License same as MutatorMath. BSD 3-clause. [test-token: C] + + + Regular + + + 1.002;LTTR;MutatorMathTest-LightCondensed + + + MutatorMathTest LightCondensed + + + Version 1.002 + + + MutatorMathTest-LightCondensed + + + Width + + + width + + + weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 vsindex + 9 30 1 blend + hmoveto + 122 31 1 blend + hlineto + 119 738 312 0 2 blend + rlineto + -108 -23 1 blend + hlineto + -54 -590 -205 38 2 blend + rmoveto + 332 101 -332 379 0 -379 3 blend + hlineto + 266 -249 482 -37 2 blend + rmoveto + 155 54 1 blend + hlineto + -134 738 -318 0 2 blend + rlineto + -144 -54 1 blend + hlineto + -44 -122 17 2 2 blend + rmoveto + 131 122 -131 58 -2 -58 3 blend + hlineto + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + wdth + 0x0 + 0.0 + 0.0 + 1000.0 + 256 + + + + diff --git a/Tests/varLib/instancer/instancer_test.py b/Tests/varLib/instancer/instancer_test.py index 190f42ce1..d2b65d768 100644 --- a/Tests/varLib/instancer/instancer_test.py +++ b/Tests/varLib/instancer/instancer_test.py @@ -106,6 +106,40 @@ class InstantiateCFF2Test(object): program = varfont["CFF2"].cff.topDictIndex[0].CharStrings.values()[1].program assert program == expected + def test_full_instance(self, varfont): + varfont = ttLib.TTFont() + varfont.importXML(os.path.join(TESTDATA, "CFF2Instancer-VF-2.ttx")) + s = BytesIO() + varfont.save(s) + s.seek(0) + varfont = ttLib.TTFont(s) + + instance = instancer.instantiateVariableFont(varfont, {"wght": 400}) + s = BytesIO() + instance.save(s) + s.seek(0) + instance = ttLib.TTFont(s) + + s = StringIO() + instance.saveXML(s) + actual = stripVariableItemsFromTTX(s.getvalue()) + + expected = ttLib.TTFont() + expected.importXML( + os.path.join( + TESTDATA, "test_results", "CFF2Instancer-VF-2-instance-400.ttx" + ) + ) + s = BytesIO() + expected.save(s) + s.seek(0) + expected = ttLib.TTFont(s) + s = StringIO() + expected.saveXML(s) + expected = stripVariableItemsFromTTX(s.getvalue()) + + assert actual == expected + class InstantiateGvarTest(object): @pytest.mark.parametrize("glyph_name", ["hyphen"])