From d59291a9c5bbee7a3b681ca8401ad7bb9b601d0b Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Sun, 25 Jun 2023 15:31:08 +0200 Subject: [PATCH 1/3] Update setupAvar to also support avar-2, fixing _add_avar() call site --- Lib/fontTools/fontBuilder.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/Lib/fontTools/fontBuilder.py b/Lib/fontTools/fontBuilder.py index 6a76740fd..ba1c5c4fe 100644 --- a/Lib/fontTools/fontBuilder.py +++ b/Lib/fontTools/fontBuilder.py @@ -707,7 +707,7 @@ class FontBuilder(object): addFvar(self.font, axes, instances) - def setupAvar(self, axes): + def setupAvar(self, axes, mappings=None): """Adds an axis variations table to the font. Args: @@ -715,7 +715,11 @@ class FontBuilder(object): """ from .varLib import _add_avar - _add_avar(self.font, OrderedDict(enumerate(axes))) # Only values are used + if "fvar" not in self.font: + raise KeyError("'fvar' table is missing; can't add FeatureVariations.") + axisTags = [axis.axisTag for axis in self.font["fvar"].axes] + axes = OrderedDict(enumerate(axes)) # Only values are used + _add_avar(self.font, axes, mappings, axisTags) def setupGvar(self, variations): gvar = self.font["gvar"] = newTable("gvar") From b4ce8177ece49cf46eced6f0c7713316ca6eb63d Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Sun, 25 Jun 2023 15:48:16 +0200 Subject: [PATCH 2/3] Fix exception message --- Lib/fontTools/fontBuilder.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Lib/fontTools/fontBuilder.py b/Lib/fontTools/fontBuilder.py index ba1c5c4fe..e97923ecd 100644 --- a/Lib/fontTools/fontBuilder.py +++ b/Lib/fontTools/fontBuilder.py @@ -716,7 +716,8 @@ class FontBuilder(object): from .varLib import _add_avar if "fvar" not in self.font: - raise KeyError("'fvar' table is missing; can't add FeatureVariations.") + raise KeyError("'fvar' table is missing; can't add 'avar'.") + axisTags = [axis.axisTag for axis in self.font["fvar"].axes] axes = OrderedDict(enumerate(axes)) # Only values are used _add_avar(self.font, axes, mappings, axisTags) From a912f7d16f2b79cec42d22ecddce7ac7786ade24 Mon Sep 17 00:00:00 2001 From: Just van Rossum Date: Sun, 25 Jun 2023 16:09:05 +0200 Subject: [PATCH 3/3] Add minimal avar test --- Tests/fontBuilder/data/test_var.otf.ttx | 10 ++++++++++ Tests/fontBuilder/fontBuilder_test.py | 13 ++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/Tests/fontBuilder/data/test_var.otf.ttx b/Tests/fontBuilder/data/test_var.otf.ttx index ff1486821..a94bf12b7 100644 --- a/Tests/fontBuilder/data/test_var.otf.ttx +++ b/Tests/fontBuilder/data/test_var.otf.ttx @@ -273,6 +273,16 @@ + + + + + + + + + + diff --git a/Tests/fontBuilder/fontBuilder_test.py b/Tests/fontBuilder/fontBuilder_test.py index bdb8a3c93..a2e58be8a 100644 --- a/Tests/fontBuilder/fontBuilder_test.py +++ b/Tests/fontBuilder/fontBuilder_test.py @@ -1,5 +1,6 @@ import os import pytest +from fontTools.designspaceLib import AxisDescriptor from fontTools.ttLib import TTFont from fontTools.pens.ttGlyphPen import TTGlyphPen from fontTools.pens.t2CharStringPen import T2CharStringPen @@ -44,14 +45,20 @@ def _setupFontBuilder(isTTF, unitsPerEm=1024): def _setupFontBuilderFvar(fb): assert "name" in fb.font, "Must run setupNameTable() first." - axes = [ - ("TEST", 0, 0, 100, "Test Axis"), - ] + testAxis = AxisDescriptor() + testAxis.name = "Test Axis" + testAxis.tag = "TEST" + testAxis.minimum = 0 + testAxis.default = 0 + testAxis.maximum = 100 + testAxis.map = [(0, 0), (40, 60), (100, 100)] + axes = [testAxis] instances = [ dict(location=dict(TEST=0), stylename="TotallyNormal"), dict(location=dict(TEST=100), stylename="TotallyTested"), ] fb.setupFvar(axes, instances) + fb.setupAvar(axes) return fb