Fix cmap table generation not handling contiguous indices

Also fix tab indentation in code imported from fonttools.
This commit is contained in:
Kovid Goyal 2013-09-19 12:03:12 +05:30
parent 46ed78b892
commit 85d09338d7

View File

@ -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