fvar_instance_nameids = set(i.subfamilyNameID for i in fvar.instances)
fvar_axis_nameids = set(a.axisNameID for a in fvar.axes)
fvar_nameids = fvar_axis_nameids | fvar_instance_nameids
+ # These NameIDs are required for applications to work correctly so
+ # they cannot be deleted.
+ # https://learn.microsoft.com/en-us/typography/opentype/spec/name
+ keep_nameids = set(range(26)) | fvar_nameids
if "STAT" in ttFont:
stat = ttFont["STAT"]
if stat.table.AxisValueCount > 0:
axis_values = stat.table.AxisValueArray.AxisValue
for ax in axis_values:
- if ax.ValueNameID not in fvar_nameids:
+ if ax.ValueNameID not in keep_nameids:
nametable.removeNames(nameID=ax.ValueNameID)
if stat.table.DesignAxisCount > 0:
axes = stat.table.DesignAxisRecord.Axis
for ax in axes:
- if ax.AxisNameID not in fvar_nameids:
+ if ax.AxisNameID not in keep_nameids:
nametable.removeNames(nameID=ax.AxisNameID)
del ttFont["STAT"]
<AxisValue index="9" Format="1">
<AxisIndex value="2"/>
<Flags value="0"/>
- <ValueNameID value="17"/> <!-- Italic -->
+ <ValueNameID value="2"/> <!-- Italic -->
<Value value="1.0"/>
</AxisValue>
<AxisValue index="10" Format="3">
<Value value="0.0"/>
</AxisValue>
</AxisValueArray>
-<ElidedFallbackNameID value="2"/> <!-- missing from name table -->
\ No newline at end of file
+<ElidedFallbackNameID value="2"/> <!-- Italic -->
\ No newline at end of file
<AxisValue index="3" Format="3">
<AxisIndex value="0"/>
<Flags value="2"/> <!-- ElidableAxisValueName -->
- <ValueNameID value="260"/> <!-- Regular -->
+ <ValueNameID value="2"/> <!-- Regular -->
<Value value="400.0"/>
<LinkedValue value="700.0"/>
</AxisValue>
<LinkedValue value="1.0"/>
</AxisValue>
</AxisValueArray>
-<ElidedFallbackNameID value="2"/> <!-- missing from name table -->
\ No newline at end of file
+<ElidedFallbackNameID value="2"/> <!-- Regular -->
\ No newline at end of file