[merge] Define lookup_id() and feature_id()

Prepare to merge ScriptRecords properly
This commit is contained in:
Behdad Esfahbod 2017-09-14 21:27:45 -04:00
parent 84a2de0fe6
commit 9d5a468781

View File

@ -496,6 +496,9 @@ ttLib.getTableClass('MATH').mergeMap = \
'table': mergeObjects,
}
lookup_id = id
feature_id = id
@_add_method(ttLib.getTableClass('GSUB'))
def merge(self, m, tables):
@ -503,8 +506,8 @@ def merge(self, m, tables):
for i,(table,dups) in enumerate(zip(tables, m.duplicateGlyphsPerFont)):
if not dups: continue
assert (table is not None and table is not NotImplemented), "Have duplicates to resolve for font %d but no GSUB" % (i + 1)
lookupMap = {id(v):v for v in table.table.LookupList.Lookup}
featureMap = {id(v):v for v in table.table.FeatureList.FeatureRecord}
lookupMap = {lookup_id(v):v for v in table.table.LookupList.Lookup}
featureMap = {feature_id(v):v for v in table.table.FeatureList.FeatureRecord}
synthFeature = None
synthLookup = None
for script in table.table.ScriptList.ScriptRecord:
@ -523,8 +526,8 @@ def merge(self, m, tables):
f.FeatureParams = None
f.LookupCount = 0
f.LookupListIndex = []
langsys.FeatureIndex.append(id(synthFeature))
featureMap[id(synthFeature)] = synthFeature
langsys.FeatureIndex.append(feature_id(synthFeature))
featureMap[feature_id(synthFeature)] = synthFeature
langsys.FeatureIndex.sort(key=lambda v: featureMap[v].FeatureTag)
table.table.FeatureList.FeatureRecord.append(synthFeature)
table.table.FeatureList.FeatureCount += 1
@ -541,7 +544,7 @@ def merge(self, m, tables):
table.table.LookupList.Lookup.append(synthLookup)
table.table.LookupList.LookupCount += 1
feature.Feature.LookupListIndex[:0] = [id(synthLookup)]
feature.Feature.LookupListIndex[:0] = [lookup_id(synthLookup)]
feature.Feature.LookupCount += 1
DefaultTable.merge(self, m, tables)
@ -871,14 +874,14 @@ class Merger(object):
if not t: continue
if t.table.LookupList:
lookupMap = {i:id(v) for i,v in enumerate(t.table.LookupList.Lookup)}
lookupMap = {i:lookup_id(v) for i,v in enumerate(t.table.LookupList.Lookup)}
t.table.LookupList.mapLookups(lookupMap)
if t.table.FeatureList:
# XXX Handle present FeatureList but absent LookupList
t.table.FeatureList.mapLookups(lookupMap)
if t.table.FeatureList and t.table.ScriptList:
featureMap = {i:id(v) for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
featureMap = {i:feature_id(v) for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
t.table.ScriptList.mapFeatures(featureMap)
# TODO GDEF/Lookup MarkFilteringSets
@ -896,7 +899,7 @@ class Merger(object):
if not t: continue
if t.table.LookupList:
lookupMap = {id(v):i for i,v in enumerate(t.table.LookupList.Lookup)}
lookupMap = {lookup_id(v):i for i,v in enumerate(t.table.LookupList.Lookup)}
t.table.LookupList.mapLookups(lookupMap)
if t.table.FeatureList:
# XXX Handle present FeatureList but absent LookupList
@ -904,7 +907,7 @@ class Merger(object):
if t.table.FeatureList and t.table.ScriptList:
# XXX Handle present ScriptList but absent FeatureList
featureMap = {id(v):i for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
featureMap = {feature_id(v):i for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
t.table.ScriptList.mapFeatures(featureMap)
# TODO GDEF/Lookup MarkFilteringSets