[subset] Fix pruning of empty rulesets in (Chain)ContextFormat1

Similar to 98b60757ab9bb0aaa3c1f136e5a837a1b73d22ed and the
recent commits for Format2.
This commit is contained in:
Behdad Esfahbod 2014-06-05 20:19:38 -04:00
parent a7cd151e14
commit d15afe9231

View File

@ -643,7 +643,8 @@ def subset_glyphs(self, s):
if self.Format == 1: if self.Format == 1:
indices = self.Coverage.subset(s.glyphs) indices = self.Coverage.subset(s.glyphs)
rss = getattr(self, c.RuleSet) 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: for rs in rss:
if not rs: continue if not rs: continue
ss = getattr(rs, c.Rule) ss = getattr(rs, c.Rule)
@ -652,8 +653,10 @@ def subset_glyphs(self, s):
for glist in c.RuleData(r))] for glist in c.RuleData(r))]
setattr(rs, c.Rule, ss) setattr(rs, c.Rule, ss)
setattr(rs, c.RuleCount, len(ss)) setattr(rs, c.RuleCount, len(ss))
# Prune empty subrulesets # Prune empty rulesets
rss = [rs for rs in rss if rs and getattr(rs, c.Rule)] 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.RuleSet, rss)
setattr(self, c.RuleSetCount, len(rss)) setattr(self, c.RuleSetCount, len(rss))
return bool(rss) return bool(rss)
@ -687,7 +690,7 @@ def subset_glyphs(self, s):
c.SetRuleData(r, [[klass_map.index(k) for k in klist] c.SetRuleData(r, [[klass_map.index(k) for k in klist]
for klass_map,klist in zip(klass_maps, c.RuleData(r))]) 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] rss = [rs if rs and getattr(rs, c.Rule) else None for rs in rss]
while rss and rss[-1] is None: while rss and rss[-1] is None:
del rss[-1] del rss[-1]