def _ClassDef_merge_classify(lst, allGlyphses=None): self = ot.ClassDef() self.classDefs = classDefs = {} allGlyphsesWasNone = allGlyphses is None if allGlyphsesWasNone: allGlyphses = [None] * len(lst) classifier = classifyTools.Classifier() for classDef, allGlyphs in zip(lst, allGlyphses): sets = _ClassDef_invert(classDef, allGlyphs) if allGlyphs is None: sets = sets[1:] classifier.update(sets) classes = classifier.getClasses() if allGlyphsesWasNone: classes.insert(0, set()) for i, classSet in enumerate(classes): if i == 0: continue for g in classSet: classDefs[g] = i return self, classes
def _ClassDef_merge_classify(lst, allGlyphs=None): self = ot.ClassDef() self.classDefs = classDefs = {} classifier = classifyTools.Classifier() for l in lst: sets = _ClassDef_invert(l) if allGlyphs is None: sets = sets[1:] else: sets[0] = set(allGlyphs) for s in sets[1:]: sets[0].difference_update(s) classifier.update(sets) classes = classifier.getClasses() if allGlyphs is None: classes.insert(0, set()) for i, classSet in enumerate(classes): if i == 0: continue for g in classSet: classDefs[g] = i return self, classes
def _Lookup_PairPosFormat2_subtables_recombine(a, b, font): """Combine two subtables that have the same general structure already.""" self = ot.PairPos() self.Format = 2 self.Coverage = ot.Coverage() self.Coverage.Format = 1 glyphs, _ = _merge_GlyphOrders(font, [v.Coverage.glyphs for v in (a, b)]) self.Coverage.glyphs = glyphs self.Class1Count = a.Class1Count + b.Class1Count self.ClassDef1 = ot.ClassDef() classDefs = self.ClassDef1.classDefs = {} offset = a.Class1Count # First subtable overrides any possible shared glyph, so add b first. sets = _ClassDef_invert(b.ClassDef1, allGlyphs=b.Coverage.glyphs) for i, s in enumerate(sets): for g in s: classDefs[g] = i + offset sets = _ClassDef_invert(a.ClassDef1, allGlyphs=a.Coverage.glyphs) assert len(sets) <= offset for i, s in enumerate(sets): for g in s: classDefs[g] = i records = self.Class1Record = [] assert a.Class1Count == len(a.Class1Record) assert b.Class1Count == len(b.Class1Record) records.extend(a.Class1Record) records.extend(b.Class1Record) for name in ('Class2Count', 'ClassDef2', 'ValueFormat1', 'ValueFormat2'): setattr(self, name, getattr(a, name)) return self
def build(self): glyphClasses = {} for classID, glyphs in enumerate(self.classes()): if classID == 0: continue for glyph in glyphs: glyphClasses[glyph] = classID classDef = ot.ClassDef() classDef.classDefs = glyphClasses return classDef