Seprate longOffset from ExtSubTable
diff --git a/Lib/fontTools/ttLib/tables/otBase.py b/Lib/fontTools/ttLib/tables/otBase.py
index 51f7199..adf4fc6 100644
--- a/Lib/fontTools/ttLib/tables/otBase.py
+++ b/Lib/fontTools/ttLib/tables/otBase.py
@@ -217,13 +217,9 @@
def getDataLength(self):
"""Return the length of this table in bytes, without subtables."""
l = 0
- if hasattr(self, "Extension"):
- longOffset = 1
- else:
- longOffset = 0
for item in self.items:
if hasattr(item, "getData") or hasattr(item, "getCountData"):
- if longOffset:
+ if self.longOffset:
l = l + 4 # sizeof(ULong)
else:
l = l + 2 # sizeof(UShort)
@@ -234,17 +230,13 @@
def getData(self):
"""Assemble the data for this writer/table, without subtables."""
items = list(self.items) # make a shallow copy
- if hasattr(self,"Extension"):
- longOffset = 1
- else:
- longOffset = 0
pos = self.pos
numItems = len(items)
for i in range(numItems):
item = items[i]
if hasattr(item, "getData"):
- if longOffset:
+ if self.longOffset:
items[i] = packULong(item.pos - pos)
else:
try:
diff --git a/Lib/fontTools/ttLib/tables/otConverters.py b/Lib/fontTools/ttLib/tables/otConverters.py
index 07e5edc..0ddc04d 100644
--- a/Lib/fontTools/ttLib/tables/otConverters.py
+++ b/Lib/fontTools/ttLib/tables/otConverters.py
@@ -35,7 +35,7 @@
return converters, convertersByName
-class BaseConverter:
+class BaseConverter(object):
"""Base class for converter objects. Apart from the constructor, this
is an abstract class."""
@@ -174,6 +174,8 @@
class Table(Struct):
+ longOffset = False
+
def readOffset(self, reader):
return reader.readUShort()
@@ -202,6 +204,7 @@
return table
def write(self, writer, font, tableDict, value, repeatIndex=None):
+ writer.longOffset = self.longOffset
if value is None:
self.writeNullOffset(writer)
else:
@@ -212,16 +215,21 @@
writer.writeSubTable(subWriter)
value.compile(subWriter, font)
+class LTable(Table):
+
+ longOffset = True
+
+ def readOffset(self, reader):
+ return reader.readULong()
+
+
class SubTable(Table):
def getConverter(self, tableType, lookupType):
tableClass = self.lookupTypes[tableType][lookupType]
return self.__class__(self.name, self.repeat, self.repeatOffset, tableClass)
-class ExtSubTable(SubTable):
-
- def readOffset(self, reader):
- return reader.readULong()
+class ExtSubTable(LTable, SubTable):
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.
@@ -322,7 +330,7 @@
"GlyphID": GlyphID,
"struct": Struct,
"Offset": Table,
- "LOffset": ExtSubTable,
+ "LOffset": LTable,
"ValueRecord": ValueRecord,
"DeltaValue": DeltaValue,
}