From 616d36e5cf63d4e3e0542016cef1b33599adec78 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 13 Aug 2013 20:02:59 -0400 Subject: [PATCH] More whitespace --- pyotlss.py | 284 +++++++++++++++++++++++++++-------------------------- 1 file changed, 143 insertions(+), 141 deletions(-) diff --git a/pyotlss.py b/pyotlss.py index 62283de0b..910ad5679 100755 --- a/pyotlss.py +++ b/pyotlss.py @@ -1,8 +1,5 @@ #!/usr/bin/python -# -# Python OpenType Layout Subsetter -# Later grown into a full OpenType subsetter... -# + # Copyright 2013 Google, Inc. All Rights Reserved. # # Licensed under the Apache License, Version 2.0(the "License"); @@ -18,7 +15,12 @@ # limitations under the License. # # Google Author(s): Behdad Esfahbod -# + +"""Python OpenType Layout Subsetter. + +Later grown into full OpenType subsetter, supporting all standard tables. +""" + # Try running on PyPy try: @@ -30,9 +32,9 @@ import fontTools.ttx import struct -def add_method(*clazzes): - """A decorator-returning function to add a new method to one or - more classes.""" +def __add_method(*clazzes): + """Returns a decorator function that adds a new method to one or + more classes.""" def wrapper(method): for clazz in clazzes: assert clazz.__name__ != 'DefaultTable', 'Oops, table class not found.' @@ -44,36 +46,36 @@ def unique_sorted(l): return sorted(set(l)) -@add_method(fontTools.ttLib.tables.otTables.Coverage) +@__add_method(fontTools.ttLib.tables.otTables.Coverage) def intersect(self, glyphs): "Returns ascending list of matching coverage values." return [i for(i,g) in enumerate(self.glyphs) if g in glyphs] -@add_method(fontTools.ttLib.tables.otTables.Coverage) +@__add_method(fontTools.ttLib.tables.otTables.Coverage) def intersect_glyphs(self, glyphs): "Returns set of intersecting glyphs." return set(g for g in self.glyphs if g in glyphs) -@add_method(fontTools.ttLib.tables.otTables.Coverage) +@__add_method(fontTools.ttLib.tables.otTables.Coverage) def subset(self, glyphs): "Returns ascending list of remaining coverage values." indices = self.intersect(glyphs) self.glyphs = [g for g in self.glyphs if g in glyphs] return indices -@add_method(fontTools.ttLib.tables.otTables.Coverage) +@__add_method(fontTools.ttLib.tables.otTables.Coverage) def remap(self, coverage_map): "Remaps coverage." self.glyphs = [self.glyphs[i] for i in coverage_map] -@add_method(fontTools.ttLib.tables.otTables.ClassDef) +@__add_method(fontTools.ttLib.tables.otTables.ClassDef) def intersect(self, glyphs): "Returns ascending list of matching class values." return unique_sorted( ([0] if any(g not in self.classDefs for g in glyphs) else []) + [v for g,v in self.classDefs.iteritems() if g in glyphs]) -@add_method(fontTools.ttLib.tables.otTables.ClassDef) +@__add_method(fontTools.ttLib.tables.otTables.ClassDef) def intersect_class(self, glyphs, klass): "Returns set of glyphs matching class." if klass == 0: @@ -81,7 +83,7 @@ def intersect_class(self, glyphs, klass): return set(g for g,v in self.classDefs.iteritems() if v == klass and g in glyphs) -@add_method(fontTools.ttLib.tables.otTables.ClassDef) +@__add_method(fontTools.ttLib.tables.otTables.ClassDef) def subset(self, glyphs, remap=False): "Returns ascending list of remaining classes." self.classDefs = {g:v for g,v in self.classDefs.iteritems() if g in glyphs} @@ -94,13 +96,13 @@ def subset(self, glyphs, remap=False): self.remap(indices) return indices -@add_method(fontTools.ttLib.tables.otTables.ClassDef) +@__add_method(fontTools.ttLib.tables.otTables.ClassDef) def remap(self, class_map): "Remaps classes." self.classDefs = {g:class_map.index(v) for g,v in self.classDefs.iteritems()} -@add_method(fontTools.ttLib.tables.otTables.SingleSubst) +@__add_method(fontTools.ttLib.tables.otTables.SingleSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs if self.Format in [1, 2]: @@ -108,7 +110,7 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.SingleSubst) +@__add_method(fontTools.ttLib.tables.otTables.SingleSubst) def subset_glyphs(self, s): if self.Format in [1, 2]: self.mapping = {g:v for g,v in self.mapping.iteritems() @@ -117,7 +119,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.MultipleSubst) +@__add_method(fontTools.ttLib.tables.otTables.MultipleSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs if self.Format == 1: @@ -126,7 +128,7 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.MultipleSubst) +@__add_method(fontTools.ttLib.tables.otTables.MultipleSubst) def subset_glyphs(self, s): if self.Format == 1: indices = self.Coverage.subset(s.glyphs) @@ -141,7 +143,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.AlternateSubst) +@__add_method(fontTools.ttLib.tables.otTables.AlternateSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs if self.Format == 1: @@ -150,7 +152,7 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.AlternateSubst) +@__add_method(fontTools.ttLib.tables.otTables.AlternateSubst) def subset_glyphs(self, s): if self.Format == 1: self.alternates = {g:vlist for g,vlist in self.alternates.iteritems() @@ -159,7 +161,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.LigatureSubst) +@__add_method(fontTools.ttLib.tables.otTables.LigatureSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs if self.Format == 1: @@ -170,7 +172,7 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.LigatureSubst) +@__add_method(fontTools.ttLib.tables.otTables.LigatureSubst) def subset_glyphs(self, s): if self.Format == 1: self.ligatures = {g:v for g,v in self.ligatures.iteritems() @@ -184,7 +186,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) +@__add_method(fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs if self.Format == 1: @@ -197,7 +199,7 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) +@__add_method(fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) def subset_glyphs(self, s): if self.Format == 1: indices = self.Coverage.subset(s.glyphs) @@ -214,7 +216,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.SinglePos) +@__add_method(fontTools.ttLib.tables.otTables.SinglePos) def subset_glyphs(self, s): if self.Format == 1: return len(self.Coverage.subset(s.glyphs)) @@ -226,7 +228,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.PairPos) +@__add_method(fontTools.ttLib.tables.otTables.PairPos) def subset_glyphs(self, s): if self.Format == 1: indices = self.Coverage.subset(s.glyphs) @@ -252,7 +254,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.CursivePos) +@__add_method(fontTools.ttLib.tables.otTables.CursivePos) def subset_glyphs(self, s): if self.Format == 1: indices = self.Coverage.subset(s.glyphs) @@ -262,7 +264,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.MarkBasePos) +@__add_method(fontTools.ttLib.tables.otTables.MarkBasePos) def subset_glyphs(self, s): if self.Format == 1: mark_indices = self.MarkCoverage.subset(s.glyphs) @@ -286,7 +288,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.MarkLigPos) +@__add_method(fontTools.ttLib.tables.otTables.MarkLigPos) def subset_glyphs(self, s): if self.Format == 1: mark_indices = self.MarkCoverage.subset(s.glyphs) @@ -311,7 +313,7 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.MarkMarkPos) +@__add_method(fontTools.ttLib.tables.otTables.MarkMarkPos) def subset_glyphs(self, s): if self.Format == 1: mark1_indices = self.Mark1Coverage.subset(s.glyphs) @@ -335,51 +337,51 @@ def subset_glyphs(self, s): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.SingleSubst, - fontTools.ttLib.tables.otTables.MultipleSubst, - fontTools.ttLib.tables.otTables.AlternateSubst, - fontTools.ttLib.tables.otTables.LigatureSubst, - fontTools.ttLib.tables.otTables.ReverseChainSingleSubst, - fontTools.ttLib.tables.otTables.SinglePos, - fontTools.ttLib.tables.otTables.PairPos, - fontTools.ttLib.tables.otTables.CursivePos, - fontTools.ttLib.tables.otTables.MarkBasePos, - fontTools.ttLib.tables.otTables.MarkLigPos, - fontTools.ttLib.tables.otTables.MarkMarkPos) +@__add_method(fontTools.ttLib.tables.otTables.SingleSubst, + fontTools.ttLib.tables.otTables.MultipleSubst, + fontTools.ttLib.tables.otTables.AlternateSubst, + fontTools.ttLib.tables.otTables.LigatureSubst, + fontTools.ttLib.tables.otTables.ReverseChainSingleSubst, + fontTools.ttLib.tables.otTables.SinglePos, + fontTools.ttLib.tables.otTables.PairPos, + fontTools.ttLib.tables.otTables.CursivePos, + fontTools.ttLib.tables.otTables.MarkBasePos, + fontTools.ttLib.tables.otTables.MarkLigPos, + fontTools.ttLib.tables.otTables.MarkMarkPos) def subset_lookups(self, lookup_indices): pass -@add_method(fontTools.ttLib.tables.otTables.SingleSubst, - fontTools.ttLib.tables.otTables.MultipleSubst, - fontTools.ttLib.tables.otTables.AlternateSubst, - fontTools.ttLib.tables.otTables.LigatureSubst, - fontTools.ttLib.tables.otTables.ReverseChainSingleSubst, - fontTools.ttLib.tables.otTables.SinglePos, - fontTools.ttLib.tables.otTables.PairPos, - fontTools.ttLib.tables.otTables.CursivePos, - fontTools.ttLib.tables.otTables.MarkBasePos, - fontTools.ttLib.tables.otTables.MarkLigPos, - fontTools.ttLib.tables.otTables.MarkMarkPos) +@__add_method(fontTools.ttLib.tables.otTables.SingleSubst, + fontTools.ttLib.tables.otTables.MultipleSubst, + fontTools.ttLib.tables.otTables.AlternateSubst, + fontTools.ttLib.tables.otTables.LigatureSubst, + fontTools.ttLib.tables.otTables.ReverseChainSingleSubst, + fontTools.ttLib.tables.otTables.SinglePos, + fontTools.ttLib.tables.otTables.PairPos, + fontTools.ttLib.tables.otTables.CursivePos, + fontTools.ttLib.tables.otTables.MarkBasePos, + fontTools.ttLib.tables.otTables.MarkLigPos, + fontTools.ttLib.tables.otTables.MarkMarkPos) def collect_lookups(self): return [] -@add_method(fontTools.ttLib.tables.otTables.SingleSubst, - fontTools.ttLib.tables.otTables.AlternateSubst, - fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) +@__add_method(fontTools.ttLib.tables.otTables.SingleSubst, + fontTools.ttLib.tables.otTables.AlternateSubst, + fontTools.ttLib.tables.otTables.ReverseChainSingleSubst) def may_have_non_1to1(self): return False -@add_method(fontTools.ttLib.tables.otTables.MultipleSubst, - fontTools.ttLib.tables.otTables.LigatureSubst, - fontTools.ttLib.tables.otTables.ContextSubst, - fontTools.ttLib.tables.otTables.ChainContextSubst) +@__add_method(fontTools.ttLib.tables.otTables.MultipleSubst, + fontTools.ttLib.tables.otTables.LigatureSubst, + fontTools.ttLib.tables.otTables.ContextSubst, + fontTools.ttLib.tables.otTables.ChainContextSubst) def may_have_non_1to1(self): return True -@add_method(fontTools.ttLib.tables.otTables.ContextSubst, - fontTools.ttLib.tables.otTables.ChainContextSubst, - fontTools.ttLib.tables.otTables.ContextPos, - fontTools.ttLib.tables.otTables.ChainContextPos) +@__add_method(fontTools.ttLib.tables.otTables.ContextSubst, + fontTools.ttLib.tables.otTables.ChainContextSubst, + fontTools.ttLib.tables.otTables.ContextPos, + fontTools.ttLib.tables.otTables.ChainContextPos) def __classify_context(self): class ContextHelper: @@ -472,8 +474,8 @@ def __classify_context(self): self.__class__.__ContextHelpers[self.Format] = helper return self.__class__.__ContextHelpers[self.Format] -@add_method(fontTools.ttLib.tables.otTables.ContextSubst, - fontTools.ttLib.tables.otTables.ChainContextSubst) +@__add_method(fontTools.ttLib.tables.otTables.ContextSubst, + fontTools.ttLib.tables.otTables.ChainContextSubst) def closure_glyphs(self, s, cur_glyphs=None): if cur_glyphs == None: cur_glyphs = s.glyphs c = self.__classify_context() @@ -553,10 +555,10 @@ def closure_glyphs(self, s, cur_glyphs=None): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ContextSubst, - fontTools.ttLib.tables.otTables.ContextPos, - 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, s): c = self.__classify_context() @@ -609,10 +611,10 @@ def subset_glyphs(self, s): 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) +@__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): c = self.__classify_context() @@ -637,10 +639,10 @@ def subset_lookups(self, lookup_indices): 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) +@__add_method(fontTools.ttLib.tables.otTables.ContextSubst, + fontTools.ttLib.tables.otTables.ChainContextSubst, + fontTools.ttLib.tables.otTables.ContextPos, + fontTools.ttLib.tables.otTables.ChainContextPos) def collect_lookups(self): c = self.__classify_context() @@ -655,76 +657,76 @@ def collect_lookups(self): else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ExtensionSubst) +@__add_method(fontTools.ttLib.tables.otTables.ExtensionSubst) def closure_glyphs(self, s, cur_glyphs=None): if self.Format == 1: self.ExtSubTable.closure_glyphs(s, cur_glyphs) else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ExtensionSubst) +@__add_method(fontTools.ttLib.tables.otTables.ExtensionSubst) def may_have_non_1to1(self): if self.Format == 1: return self.ExtSubTable.may_have_non_1to1() else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, - fontTools.ttLib.tables.otTables.ExtensionPos) +@__add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, + fontTools.ttLib.tables.otTables.ExtensionPos) def subset_glyphs(self, s): if self.Format == 1: return self.ExtSubTable.subset_glyphs(s) else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, - fontTools.ttLib.tables.otTables.ExtensionPos) +@__add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, + fontTools.ttLib.tables.otTables.ExtensionPos) def subset_lookups(self, lookup_indices): if self.Format == 1: return self.ExtSubTable.subset_lookups(lookup_indices) else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, - fontTools.ttLib.tables.otTables.ExtensionPos) +@__add_method(fontTools.ttLib.tables.otTables.ExtensionSubst, + fontTools.ttLib.tables.otTables.ExtensionPos) def collect_lookups(self): if self.Format == 1: return self.ExtSubTable.collect_lookups() else: assert 0, "unknown format: %s" % self.Format -@add_method(fontTools.ttLib.tables.otTables.Lookup) +@__add_method(fontTools.ttLib.tables.otTables.Lookup) def closure_glyphs(self, s, cur_glyphs=None): for st in self.SubTable: if not st: continue st.closure_glyphs(s, cur_glyphs) -@add_method(fontTools.ttLib.tables.otTables.Lookup) +@__add_method(fontTools.ttLib.tables.otTables.Lookup) def subset_glyphs(self, s): self.SubTable = [st for st in self.SubTable if st and st.subset_glyphs(s)] self.SubTableCount = len(self.SubTable) return bool(self.SubTableCount) -@add_method(fontTools.ttLib.tables.otTables.Lookup) +@__add_method(fontTools.ttLib.tables.otTables.Lookup) def subset_lookups(self, lookup_indices): for s in self.SubTable: s.subset_lookups(lookup_indices) -@add_method(fontTools.ttLib.tables.otTables.Lookup) +@__add_method(fontTools.ttLib.tables.otTables.Lookup) def collect_lookups(self): return unique_sorted(sum((st.collect_lookups() for st in self.SubTable if st), [])) -@add_method(fontTools.ttLib.tables.otTables.Lookup) +@__add_method(fontTools.ttLib.tables.otTables.Lookup) def may_have_non_1to1(self): return any(st.may_have_non_1to1() for st in self.SubTable if st) -@add_method(fontTools.ttLib.tables.otTables.LookupList) +@__add_method(fontTools.ttLib.tables.otTables.LookupList) def subset_glyphs(self, s): "Returns the indices of nonempty lookups." return [i for(i,l) in enumerate(self.Lookup) if l and l.subset_glyphs(s)] -@add_method(fontTools.ttLib.tables.otTables.LookupList) +@__add_method(fontTools.ttLib.tables.otTables.LookupList) def subset_lookups(self, lookup_indices): self.Lookup = [self.Lookup[i] for i in lookup_indices if i < self.LookupCount] @@ -732,7 +734,7 @@ def subset_lookups(self, lookup_indices): for l in self.Lookup: l.subset_lookups(lookup_indices) -@add_method(fontTools.ttLib.tables.otTables.LookupList) +@__add_method(fontTools.ttLib.tables.otTables.LookupList) def closure_lookups(self, lookup_indices): lookup_indices = unique_sorted(lookup_indices) recurse = lookup_indices @@ -747,7 +749,7 @@ def closure_lookups(self, lookup_indices): lookup_indices.extend(recurse_lookups) recurse = recurse_lookups -@add_method(fontTools.ttLib.tables.otTables.Feature) +@__add_method(fontTools.ttLib.tables.otTables.Feature) def subset_lookups(self, lookup_indices): self.LookupListIndex = [l for l in self.LookupListIndex if l in lookup_indices] @@ -757,11 +759,11 @@ def subset_lookups(self, lookup_indices): self.LookupCount = len(self.LookupListIndex) return self.LookupCount -@add_method(fontTools.ttLib.tables.otTables.Feature) +@__add_method(fontTools.ttLib.tables.otTables.Feature) def collect_lookups(self): return self.LookupListIndex[:] -@add_method(fontTools.ttLib.tables.otTables.FeatureList) +@__add_method(fontTools.ttLib.tables.otTables.FeatureList) def subset_lookups(self, lookup_indices): "Returns the indices of nonempty features." feature_indices = [i for(i,f) in enumerate(self.FeatureRecord) @@ -769,20 +771,20 @@ def subset_lookups(self, lookup_indices): self.subset_features(feature_indices) return feature_indices -@add_method(fontTools.ttLib.tables.otTables.FeatureList) +@__add_method(fontTools.ttLib.tables.otTables.FeatureList) def collect_lookups(self, feature_indices): 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) +@__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) +@__add_method(fontTools.ttLib.tables.otTables.DefaultLangSys, + fontTools.ttLib.tables.otTables.LangSys) def subset_features(self, feature_indices): if self.ReqFeatureIndex in feature_indices: self.ReqFeatureIndex = feature_indices.index(self.ReqFeatureIndex) @@ -795,15 +797,15 @@ def subset_features(self, feature_indices): self.FeatureCount = len(self.FeatureIndex) return bool(self.FeatureCount or self.ReqFeatureIndex != 65535) -@add_method(fontTools.ttLib.tables.otTables.DefaultLangSys, - fontTools.ttLib.tables.otTables.LangSys) +@__add_method(fontTools.ttLib.tables.otTables.DefaultLangSys, + fontTools.ttLib.tables.otTables.LangSys) def collect_features(self): feature_indices = self.FeatureIndex[:] if self.ReqFeatureIndex != 65535: feature_indices.append(self.ReqFeatureIndex) return unique_sorted(feature_indices) -@add_method(fontTools.ttLib.tables.otTables.Script) +@__add_method(fontTools.ttLib.tables.otTables.Script) def subset_features(self, feature_indices): if(self.DefaultLangSys and not self.DefaultLangSys.subset_features(feature_indices)): @@ -813,26 +815,26 @@ def subset_features(self, feature_indices): self.LangSysCount = len(self.LangSysRecord) return bool(self.LangSysCount or self.DefaultLangSys) -@add_method(fontTools.ttLib.tables.otTables.Script) +@__add_method(fontTools.ttLib.tables.otTables.Script) def collect_features(self): feature_indices = [l.LangSys.collect_features() for l in self.LangSysRecord] if self.DefaultLangSys: feature_indices.append(self.DefaultLangSys.collect_features()) return unique_sorted(sum(feature_indices, [])) -@add_method(fontTools.ttLib.tables.otTables.ScriptList) +@__add_method(fontTools.ttLib.tables.otTables.ScriptList) 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 bool(self.ScriptCount) -@add_method(fontTools.ttLib.tables.otTables.ScriptList) +@__add_method(fontTools.ttLib.tables.otTables.ScriptList) def collect_features(self): return unique_sorted(sum((s.Script.collect_features() for s in self.ScriptRecord), [])) -@add_method(fontTools.ttLib.getTableClass('GSUB')) +@__add_method(fontTools.ttLib.getTableClass('GSUB')) def closure_glyphs(self, s): s.table = self.table feature_indices = self.table.ScriptList.collect_features() @@ -847,8 +849,8 @@ def closure_glyphs(self, s): break del s.table -@add_method(fontTools.ttLib.getTableClass('GSUB'), - fontTools.ttLib.getTableClass('GPOS')) +@__add_method(fontTools.ttLib.getTableClass('GSUB'), + fontTools.ttLib.getTableClass('GPOS')) def subset_glyphs(self, s): s.glyphs = s.glyphs_gsubed lookup_indices = self.table.LookupList.subset_glyphs(s) @@ -856,8 +858,8 @@ def subset_glyphs(self, s): self.prune_lookups() return True -@add_method(fontTools.ttLib.getTableClass('GSUB'), - fontTools.ttLib.getTableClass('GPOS')) +@__add_method(fontTools.ttLib.getTableClass('GSUB'), + fontTools.ttLib.getTableClass('GPOS')) def subset_lookups(self, lookup_indices): """Retrains specified lookups, then removes empty features, language systems, and scripts.""" @@ -865,8 +867,8 @@ def subset_lookups(self, lookup_indices): feature_indices = self.table.FeatureList.subset_lookups(lookup_indices) self.table.ScriptList.subset_features(feature_indices) -@add_method(fontTools.ttLib.getTableClass('GSUB'), - fontTools.ttLib.getTableClass('GPOS')) +@__add_method(fontTools.ttLib.getTableClass('GSUB'), + fontTools.ttLib.getTableClass('GPOS')) def prune_lookups(self): "Remove unreferenced lookups" feature_indices = self.table.ScriptList.collect_features() @@ -874,8 +876,8 @@ def prune_lookups(self): lookup_indices = self.table.LookupList.closure_lookups(lookup_indices) self.subset_lookups(lookup_indices) -@add_method(fontTools.ttLib.getTableClass('GSUB'), - fontTools.ttLib.getTableClass('GPOS')) +@__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) @@ -883,15 +885,15 @@ def subset_feature_tags(self, 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')) +@__add_method(fontTools.ttLib.getTableClass('GSUB'), + fontTools.ttLib.getTableClass('GPOS')) def prune_pre_subset(self, options): if options.layout_features and '*' not in options.layout_features: self.subset_feature_tags(options.layout_features) self.prune_lookups() return True -@add_method(fontTools.ttLib.getTableClass('GDEF')) +@__add_method(fontTools.ttLib.getTableClass('GDEF')) def subset_glyphs(self, s): glyphs = s.glyphs_gsubed table = self.table @@ -926,13 +928,13 @@ def subset_glyphs(self, s): table.GlyphClassDef or table.AttachList) -@add_method(fontTools.ttLib.getTableClass('kern')) +@__add_method(fontTools.ttLib.getTableClass('kern')) def prune_pre_subset(self, options): # Prune unknown kern table types self.kernTables = [t for t in self.kernTables if hasattr(t, 'kernTable')] return bool(self.kernTables) -@add_method(fontTools.ttLib.getTableClass('kern')) +@__add_method(fontTools.ttLib.getTableClass('kern')) def subset_glyphs(self, s): glyphs = s.glyphs_gsubed for t in self.kernTables: @@ -941,32 +943,32 @@ def subset_glyphs(self, s): self.kernTables = [t for t in self.kernTables if t.kernTable] return bool(self.kernTables) -@add_method(fontTools.ttLib.getTableClass('hmtx'), - fontTools.ttLib.getTableClass('vmtx')) +@__add_method(fontTools.ttLib.getTableClass('hmtx'), + fontTools.ttLib.getTableClass('vmtx')) def subset_glyphs(self, s): self.metrics = {g:v for g,v in self.metrics.iteritems() if g in s.glyphs} return bool(self.metrics) -@add_method(fontTools.ttLib.getTableClass('hdmx')) +@__add_method(fontTools.ttLib.getTableClass('hdmx')) def subset_glyphs(self, s): self.hdmx = {sz:{g:v for g,v in l.iteritems() if g in s.glyphs} for(sz,l) in self.hdmx.iteritems()} return bool(self.hdmx) -@add_method(fontTools.ttLib.getTableClass('VORG')) +@__add_method(fontTools.ttLib.getTableClass('VORG')) def subset_glyphs(self, s): self.VOriginRecords = {g:v for g,v in self.VOriginRecords.iteritems() if g in s.glyphs} self.numVertOriginYMetrics = len(self.VOriginRecords) return True # Never drop; has default metrics -@add_method(fontTools.ttLib.getTableClass('post')) +@__add_method(fontTools.ttLib.getTableClass('post')) def prune_pre_subset(self, options): if not options.glyph_names: self.formatType = 3.0 return True -@add_method(fontTools.ttLib.getTableClass('post')) +@__add_method(fontTools.ttLib.getTableClass('post')) def subset_glyphs(self, s): self.extraNames = [] # This seems to do it return True @@ -986,7 +988,7 @@ OVERLAP_COMPOUND = 0x0400 # used by Apple in GX fonts SCALED_COMPONENT_OFFSET = 0x0800 # composite designed to have the component offset scaled(designed for Apple) UNSCALED_COMPONENT_OFFSET = 0x1000 # composite designed not to have the component offset scaled(designed for MS) -@add_method(fontTools.ttLib.getTableModule('glyf').Glyph) +@__add_method(fontTools.ttLib.getTableModule('glyf').Glyph) def getComponentNamesFast(self, glyfTable): if struct.unpack(">h", self.data[:2])[0] >= 0: return [] # Not composite @@ -1008,7 +1010,7 @@ def getComponentNamesFast(self, glyfTable): more = flags & MORE_COMPONENTS return components -@add_method(fontTools.ttLib.getTableModule('glyf').Glyph) +@__add_method(fontTools.ttLib.getTableModule('glyf').Glyph) def remapComponentsFast(self, indices): if struct.unpack(">h", self.data[:2])[0] >= 0: return # Not composite @@ -1033,7 +1035,7 @@ def remapComponentsFast(self, indices): more = flags & MORE_COMPONENTS self.data = str(data) -@add_method(fontTools.ttLib.getTableModule('glyf').Glyph) +@__add_method(fontTools.ttLib.getTableModule('glyf').Glyph) def dropInstructionsFast(self): numContours = struct.unpack(">h", self.data[:2])[0] data = bytearray(self.data) @@ -1073,7 +1075,7 @@ def dropInstructionsFast(self): data.append(0) self.data = str(data) -@add_method(fontTools.ttLib.getTableClass('glyf')) +@__add_method(fontTools.ttLib.getTableClass('glyf')) def closure_glyphs(self, s): decompose = s.glyphs # I don't know if component glyphs can be composite themselves. @@ -1100,7 +1102,7 @@ def closure_glyphs(self, s): decompose = components s.glyphs.update(components) -@add_method(fontTools.ttLib.getTableClass('glyf')) +@__add_method(fontTools.ttLib.getTableClass('glyf')) def subset_glyphs(self, s): self.glyphs = {g:v for g,v in self.glyphs.iteritems() if g in s.glyphs} indices = [i for i,g in enumerate(self.glyphOrder) if g in s.glyphs] @@ -1112,7 +1114,7 @@ def subset_glyphs(self, s): self.glyphOrder = [g for g in self.glyphOrder if g in s.glyphs] return bool(self.glyphs) -@add_method(fontTools.ttLib.getTableClass('glyf')) +@__add_method(fontTools.ttLib.getTableClass('glyf')) def prune_post_subset(self, options): if not options.hinting: for v in self.glyphs.itervalues(): @@ -1123,14 +1125,14 @@ def prune_post_subset(self, options): v.program.fromBytecode([]) return True -@add_method(fontTools.ttLib.getTableClass('CFF ')) +@__add_method(fontTools.ttLib.getTableClass('CFF ')) def prune_pre_subset(self, s): cff = self.cff # CFF table should have one font only cff.fontNames = cff.fontNames[:1] return bool(cff.fontNames) -@add_method(fontTools.ttLib.getTableClass('CFF ')) +@__add_method(fontTools.ttLib.getTableClass('CFF ')) def subset_glyphs(self, s): cff = self.cff for fontname in cff.keys(): @@ -1160,13 +1162,13 @@ def subset_glyphs(self, s): font.numGlyphs = len(font.charset) return any(cff[fontname].numGlyphs for fontname in cff.keys()) -@add_method(fontTools.ttLib.getTableClass('glyf')) +@__add_method(fontTools.ttLib.getTableClass('glyf')) def prune_post_subset(self, options): if not options.hinting: pass # Drop hints return True -@add_method(fontTools.ttLib.getTableClass('cmap')) +@__add_method(fontTools.ttLib.getTableClass('cmap')) def closure_glyphs(self, s): tables = [t for t in self.tables if t.platformID == 3 and t.platEncID in [1, 10]] @@ -1180,7 +1182,7 @@ def closure_glyphs(self, s): if not found: s.log("No glyph for Unicode value %s; skipping." % u) -@add_method(fontTools.ttLib.getTableClass('cmap')) +@__add_method(fontTools.ttLib.getTableClass('cmap')) def prune_pre_subset(self, options): if not options.legacy_cmap: # Drop non-Unicode / non-Symbol cmaps @@ -1194,7 +1196,7 @@ def prune_pre_subset(self, options): self.tables = [t for t in self.tables if t.format != 0] return bool(self.tables) -@add_method(fontTools.ttLib.getTableClass('cmap')) +@__add_method(fontTools.ttLib.getTableClass('cmap')) def subset_glyphs(self, s): s.glyphs = s.glyphs_cmaped for t in self.tables: @@ -1220,7 +1222,7 @@ def subset_glyphs(self, s): # to format=4 if there's not one. return bool(self.tables) -@add_method(fontTools.ttLib.getTableClass('name')) +@__add_method(fontTools.ttLib.getTableClass('name')) def prune_pre_subset(self, options): if '*' not in options.name_IDs: self.names = [n for n in self.names if n.nameID in options.name_IDs]