Kill progress argument

Fixes https://github.com/fonttools/fonttools/issues/1008

Doesn't touch xmlReader / xmlWriter modules.
This commit is contained in:
Behdad Esfahbod 2018-01-25 17:30:23 -08:00
parent 370368d8c2
commit f82128f25d
11 changed files with 47 additions and 75 deletions

View File

@ -144,7 +144,7 @@ class CFFFontSet(object):
writer.toFile(file) writer.toFile(file)
def toXML(self, xmlWriter, progress=None): def toXML(self, xmlWriter):
xmlWriter.simpletag("major", value=self.major) xmlWriter.simpletag("major", value=self.major)
xmlWriter.newline() xmlWriter.newline()
xmlWriter.simpletag("minor", value=self.minor) xmlWriter.simpletag("minor", value=self.minor)
@ -153,13 +153,13 @@ class CFFFontSet(object):
xmlWriter.begintag("CFFFont", name=tostr(fontName)) xmlWriter.begintag("CFFFont", name=tostr(fontName))
xmlWriter.newline() xmlWriter.newline()
font = self[fontName] font = self[fontName]
font.toXML(xmlWriter, progress) font.toXML(xmlWriter)
xmlWriter.endtag("CFFFont") xmlWriter.endtag("CFFFont")
xmlWriter.newline() xmlWriter.newline()
xmlWriter.newline() xmlWriter.newline()
xmlWriter.begintag("GlobalSubrs") xmlWriter.begintag("GlobalSubrs")
xmlWriter.newline() xmlWriter.newline()
self.GlobalSubrs.toXML(xmlWriter, progress) self.GlobalSubrs.toXML(xmlWriter)
xmlWriter.endtag("GlobalSubrs") xmlWriter.endtag("GlobalSubrs")
xmlWriter.newline() xmlWriter.newline()
@ -633,7 +633,7 @@ class GlobalSubrsIndex(Index):
private = None private = None
return self.subrClass(data, private=private, globalSubrs=self.globalSubrs) return self.subrClass(data, private=private, globalSubrs=self.globalSubrs)
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
xmlWriter.comment( xmlWriter.comment(
"The 'index' attribute is only for humans; " "The 'index' attribute is only for humans; "
"it is ignored when parsed.") "it is ignored when parsed.")
@ -698,11 +698,11 @@ class TopDictIndex(Index):
top.decompile(data) top.decompile(data)
return top return top
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
for i in range(len(self)): for i in range(len(self)):
xmlWriter.begintag("FontDict", index=i) xmlWriter.begintag("FontDict", index=i)
xmlWriter.newline() xmlWriter.newline()
self[i].toXML(xmlWriter, progress) self[i].toXML(xmlWriter)
xmlWriter.endtag("FontDict") xmlWriter.endtag("FontDict")
xmlWriter.newline() xmlWriter.newline()
@ -711,11 +711,11 @@ class FDArrayIndex(Index):
compilerClass = FDArrayIndexCompiler compilerClass = FDArrayIndexCompiler
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
for i in range(len(self)): for i in range(len(self)):
xmlWriter.begintag("FontDict", index=i) xmlWriter.begintag("FontDict", index=i)
xmlWriter.newline() xmlWriter.newline()
self[i].toXML(xmlWriter, progress) self[i].toXML(xmlWriter)
xmlWriter.endtag("FontDict") xmlWriter.endtag("FontDict")
xmlWriter.newline() xmlWriter.newline()
@ -906,11 +906,8 @@ class CharStrings(object):
sel = None sel = None
return self.charStrings[name], sel return self.charStrings[name], sel
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
names = sorted(self.keys()) names = sorted(self.keys())
i = 0
step = 10
numGlyphs = len(names)
for name in names: for name in names:
charStr, fdSelectIndex = self.getItemAndSelector(name) charStr, fdSelectIndex = self.getItemAndSelector(name)
if charStr.needsDecompilation(): if charStr.needsDecompilation():
@ -927,10 +924,6 @@ class CharStrings(object):
charStr.toXML(xmlWriter) charStr.toXML(xmlWriter)
xmlWriter.endtag("CharString") xmlWriter.endtag("CharString")
xmlWriter.newline() xmlWriter.newline()
if not i % step and progress is not None:
progress.setLabel("Dumping 'CFF ' table... (%s)" % name)
progress.increment(step / numGlyphs)
i = i + 1
def fromXML(self, name, attrs, content): def fromXML(self, name, attrs, content):
for element in content: for element in content:
@ -1042,7 +1035,7 @@ class SimpleConverter(object):
def write(self, parent, value): def write(self, parent, value):
return value return value
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
xmlWriter.simpletag(name, value=value) xmlWriter.simpletag(name, value=value)
xmlWriter.newline() xmlWriter.newline()
@ -1058,7 +1051,7 @@ class ASCIIConverter(SimpleConverter):
def write(self, parent, value): def write(self, parent, value):
return tobytes(value, encoding='ascii') return tobytes(value, encoding='ascii')
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
xmlWriter.simpletag(name, value=tounicode(value, encoding="ascii")) xmlWriter.simpletag(name, value=tounicode(value, encoding="ascii"))
xmlWriter.newline() xmlWriter.newline()
@ -1074,7 +1067,7 @@ class Latin1Converter(SimpleConverter):
def write(self, parent, value): def write(self, parent, value):
return tobytes(value, encoding='latin1') return tobytes(value, encoding='latin1')
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
value = tounicode(value, encoding="latin1") value = tounicode(value, encoding="latin1")
if name in ['Notice', 'Copyright']: if name in ['Notice', 'Copyright']:
value = re.sub(r"[\r\n]\s+", " ", value) value = re.sub(r"[\r\n]\s+", " ", value)
@ -1108,7 +1101,7 @@ def parseBlendList(s):
class NumberConverter(SimpleConverter): class NumberConverter(SimpleConverter):
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
if isinstance(value, list): if isinstance(value, list):
xmlWriter.begintag(name) xmlWriter.begintag(name)
xmlWriter.newline() xmlWriter.newline()
@ -1133,7 +1126,7 @@ class NumberConverter(SimpleConverter):
class ArrayConverter(SimpleConverter): class ArrayConverter(SimpleConverter):
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
if value and isinstance(value[0], list): if value and isinstance(value[0], list):
xmlWriter.begintag(name) xmlWriter.begintag(name)
xmlWriter.newline() xmlWriter.newline()
@ -1162,10 +1155,10 @@ class ArrayConverter(SimpleConverter):
class TableConverter(SimpleConverter): class TableConverter(SimpleConverter):
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
xmlWriter.begintag(name) xmlWriter.begintag(name)
xmlWriter.newline() xmlWriter.newline()
value.toXML(xmlWriter, progress) value.toXML(xmlWriter)
xmlWriter.endtag(name) xmlWriter.endtag(name)
xmlWriter.newline() xmlWriter.newline()
@ -1301,7 +1294,7 @@ class CharsetConverter(object):
def write(self, parent, value): def write(self, parent, value):
return 0 # dummy value return 0 # dummy value
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
# XXX only write charset when not in OT/TTX context, where we # XXX only write charset when not in OT/TTX context, where we
# dump charset as a separate "GlyphOrder" table. # dump charset as a separate "GlyphOrder" table.
# # xmlWriter.simpletag("charset") # # xmlWriter.simpletag("charset")
@ -1501,7 +1494,7 @@ class EncodingConverter(SimpleConverter):
return 1 return 1
return 0 # dummy value return 0 # dummy value
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
if value in ("StandardEncoding", "ExpertEncoding"): if value in ("StandardEncoding", "ExpertEncoding"):
xmlWriter.simpletag(name, name=value) xmlWriter.simpletag(name, name=value)
xmlWriter.newline() xmlWriter.newline()
@ -1653,7 +1646,7 @@ class FDSelectConverter(object):
# The FDSelect glyph data is written out to XML in the charstring keys, # The FDSelect glyph data is written out to XML in the charstring keys,
# so we write out only the format selector # so we write out only the format selector
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
xmlWriter.simpletag(name, [('format', value.format)]) xmlWriter.simpletag(name, [('format', value.format)])
xmlWriter.newline() xmlWriter.newline()
@ -1677,7 +1670,7 @@ class VarStoreConverter(SimpleConverter):
def write(self, parent, value): def write(self, parent, value):
return 0 # dummy value return 0 # dummy value
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
value.writeXML(xmlWriter, name) value.writeXML(xmlWriter, name)
def xmlRead(self, name, attrs, content, parent): def xmlRead(self, name, attrs, content, parent):
@ -1771,7 +1764,7 @@ class VarStoreCompiler(object):
class ROSConverter(SimpleConverter): class ROSConverter(SimpleConverter):
def xmlWrite(self, xmlWriter, name, value, progress): def xmlWrite(self, xmlWriter, name, value):
registry, order, supplement = value registry, order, supplement = value
xmlWriter.simpletag( xmlWriter.simpletag(
name, name,
@ -2245,7 +2238,7 @@ class BaseDict(object):
setattr(self, name, value) setattr(self, name, value)
return value return value
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
for name in self.order: for name in self.order:
if name in self.skipNames: if name in self.skipNames:
continue continue
@ -2262,7 +2255,7 @@ class BaseDict(object):
if value is None and name != "charset": if value is None and name != "charset":
continue continue
conv = self.converters[name] conv = self.converters[name]
conv.xmlWrite(xmlWriter, name, value, progress) conv.xmlWrite(xmlWriter, name, value)
ignoredNames = set(self.rawDict) - set(self.order) ignoredNames = set(self.rawDict) - set(self.order)
if ignoredNames: if ignoredNames:
xmlWriter.comment( xmlWriter.comment(
@ -2310,9 +2303,9 @@ class TopDict(BaseDict):
else: else:
self.numGlyphs = readCard16(self.file) self.numGlyphs = readCard16(self.file)
def toXML(self, xmlWriter, progress): def toXML(self, xmlWriter):
if hasattr(self, "CharStrings"): if hasattr(self, "CharStrings"):
self.decompileAllCharStrings(progress) self.decompileAllCharStrings()
if hasattr(self, "ROS"): if hasattr(self, "ROS"):
self.skipNames = ['Encoding'] self.skipNames = ['Encoding']
if not hasattr(self, "ROS") or not hasattr(self, "CharStrings"): if not hasattr(self, "ROS") or not hasattr(self, "CharStrings"):
@ -2320,20 +2313,16 @@ class TopDict(BaseDict):
# in CID fonts. # in CID fonts.
self.skipNames = [ self.skipNames = [
'CIDFontVersion', 'CIDFontRevision', 'CIDFontType', 'CIDCount'] 'CIDFontVersion', 'CIDFontRevision', 'CIDFontType', 'CIDCount']
BaseDict.toXML(self, xmlWriter, progress) BaseDict.toXML(self, xmlWriter)
def decompileAllCharStrings(self, progress): def decompileAllCharStrings(self):
# Make sure that all the Private Dicts have been instantiated. # Make sure that all the Private Dicts have been instantiated.
i = 0
for charString in self.CharStrings.values(): for charString in self.CharStrings.values():
try: try:
charString.decompile() charString.decompile()
except: except:
log.error("Error in charstring %s", i) log.error("Error in charstring %s", i)
raise raise
if not i % 30 and progress:
progress.increment(0) # update
i = i + 1
def recalcFontBBox(self): def recalcFontBBox(self):
fontBBox = None fontBBox = None

View File

@ -38,8 +38,8 @@ class table_C_F_F_(DefaultTable.DefaultTable):
# XXX # XXX
#self.cff[self.cff.fontNames[0]].setGlyphOrder(glyphOrder) #self.cff[self.cff.fontNames[0]].setGlyphOrder(glyphOrder)
def toXML(self, writer, otFont, progress=None): def toXML(self, writer, otFont):
self.cff.toXML(writer, progress) self.cff.toXML(writer)
def fromXML(self, name, attrs, content, otFont): def fromXML(self, name, attrs, content, otFont):
if not hasattr(self, "cff"): if not hasattr(self, "cff"):

View File

@ -17,7 +17,7 @@ class DefaultTable(object):
def compile(self, ttFont): def compile(self, ttFont):
return self.data return self.data
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
if hasattr(self, "ERROR"): if hasattr(self, "ERROR"):
writer.comment("An error occurred during the decompilation of this table") writer.comment("An error occurred during the decompilation of this table")
writer.newline() writer.newline()

View File

@ -70,7 +70,7 @@ class table__a_v_a_r(DefaultTable.DefaultTable):
segments[fixedToFloat(fromValue, 14)] = fixedToFloat(toValue, 14) segments[fixedToFloat(fromValue, 14)] = fixedToFloat(toValue, 14)
pos = pos + 4 pos = pos + 4
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes] axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
for axis in axisTags: for axis in axisTags:
writer.begintag("segment", axis=axis) writer.begintag("segment", axis=axis)

View File

@ -75,7 +75,7 @@ class table__c_v_a_r(DefaultTable.DefaultTable):
tupleName, tupleAttrs, tupleContent = tupleElement tupleName, tupleAttrs, tupleContent = tupleElement
var.fromXML(tupleName, tupleAttrs, tupleContent) var.fromXML(tupleName, tupleAttrs, tupleContent)
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
axisTags = [axis.axisTag for axis in ttFont["fvar"].axes] axisTags = [axis.axisTag for axis in ttFont["fvar"].axes]
writer.simpletag("version", writer.simpletag("version",
major=self.majorVersion, minor=self.minorVersion) major=self.majorVersion, minor=self.minorVersion)

View File

@ -89,7 +89,7 @@ class table__f_v_a_r(DefaultTable.DefaultTable):
self.instances.append(instance) self.instances.append(instance)
pos += instanceSize pos += instanceSize
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
for axis in self.axes: for axis in self.axes:
axis.toXML(writer, ttFont) axis.toXML(writer, ttFont)
for instance in self.instances: for instance in self.instances:

View File

@ -110,20 +110,14 @@ class table__g_l_y_f(DefaultTable.DefaultTable):
ttFont['maxp'].numGlyphs = len(self.glyphs) ttFont['maxp'].numGlyphs = len(self.glyphs)
return data return data
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
writer.newline() writer.newline()
glyphNames = ttFont.getGlyphNames() glyphNames = ttFont.getGlyphNames()
writer.comment("The xMin, yMin, xMax and yMax values\nwill be recalculated by the compiler.") writer.comment("The xMin, yMin, xMax and yMax values\nwill be recalculated by the compiler.")
writer.newline() writer.newline()
writer.newline() writer.newline()
counter = 0
progressStep = 10
numGlyphs = len(glyphNames) numGlyphs = len(glyphNames)
for glyphName in glyphNames: for glyphName in glyphNames:
if not counter % progressStep and progress is not None:
progress.setLabel("Dumping 'glyf' table... (%s)" % glyphName)
progress.increment(progressStep / numGlyphs)
counter = counter + 1
glyph = self[glyphName] glyph = self[glyphName]
if glyph.numberOfContours: if glyph.numberOfContours:
writer.begintag('TTGlyph', [ writer.begintag('TTGlyph', [

View File

@ -156,7 +156,7 @@ class table__g_v_a_r(DefaultTable.DefaultTable):
packed.byteswap() packed.byteswap()
return (packed.tostring(), tableFormat) return (packed.tostring(), tableFormat)
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
writer.simpletag("version", value=self.version) writer.simpletag("version", value=self.version)
writer.newline() writer.newline()
writer.simpletag("reserved", value=self.reserved) writer.simpletag("reserved", value=self.reserved)

View File

@ -74,7 +74,7 @@ class table__m_e_t_a(DefaultTable.DefaultTable):
dataOffset += len(data) dataOffset += len(data)
return bytesjoin([header] + dataMaps + dataBlocks) return bytesjoin([header] + dataMaps + dataBlocks)
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
for tag in sorted(self.data.keys()): for tag in sorted(self.data.keys()):
if tag in ["dlng", "slng"]: if tag in ["dlng", "slng"]:
writer.begintag("text", tag=tag) writer.begintag("text", tag=tag)

View File

@ -92,7 +92,7 @@ class table__t_r_a_k(DefaultTable.DefaultTable):
trackData.decompile(data, offset) trackData.decompile(data, offset)
setattr(self, direction + 'Data', trackData) setattr(self, direction + 'Data', trackData)
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
writer.simpletag('version', value=self.version) writer.simpletag('version', value=self.version)
writer.newline() writer.newline()
writer.simpletag('format', value=self.format) writer.simpletag('format', value=self.format)
@ -194,7 +194,7 @@ class TrackData(MutableMapping):
self[entry.track] = entry self[entry.track] = entry
offset += TRACK_TABLE_ENTRY_FORMAT_SIZE offset += TRACK_TABLE_ENTRY_FORMAT_SIZE
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
nTracks = len(self) nTracks = len(self)
nSizes = len(self.sizes()) nSizes = len(self.sizes())
writer.comment("nTracks=%d, nSizes=%d" % (nTracks, nSizes)) writer.comment("nTracks=%d, nSizes=%d" % (nTracks, nSizes))
@ -254,7 +254,7 @@ class TrackTableEntry(MutableMapping):
self.nameIndex = nameIndex self.nameIndex = nameIndex
self._map = dict(values) self._map = dict(values)
def toXML(self, writer, ttFont, progress=None): def toXML(self, writer, ttFont):
name = ttFont["name"].getDebugName(self.nameIndex) name = ttFont["name"].getDebugName(self.nameIndex)
writer.begintag( writer.begintag(
"trackEntry", "trackEntry",

View File

@ -207,7 +207,7 @@ class TTFont(object):
return writer.reordersTables() return writer.reordersTables()
def saveXML(self, fileOrPath, progress=None, quiet=None, def saveXML(self, fileOrPath, quiet=None,
tables=None, skipTables=None, splitTables=False, disassembleInstructions=True, tables=None, skipTables=None, splitTables=False, disassembleInstructions=True,
bitmapGlyphDataFormat='raw', newlinestr=None): 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
@ -238,13 +238,8 @@ class TTFont(object):
if tag in tables: if tag in tables:
tables.remove(tag) tables.remove(tag)
numTables = len(tables) numTables = len(tables)
if progress:
progress.set(0, numTables)
idlefunc = getattr(progress, "idle", None)
else:
idlefunc = None
writer = xmlWriter.XMLWriter(fileOrPath, idlefunc=idlefunc, writer = xmlWriter.XMLWriter(fileOrPath,
newlinestr=newlinestr) newlinestr=newlinestr)
writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1], writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1],
ttLibVersion=version) ttLibVersion=version)
@ -258,12 +253,10 @@ class TTFont(object):
fileNameTemplate = path + ".%s" + ext fileNameTemplate = path + ".%s" + ext
for i in range(numTables): for i in range(numTables):
if progress:
progress.set(i)
tag = tables[i] tag = tables[i]
if splitTables: if splitTables:
tablePath = fileNameTemplate % tagToIdentifier(tag) tablePath = fileNameTemplate % tagToIdentifier(tag)
tableWriter = xmlWriter.XMLWriter(tablePath, idlefunc=idlefunc, tableWriter = xmlWriter.XMLWriter(tablePath,
newlinestr=newlinestr) newlinestr=newlinestr)
tableWriter.begintag("ttFont", ttLibVersion=version) tableWriter.begintag("ttFont", ttLibVersion=version)
tableWriter.newline() tableWriter.newline()
@ -272,13 +265,11 @@ class TTFont(object):
writer.newline() writer.newline()
else: else:
tableWriter = writer tableWriter = writer
self._tableToXML(tableWriter, tag, progress) self._tableToXML(tableWriter, tag)
if splitTables: if splitTables:
tableWriter.endtag("ttFont") tableWriter.endtag("ttFont")
tableWriter.newline() tableWriter.newline()
tableWriter.close() tableWriter.close()
if progress:
progress.set((i + 1))
writer.endtag("ttFont") writer.endtag("ttFont")
writer.newline() writer.newline()
# close if 'fileOrPath' is a path; leave it open if it's a file. # close if 'fileOrPath' is a path; leave it open if it's a file.
@ -286,7 +277,7 @@ class TTFont(object):
if not hasattr(fileOrPath, "write") and fileOrPath != "-": if not hasattr(fileOrPath, "write") and fileOrPath != "-":
writer.close() writer.close()
def _tableToXML(self, writer, tag, progress, quiet=None): def _tableToXML(self, writer, tag, quiet=None):
if quiet is not None: if quiet is not None:
deprecateArgument("quiet", "configure logging instead") deprecateArgument("quiet", "configure logging instead")
if tag in self: if tag in self:
@ -294,8 +285,6 @@ class TTFont(object):
report = "Dumping '%s' table..." % tag report = "Dumping '%s' table..." % tag
else: else:
report = "No '%s' table found." % tag report = "No '%s' table found." % tag
if progress:
progress.setLabel(report)
log.info(report) log.info(report)
if tag not in self: if tag not in self:
return return
@ -309,14 +298,14 @@ class TTFont(object):
writer.begintag(xmlTag, **attrs) writer.begintag(xmlTag, **attrs)
writer.newline() writer.newline()
if tag in ("glyf", "CFF "): if tag in ("glyf", "CFF "):
table.toXML(writer, self, progress) table.toXML(writer, self)
else: else:
table.toXML(writer, self) table.toXML(writer, self)
writer.endtag(xmlTag) writer.endtag(xmlTag)
writer.newline() writer.newline()
writer.newline() writer.newline()
def importXML(self, fileOrPath, progress=None, quiet=None): def importXML(self, fileOrPath, quiet=None):
"""Import a TTX file (an XML-based text format), so as to recreate """Import a TTX file (an XML-based text format), so as to recreate
a font object. a font object.
""" """
@ -332,7 +321,7 @@ class TTFont(object):
from fontTools.misc import xmlReader from fontTools.misc import xmlReader
reader = xmlReader.XMLReader(fileOrPath, self, progress) reader = xmlReader.XMLReader(fileOrPath, self)
reader.read() reader.read()
def isLoaded(self, tag): def isLoaded(self, tag):