diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py index 4fcc411a7..f3876f4c5 100644 --- a/Lib/fontTools/ttLib/tables/otBase.py +++ b/Lib/fontTools/ttLib/tables/otBase.py @@ -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 diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py index b96ef5caf..8345094a8 100644 --- a/Lib/fontTools/ttLib/tables/otConverters.py +++ b/Lib/fontTools/ttLib/tables/otConverters.py @@ -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):