This commit is contained in:
Kovid Goyal 2013-09-19 12:34:59 +05:30
parent 85d09338d7
commit 2bd084ba23

View File

@ -25,7 +25,7 @@ def is_truetype_font(raw):
def get_tables(raw): def get_tables(raw):
num_tables = struct.unpack_from(b'>H', raw, 4)[0] num_tables = struct.unpack_from(b'>H', raw, 4)[0]
offset = 4*3 # start of the table record entries offset = 4*3 # start of the table record entries
for i in xrange(num_tables): for i in xrange(num_tables):
table_tag, table_checksum, table_offset, table_length = struct.unpack_from( table_tag, table_checksum, table_offset, table_length = struct.unpack_from(
b'>4s3L', raw, offset) b'>4s3L', raw, offset)
@ -104,12 +104,14 @@ def decode_name_record(recs):
Get the English names of this font. See Get the English names of this font. See
http://www.microsoft.com/typography/otspec/name.htm for details. http://www.microsoft.com/typography/otspec/name.htm for details.
''' '''
if not recs: return None if not recs:
return None
unicode_names = {} unicode_names = {}
windows_names = {} windows_names = {}
mac_names = {} mac_names = {}
for platform_id, encoding_id, language_id, src in recs: for platform_id, encoding_id, language_id, src in recs:
if language_id > 0x8000: continue if language_id > 0x8000:
continue
if platform_id == 0: if platform_id == 0:
if encoding_id < 4: if encoding_id < 4:
try: try:
@ -124,14 +126,16 @@ def decode_name_record(recs):
elif platform_id == 2: elif platform_id == 2:
codec = {0:'ascii', 1:'utf-16-be', 2:'iso-8859-1'}.get(encoding_id, codec = {0:'ascii', 1:'utf-16-be', 2:'iso-8859-1'}.get(encoding_id,
None) None)
if codec is None: continue if codec is None:
continue
try: try:
unicode_names[language_id] = src.decode(codec) unicode_names[language_id] = src.decode(codec)
except ValueError: except ValueError:
continue continue
elif platform_id == 3: elif platform_id == 3:
codec = {1:16, 10:32}.get(encoding_id, None) codec = {1:16, 10:32}.get(encoding_id, None)
if codec is None: continue if codec is None:
continue
try: try:
windows_names[language_id] = src.decode('utf-%d-be'%codec) windows_names[language_id] = src.decode('utf-%d-be'%codec)
except ValueError: except ValueError: