[merge] Move layout pre/post-Merge code to merge.layout
This commit is contained in:
parent
01fcec35c6
commit
8dc3d5b322
@ -152,90 +152,10 @@ class Merger(object):
|
|||||||
return returnTable
|
return returnTable
|
||||||
|
|
||||||
def _preMerge(self, font):
|
def _preMerge(self, font):
|
||||||
|
layoutPreMerge(font)
|
||||||
# Map indices to references
|
|
||||||
|
|
||||||
GDEF = font.get('GDEF')
|
|
||||||
GSUB = font.get('GSUB')
|
|
||||||
GPOS = font.get('GPOS')
|
|
||||||
|
|
||||||
for t in [GSUB, GPOS]:
|
|
||||||
if not t: continue
|
|
||||||
|
|
||||||
if t.table.LookupList:
|
|
||||||
lookupMap = {i:v for i,v in enumerate(t.table.LookupList.Lookup)}
|
|
||||||
t.table.LookupList.mapLookups(lookupMap)
|
|
||||||
t.table.FeatureList.mapLookups(lookupMap)
|
|
||||||
|
|
||||||
if GDEF and GDEF.table.Version >= 0x00010002:
|
|
||||||
markFilteringSetMap = {i:v for i,v in enumerate(GDEF.table.MarkGlyphSetsDef.Coverage)}
|
|
||||||
t.table.LookupList.mapMarkFilteringSets(markFilteringSetMap)
|
|
||||||
|
|
||||||
if t.table.FeatureList and t.table.ScriptList:
|
|
||||||
featureMap = {i:v for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
|
|
||||||
t.table.ScriptList.mapFeatures(featureMap)
|
|
||||||
|
|
||||||
# TODO FeatureParams nameIDs
|
|
||||||
|
|
||||||
def _postMerge(self, font):
|
def _postMerge(self, font):
|
||||||
|
layoutPostMerge(font)
|
||||||
# Map references back to indices
|
|
||||||
|
|
||||||
GDEF = font.get('GDEF')
|
|
||||||
GSUB = font.get('GSUB')
|
|
||||||
GPOS = font.get('GPOS')
|
|
||||||
|
|
||||||
for t in [GSUB, GPOS]:
|
|
||||||
if not t: continue
|
|
||||||
|
|
||||||
if t.table.FeatureList and t.table.ScriptList:
|
|
||||||
|
|
||||||
# Collect unregistered (new) features.
|
|
||||||
featureMap = GregariousIdentityDict(t.table.FeatureList.FeatureRecord)
|
|
||||||
t.table.ScriptList.mapFeatures(featureMap)
|
|
||||||
|
|
||||||
# Record used features.
|
|
||||||
featureMap = AttendanceRecordingIdentityDict(t.table.FeatureList.FeatureRecord)
|
|
||||||
t.table.ScriptList.mapFeatures(featureMap)
|
|
||||||
usedIndices = featureMap.s
|
|
||||||
|
|
||||||
# Remove unused features
|
|
||||||
t.table.FeatureList.FeatureRecord = [f for i,f in enumerate(t.table.FeatureList.FeatureRecord) if i in usedIndices]
|
|
||||||
|
|
||||||
# Map back to indices.
|
|
||||||
featureMap = NonhashableDict(t.table.FeatureList.FeatureRecord)
|
|
||||||
t.table.ScriptList.mapFeatures(featureMap)
|
|
||||||
|
|
||||||
t.table.FeatureList.FeatureCount = len(t.table.FeatureList.FeatureRecord)
|
|
||||||
|
|
||||||
if t.table.LookupList:
|
|
||||||
|
|
||||||
# Collect unregistered (new) lookups.
|
|
||||||
lookupMap = GregariousIdentityDict(t.table.LookupList.Lookup)
|
|
||||||
t.table.FeatureList.mapLookups(lookupMap)
|
|
||||||
t.table.LookupList.mapLookups(lookupMap)
|
|
||||||
|
|
||||||
# Record used lookups.
|
|
||||||
lookupMap = AttendanceRecordingIdentityDict(t.table.LookupList.Lookup)
|
|
||||||
t.table.FeatureList.mapLookups(lookupMap)
|
|
||||||
t.table.LookupList.mapLookups(lookupMap)
|
|
||||||
usedIndices = lookupMap.s
|
|
||||||
|
|
||||||
# Remove unused lookups
|
|
||||||
t.table.LookupList.Lookup = [l for i,l in enumerate(t.table.LookupList.Lookup) if i in usedIndices]
|
|
||||||
|
|
||||||
# Map back to indices.
|
|
||||||
lookupMap = NonhashableDict(t.table.LookupList.Lookup)
|
|
||||||
t.table.FeatureList.mapLookups(lookupMap)
|
|
||||||
t.table.LookupList.mapLookups(lookupMap)
|
|
||||||
|
|
||||||
t.table.LookupList.LookupCount = len(t.table.LookupList.Lookup)
|
|
||||||
|
|
||||||
if GDEF and GDEF.table.Version >= 0x00010002:
|
|
||||||
markFilteringSetMap = NonhashableDict(GDEF.table.MarkGlyphSetsDef.Coverage)
|
|
||||||
t.table.LookupList.mapMarkFilteringSets(markFilteringSetMap)
|
|
||||||
|
|
||||||
# TODO FeatureParams nameIDs
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
|
@ -376,3 +376,87 @@ def mapFeatures(self, featureMap):
|
|||||||
for s in self.ScriptRecord:
|
for s in self.ScriptRecord:
|
||||||
if not s or not s.Script: continue
|
if not s or not s.Script: continue
|
||||||
s.Script.mapFeatures(featureMap)
|
s.Script.mapFeatures(featureMap)
|
||||||
|
|
||||||
|
def layoutPreMerge(font):
|
||||||
|
# Map indices to references
|
||||||
|
|
||||||
|
GDEF = font.get('GDEF')
|
||||||
|
GSUB = font.get('GSUB')
|
||||||
|
GPOS = font.get('GPOS')
|
||||||
|
|
||||||
|
for t in [GSUB, GPOS]:
|
||||||
|
if not t: continue
|
||||||
|
|
||||||
|
if t.table.LookupList:
|
||||||
|
lookupMap = {i:v for i,v in enumerate(t.table.LookupList.Lookup)}
|
||||||
|
t.table.LookupList.mapLookups(lookupMap)
|
||||||
|
t.table.FeatureList.mapLookups(lookupMap)
|
||||||
|
|
||||||
|
if GDEF and GDEF.table.Version >= 0x00010002:
|
||||||
|
markFilteringSetMap = {i:v for i,v in enumerate(GDEF.table.MarkGlyphSetsDef.Coverage)}
|
||||||
|
t.table.LookupList.mapMarkFilteringSets(markFilteringSetMap)
|
||||||
|
|
||||||
|
if t.table.FeatureList and t.table.ScriptList:
|
||||||
|
featureMap = {i:v for i,v in enumerate(t.table.FeatureList.FeatureRecord)}
|
||||||
|
t.table.ScriptList.mapFeatures(featureMap)
|
||||||
|
|
||||||
|
# TODO FeatureParams nameIDs
|
||||||
|
|
||||||
|
def layoutPostMerge(font):
|
||||||
|
# Map references back to indices
|
||||||
|
|
||||||
|
GDEF = font.get('GDEF')
|
||||||
|
GSUB = font.get('GSUB')
|
||||||
|
GPOS = font.get('GPOS')
|
||||||
|
|
||||||
|
for t in [GSUB, GPOS]:
|
||||||
|
if not t: continue
|
||||||
|
|
||||||
|
if t.table.FeatureList and t.table.ScriptList:
|
||||||
|
|
||||||
|
# Collect unregistered (new) features.
|
||||||
|
featureMap = GregariousIdentityDict(t.table.FeatureList.FeatureRecord)
|
||||||
|
t.table.ScriptList.mapFeatures(featureMap)
|
||||||
|
|
||||||
|
# Record used features.
|
||||||
|
featureMap = AttendanceRecordingIdentityDict(t.table.FeatureList.FeatureRecord)
|
||||||
|
t.table.ScriptList.mapFeatures(featureMap)
|
||||||
|
usedIndices = featureMap.s
|
||||||
|
|
||||||
|
# Remove unused features
|
||||||
|
t.table.FeatureList.FeatureRecord = [f for i,f in enumerate(t.table.FeatureList.FeatureRecord) if i in usedIndices]
|
||||||
|
|
||||||
|
# Map back to indices.
|
||||||
|
featureMap = NonhashableDict(t.table.FeatureList.FeatureRecord)
|
||||||
|
t.table.ScriptList.mapFeatures(featureMap)
|
||||||
|
|
||||||
|
t.table.FeatureList.FeatureCount = len(t.table.FeatureList.FeatureRecord)
|
||||||
|
|
||||||
|
if t.table.LookupList:
|
||||||
|
|
||||||
|
# Collect unregistered (new) lookups.
|
||||||
|
lookupMap = GregariousIdentityDict(t.table.LookupList.Lookup)
|
||||||
|
t.table.FeatureList.mapLookups(lookupMap)
|
||||||
|
t.table.LookupList.mapLookups(lookupMap)
|
||||||
|
|
||||||
|
# Record used lookups.
|
||||||
|
lookupMap = AttendanceRecordingIdentityDict(t.table.LookupList.Lookup)
|
||||||
|
t.table.FeatureList.mapLookups(lookupMap)
|
||||||
|
t.table.LookupList.mapLookups(lookupMap)
|
||||||
|
usedIndices = lookupMap.s
|
||||||
|
|
||||||
|
# Remove unused lookups
|
||||||
|
t.table.LookupList.Lookup = [l for i,l in enumerate(t.table.LookupList.Lookup) if i in usedIndices]
|
||||||
|
|
||||||
|
# Map back to indices.
|
||||||
|
lookupMap = NonhashableDict(t.table.LookupList.Lookup)
|
||||||
|
t.table.FeatureList.mapLookups(lookupMap)
|
||||||
|
t.table.LookupList.mapLookups(lookupMap)
|
||||||
|
|
||||||
|
t.table.LookupList.LookupCount = len(t.table.LookupList.Lookup)
|
||||||
|
|
||||||
|
if GDEF and GDEF.table.Version >= 0x00010002:
|
||||||
|
markFilteringSetMap = NonhashableDict(GDEF.table.MarkGlyphSetsDef.Coverage)
|
||||||
|
t.table.LookupList.mapMarkFilteringSets(markFilteringSetMap)
|
||||||
|
|
||||||
|
# TODO FeatureParams nameIDs
|
||||||
|
Loading…
x
Reference in New Issue
Block a user