mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Fix cmap table generation not handling contiguous indices
Also fix tab indentation in code imported from fonttools.
This commit is contained in:
parent
46ed78b892
commit
85d09338d7
@ -253,17 +253,15 @@ class CmapTable(UnknownTable):
|
||||
id_range_offset = []
|
||||
glyph_index_array = []
|
||||
for i in xrange(len(end_code)-1): # skip the closing codes (0xffff)
|
||||
indices = []
|
||||
for char_code in xrange(start_code[i], end_code[i] + 1):
|
||||
indices.append(cmap[char_code])
|
||||
if (indices == xrange(indices[0], indices[0] + len(indices))):
|
||||
indices = list(cmap[char_code] for char_code in xrange(start_code[i], end_code[i] + 1))
|
||||
if indices == list(xrange(indices[0], indices[0] + len(indices))):
|
||||
# indices is a contiguous list
|
||||
id_delta_temp = set_id_delta(indices[0] - start_code[i])
|
||||
id_delta.append(id_delta_temp)
|
||||
id_range_offset.append(0)
|
||||
else:
|
||||
id_delta.append(0)
|
||||
id_range_offset.append(2 * (len(end_code) +
|
||||
len(glyph_index_array) - i))
|
||||
id_range_offset.append(2 * (len(end_code) + len(glyph_index_array) - i))
|
||||
glyph_index_array.extend(indices)
|
||||
id_delta.append(1) # 0xffff + 1 == 0. So this end code maps to .notdef
|
||||
id_range_offset.append(0)
|
||||
@ -282,12 +280,10 @@ class CmapTable(UnknownTable):
|
||||
data = char_code_array + id_delta_array + rest_array
|
||||
|
||||
length = calcsize(fmt) + len(data)
|
||||
header = pack(fmt, 4, length, 0,
|
||||
2*seg_count, search_range, entry_selector, range_shift)
|
||||
header = pack(fmt, 4, length, 0, 2*seg_count, search_range, entry_selector, range_shift)
|
||||
self.bmp_table = header + data
|
||||
|
||||
fmt = b'>4HL'
|
||||
offset = calcsize(fmt)
|
||||
self.raw = pack(fmt, self.version, self.num_tables, 3, 1, offset) + \
|
||||
self.bmp_table
|
||||
self.raw = pack(fmt, self.version, self.num_tables, 3, 1, offset) + self.bmp_table
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user