From 3ebfea491ea795217e0f9649c23ee81df769a250 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Sun, 24 Nov 2013 19:00:59 -0500 Subject: [PATCH] Move fontTools.ttLib.importXML to fontTools.misc.xmlReader Better matches xmlWriter. --- .../{ttLib/xmlImport.py => misc/xmlReader.py} | 39 ++++++++----------- Lib/fontTools/ttLib/__init__.py | 7 +++- 2 files changed, 21 insertions(+), 25 deletions(-) rename Lib/fontTools/{ttLib/xmlImport.py => misc/xmlReader.py} (77%) diff --git a/Lib/fontTools/ttLib/xmlImport.py b/Lib/fontTools/misc/xmlReader.py similarity index 77% rename from Lib/fontTools/ttLib/xmlImport.py rename to Lib/fontTools/misc/xmlReader.py index f4d9915bb..f01dbcf4f 100644 --- a/Lib/fontTools/ttLib/xmlImport.py +++ b/Lib/fontTools/misc/xmlReader.py @@ -9,9 +9,9 @@ class TTXParseError(Exception): pass BUFSIZE = 0x4000 -class ExpatParser: +class XMLReader: - def __init__(self, ttFont, fileName, progress=None, quiet=False): + def __init__(self, fileName, ttFont, progress=None, quiet=False): self.ttFont = ttFont self.fileName = fileName self.progress = progress @@ -20,18 +20,21 @@ class ExpatParser: self.contentStack = [] self.stackSize = 0 - def parse(self): + def read(self): + if self.progress: + import stat + self.progress.set(0, os.stat(fileName)[stat.ST_SIZE] / 100 or 1) file = open(self.fileName) - self.parseFile(file) + self._parseFile(file) file.close() - def parseFile(self, file): + def _parseFile(self, file): from xml.parsers.expat import ParserCreate parser = ParserCreate() parser.returns_unicode = 0 - parser.StartElementHandler = self.startElementHandler - parser.EndElementHandler = self.endElementHandler - parser.CharacterDataHandler = self.characterDataHandler + parser.StartElementHandler = self._startElementHandler + parser.EndElementHandler = self._endElementHandler + parser.CharacterDataHandler = self._characterDataHandler pos = 0 while 1: @@ -44,7 +47,7 @@ class ExpatParser: self.progress.set(pos / 100) parser.Parse(chunk, 0) - def startElementHandler(self, name, attrs): + def _startElementHandler(self, name, attrs): stackSize = self.stackSize self.stackSize = stackSize + 1 if not stackSize: @@ -60,7 +63,8 @@ class ExpatParser: subFile = attrs.get("src") if subFile is not None: subFile = os.path.join(os.path.dirname(self.fileName), subFile) - importXML(self.ttFont, subFile, self.progress) + subReader = XMLReader(subFile, self.ttFont, self.progress, self.quiet) + subReader.read() self.contentStack.append([]) return tag = ttLib.xmlToTag(name) @@ -96,11 +100,11 @@ class ExpatParser: self.contentStack[-1].append((name, attrs, list)) self.contentStack.append(list) - def characterDataHandler(self, data): + def _characterDataHandler(self, data): if self.stackSize > 1: self.contentStack[-1].append(data) - def endElementHandler(self, name): + def _endElementHandler(self, name): self.stackSize = self.stackSize - 1 del self.contentStack[-1] if self.stackSize == 1: @@ -124,14 +128,3 @@ class ProgressPrinter: def setLabel(self, text): print text - -def importXML(ttFont, fileName, progress=None, quiet=True): - """Import a TTX file (an XML-based text format), so as to recreate - a font object. - """ - if progress: - import stat - progress.set(0, os.stat(fileName)[stat.ST_SIZE] / 100 or 1) - p = ExpatParser(ttFont, fileName, progress, quiet) - p.parse() - diff --git a/Lib/fontTools/ttLib/__init__.py b/Lib/fontTools/ttLib/__init__.py index 5005cd4b8..cd79f00d6 100644 --- a/Lib/fontTools/ttLib/__init__.py +++ b/Lib/fontTools/ttLib/__init__.py @@ -324,8 +324,11 @@ class TTFont: # contain the table which was originally used to extract the # glyph names from (ie. 'post', 'cmap' or 'CFF '). self.getGlyphOrder() - import xmlImport - xmlImport.importXML(self, file, progress, quiet) + + from fontTools.misc import xmlReader + + reader = xmlReader.XMLReader(file, self, progress, quiet) + reader.read() def isLoaded(self, tag): """Return true if the table identified by 'tag' has been