From f82128f25d97649fda912696e3751682e3b05be0 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Thu, 25 Jan 2018 17:30:23 -0800 Subject: [PATCH] Kill progress argument Fixes https://github.com/fonttools/fonttools/issues/1008 Doesn't touch xmlReader / xmlWriter modules. --- Lib/fontTools/cffLib/__init__.py | 65 +++++++++------------- Lib/fontTools/ttLib/tables/C_F_F_.py | 4 +- Lib/fontTools/ttLib/tables/DefaultTable.py | 2 +- Lib/fontTools/ttLib/tables/_a_v_a_r.py | 2 +- Lib/fontTools/ttLib/tables/_c_v_a_r.py | 2 +- Lib/fontTools/ttLib/tables/_f_v_a_r.py | 2 +- Lib/fontTools/ttLib/tables/_g_l_y_f.py | 8 +-- Lib/fontTools/ttLib/tables/_g_v_a_r.py | 2 +- Lib/fontTools/ttLib/tables/_m_e_t_a.py | 2 +- Lib/fontTools/ttLib/tables/_t_r_a_k.py | 6 +- Lib/fontTools/ttLib/ttFont.py | 27 +++------ 11 files changed, 47 insertions(+), 75 deletions(-) diff --git a/Lib/fontTools/cffLib/__init__.py b/Lib/fontTools/cffLib/__init__.py index 59f5ab5ac..bbcc27780 100644 --- a/Lib/fontTools/cffLib/__init__.py +++ b/Lib/fontTools/cffLib/__init__.py @@ -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 diff --git a/Lib/fontTools/ttLib/tables/C_F_F_.py b/Lib/fontTools/ttLib/tables/C_F_F_.py index 126fd8901..f175d5c71 100644 --- a/Lib/fontTools/ttLib/tables/C_F_F_.py +++ b/Lib/fontTools/ttLib/tables/C_F_F_.py @@ -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"): diff --git a/Lib/fontTools/ttLib/tables/DefaultTable.py b/Lib/fontTools/ttLib/tables/DefaultTable.py index 1a34da3a8..f0e82f5d7 100644 --- a/Lib/fontTools/ttLib/tables/DefaultTable.py +++ b/Lib/fontTools/ttLib/tables/DefaultTable.py @@ -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() diff --git a/Lib/fontTools/ttLib/tables/_a_v_a_r.py b/Lib/fontTools/ttLib/tables/_a_v_a_r.py index eb774ad2f..57601c5d2 100644 --- a/Lib/fontTools/ttLib/tables/_a_v_a_r.py +++ b/Lib/fontTools/ttLib/tables/_a_v_a_r.py @@ -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) diff --git a/Lib/fontTools/ttLib/tables/_c_v_a_r.py b/Lib/fontTools/ttLib/tables/_c_v_a_r.py index d7e5553dd..c4ebbc929 100644 --- a/Lib/fontTools/ttLib/tables/_c_v_a_r.py +++ b/Lib/fontTools/ttLib/tables/_c_v_a_r.py @@ -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) diff --git a/Lib/fontTools/ttLib/tables/_f_v_a_r.py b/Lib/fontTools/ttLib/tables/_f_v_a_r.py index 50ae736fc..3bc46e245 100644 --- a/Lib/fontTools/ttLib/tables/_f_v_a_r.py +++ b/Lib/fontTools/ttLib/tables/_f_v_a_r.py @@ -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: diff --git a/Lib/fontTools/ttLib/tables/_g_l_y_f.py b/Lib/fontTools/ttLib/tables/_g_l_y_f.py index 52117129f..b668d68c1 100644 --- a/Lib/fontTools/ttLib/tables/_g_l_y_f.py +++ b/Lib/fontTools/ttLib/tables/_g_l_y_f.py @@ -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', [ diff --git a/Lib/fontTools/ttLib/tables/_g_v_a_r.py b/Lib/fontTools/ttLib/tables/_g_v_a_r.py index 85e83ca10..9f97c31a2 100644 --- a/Lib/fontTools/ttLib/tables/_g_v_a_r.py +++ b/Lib/fontTools/ttLib/tables/_g_v_a_r.py @@ -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) diff --git a/Lib/fontTools/ttLib/tables/_m_e_t_a.py b/Lib/fontTools/ttLib/tables/_m_e_t_a.py index 33067fd50..cc19fe6ef 100644 --- a/Lib/fontTools/ttLib/tables/_m_e_t_a.py +++ b/Lib/fontTools/ttLib/tables/_m_e_t_a.py @@ -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) diff --git a/Lib/fontTools/ttLib/tables/_t_r_a_k.py b/Lib/fontTools/ttLib/tables/_t_r_a_k.py index 467375f16..b5820b27b 100644 --- a/Lib/fontTools/ttLib/tables/_t_r_a_k.py +++ b/Lib/fontTools/ttLib/tables/_t_r_a_k.py @@ -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", diff --git a/Lib/fontTools/ttLib/ttFont.py b/Lib/fontTools/ttLib/ttFont.py index 2b7554965..ed0ba1b81 100644 --- a/Lib/fontTools/ttLib/ttFont.py +++ b/Lib/fontTools/ttLib/ttFont.py @@ -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):