[subset] Handle inexistent feature / lookup lists
diff --git a/Lib/fontTools/subset.py b/Lib/fontTools/subset.py
index 21f92a4..0c860b8 100644
--- a/Lib/fontTools/subset.py
+++ b/Lib/fontTools/subset.py
@@ -986,22 +986,29 @@
def closure_glyphs(self, s):
s.table = self.table
feature_indices = self.table.ScriptList.collect_features()
- lookup_indices = self.table.FeatureList.collect_lookups(feature_indices)
- while True:
- orig_glyphs = s.glyphs.copy()
- for i in lookup_indices:
- if i >= self.table.LookupList.LookupCount: continue
- if not self.table.LookupList.Lookup[i]: continue
- self.table.LookupList.Lookup[i].closure_glyphs(s)
- if orig_glyphs == s.glyphs:
- break
+ if self.table.FeatureList:
+ lookup_indices = self.table.FeatureList.collect_lookups(feature_indices)
+ else:
+ lookup_indices = []
+ if self.table.LookupList:
+ while True:
+ orig_glyphs = s.glyphs.copy()
+ for i in lookup_indices:
+ if i >= self.table.LookupList.LookupCount: continue
+ if not self.table.LookupList.Lookup[i]: continue
+ self.table.LookupList.Lookup[i].closure_glyphs(s)
+ if orig_glyphs == s.glyphs:
+ break
del s.table
@_add_method(ttLib.getTableClass('GSUB'),
ttLib.getTableClass('GPOS'))
def subset_glyphs(self, s):
s.glyphs = s.glyphs_gsubed
- lookup_indices = self.table.LookupList.subset_glyphs(s)
+ if self.table.LookupList:
+ lookup_indices = self.table.LookupList.subset_glyphs(s)
+ else:
+ lookup_indices = []
self.subset_lookups(lookup_indices)
self.prune_lookups()
return True
@@ -1011,8 +1018,12 @@
def subset_lookups(self, lookup_indices):
"""Retrains specified lookups, then removes empty features, language
systems, and scripts."""
- self.table.LookupList.subset_lookups(lookup_indices)
- feature_indices = self.table.FeatureList.subset_lookups(lookup_indices)
+ if self.table.LookupList:
+ self.table.LookupList.subset_lookups(lookup_indices)
+ if self.table.FeatureList:
+ feature_indices = self.table.FeatureList.subset_lookups(lookup_indices)
+ else:
+ feature_indices = []
self.table.ScriptList.subset_features(feature_indices)
@_add_method(ttLib.getTableClass('GSUB'),
@@ -1020,17 +1031,26 @@
def prune_lookups(self):
"Remove unreferenced lookups"
feature_indices = self.table.ScriptList.collect_features()
- lookup_indices = self.table.FeatureList.collect_lookups(feature_indices)
- lookup_indices = self.table.LookupList.closure_lookups(lookup_indices)
+ if self.table.FeatureList:
+ lookup_indices = self.table.FeatureList.collect_lookups(feature_indices)
+ else:
+ lookup_indices = []
+ if self.table.LookupList:
+ lookup_indices = self.table.LookupList.closure_lookups(lookup_indices)
+ else:
+ lookup_indices = []
self.subset_lookups(lookup_indices)
@_add_method(ttLib.getTableClass('GSUB'),
ttLib.getTableClass('GPOS'))
def subset_feature_tags(self, feature_tags):
- feature_indices = [i for i,f in
- enumerate(self.table.FeatureList.FeatureRecord)
- if f.FeatureTag in feature_tags]
- self.table.FeatureList.subset_features(feature_indices)
+ if self.table.FeatureList:
+ feature_indices = [i for i,f in
+ enumerate(self.table.FeatureList.FeatureRecord)
+ if f.FeatureTag in feature_tags]
+ self.table.FeatureList.subset_features(feature_indices)
+ else:
+ feature_indices = []
self.table.ScriptList.subset_features(feature_indices)
@_add_method(ttLib.getTableClass('GSUB'),
@@ -1039,13 +1059,15 @@
if '*' not in options.layout_features:
self.subset_feature_tags(options.layout_features)
self.prune_lookups()
- self.table.LookupList.prune_pre_subset(options);
+ if self.table.LookupList:
+ self.table.LookupList.prune_pre_subset(options);
return True
@_add_method(ttLib.getTableClass('GSUB'),
ttLib.getTableClass('GPOS'))
def prune_post_subset(self, options):
- self.table.LookupList.prune_post_subset(options);
+ if self.table.LookupList:
+ self.table.LookupList.prune_post_subset(options);
return True
@_add_method(ttLib.getTableClass('GDEF'))