From b371f237604000fac40122dd150245c5487024c0 Mon Sep 17 00:00:00 2001 From: Cosimo Lupo Date: Thu, 14 Nov 2024 12:51:59 +0100 Subject: [PATCH] fontBuilder: don't add mac names for fvar and STAT if name table hasn't any --- Lib/fontTools/fontBuilder.py | 27 +++++++++++++++++--- Tests/fontBuilder/data/test_var.ttf.ttx | 33 ------------------------- Tests/fontBuilder/fontBuilder_test.py | 2 +- 3 files changed, 24 insertions(+), 38 deletions(-) diff --git a/Lib/fontTools/fontBuilder.py b/Lib/fontTools/fontBuilder.py index 16b7ee167..d4af38fba 100644 --- a/Lib/fontTools/fontBuilder.py +++ b/Lib/fontTools/fontBuilder.py @@ -918,7 +918,15 @@ class FontBuilder(object): """ from .otlLib.builder import buildStatTable - buildStatTable(self.font, axes, locations, elidedFallbackName) + assert "name" in self.font, "name must to be set up first" + + buildStatTable( + self.font, + axes, + locations, + elidedFallbackName, + macNames=any(nr.platformID == 1 for nr in self.font["name"].names), + ) def buildCmapSubTable(cmapping, format, platformID, platEncID): @@ -938,6 +946,15 @@ def addFvar(font, axes, instances): fvar = newTable("fvar") nameTable = font["name"] + # if there are not currently any mac names don't add them here, that's inconsistent + # https://github.com/fonttools/fonttools/issues/683 + macNames = any(nr.platformID == 1 for nr in getattr(nameTable, "names", ())) + + # we have all the best ways to express mac names + platforms = ((3, 1, 0x409),) + if macNames: + platforms = ((1, 0, 0),) + platforms + for axis_def in axes: axis = Axis() @@ -963,7 +980,7 @@ def addFvar(font, axes, instances): if isinstance(name, str): name = dict(en=name) - axis.axisNameID = nameTable.addMultilingualName(name, ttFont=font) + axis.axisNameID = nameTable.addMultilingualName(name, ttFont=font, mac=macNames) fvar.axes.append(axis) for instance in instances: @@ -980,9 +997,11 @@ def addFvar(font, axes, instances): name = dict(en=name) inst = NamedInstance() - inst.subfamilyNameID = nameTable.addMultilingualName(name, ttFont=font) + inst.subfamilyNameID = nameTable.addMultilingualName( + name, ttFont=font, mac=macNames + ) if psname is not None: - inst.postscriptNameID = nameTable.addName(psname) + inst.postscriptNameID = nameTable.addName(psname, platforms=platforms) inst.coordinates = coordinates fvar.instances.append(inst) diff --git a/Tests/fontBuilder/data/test_var.ttf.ttx b/Tests/fontBuilder/data/test_var.ttf.ttx index e6d4d8d54..132e80d73 100644 --- a/Tests/fontBuilder/data/test_var.ttf.ttx +++ b/Tests/fontBuilder/data/test_var.ttf.ttx @@ -177,39 +177,6 @@ - - HelloTestFont - - - TotallyNormal - - - HelloTestFont-TotallyNormal - - - Left - - - Right - - - Up - - - Down - - - Right Up - - - Neutral - - - HalloTestFont - - - TotaalNormaal - HelloTestFont diff --git a/Tests/fontBuilder/fontBuilder_test.py b/Tests/fontBuilder/fontBuilder_test.py index 0cbf5d0ce..0138dcd00 100644 --- a/Tests/fontBuilder/fontBuilder_test.py +++ b/Tests/fontBuilder/fontBuilder_test.py @@ -236,7 +236,7 @@ def test_build_var(tmpdir): fb.setupHorizontalMetrics(metrics) fb.setupHorizontalHeader(ascent=824, descent=200) - fb.setupNameTable(nameStrings) + fb.setupNameTable(nameStrings, mac=False) axes = [ ("LEFT", 0, 0, 100, "Left"),