From 47457b14d638ea133a85a11646e2b2d9bb5e4f0f Mon Sep 17 00:00:00 2001 From: Khaled Hosny Date: Tue, 22 Mar 2022 10:34:18 +0200 Subject: [PATCH] [varLib] Fix instantiating some SinglePos subtables (#2555) --- Lib/fontTools/varLib/merger.py | 2 +- Tests/varLib/instancer/data/SinglePos.ttx | 249 ++++++++++++++++++ .../SinglePos-VF-instance-280,18.ttx | 96 +++++++ Tests/varLib/instancer/instancer_test.py | 17 ++ 4 files changed, 363 insertions(+), 1 deletion(-) create mode 100644 Tests/varLib/instancer/data/SinglePos.ttx create mode 100644 Tests/varLib/instancer/data/test_results/SinglePos-VF-instance-280,18.ttx diff --git a/Lib/fontTools/varLib/merger.py b/Lib/fontTools/varLib/merger.py index ef9860999..5a3a4f343 100644 --- a/Lib/fontTools/varLib/merger.py +++ b/Lib/fontTools/varLib/merger.py @@ -263,7 +263,7 @@ def merge(merger, self, lst): # If all have same coverage table and all are format 1, coverageGlyphs = self.Coverage.glyphs if all(v.Format == 1 for v in lst) and all(coverageGlyphs == v.Coverage.glyphs for v in lst): - self.Value = otBase.ValueRecord(valueFormat) + self.Value = otBase.ValueRecord(valueFormat, self.Value) if valueFormat != 0: merger.mergeThings(self.Value, [v.Value for v in lst]) self.ValueFormat = self.Value.getFormat() diff --git a/Tests/varLib/instancer/data/SinglePos.ttx b/Tests/varLib/instancer/data/SinglePos.ttx new file mode 100644 index 000000000..64ffd9f51 --- /dev/null +++ b/Tests/varLib/instancer/data/SinglePos.ttx @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Optical Size + + + Weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + opsz + 0x0 + 17.0 + 18.0 + 18.0 + 256 + + + wght + 0x0 + 400.0 + 400.0 + 700.0 + 257 + + + + diff --git a/Tests/varLib/instancer/data/test_results/SinglePos-VF-instance-280,18.ttx b/Tests/varLib/instancer/data/test_results/SinglePos-VF-instance-280,18.ttx new file mode 100644 index 000000000..2c284ba0e --- /dev/null +++ b/Tests/varLib/instancer/data/test_results/SinglePos-VF-instance-280,18.ttx @@ -0,0 +1,96 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Optical Size + + + Weight + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Tests/varLib/instancer/instancer_test.py b/Tests/varLib/instancer/instancer_test.py index 37d3da48a..bb2d17585 100644 --- a/Tests/varLib/instancer/instancer_test.py +++ b/Tests/varLib/instancer/instancer_test.py @@ -1476,6 +1476,23 @@ class InstantiateVariableFontTest(object): assert _dump_ttx(instance) == expected + def test_singlepos(self): + varfont = ttLib.TTFont(recalcTimestamp=False) + varfont.importXML(os.path.join(TESTDATA, "SinglePos.ttx")) + + location = {"wght": 280, "opsz": 18} + + instance = instancer.instantiateVariableFont( + varfont, location, + ) + + expected = _get_expected_instance_ttx( + "SinglePos", *location.values() + ) + + assert _dump_ttx(instance) == expected + + def _conditionSetAsDict(conditionSet, axisOrder): result = {}