Incremental, getting there
diff --git a/pyotlss.py b/pyotlss.py
index a3ef44a..03e1ee7 100755
--- a/pyotlss.py
+++ b/pyotlss.py
@@ -313,7 +313,7 @@
if Format == 1:
return r.Input
elif Format == 2:
- assert 0
+ return [r.ClassDef]
elif Format == 3:
return r.Coverage
else:
@@ -322,7 +322,7 @@
if Format == 1:
return r.Backtrack + r.Input + r.LookAhead
elif Format == 2:
- assert 0
+ return [r.LookAheadClassDef, r.BacktrackClassDef, r.InputClassDef]
elif Format == 3:
return r.InputCoverage + r.LookAheadCoverage + r.BacktrackCoverage
else:
@@ -342,6 +342,9 @@
self.__class__.__ContextContext = ContextContext (self)
return self.__class__.__ContextContext
+
+
+
@add_method(fontTools.ttLib.tables.otTables.ContextSubst)
def closure_glyphs (self, glyphs, table):
if self.Format == 1:
@@ -373,31 +376,9 @@
else:
assert 0, "unknown format: %s" % self.Format
-@add_method(fontTools.ttLib.tables.otTables.ContextSubst, fontTools.ttLib.tables.otTables.ContextPos)
-def subset_glyphs (self, glyphs):
- c = self.__classify_context ()
- if self.Format == 1:
- # XXX De-"Sub" it
- indices = self.Coverage.subset_glyphs (glyphs)
- self.SubRuleSet = [self.SubRuleSet[i] for i in indices]
- self.SubRuleSetCount = len (self.SubRuleSet)
- for rs in self.SubRuleSet:
- rs.SubRule = [r for r in rs.SubRule
- if all (g in glyphs for g in r.Input)]
- rs.SubRuleCount = len (rs.SubRule)
- # XXX Needs more work
- # TODO Prune empty subrulesets
- return bool (self.SubRuleSetCount)
- elif self.Format == 2:
- # XXX Needs more work
- return bool (self.Coverage.subset_glyphs (glyphs) and self.ClassDef.subset_glyphs (glyphs))
- elif self.Format == 3:
- return all (c.subset_glyphs (glyphs) for c in self.Coverage)
- else:
- assert 0, "unknown format: %s" % self.Format
-
-@add_method(fontTools.ttLib.tables.otTables.ChainContextSubst, fontTools.ttLib.tables.otTables.ChainContextPos)
+@add_method(fontTools.ttLib.tables.otTables.ContextSubst, fontTools.ttLib.tables.otTables.ContextPos,
+ fontTools.ttLib.tables.otTables.ChainContextSubst, fontTools.ttLib.tables.otTables.ChainContextPos)
def subset_glyphs (self, glyphs):
c = self.__classify_context ()
@@ -408,25 +389,25 @@
for rs in rss:
ss = getattr (rs, c.Rule)
ss = [r for r in ss \
- if all (g in glyphs for g in r.Backtrack + r.Input + r.LookAhead)]
+ if all (g in glyphs for g in c.ContextSequence (r, self.Format))]
setattr (rs, c.Rule, ss)
setattr (rs, c.RuleCount, len (ss))
- # XXX Needs more work
- # TODO Prune empty subrulesets
+ # Prune empty subrulesets
+ rss = [rs for rs in rss if getattr (rs, c.Rule)]
setattr (self, c.RuleSet, rss)
setattr (self, c.RuleSetCount, len (rss))
return bool (rss)
elif self.Format == 2:
# XXX Needs more work
+ # TODO Renumber classes?
return self.Coverage.subset_glyphs (glyphs) and \
- self.LookAheadClassDef.subset_glyphs (glyphs) and \
- self.BacktrackClassDef.subset_glyphs (glyphs) and \
- self.InputClassDef.subset_glyphs (glyphs)
+ all (x.subset_glyphs (glyphs) for x in c.ContextSequence (self, self.Format))
elif self.Format == 3:
- return all (c.subset_glyphs (glyphs) for c in self.InputCoverage + self.LookAheadCoverage + self.BacktrackCoverage)
+ return all (x.subset_glyphs (glyphs) for x in c.ContextSequence (self, self.Format))
else:
assert 0, "unknown format: %s" % self.Format
+
@add_method(fontTools.ttLib.tables.otTables.ContextSubst, fontTools.ttLib.tables.otTables.ChainContextSubst,
fontTools.ttLib.tables.otTables.ContextPos, fontTools.ttLib.tables.otTables.ChainContextPos)
def subset_lookups (self, lookup_indices):