Use NameRecordVisitor in subsetter
This commit is contained in:
parent
a792851131
commit
edf8891fba
@ -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:
|
||||||
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user