[ttc] Implement saveXML()
This commit is contained in:
parent
f82128f25d
commit
c99a731adb
@ -18,10 +18,14 @@ class XMLWriter(object):
|
|||||||
if fileOrPath == '-':
|
if fileOrPath == '-':
|
||||||
fileOrPath = sys.stdout
|
fileOrPath = sys.stdout
|
||||||
if not hasattr(fileOrPath, "write"):
|
if not hasattr(fileOrPath, "write"):
|
||||||
|
self.filename = fileOrPath
|
||||||
self.file = open(fileOrPath, "wb")
|
self.file = open(fileOrPath, "wb")
|
||||||
|
self._closeStream = True
|
||||||
else:
|
else:
|
||||||
|
self.filename = None
|
||||||
# assume writable file object
|
# assume writable file object
|
||||||
self.file = fileOrPath
|
self.file = fileOrPath
|
||||||
|
self._closeStream = False
|
||||||
|
|
||||||
# Figure out if writer expects bytes or unicodes
|
# Figure out if writer expects bytes or unicodes
|
||||||
try:
|
try:
|
||||||
@ -47,6 +51,7 @@ class XMLWriter(object):
|
|||||||
self.newline()
|
self.newline()
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
|
if self._closeStream:
|
||||||
self.file.close()
|
self.file.close()
|
||||||
|
|
||||||
def write(self, string, indent=True):
|
def write(self, string, indent=True):
|
||||||
|
@ -68,6 +68,30 @@ class TTCollection(object):
|
|||||||
final.write(file.getvalue())
|
final.write(file.getvalue())
|
||||||
file.close()
|
file.close()
|
||||||
|
|
||||||
|
def saveXML(self, fileOrPath, newlinestr=None, writeVersion=True, **kwargs):
|
||||||
|
|
||||||
|
from fontTools.misc import xmlWriter
|
||||||
|
writer = xmlWriter.XMLWriter(fileOrPath, newlinestr=newlinestr)
|
||||||
|
|
||||||
|
if writeVersion:
|
||||||
|
from fontTools import version
|
||||||
|
version = ".".join(version.split('.')[:2])
|
||||||
|
writer.begintag("ttCollection", ttLibVersion=version)
|
||||||
|
else:
|
||||||
|
writer.begintag("ttCollection")
|
||||||
|
writer.newline()
|
||||||
|
writer.newline()
|
||||||
|
|
||||||
|
for font in self.fonts:
|
||||||
|
font._saveXML(writer, writeVersion=False, **kwargs)
|
||||||
|
writer.newline()
|
||||||
|
|
||||||
|
writer.endtag("ttCollection")
|
||||||
|
writer.newline()
|
||||||
|
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
|
||||||
def __getitem__(self, item):
|
def __getitem__(self, item):
|
||||||
return self.fonts[item]
|
return self.fonts[item]
|
||||||
|
|
||||||
|
@ -207,9 +207,7 @@ class TTFont(object):
|
|||||||
|
|
||||||
return writer.reordersTables()
|
return writer.reordersTables()
|
||||||
|
|
||||||
def saveXML(self, fileOrPath, quiet=None,
|
def saveXML(self, fileOrPath, newlinestr=None, **kwargs):
|
||||||
tables=None, skipTables=None, splitTables=False, disassembleInstructions=True,
|
|
||||||
bitmapGlyphDataFormat='raw', newlinestr=None):
|
|
||||||
"""Export the font as TTX (an XML-based text file), or as a series of text
|
"""Export the font as TTX (an XML-based text file), or as a series of text
|
||||||
files when splitTables is true. In the latter case, the 'fileOrPath'
|
files when splitTables is true. In the latter case, the 'fileOrPath'
|
||||||
argument should be a path to a directory.
|
argument should be a path to a directory.
|
||||||
@ -217,12 +215,17 @@ class TTFont(object):
|
|||||||
list of tables to dump. The 'skipTables' argument may be a list of tables
|
list of tables to dump. The 'skipTables' argument may be a list of tables
|
||||||
to skip, but only when the 'tables' argument is false.
|
to skip, but only when the 'tables' argument is false.
|
||||||
"""
|
"""
|
||||||
from fontTools import version
|
|
||||||
from fontTools.misc import xmlWriter
|
|
||||||
|
|
||||||
# only write the MAJOR.MINOR version in the 'ttLibVersion' attribute of
|
from fontTools.misc import xmlWriter
|
||||||
# TTX files' root element (without PATCH or .dev suffixes)
|
writer = xmlWriter.XMLWriter(fileOrPath, newlinestr=newlinestr)
|
||||||
version = ".".join(version.split('.')[:2])
|
self._saveXML(writer, **kwargs)
|
||||||
|
writer.close()
|
||||||
|
|
||||||
|
def _saveXML(self, writer,
|
||||||
|
writeVersion=True,
|
||||||
|
quiet=None, tables=None, skipTables=None, splitTables=False,
|
||||||
|
disassembleInstructions=True, bitmapGlyphDataFormat='raw'):
|
||||||
|
|
||||||
|
|
||||||
if quiet is not None:
|
if quiet is not None:
|
||||||
deprecateArgument("quiet", "configure logging instead")
|
deprecateArgument("quiet", "configure logging instead")
|
||||||
@ -239,17 +242,19 @@ class TTFont(object):
|
|||||||
tables.remove(tag)
|
tables.remove(tag)
|
||||||
numTables = len(tables)
|
numTables = len(tables)
|
||||||
|
|
||||||
writer = xmlWriter.XMLWriter(fileOrPath,
|
if writeVersion:
|
||||||
newlinestr=newlinestr)
|
from fontTools import version
|
||||||
|
version = ".".join(version.split('.')[:2])
|
||||||
writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1],
|
writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1],
|
||||||
ttLibVersion=version)
|
ttLibVersion=version)
|
||||||
|
else:
|
||||||
|
writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1])
|
||||||
writer.newline()
|
writer.newline()
|
||||||
|
|
||||||
if not splitTables:
|
if not splitTables:
|
||||||
writer.newline()
|
writer.newline()
|
||||||
else:
|
else:
|
||||||
# 'fileOrPath' must now be a path
|
path, ext = os.path.splitext(writer.filename)
|
||||||
path, ext = os.path.splitext(fileOrPath)
|
|
||||||
fileNameTemplate = path + ".%s" + ext
|
fileNameTemplate = path + ".%s" + ext
|
||||||
|
|
||||||
for i in range(numTables):
|
for i in range(numTables):
|
||||||
@ -257,7 +262,7 @@ class TTFont(object):
|
|||||||
if splitTables:
|
if splitTables:
|
||||||
tablePath = fileNameTemplate % tagToIdentifier(tag)
|
tablePath = fileNameTemplate % tagToIdentifier(tag)
|
||||||
tableWriter = xmlWriter.XMLWriter(tablePath,
|
tableWriter = xmlWriter.XMLWriter(tablePath,
|
||||||
newlinestr=newlinestr)
|
newlinestr=writer.newlinestr)
|
||||||
tableWriter.begintag("ttFont", ttLibVersion=version)
|
tableWriter.begintag("ttFont", ttLibVersion=version)
|
||||||
tableWriter.newline()
|
tableWriter.newline()
|
||||||
tableWriter.newline()
|
tableWriter.newline()
|
||||||
@ -272,10 +277,6 @@ class TTFont(object):
|
|||||||
tableWriter.close()
|
tableWriter.close()
|
||||||
writer.endtag("ttFont")
|
writer.endtag("ttFont")
|
||||||
writer.newline()
|
writer.newline()
|
||||||
# close if 'fileOrPath' is a path; leave it open if it's a file.
|
|
||||||
# The special string "-" means standard output so leave that open too
|
|
||||||
if not hasattr(fileOrPath, "write") and fileOrPath != "-":
|
|
||||||
writer.close()
|
|
||||||
|
|
||||||
def _tableToXML(self, writer, tag, quiet=None):
|
def _tableToXML(self, writer, tag, quiet=None):
|
||||||
if quiet is not None:
|
if quiet is not None:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user