When lazy-loading tables, copy ValueFormat
Otherwise it may be overwritten before we use it.
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index f752845..0e1e1f7 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -98,16 +98,19 @@
self.valueFormat = valueFormat
self.cachingStats = cachingStats
- def getSubReader(self, offset):
+ def getSubReader(self, offset, persistent=False):
offset = self.offset + offset
if self.cachingStats is not None:
try:
self.cachingStats[offset] = self.cachingStats[offset] + 1
except KeyError:
self.cachingStats[offset] = 1
-
+ valueFormat = self.valueFormat
+ if persistent:
+ valueFormat = tuple(ValueRecordFactory(v) for v in valueFormat)
+
subReader = self.__class__(self.data, self.tableType, offset,
- self.valueFormat, self.cachingStats)
+ valueFormat, self.cachingStats)
return subReader
def readUShort(self):
@@ -743,6 +746,9 @@
class ValueRecordFactory:
"""Given a format code, this object convert ValueRecords."""
+
+ def __init__(self, other=None):
+ self.format = other.format if other else None
def setFormat(self, valueFormat):
format = []
diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py
index dfd3b30..544a7ee 100644
--- a/Lib/fontTools/ttLib/tables/otConverters.py
+++ b/Lib/fontTools/ttLib/tables/otConverters.py
@@ -159,7 +159,9 @@
class Table(Struct):
- def read(self, reader, font, tableStack):
+ def read(self, reader, font, tableStack, lazy=True):
+ # For now, we lazy-decompile all tables. Perhaps we should
+ # use a more sophisticated heuristic here.
offset = reader.readUShort()
if offset == 0:
return None
@@ -168,11 +170,9 @@
print "*** Warning: offset is not 0, yet suspiciously low (%s). table: %s" \
% (offset, self.tableClass.__name__)
return None
- subReader = reader.getSubReader(offset)
+ subReader = reader.getSubReader(offset, persistent=lazy)
table = self.tableClass()
- # For now, we lazy-decompile all tables. Perhaps we should
- # use a more sophisticated heuristic here.
- if True:
+ if lazy:
# Lazy decompile
table.reader = subReader
table.font = font