Create subReaders lazily

Should improve memory usage
This commit is contained in:
Behdad Esfahbod 2013-11-24 18:28:20 -05:00
parent e84f9fd1b5
commit c491f45eff
2 changed files with 16 additions and 17 deletions

View File

@ -585,8 +585,9 @@ class BaseTable(object):
def ensureDecompiled(self):
if self.compileStatus != 1:
return
self.decompile(self.reader, self.font)
del self.reader, self.font
subReader = self.reader.getSubReader(self.offset)
self.decompile(subReader, self.font)
del self.reader, self.font, self.offset
def preCompile(self):
pass # used only by the LookupList class

View File

@ -183,14 +183,13 @@ class Table(Struct):
print "*** Warning: offset is not 0, yet suspiciously low (%s). table: %s" \
% (offset, self.tableClass.__name__)
return None
subReader = reader.getSubReader(offset)
table = self.tableClass()
if lazy:
table.reader = subReader
table.font = font
table.compileStatus = 1
else:
table.decompile(subReader, font)
table.reader = reader
table.offset = offset
table.font = font
table.compileStatus = 1
if not lazy:
table.ensureDecompiled()
return table
def write(self, writer, font, tableDict, value, repeatIndex=None):
@ -222,15 +221,14 @@ class ExtSubTable(Table):
offset = reader.readULong()
if offset == 0:
return None
subReader = reader.getSubReader(offset)
table = self.tableClass()
table.start = subReader.offset
if lazy:
table.reader = subReader
table.font = font
table.compileStatus = 1
else:
table.decompile(subReader, font)
table.start = reader.offset + offset
table.reader = reader
table.offset = offset
table.font = font
table.compileStatus = 1
if not lazy:
table.ensureDecompiled()
return table
def write(self, writer, font, tableDict, value, repeatIndex=None):