Create subReaders lazily
Should improve memory usage
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index 4fcc411..f3876f4 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -585,8 +585,9 @@
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
diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py
index b96ef5c..8345094 100644
--- a/Lib/fontTools/ttLib/tables/otConverters.py
+++ b/Lib/fontTools/ttLib/tables/otConverters.py
@@ -183,14 +183,13 @@
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 @@
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):