[subset] Fix pruning of empty rulesets in (Chain)ContextFormat1
Similar to 98b60757ab9bb0aaa3c1f136e5a837a1b73d22ed and the recent commits for Format2.
This commit is contained in:
parent
a7cd151e14
commit
d15afe9231
@ -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]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user