Prune default-off GSUB/GPOS features
diff --git a/pyotlss.py b/pyotlss.py
index 93dc5c3..5246756 100755
--- a/pyotlss.py
+++ b/pyotlss.py
@@ -359,8 +359,7 @@
 def subset_lookups (self, lookup_indices):
 	"Returns the indices of nonempty features."
 	feature_indices = [i for (i,f) in enumerate (self.FeatureRecord) if f.Feature.subset_lookups (lookup_indices)]
-	self.FeatureRecord = [self.FeatureRecord[i] for i in feature_indices]
-	self.FeatureCount = len (self.FeatureRecord)
+	self.subset_features (feature_indices)
 	return feature_indices
 
 @add_method(fontTools.ttLib.tables.otTables.FeatureList)
@@ -368,6 +367,12 @@
 	return unique_sorted (sum ((self.FeatureRecord[i].Feature.collect_lookups () for i in feature_indices
 				    if i < self.FeatureCount), []))
 
+@add_method(fontTools.ttLib.tables.otTables.FeatureList)
+def subset_features (self, feature_indices):
+	self.FeatureRecord = [self.FeatureRecord[i] for i in feature_indices]
+	self.FeatureCount = len (self.FeatureRecord)
+	return bool (self.FeatureCount)
+
 @add_method(fontTools.ttLib.tables.otTables.DefaultLangSys, fontTools.ttLib.tables.otTables.LangSys)
 def subset_features (self, feature_indices):
 	if self.ReqFeatureIndex in feature_indices:
@@ -378,7 +383,7 @@
 	# Now map them.
 	self.FeatureIndex = [feature_indices.index (f) for f in self.FeatureIndex if f in feature_indices]
 	self.FeatureCount = len (self.FeatureIndex)
-	return self.FeatureCount or self.ReqFeatureIndex != 65535
+	return bool (self.FeatureCount or self.ReqFeatureIndex != 65535)
 
 @add_method(fontTools.ttLib.tables.otTables.DefaultLangSys, fontTools.ttLib.tables.otTables.LangSys)
 def collect_features (self):
@@ -393,7 +398,7 @@
 		self.DefaultLangSys = None
 	self.LangSysRecord = [l for l in self.LangSysRecord if l.LangSys.subset_features (feature_indices)]
 	self.LangSysCount = len (self.LangSysRecord)
-	return self.LangSysCount or self.DefaultLangSys
+	return bool (self.LangSysCount or self.DefaultLangSys)
 
 @add_method(fontTools.ttLib.tables.otTables.Script)
 def collect_features (self):
@@ -406,7 +411,7 @@
 def subset_features (self, feature_indices):
 	self.ScriptRecord = [s for s in self.ScriptRecord if s.Script.subset_features (feature_indices)]
 	self.ScriptCount = len (self.ScriptRecord)
-	return self.ScriptCount
+	return bool (self.ScriptCount)
 
 @add_method(fontTools.ttLib.tables.otTables.ScriptList)
 def collect_features (self):
@@ -434,6 +439,19 @@
 	lookup_indices = self.table.LookupList.closure_lookups (lookup_indices)
 	self.subset_lookups (lookup_indices)
 
+@add_method(fontTools.ttLib.getTableClass('GSUB'), fontTools.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)
+	self.table.ScriptList.subset_features (feature_indices)
+
+@add_method(fontTools.ttLib.getTableClass('GSUB'), fontTools.ttLib.getTableClass('GPOS'))
+def prune (self, options):
+	if 'layout_features' in options:
+		self.subset_feature_tags (options['layout_features'])
+	self.prune_lookups ()
+	return True
+
 @add_method(fontTools.ttLib.getTableClass('GDEF'))
 def subset_glyphs (self, glyphs):
 	table = self.table
@@ -559,6 +577,23 @@
 # For now drop these
 drop_tables += ['cvt ', 'fpgm', 'prep']
 
+# Based on HarfBuzz shapers
+layout_features_dict = {
+	# Default shaper
+	'common':	['ccmp', 'liga', 'locl', 'mark', 'mkmk', 'rlig'],
+	'horizontal':	['calt', 'clig', 'curs', 'kern', 'rclt'],
+	'vertical':	['valt', 'vert', 'vkrn', 'vpal', 'vrt2'],
+	'ltr':		['ltra', 'ltrm'],
+	'rtl':		['rtla', 'rtlm'],
+	# Complex shapers
+	'arabic':	['init', 'medi', 'fina', 'isol', 'med2', 'fin2', 'fin3'],
+	'hangul':	['ljmo', 'vjmo', 'tjmo'],
+	'tibetal':	['abvs', 'blws', 'abvm', 'blwm'],
+	'indic':	['nukt', 'akhn', 'rphf', 'rkrf', 'pref', 'blwf', 'half', 'abvf', 'pstf', 'cfar', 'vatu', 'cjct',
+		         'init', 'pres', 'abvs', 'blws', 'psts', 'haln', 'dist', 'abvm', 'blwm'],
+}
+layout_features_all = unique_sorted (sum (layout_features_dict.values (), []))
+
 
 # TODO OS/2 ulUnicodeRange / ulCodePageRange?
 # TODO Drop unneeded GSUB/GPOS entries
@@ -630,7 +665,9 @@
 		import xmlWriter
 		writer = xmlWriter.XMLWriter (sys.stdout)
 
-	prune_options = []
+	prune_options = {
+		'layout_features': layout_features_all
+	}
 
 	for tag in font.keys():