mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 02:34:06 -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 = []
|
id_range_offset = []
|
||||||
glyph_index_array = []
|
glyph_index_array = []
|
||||||
for i in xrange(len(end_code)-1): # skip the closing codes (0xffff)
|
for i in xrange(len(end_code)-1): # skip the closing codes (0xffff)
|
||||||
indices = []
|
indices = list(cmap[char_code] for char_code in xrange(start_code[i], end_code[i] + 1))
|
||||||
for char_code in xrange(start_code[i], end_code[i] + 1):
|
if indices == list(xrange(indices[0], indices[0] + len(indices))):
|
||||||
indices.append(cmap[char_code])
|
# indices is a contiguous list
|
||||||
if (indices == xrange(indices[0], indices[0] + len(indices))):
|
|
||||||
id_delta_temp = set_id_delta(indices[0] - start_code[i])
|
id_delta_temp = set_id_delta(indices[0] - start_code[i])
|
||||||
id_delta.append(id_delta_temp)
|
id_delta.append(id_delta_temp)
|
||||||
id_range_offset.append(0)
|
id_range_offset.append(0)
|
||||||
else:
|
else:
|
||||||
id_delta.append(0)
|
id_delta.append(0)
|
||||||
id_range_offset.append(2 * (len(end_code) +
|
id_range_offset.append(2 * (len(end_code) + len(glyph_index_array) - i))
|
||||||
len(glyph_index_array) - i))
|
|
||||||
glyph_index_array.extend(indices)
|
glyph_index_array.extend(indices)
|
||||||
id_delta.append(1) # 0xffff + 1 == 0. So this end code maps to .notdef
|
id_delta.append(1) # 0xffff + 1 == 0. So this end code maps to .notdef
|
||||||
id_range_offset.append(0)
|
id_range_offset.append(0)
|
||||||
@ -282,12 +280,10 @@ class CmapTable(UnknownTable):
|
|||||||
data = char_code_array + id_delta_array + rest_array
|
data = char_code_array + id_delta_array + rest_array
|
||||||
|
|
||||||
length = calcsize(fmt) + len(data)
|
length = calcsize(fmt) + len(data)
|
||||||
header = pack(fmt, 4, length, 0,
|
header = pack(fmt, 4, length, 0, 2*seg_count, search_range, entry_selector, range_shift)
|
||||||
2*seg_count, search_range, entry_selector, range_shift)
|
|
||||||
self.bmp_table = header + data
|
self.bmp_table = header + data
|
||||||
|
|
||||||
fmt = b'>4HL'
|
fmt = b'>4HL'
|
||||||
offset = calcsize(fmt)
|
offset = calcsize(fmt)
|
||||||
self.raw = pack(fmt, self.version, self.num_tables, 3, 1, offset) + \
|
self.raw = pack(fmt, self.version, self.num_tables, 3, 1, offset) + self.bmp_table
|
||||||
self.bmp_table
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user