fontBuilder: don't add mac names for fvar and STAT if name table hasn't any

This commit is contained in:
Cosimo Lupo 2024-11-14 12:51:59 +01:00
parent d2ce6e075c
commit b371f23760
3 changed files with 24 additions and 38 deletions

View File

@ -918,7 +918,15 @@ class FontBuilder(object):
""" """
from .otlLib.builder import buildStatTable 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): def buildCmapSubTable(cmapping, format, platformID, platEncID):
@ -938,6 +946,15 @@ def addFvar(font, axes, instances):
fvar = newTable("fvar") fvar = newTable("fvar")
nameTable = font["name"] 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: for axis_def in axes:
axis = Axis() axis = Axis()
@ -963,7 +980,7 @@ def addFvar(font, axes, instances):
if isinstance(name, str): if isinstance(name, str):
name = dict(en=name) name = dict(en=name)
axis.axisNameID = nameTable.addMultilingualName(name, ttFont=font) axis.axisNameID = nameTable.addMultilingualName(name, ttFont=font, mac=macNames)
fvar.axes.append(axis) fvar.axes.append(axis)
for instance in instances: for instance in instances:
@ -980,9 +997,11 @@ def addFvar(font, axes, instances):
name = dict(en=name) name = dict(en=name)
inst = NamedInstance() inst = NamedInstance()
inst.subfamilyNameID = nameTable.addMultilingualName(name, ttFont=font) inst.subfamilyNameID = nameTable.addMultilingualName(
name, ttFont=font, mac=macNames
)
if psname is not None: if psname is not None:
inst.postscriptNameID = nameTable.addName(psname) inst.postscriptNameID = nameTable.addName(psname, platforms=platforms)
inst.coordinates = coordinates inst.coordinates = coordinates
fvar.instances.append(inst) fvar.instances.append(inst)

View File

@ -177,39 +177,6 @@
</glyf> </glyf>
<name> <name>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x0" unicode="True">
TotallyNormal
</namerecord>
<namerecord nameID="6" platformID="1" platEncID="0" langID="0x0" unicode="True">
HelloTestFont-TotallyNormal
</namerecord>
<namerecord nameID="256" platformID="1" platEncID="0" langID="0x0" unicode="True">
Left
</namerecord>
<namerecord nameID="257" platformID="1" platEncID="0" langID="0x0" unicode="True">
Right
</namerecord>
<namerecord nameID="258" platformID="1" platEncID="0" langID="0x0" unicode="True">
Up
</namerecord>
<namerecord nameID="259" platformID="1" platEncID="0" langID="0x0" unicode="True">
Down
</namerecord>
<namerecord nameID="260" platformID="1" platEncID="0" langID="0x0" unicode="True">
Right Up
</namerecord>
<namerecord nameID="261" platformID="1" platEncID="0" langID="0x0" unicode="True">
Neutral
</namerecord>
<namerecord nameID="1" platformID="1" platEncID="0" langID="0x4" unicode="True">
HalloTestFont
</namerecord>
<namerecord nameID="2" platformID="1" platEncID="0" langID="0x4" unicode="True">
TotaalNormaal
</namerecord>
<namerecord nameID="1" platformID="3" platEncID="1" langID="0x409"> <namerecord nameID="1" platformID="3" platEncID="1" langID="0x409">
HelloTestFont HelloTestFont
</namerecord> </namerecord>

View File

@ -236,7 +236,7 @@ def test_build_var(tmpdir):
fb.setupHorizontalMetrics(metrics) fb.setupHorizontalMetrics(metrics)
fb.setupHorizontalHeader(ascent=824, descent=200) fb.setupHorizontalHeader(ascent=824, descent=200)
fb.setupNameTable(nameStrings) fb.setupNameTable(nameStrings, mac=False)
axes = [ axes = [
("LEFT", 0, 0, 100, "Left"), ("LEFT", 0, 0, 100, "Left"),