instancer: sort axisValues so format 4 are dominant for constructing names
This commit is contained in:
parent
0b639c2979
commit
69c8667982
@ -1366,8 +1366,29 @@ def axisValuesFromAxisLimits(stat, axisLimits):
|
||||
raise ValueError(f"Cannot find AxisValue for {', '.join(missing)}")
|
||||
# filter out Elidable axisValues
|
||||
axisValues = [a for a in axisValues if a.Flags & ELIDABLE_AXIS_VALUE_NAME != 2]
|
||||
# TODO sort and remove duplicates so format 4 axisValues are dominant
|
||||
return axisValues
|
||||
return sortedAxisValues(axisValues)
|
||||
|
||||
|
||||
def sortedAxisValues(axisValues):
|
||||
# Sort and remove duplicates so format 4 axisValues are dominant
|
||||
results, seenAxes = [], set()
|
||||
format4 = sorted(
|
||||
[a for a in axisValues if a.Format == 4],
|
||||
key=lambda k: len(k.AxisValueRecord), reverse=True
|
||||
)
|
||||
nonFormat4 = [a for a in axisValues if a not in format4]
|
||||
|
||||
for axisValue in format4:
|
||||
axes = set([r.AxisIndex for r in axisValue.AxisValueRecord])
|
||||
if seenAxes - axes == seenAxes:
|
||||
seenAxes |= axes
|
||||
results.append((tuple(axes), axisValue))
|
||||
|
||||
for axisValue in nonFormat4:
|
||||
axisIndex = axisValue.AxisIndex
|
||||
if axisIndex not in seenAxes:
|
||||
results.append(((axisIndex,), axisValue))
|
||||
return [v for k, v in sorted(results)]
|
||||
|
||||
|
||||
def updateNameTable(varfont, axisLimits):
|
||||
|
@ -2032,6 +2032,33 @@ def test_updateNameTable_vf_with_italic_attribute(varfont):
|
||||
assert names[(17, 3, 1, 0x409)] == "Black Condensed Italic"
|
||||
|
||||
|
||||
def test_updateNameTable_format4_axisValues(varfont):
|
||||
# format 4 axisValues should dominate the other axisValues
|
||||
stat = varfont["STAT"].table
|
||||
|
||||
axisValue = otTables.AxisValue()
|
||||
axisValue.Format = 4
|
||||
axisValue.Flags = 0
|
||||
varfont["name"].setName("Dominant Value", 297, 3, 1, 0x409)
|
||||
axisValue.ValueNameID = 297
|
||||
axisValue.AxisValueRecord = []
|
||||
for tag, value in (("wght", 900), ("wdth", 79)):
|
||||
rec = otTables.AxisValueRecord()
|
||||
rec.AxisIndex = next(
|
||||
i for i, a in enumerate(stat.DesignAxisRecord.Axis) if a.AxisTag == tag
|
||||
)
|
||||
rec.Value = value
|
||||
axisValue.AxisValueRecord.append(rec)
|
||||
stat.AxisValueArray.AxisValue.append(axisValue)
|
||||
|
||||
instancer.updateNameTable(varfont, {"wdth": 79, "wght": 900})
|
||||
names = _get_name_records(varfont)
|
||||
assert names[(1, 3, 1, 0x409)] == "Test Variable Font Dominant Value"
|
||||
assert names[(2, 3, 1, 0x409)] == "Regular"
|
||||
assert names[(16, 3, 1, 0x409)] == "Test Variable Font"
|
||||
assert names[(17, 3, 1, 0x409)] == "Dominant Value"
|
||||
|
||||
|
||||
def test_sanityCheckVariableTables(varfont):
|
||||
font = ttLib.TTFont()
|
||||
with pytest.raises(ValueError, match="Missing required table fvar"):
|
||||
|
Loading…
x
Reference in New Issue
Block a user