From d15afe9231f36167164172ad9a66ed518694d128 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 5 Jun 2014 20:19:38 -0400 Subject: [PATCH] [subset] Fix pruning of empty rulesets in (Chain)ContextFormat1 Similar to 98b60757ab9bb0aaa3c1f136e5a837a1b73d22ed and the recent commits for Format2. --- Lib/fontTools/subset.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Lib/fontTools/subset.py b/Lib/fontTools/subset.py index 44bc06948..17f0e307f 100644 --- a/Lib/fontTools/subset.py +++ b/Lib/fontTools/subset.py @@ -643,7 +643,8 @@ def subset_glyphs(self, s): if self.Format == 1: indices = self.Coverage.subset(s.glyphs) rss = getattr(self, c.RuleSet) - rss = [rss[i] for i in indices] + rssCount = getattr(self, c.RuleSetCount) + rss = [rss[i] for i in indices if i < rssCount] for rs in rss: if not rs: continue ss = getattr(rs, c.Rule) @@ -652,8 +653,10 @@ def subset_glyphs(self, s): for glist in c.RuleData(r))] setattr(rs, c.Rule, ss) setattr(rs, c.RuleCount, len(ss)) - # Prune empty subrulesets - rss = [rs for rs in rss if rs and getattr(rs, c.Rule)] + # Prune empty rulesets + indices = [i for i,rs in enumerate(rss) if rs and getattr(rs, c.Rule)] + self.Coverage.remap(indices) + rss = [rss[i] for i in indices] setattr(self, c.RuleSet, rss) setattr(self, c.RuleSetCount, len(rss)) return bool(rss) @@ -687,7 +690,7 @@ def subset_glyphs(self, s): c.SetRuleData(r, [[klass_map.index(k) for k in klist] for klass_map,klist in zip(klass_maps, c.RuleData(r))]) - # Prune empty subrulesets + # Prune empty rulesets rss = [rs if rs and getattr(rs, c.Rule) else None for rs in rss] while rss and rss[-1] is None: del rss[-1]