Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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
Esempio n. 4
0
 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