Put tabes in optimal order in subsetted font

This commit is contained in:
Kovid Goyal 2012-11-07 17:48:12 +05:30
parent a6acd8c1c9
commit 50a8fb6d7a

View File

@ -55,12 +55,24 @@ class Sfnt(object):
def __delitem__(self, key):
del self.tables[key]
def __iter__(self):
'''Iterate over the table tags in optimal order as per
http://partners.adobe.com/public/developer/opentype/index_recs.html'''
keys = list(self.tables.keys())
order = {x:i for i, x in enumerate((b'head', b'hhea', b'maxp', b'OS/2',
b'hmtx', b'LTSH', b'VDMX', b'hdmx', b'cmap', b'fpgm', b'prep',
b'cvt ', b'loca', b'glyf', b'CFF ', b'kern', b'name', b'post',
b'gasp', b'PCLT', b'DSIG'))}
keys.sort(key=lambda x:order.get(x, 1000))
for x in keys:
yield x
def pop(self, key, default=None):
return self.tables.pop(key, default)
def sizes(self):
ans = OrderedDict()
for tag in sorted(self.tables):
for tag in self:
ans[tag] = len(self[tag])
return ans
@ -84,7 +96,7 @@ class Sfnt(object):
table_data = []
offset = stream.tell() + ( calcsize(b'>4s3L') * num_tables )
sizes = OrderedDict()
for tag in sorted(self.tables):
for tag in self:
table = self.tables[tag]
raw = table()
table_len = len(raw)