[merge] Implement GDEF
Only if GSUB/GPOS were so simple too!
diff --git a/Lib/fontTools/merge.py b/Lib/fontTools/merge.py
index 2081467..8a30bbb 100644
--- a/Lib/fontTools/merge.py
+++ b/Lib/fontTools/merge.py
@@ -10,6 +10,7 @@
import fontTools
from fontTools import misc, ttLib, cffLib
+from fontTools.ttLib.tables import otTables
def _add_method(*clazzes):
"""Returns a decorator function that adds a new method to one or
@@ -157,6 +158,67 @@
self.numSubTables = len(self.tables)
return True
+@_add_method(ttLib.getTableClass('GDEF'))
+def merge(self, m):
+ self.table = otTables.GDEF()
+ self.table.Version = 1.0
+
+ if any(t.table.LigCaretList for t in m.tables):
+ glyphs = []
+ ligGlyphs = []
+ for table in m.tables:
+ if table.table.LigCaretList:
+ glyphs.extend(table.table.LigCaretList.Coverage.glyphs)
+ ligGlyphs.extend(table.table.LigCaretList.LigGlyph)
+ coverage = otTables.Coverage()
+ coverage.glyphs = glyphs
+ ligCaretList = otTables.LigCaretList()
+ ligCaretList.Coverage = coverage
+ ligCaretList.LigGlyph = ligGlyphs
+ ligCaretList.GlyphCount = len(ligGlyphs)
+ self.table.LigCaretList = ligCaretList
+ else:
+ self.table.LigCaretList = None
+
+ if any(t.table.MarkAttachClassDef for t in m.tables):
+ classDefs = {}
+ for table in m.tables:
+ if table.table.MarkAttachClassDef:
+ classDefs.update(table.table.MarkAttachClassDef.classDefs)
+ self.table.MarkAttachClassDef = otTables.MarkAttachClassDef()
+ self.table.MarkAttachClassDef.classDefs = classDefs
+ else:
+ self.table.MarkAttachClassDef = None
+
+ if any(t.table.GlyphClassDef for t in m.tables):
+ classDefs = {}
+ for table in m.tables:
+ if table.table.GlyphClassDef:
+ classDefs.update(table.table.GlyphClassDef.classDefs)
+ self.table.GlyphClassDef = otTables.GlyphClassDef()
+ self.table.GlyphClassDef.classDefs = classDefs
+ else:
+ self.table.GlyphClassDef = None
+
+ if any(t.table.AttachList for t in m.tables):
+ glyphs = []
+ attachPoints = []
+ for table in m.tables:
+ if table.table.AttachList:
+ glyphs.extend(table.table.AttachList.Coverage.glyphs)
+ attachPoints.extend(table.table.AttachList.AttachPoint)
+ coverage = otTables.Coverage()
+ coverage.glyphs = glyphs
+ attachList = otTables.AttachList()
+ attachList.Coverage = coverage
+ attachList.AttachPoint = attachPoints
+ attachList.GlyphCount = len(attachPoints)
+ self.table.AttachList = attachList
+ else:
+ self.table.AttachList = None
+
+ return True
+
class Options(object):
@@ -267,7 +329,7 @@
font.setGlyphOrder(glyphOrder)
mega.setGlyphOrder(megaGlyphOrder)
- allTags = set(sum([font.keys() for font in fonts], []))
+ allTags = reduce(set.union, (font.keys() for font in fonts), set())
allTags.remove('GlyphOrder')
for tag in allTags: