Use NameRecordVisitor in subsetter

This commit is contained in:
Marc Foley 2023-06-27 15:23:56 +01:00
parent a792851131
commit edf8891fba
2 changed files with 8 additions and 28 deletions

View File

@ -15,6 +15,7 @@ from fontTools.subset.util import _add_method, _uniq_sort
from fontTools.subset.cff import * from fontTools.subset.cff import *
from fontTools.subset.svg import * from fontTools.subset.svg import *
from fontTools.varLib import varStore # for subset_varidxes from fontTools.varLib import varStore # for subset_varidxes
from fontTools.ttLib.tables._n_a_m_e import NameRecordVisitor
import sys import sys
import struct import struct
import array import array
@ -2916,31 +2917,9 @@ def prune_pre_subset(self, font, options):
@_add_method(ttLib.getTableClass("name")) @_add_method(ttLib.getTableClass("name"))
def prune_pre_subset(self, font, options): def prune_pre_subset(self, font, options):
nameIDs = set(options.name_IDs) visitor = NameRecordVisitor()
fvar = font.get("fvar") visitor.visit(font)
if fvar: nameIDs = set(options.name_IDs) | visitor.seen
nameIDs.update([axis.axisNameID for axis in fvar.axes])
nameIDs.update([inst.subfamilyNameID for inst in fvar.instances])
nameIDs.update(
[
inst.postscriptNameID
for inst in fvar.instances
if inst.postscriptNameID != 0xFFFF
]
)
stat = font.get("STAT")
if stat:
if stat.table.AxisValueArray:
nameIDs.update(
[val_rec.ValueNameID for val_rec in stat.table.AxisValueArray.AxisValue]
)
nameIDs.update(
[axis_rec.AxisNameID for axis_rec in stat.table.DesignAxisRecord.Axis]
)
cpal = font.get("CPAL")
if cpal and cpal.version == 1:
nameIDs.update(cpal.paletteLabels)
nameIDs.update(cpal.paletteEntryLabels)
if "*" not in options.name_IDs: if "*" not in options.name_IDs:
self.names = [n for n in self.names if n.nameID in nameIDs] self.names = [n for n in self.names if n.nameID in nameIDs]
if not options.name_legacy: if not options.name_legacy:

View File

@ -1198,6 +1198,7 @@ def visit(visitor, obj, attr, value):
@NameRecordVisitor.register(ttLib.getTableClass("fvar")) @NameRecordVisitor.register(ttLib.getTableClass("fvar"))
def visit(visitor, obj): def visit(visitor, obj):
for inst in obj.instances: for inst in obj.instances:
if inst.postscriptNameID != 0xFFFF:
visitor.seen.add(inst.postscriptNameID) visitor.seen.add(inst.postscriptNameID)
visitor.seen.add(inst.subfamilyNameID) visitor.seen.add(inst.subfamilyNameID)
@ -1207,6 +1208,6 @@ def visit(visitor, obj):
@NameRecordVisitor.register(ttLib.getTableClass("CPAL")) @NameRecordVisitor.register(ttLib.getTableClass("CPAL"))
def visit(visitor, obj): def visit(visitor, obj):
for nameID in obj.paletteLabels: for nameID in obj.paletteLabels + obj.paletteEntryLabels:
if nameID != C_P_A_L_.table_C_P_A_L_.NO_NAME_ID: if obj.version == 1:
visitor.seen.add(nameID) visitor.seen.add(nameID)