[CFF2Index] Make even faster
Load offsets on-demand as well.
This commit is contained in:
parent
feb6820d03
commit
7de1306d92
@ -1847,16 +1847,19 @@ class CFF2Index(BaseConverter):
|
|||||||
if count == 0:
|
if count == 0:
|
||||||
return []
|
return []
|
||||||
offSize = reader.readUInt8()
|
offSize = reader.readUInt8()
|
||||||
readArray = {
|
|
||||||
|
def getReadArray(reader, offSize):
|
||||||
|
return {
|
||||||
1: reader.readUInt8Array,
|
1: reader.readUInt8Array,
|
||||||
2: reader.readUShortArray,
|
2: reader.readUShortArray,
|
||||||
3: reader.readUInt24Array,
|
3: reader.readUInt24Array,
|
||||||
4: reader.readULongArray,
|
4: reader.readULongArray,
|
||||||
}[offSize]
|
}[offSize]
|
||||||
offsets = readArray(count + 1)
|
readArray = getReadArray(reader, offSize)
|
||||||
|
|
||||||
lazy = font.lazy is not False and count > 8
|
lazy = font.lazy is not False and count > 8
|
||||||
if not lazy:
|
if not lazy:
|
||||||
|
offsets = readArray(count + 1)
|
||||||
items = []
|
items = []
|
||||||
lastOffset = offsets.pop(0)
|
lastOffset = offsets.pop(0)
|
||||||
reader.readData(lastOffset) # In case first offset is not 0
|
reader.readData(lastOffset) # In case first offset is not 0
|
||||||
@ -1875,8 +1878,10 @@ class CFF2Index(BaseConverter):
|
|||||||
return items
|
return items
|
||||||
else:
|
else:
|
||||||
def read_item(self, i):
|
def read_item(self, i):
|
||||||
self.reader.seek(self.pos + self.offsets[i])
|
self.reader.seek(self.offset_pos + i * self.offSize)
|
||||||
item = self.reader.readData(self.offsets[i + 1] - self.offsets[i])
|
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:
|
if self.itemClass is not None:
|
||||||
obj = self.itemClass()
|
obj = self.itemClass()
|
||||||
@ -1885,12 +1890,16 @@ class CFF2Index(BaseConverter):
|
|||||||
|
|
||||||
return item
|
return item
|
||||||
|
|
||||||
l = _LazyList(read_item for i in range(count))
|
l = _LazyList([read_item] * count)
|
||||||
l.reader = reader.copy()
|
l.reader = reader.copy()
|
||||||
l.pos = l.reader.pos
|
l.offset_pos = l.reader.pos
|
||||||
|
l.data_pos = l.offset_pos + (count + 1) * offSize
|
||||||
l.font = font
|
l.font = font
|
||||||
l.itemClass = self.itemClass
|
l.itemClass = self.itemClass
|
||||||
l.offsets = offsets
|
l.offSize = offSize
|
||||||
|
l.readArray = getReadArray(l.reader, offSize)
|
||||||
|
|
||||||
|
# TODO: Advance reader
|
||||||
|
|
||||||
return l
|
return l
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user