Only include cmap entries for requested unicodes/glyphs
And not the closed ones.
diff --git a/pyotlss.py b/pyotlss.py
index a44ca67..84e9bb0 100755
--- a/pyotlss.py
+++ b/pyotlss.py
@@ -972,7 +972,7 @@
t.uvsDict = {v:[(u,g) for (u,g) in l if g in s.glyphs] for (v,l) in t.uvsDict.items()}
t.uvsDict = {v:l for (v,l) in t.uvsDict.items() if l}
else:
- t.cmap = {u:g for (u,g) in t.cmap.items() if g in s.glyphs}
+ t.cmap = {u:g for (u,g) in t.cmap.items() if g in s.glyphs_requested or u in s.unicodes_requested}
self.tables = [t for t in self.tables if (t.cmap if t.format != 14 else t.uvsDict)]
# XXX Convert formats when needed
return bool (self.tables)
@@ -1018,7 +1018,6 @@
# TODO Text script / language considerations
# TODO Drop unknown tables? Using DefaultTable.prune?
# TODO Drop GPOS Device records if not hinting?
-# TODO subset_unicode values in cmap
class Subsetter:
@@ -1100,21 +1099,21 @@
self.font = font
self.options = options
self.log = log
- self.requested_unicodes = set ()
- self.requested_glyphs = set ()
+ self.unicodes_requested = set ()
+ self.glyphs_requested = set ()
def populate (self, glyphs=[], unicodes=[], text=[]):
- self.requested_unicodes.update (unicodes)
+ self.unicodes_requested.update (unicodes)
for u in text:
- self.requested_unicodes.add (u)
- self.requested_glyphs.update (glyphs)
+ self.unicodes_requested.add (u)
+ self.glyphs_requested.update (glyphs)
def subset (self, font):
font.recalcBBoxes = self.options.recalc_bboxes
- self.unicodes = self.requested_unicodes
- self.glyphs = self.requested_glyphs
+ self.unicodes = self.unicodes_requested
+ self.glyphs = self.glyphs_requested
if 'cmap' in font:
extra_glyphs = font['cmap'].closure_glyphs (self)