[TTFont] changed behaviour of 'reorderTables' argument of save function

Reorder to OT spec recommended order if reorederTables == True (default).
Don't reorder if reorderTables == None.
Keep the input font original table order if reorderTables == False (and
the font has a reader object from which to get the original order).
This commit is contained in:
Cosimo Lupo 2015-08-19 13:51:25 +01:00
parent 099c260b36
commit 6ba67ab699

View File

@ -212,11 +212,8 @@ class TTFont(object):
if "GlyphOrder" in tags: if "GlyphOrder" in tags:
tags.remove("GlyphOrder") tags.remove("GlyphOrder")
numTables = len(tags) numTables = len(tags)
if reorderTables: # write to a temporary stream to allow saving to unseekable streams
import tempfile tmp = BytesIO()
tmp = tempfile.TemporaryFile(prefix="ttx-fonttools")
else:
tmp = file
writer = sfnt.SFNTWriter(tmp, numTables, self.sfntVersion, self.flavor, self.flavorData) writer = sfnt.SFNTWriter(tmp, numTables, self.sfntVersion, self.flavor, self.flavorData)
done = [] done = []
@ -225,11 +222,25 @@ class TTFont(object):
writer.close() writer.close()
if reorderTables: if (reorderTables is None or
(reorderTables is False and not hasattr(self, 'reader'))):
# don't reorder tables and save as is
file.write(tmp.getvalue())
tmp.close()
else:
if reorderTables is False:
# sort tables using the original font's order
tableOrder = self.reader.keys()
else:
# use the recommended order from the OpenType specification
tableOrder = None
tmp.flush() tmp.flush()
tmp.seek(0) tmp.seek(0)
reorderFontTables(tmp, file) tmp2 = BytesIO()
reorderFontTables(tmp, tmp2, tableOrder)
file.write(tmp2.getvalue())
tmp.close() tmp.close()
tmp2.close()
if closeStream: if closeStream:
file.close() file.close()