[varLib.merger] Shuffle _ClassDef_invert for more uses

This commit is contained in:
Behdad Esfahbod 2017-03-16 17:46:28 -07:00
parent 7f83d6d445
commit 92cb5d28d6

View File

@ -297,12 +297,10 @@ def _PairPosFormat1_merge(self, lst, merger):
merger.mergeLists(self.PairSet, padded)
def _ClassDef_invert(self):
if not self or not self.classDefs:
return []
def _ClassDef_invert(self, allGlyphs=None):
classDefs = self.classDefs
m = max(classDefs.values())
classDefs = self.classDefs if self and self.classDefs else {}
m = max(classDefs.values()) if classDefs else 0
ret = []
for _ in range(m + 1):
@ -311,6 +309,14 @@ def _ClassDef_invert(self):
for k,v in classDefs.items():
ret[v].add(k)
# Class-0 is special. It's "everything else".
if allGlyphs is None:
ret[0] = None
else:
ret[0] = set(allGlyphs)
for s in ret[1:]:
ret[0].difference_update(s)
return ret
def _ClassDef_merge_classify(lst, allGlyphs=None):
@ -319,15 +325,9 @@ def _ClassDef_merge_classify(lst, allGlyphs=None):
classifier = classifyTools.Classifier()
for l in lst:
sets = _ClassDef_invert(l)
sets = _ClassDef_invert(l, allGlyphs=allGlyphs)
if allGlyphs is None:
sets = sets[1:]
elif sets:
sets[0] = set(allGlyphs)
for s in sets[1:]:
sets[0].difference_update(s)
else:
sets = [set(allGlyphs)]
classifier.update(sets)
classes = classifier.getClasses()