mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Put tabes in optimal order in subsetted font
This commit is contained in:
parent
a6acd8c1c9
commit
50a8fb6d7a
@ -55,12 +55,24 @@ class Sfnt(object):
|
|||||||
def __delitem__(self, key):
|
def __delitem__(self, key):
|
||||||
del self.tables[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):
|
def pop(self, key, default=None):
|
||||||
return self.tables.pop(key, default)
|
return self.tables.pop(key, default)
|
||||||
|
|
||||||
def sizes(self):
|
def sizes(self):
|
||||||
ans = OrderedDict()
|
ans = OrderedDict()
|
||||||
for tag in sorted(self.tables):
|
for tag in self:
|
||||||
ans[tag] = len(self[tag])
|
ans[tag] = len(self[tag])
|
||||||
return ans
|
return ans
|
||||||
|
|
||||||
@ -84,7 +96,7 @@ class Sfnt(object):
|
|||||||
table_data = []
|
table_data = []
|
||||||
offset = stream.tell() + ( calcsize(b'>4s3L') * num_tables )
|
offset = stream.tell() + ( calcsize(b'>4s3L') * num_tables )
|
||||||
sizes = OrderedDict()
|
sizes = OrderedDict()
|
||||||
for tag in sorted(self.tables):
|
for tag in self:
|
||||||
table = self.tables[tag]
|
table = self.tables[tag]
|
||||||
raw = table()
|
raw = table()
|
||||||
table_len = len(raw)
|
table_len = len(raw)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user