Micro-optimize cmap subtable format 4 loading
This commit is contained in:
parent
0d182bfb80
commit
2db5eca0df
@ -665,18 +665,22 @@ class cmap_format_4(CmapSubtable):
|
||||
charCodes = []
|
||||
gids = []
|
||||
for i in range(len(startCode) - 1): # don't do 0xffff!
|
||||
start = startCode[i]
|
||||
delta = idDelta[i]
|
||||
rangeOffset = idRangeOffset[i]
|
||||
# *someone* needs to get killed.
|
||||
partial = rangeOffset // 2 - start + i - len(idRangeOffset)
|
||||
|
||||
rangeCharCodes = list(range(startCode[i], endCode[i] + 1))
|
||||
charCodes.extend(rangeCharCodes)
|
||||
for charCode in rangeCharCodes:
|
||||
rangeOffset = idRangeOffset[i]
|
||||
if rangeOffset == 0:
|
||||
glyphID = charCode + idDelta[i]
|
||||
glyphID = charCode + delta
|
||||
else:
|
||||
# *someone* needs to get killed.
|
||||
index = rangeOffset // 2 + (charCode - startCode[i]) + i - len(idRangeOffset)
|
||||
index = charCode + partial
|
||||
assert (index < lenGIArray), "In format 4 cmap, range (%d), the calculated index (%d) into the glyph index array is not less than the length of the array (%d) !" % (i, index, lenGIArray)
|
||||
if glyphIndexArray[index] != 0: # if not missing glyph
|
||||
glyphID = glyphIndexArray[index] + idDelta[i]
|
||||
glyphID = glyphIndexArray[index] + delta
|
||||
else:
|
||||
glyphID = 0 # missing glyph
|
||||
gids.append(glyphID % 0x10000)
|
||||
|
Loading…
x
Reference in New Issue
Block a user