added support for the new ttdump -s output: read file references from mini-ttx file
git-svn-id: svn://svn.code.sf.net/p/fonttools/code/trunk@213 4cde692c-a291-49d1-8350-778aa11640f8
This commit is contained in:
parent
0f29303474
commit
4bb05c6ad4
@ -1,6 +1,7 @@
|
|||||||
from fontTools import ttLib
|
from fontTools import ttLib
|
||||||
from fontTools.misc.textTools import safeEval
|
from fontTools.misc.textTools import safeEval
|
||||||
from fontTools.ttLib.tables.DefaultTable import DefaultTable
|
from fontTools.ttLib.tables.DefaultTable import DefaultTable
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
class TTXParseError(Exception): pass
|
class TTXParseError(Exception): pass
|
||||||
@ -10,14 +11,15 @@ BUFSIZE = 0x4000
|
|||||||
|
|
||||||
class ExpatParser:
|
class ExpatParser:
|
||||||
|
|
||||||
def __init__(self, ttFont, progress=None):
|
def __init__(self, ttFont, fileName, progress=None):
|
||||||
self.ttFont = ttFont
|
self.ttFont = ttFont
|
||||||
|
self.fileName = fileName
|
||||||
self.progress = progress
|
self.progress = progress
|
||||||
self.root = None
|
self.root = None
|
||||||
self.contentStack = []
|
self.contentStack = []
|
||||||
self.stackSize = 0
|
self.stackSize = 0
|
||||||
|
|
||||||
def parseFile(self, file):
|
def parse(self):
|
||||||
from xml.parsers.expat import ParserCreate
|
from xml.parsers.expat import ParserCreate
|
||||||
parser = ParserCreate()
|
parser = ParserCreate()
|
||||||
parser.returns_unicode = 0
|
parser.returns_unicode = 0
|
||||||
@ -25,6 +27,7 @@ class ExpatParser:
|
|||||||
parser.EndElementHandler = self.endElementHandler
|
parser.EndElementHandler = self.endElementHandler
|
||||||
parser.CharacterDataHandler = self.characterDataHandler
|
parser.CharacterDataHandler = self.characterDataHandler
|
||||||
|
|
||||||
|
file = open(self.fileName)
|
||||||
pos = 0
|
pos = 0
|
||||||
while 1:
|
while 1:
|
||||||
chunk = file.read(BUFSIZE)
|
chunk = file.read(BUFSIZE)
|
||||||
@ -35,6 +38,7 @@ class ExpatParser:
|
|||||||
if self.progress:
|
if self.progress:
|
||||||
self.progress.set(pos / 100)
|
self.progress.set(pos / 100)
|
||||||
parser.Parse(chunk, 0)
|
parser.Parse(chunk, 0)
|
||||||
|
file.close()
|
||||||
|
|
||||||
def startElementHandler(self, name, attrs):
|
def startElementHandler(self, name, attrs):
|
||||||
stackSize = self.stackSize
|
stackSize = self.stackSize
|
||||||
@ -42,12 +46,19 @@ class ExpatParser:
|
|||||||
if not stackSize:
|
if not stackSize:
|
||||||
if name <> "ttFont":
|
if name <> "ttFont":
|
||||||
raise TTXParseError, "illegal root tag: %s" % name
|
raise TTXParseError, "illegal root tag: %s" % name
|
||||||
sfntVersion = attrs.get("sfntVersion", "\000\001\000\000")
|
sfntVersion = attrs.get("sfntVersion")
|
||||||
if len(sfntVersion) <> 4:
|
if sfntVersion is not None:
|
||||||
sfntVersion = safeEval('"' + sfntVersion + '"')
|
if len(sfntVersion) <> 4:
|
||||||
self.ttFont.sfntVersion = sfntVersion
|
sfntVersion = safeEval('"' + sfntVersion + '"')
|
||||||
|
self.ttFont.sfntVersion = sfntVersion
|
||||||
self.contentStack.append([])
|
self.contentStack.append([])
|
||||||
elif stackSize == 1:
|
elif stackSize == 1:
|
||||||
|
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)
|
||||||
|
self.contentStack.append([])
|
||||||
|
return
|
||||||
msg = "Parsing '%s' table..." % ttLib.xmltag2tag(name)
|
msg = "Parsing '%s' table..." % ttLib.xmltag2tag(name)
|
||||||
if self.progress:
|
if self.progress:
|
||||||
self.progress.setlabel(msg)
|
self.progress.setlabel(msg)
|
||||||
@ -120,8 +131,6 @@ def importXML(ttFont, fileName, progress=None):
|
|||||||
if progress:
|
if progress:
|
||||||
import stat
|
import stat
|
||||||
progress.set(0, os.stat(fileName)[stat.ST_SIZE] / 100 or 1)
|
progress.set(0, os.stat(fileName)[stat.ST_SIZE] / 100 or 1)
|
||||||
p = ExpatParser(ttFont, progress)
|
p = ExpatParser(ttFont, fileName, progress)
|
||||||
file = open(fileName)
|
p.parse()
|
||||||
p.parseFile(file)
|
|
||||||
file.close()
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user