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

View File

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

View File

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

View File

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

View File

@ -75,7 +75,7 @@ class table__c_v_a_r(DefaultTable.DefaultTable):
tupleName, tupleAttrs, tupleContent = tupleElement
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]
writer.simpletag("version",
major=self.majorVersion, minor=self.minorVersion)

View File

@ -89,7 +89,7 @@ class table__f_v_a_r(DefaultTable.DefaultTable):
self.instances.append(instance)
pos += instanceSize
def toXML(self, writer, ttFont, progress=None):
def toXML(self, writer, ttFont):
for axis in self.axes:
axis.toXML(writer, ttFont)
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)
return data
def toXML(self, writer, ttFont, progress=None):
def toXML(self, writer, ttFont):
writer.newline()
glyphNames = ttFont.getGlyphNames()
writer.comment("The xMin, yMin, xMax and yMax values\nwill be recalculated by the compiler.")
writer.newline()
writer.newline()
counter = 0
progressStep = 10
numGlyphs = len(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]
if glyph.numberOfContours:
writer.begintag('TTGlyph', [

View File

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

View File

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

View File

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

View File

@ -207,7 +207,7 @@ class TTFont(object):
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,
bitmapGlyphDataFormat='raw', newlinestr=None):
"""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:
tables.remove(tag)
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)
writer.begintag("ttFont", sfntVersion=repr(tostr(self.sfntVersion))[1:-1],
ttLibVersion=version)
@ -258,12 +253,10 @@ class TTFont(object):
fileNameTemplate = path + ".%s" + ext
for i in range(numTables):
if progress:
progress.set(i)
tag = tables[i]
if splitTables:
tablePath = fileNameTemplate % tagToIdentifier(tag)
tableWriter = xmlWriter.XMLWriter(tablePath, idlefunc=idlefunc,
tableWriter = xmlWriter.XMLWriter(tablePath,
newlinestr=newlinestr)
tableWriter.begintag("ttFont", ttLibVersion=version)
tableWriter.newline()
@ -272,13 +265,11 @@ class TTFont(object):
writer.newline()
else:
tableWriter = writer
self._tableToXML(tableWriter, tag, progress)
self._tableToXML(tableWriter, tag)
if splitTables:
tableWriter.endtag("ttFont")
tableWriter.newline()
tableWriter.close()
if progress:
progress.set((i + 1))
writer.endtag("ttFont")
writer.newline()
# 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 != "-":
writer.close()
def _tableToXML(self, writer, tag, progress, quiet=None):
def _tableToXML(self, writer, tag, quiet=None):
if quiet is not None:
deprecateArgument("quiet", "configure logging instead")
if tag in self:
@ -294,8 +285,6 @@ class TTFont(object):
report = "Dumping '%s' table..." % tag
else:
report = "No '%s' table found." % tag
if progress:
progress.setLabel(report)
log.info(report)
if tag not in self:
return
@ -309,14 +298,14 @@ class TTFont(object):
writer.begintag(xmlTag, **attrs)
writer.newline()
if tag in ("glyf", "CFF "):
table.toXML(writer, self, progress)
table.toXML(writer, self)
else:
table.toXML(writer, self)
writer.endtag(xmlTag)
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
a font object.
"""
@ -332,7 +321,7 @@ class TTFont(object):
from fontTools.misc import xmlReader
reader = xmlReader.XMLReader(fileOrPath, self, progress)
reader = xmlReader.XMLReader(fileOrPath, self)
reader.read()
def isLoaded(self, tag):