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]