Move a couple of functions outline

This commit is contained in:
Behdad Esfahbod 2023-12-16 20:55:26 -07:00
parent 7471ac6d4d
commit 3806fd2558

View File

@ -140,6 +140,11 @@ class _LazyList(UserList):
return other + list(self)
def _base_converter_read_item(self, i):
self.reader.seek(self.pos + i * self.recordSize)
return self.conv.read(self.reader, self.font, {})
class BaseConverter(object):
"""Base class for converter objects. Apart from the constructor, this
is an abstract class."""
@ -187,11 +192,7 @@ class BaseConverter(object):
l.append(self.read(reader, font, tableDict))
return l
else:
def read_item(self, i):
self.reader.seek(self.pos + i * self.recordSize)
return self.conv.read(self.reader, self.font, {})
l = _LazyList(read_item for i in range(count))
l = _LazyList(_base_converter_read_item for i in range(count))
l.reader = reader.copy()
l.pos = l.reader.pos
l.font = font
@ -1833,6 +1834,20 @@ class VarDataValue(BaseConverter):
return safeEval(attrs["value"])
def cff2_index_read_item(self, i):
self.reader.seek(self.offset_pos + i * self.offSize)
offsets = self.readArray(2)
self.reader.seek(self.data_pos + offsets[0])
item = self.reader.readData(offsets[1] - offsets[0])
if self.itemClass is not None:
obj = self.itemClass()
obj.decompile(item, self.font)
item = obj
return item
class CFF2Index(BaseConverter):
def __init__(
self, name, repeat, aux, tableClass=None, *, itemClass=None, description=""
@ -1855,6 +1870,7 @@ class CFF2Index(BaseConverter):
3: reader.readUInt24Array,
4: reader.readULongArray,
}[offSize]
readArray = getReadArray(reader, offSize)
lazy = font.lazy is not False and count > 8
@ -1877,20 +1893,7 @@ class CFF2Index(BaseConverter):
lastOffset = offset
return items
else:
def read_item(self, i):
self.reader.seek(self.offset_pos + i * self.offSize)
offsets = self.readArray(2)
self.reader.seek(self.data_pos + offsets[0])
item = self.reader.readData(offsets[1] - offsets[0])
if self.itemClass is not None:
obj = self.itemClass()
obj.decompile(item, self.font)
item = obj
return item
l = _LazyList([read_item] * count)
l = _LazyList([cff2_index_read_item] * count)
l.reader = reader.copy()
l.offset_pos = l.reader.pos
l.data_pos = l.offset_pos + (count + 1) * offSize