def save(self, file, makeSuitcase=False, reorderTables=True): """Save the font to disk. Similarly to the constructor, the 'file' argument can be either a pathname or a writable file object. On the Mac, if makeSuitcase is true, a suitcase (resource fork) file will we made instead of a flat .ttf file. """ from fontTools.ttLib import sfnt if not hasattr(file, "write"): closeStream = 1 if os.name == "mac" and makeSuitcase: from . import macUtils file = macUtils.SFNTResourceWriter(file, self) else: file = open(file, "wb") if os.name == "mac": from fontTools.misc.macCreator import setMacCreatorAndType setMacCreatorAndType(file.name, 'mdos', 'BINA') else: # assume "file" is a writable file object closeStream = 0 tags = list(self.keys()) if "GlyphOrder" in tags: tags.remove("GlyphOrder") numTables = len(tags) # write to a temporary stream to allow saving to unseekable streams tmp = BytesIO() writer = sfnt.SFNTWriter(tmp, numTables, self.sfntVersion, self.flavor, self.flavorData) done = [] for tag in tags: self._writeTable(tag, writer, done) writer.close() if (reorderTables is None or writer.reordersTables() or (reorderTables is False and self.reader is None)): # 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 = list(self.reader.keys()) else: # use the recommended order from the OpenType specification tableOrder = None tmp.flush() tmp.seek(0) tmp2 = BytesIO() reorderFontTables(tmp, tmp2, tableOrder) file.write(tmp2.getvalue()) tmp.close() tmp2.close() if closeStream: file.close()
def save(self, file, makeSuitcase=False, reorderTables=True): """Save the font to disk. Similarly to the constructor, the 'file' argument can be either a pathname or a writable file object. On the Mac, if makeSuitcase is true, a suitcase (resource fork) file will we made instead of a flat .ttf file. """ from fontTools.ttLib import sfnt if not hasattr(file, "write"): closeStream = 1 if os.name == "mac" and makeSuitcase: from . import macUtils file = macUtils.SFNTResourceWriter(file, self) else: file = open(file, "wb") if os.name == "mac": from fontTools.misc.macCreator import setMacCreatorAndType setMacCreatorAndType(file.name, 'mdos', 'BINA') else: # assume "file" is a writable file object closeStream = 0 tags = list(self.keys()) if "GlyphOrder" in tags: tags.remove("GlyphOrder") numTables = len(tags) if reorderTables: import tempfile tmp = tempfile.TemporaryFile(prefix="ttx-fonttools") else: tmp = file writer = sfnt.SFNTWriter(tmp, numTables, self.sfntVersion, self.flavor, self.flavorData) done = [] for tag in tags: self._writeTable(tag, writer, done) writer.close() if reorderTables: tmp.flush() tmp.seek(0) reorderFontTables(tmp, file) tmp.close() if closeStream: file.close()