def makeGDEF(self): gdef = otTables.GDEF() gdef.Version = 1.0 gdef.GlyphClassDef = otTables.GlyphClassDef() inferredGlyphClass = {} for lookup in self.lookups_: inferredGlyphClass.update(lookup.inferGlyphClasses()) marks = {} # glyph --> markClass for markClass in self.parseTree.markClasses.values(): for markClassDef in markClass.definitions: for glyph in markClassDef.glyphSet(): other = marks.get(glyph) if other not in (None, markClass): name1, name2 = sorted([markClass.name, other.name]) raise FeatureLibError( 'Glyph %s cannot be both in ' 'markClass @%s and @%s' % (glyph, name1, name2), markClassDef.location) marks[glyph] = markClass inferredGlyphClass[glyph] = 3 gdef.GlyphClassDef.classDefs = inferredGlyphClass gdef.AttachList = None gdef.LigCaretList = None markAttachClass = {g: c for g, (c, _) in self.markAttach_.items()} if markAttachClass: gdef.MarkAttachClassDef = otTables.MarkAttachClassDef() gdef.MarkAttachClassDef.classDefs = markAttachClass else: gdef.MarkAttachClassDef = None if self.markFilterSets_: gdef.Version = 0x00010002 m = gdef.MarkGlyphSetsDef = otTables.MarkGlyphSetsDef() m.MarkSetTableFormat = 1 m.MarkSetCount = len(self.markFilterSets_) m.Coverage = [] filterSets = [(id, glyphs) for (glyphs, id) in self.markFilterSets_.items()] for i, glyphs in sorted(filterSets): coverage = otTables.Coverage() coverage.glyphs = sorted(glyphs, key=self.font.getGlyphID) m.Coverage.append(coverage) if (len(gdef.GlyphClassDef.classDefs) == 0 and gdef.MarkAttachClassDef is None): return None result = getTableClass("GDEF")() result.table = gdef return result
def buildGDEFGlyphClassDef_(self): inferredGlyphClass = {} for lookup in self.lookups_: inferredGlyphClass.update(lookup.inferGlyphClasses()) for markClass in self.parseTree.markClasses.values(): for markClassDef in markClass.definitions: for glyph in markClassDef.glyphSet(): inferredGlyphClass[glyph] = 3 if self.glyphClassDefs_: classes = {g: c for (g, (c, _)) in self.glyphClassDefs_.items()} else: classes = inferredGlyphClass if classes: result = otTables.GlyphClassDef() result.classDefs = classes return result else: return None
def add_gdef_table(font, class_defs): font["GDEF"] = gdef = newTable("GDEF") class_def_table = otTables.GlyphClassDef() class_def_table.classDefs = class_defs gdef.table = otTables.GDEF() gdef.table.GlyphClassDef = class_def_table