Instead of countVars, pass down tableDict
This is the tableDict of current struct being loaded. This does NOT
get propagated down.
Currently unused.
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index 0044603..5191ec3 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -553,10 +553,8 @@
def getConverterByName(self, name):
return self.convertersByName[name]
- def decompile(self, reader, font, countVars=None):
+ def decompile(self, reader, font):
self.compileStatus = 2 # table has been decompiled.
- if countVars is None:
- countVars = {}
self.readFormat(reader)
table = {}
self.__rawTable = table # for debugging
@@ -571,11 +569,11 @@
if conv.repeat:
l = []
for i in range(reader.getCount(conv.repeat) + conv.repeatOffset):
- l.append(conv.read(reader, font, countVars))
+ l.append(conv.read(reader, font, table))
table[conv.name] = l
else:
- table[conv.name] = conv.read(reader, font, countVars)
+ table[conv.name] = conv.read(reader, font, table)
if conv.isCount or conv.isSize:
reader.setCount(conv.name, table[conv.name])
@@ -586,15 +584,13 @@
def ensureDecompiled(self):
if self.compileStatus != 1:
return
- self.decompile(self.reader, self.font, self.countVars)
- del self.reader, self.font, self.countVars
+ self.decompile(self.reader, self.font)
+ del self.reader, self.font
def preCompile(self):
pass # used only by the LookupList class
- def compile(self, writer, font, countVars=None):
- if countVars is None:
- countVars = {}
+ def compile(self, writer, font):
table = self.preWrite(font)
if hasattr(self, 'sortCoverageLast'):
@@ -608,7 +604,7 @@
value = []
writer.getCount(conv.repeat).setValue(len(value) - conv.repeatOffset)
for i in range(len(value)):
- conv.write(writer, font, countVars, value[i], i)
+ conv.write(writer, font, table, value[i], i)
elif conv.isCount:
# Special-case Count values.
# Assumption: a Count field will *always* precede
@@ -618,10 +614,9 @@
table[conv.name] = None
# We add a reference: by the time the data is assembled
# the Count value will be filled in.
- name = conv.name
- writer.writeCountReference(table, name)
+ writer.writeCountReference(table, conv.name)
else:
- conv.write(writer, font, countVars, value)
+ conv.write(writer, font, table, value)
if conv.isSize:
writer.setCount(conv.name, value)
diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py
index 9ffc7b5..765c5fe 100644
--- a/Lib/fontTools/ttLib/tables/otConverters.py
+++ b/Lib/fontTools/ttLib/tables/otConverters.py
@@ -48,11 +48,11 @@
self.isCount = name.endswith("Count")
self.isSize = name.endswith("Size") or name=="DeltaFormat"
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
"""Read a value from the reader."""
raise NotImplementedError, self
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
"""Write a value to the writer."""
raise NotImplementedError, self
@@ -77,17 +77,17 @@
return int(attrs["value"], 0)
class Long(IntValue):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
return reader.readLong()
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeLong(value)
class Version(BaseConverter):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
value = reader.readLong()
assert (value >> 16) == 1, "Unsupported version 0x%08x" % value
return float(value) / 0x10000
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
if value < 0x10000:
value *= 0x10000
value = int(round(value))
@@ -109,15 +109,15 @@
xmlWriter.newline()
class Short(IntValue):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
return reader.readShort()
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeShort(value)
class UShort(IntValue):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
return reader.readUShort()
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeUShort(value)
class Count(Short):
@@ -126,31 +126,31 @@
xmlWriter.newline()
class Tag(SimpleValue):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
return reader.readTag()
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeTag(value)
class GlyphID(SimpleValue):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
value = reader.readUShort()
value = font.getGlyphName(value)
return value
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
value = font.getGlyphID(value)
writer.writeUShort(value)
class Struct(BaseConverter):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
table = self.tableClass()
- table.decompile(reader, font, countVars)
+ table.decompile(reader, font)
return table
- def write(self, writer, font, countVars, value, repeatIndex=None):
- value.compile(writer, font, countVars)
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
+ value.compile(writer, font)
def xmlWrite(self, xmlWriter, font, value, name, attrs):
if value is None:
@@ -174,7 +174,7 @@
class Table(Struct):
- def read(self, reader, font, countVars, lazy=True):
+ def read(self, reader, font, tableDict, lazy=True):
offset = reader.readUShort()
if offset == 0:
return None
@@ -189,12 +189,11 @@
table.reader = subReader
table.font = font
table.compileStatus = 1
- table.countVars = countVars.copy()
else:
- table.decompile(subReader, font, countVars)
+ table.decompile(subReader, font)
return table
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
if value is None:
writer.writeUShort(0)
else:
@@ -204,7 +203,7 @@
subWriter.repeatIndex = repeatIndex
value.preCompile()
writer.writeSubTable(subWriter)
- value.compile(subWriter, font, countVars)
+ value.compile(subWriter, font)
class SubTable(Table):
def getConverter(self, tableType, lookupType):
@@ -219,7 +218,7 @@
tableClass = lookupTypes[lookupType]
return ExtSubTable(self.name, self.repeat, self.repeatOffset, tableClass)
- def read(self, reader, font, countVars, lazy=True):
+ def read(self, reader, font, tableDict, lazy=True):
offset = reader.readULong()
if offset == 0:
return None
@@ -230,19 +229,15 @@
table.reader = subReader
table.font = font
table.compileStatus = 1
- table.countVars = countVars.copy()
else:
- table.decompile(subReader, font, countVars)
+ table.decompile(subReader, font)
return table
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.Extension = 1 # actually, mere presence of the field flags it as an Ext Subtable writer.
if value is None:
writer.writeULong(0)
else:
- # If the subtable has not yet been decompiled, we need to do so.
- if value.compileStatus == 1:
- value.decompile(value.reader, value.font, countVars)
subWriter = writer.getSubWriter()
subWriter.name = self.name
writer.writeSubTable(subWriter)
@@ -252,26 +247,26 @@
data = value.reader.data[value.start:value.end]
subWriter.writeData(data)
else:
- value.compile(subWriter, font, countVars)
+ value.compile(subWriter, font)
class ValueFormat(IntValue):
def __init__(self, name, repeat, repeatOffset, tableClass):
BaseConverter.__init__(self, name, repeat, repeatOffset, tableClass)
self.which = name[-1] == "2"
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
format = reader.readUShort()
reader.setValueFormat(format, self.which)
return format
- def write(self, writer, font, countVars, format, repeatIndex=None):
+ def write(self, writer, font, tableDict, format, repeatIndex=None):
writer.writeUShort(format)
writer.setValueFormat(format, self.which)
class ValueRecord(ValueFormat):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
return reader.readValueRecord(font, self.which)
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
writer.writeValueRecord(value, font, self.which)
def xmlWrite(self, xmlWriter, font, value, name, attrs):
if value is None:
@@ -287,7 +282,7 @@
class DeltaValue(BaseConverter):
- def read(self, reader, font, countVars):
+ def read(self, reader, font, tableDict):
StartSize = reader.getCount("StartSize")
EndSize = reader.getCount("EndSize")
DeltaFormat = reader.getCount("DeltaFormat")
@@ -310,7 +305,7 @@
DeltaValue.append(value)
return DeltaValue
- def write(self, writer, font, countVars, value, repeatIndex=None):
+ def write(self, writer, font, tableDict, value, repeatIndex=None):
StartSize = writer.getCount("StartSize")
EndSize = writer.getCount("EndSize")
DeltaFormat = writer.getCount("DeltaFormat")