mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-08 18:54:09 -04:00
Get all font names from the name table
This commit is contained in:
parent
d28e60c748
commit
b8340b0644
@ -8,6 +8,7 @@ __copyright__ = '2012, Kovid Goyal <kovid at kovidgoyal.net>'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
from future_builtins import map
|
||||
from calibre.utils.fonts.utils import get_all_font_names
|
||||
|
||||
class FontMetrics(object):
|
||||
|
||||
@ -32,6 +33,13 @@ class FontMetrics(object):
|
||||
self.os2.read_data()
|
||||
self.post = self.sfnt[b'post']
|
||||
self.post.read_data()
|
||||
self.names = get_all_font_names(self.sfnt[b'name'].raw, raw_is_table=True)
|
||||
|
||||
@property
|
||||
def postscript_name(self):
|
||||
if 'postscript_name' in self.names:
|
||||
return self.names['postscript_name']
|
||||
return self.names['full_name'].replace(' ', '')
|
||||
|
||||
def underline_thickness(self, pixel_size=12.0):
|
||||
'Thickness for lines (in pixels) at the specified size'
|
||||
|
@ -208,6 +208,36 @@ def get_font_names2(raw, raw_is_table=False):
|
||||
return (family_name, subfamily_name, full_name, preferred_family_name,
|
||||
preferred_subfamily_name, wws_family_name, wws_subfamily_name)
|
||||
|
||||
def get_all_font_names(raw, raw_is_table=False):
|
||||
records = _get_font_names(raw, raw_is_table)
|
||||
ans = {}
|
||||
|
||||
for name, num in {'family_name':1, 'subfamily_name':2, 'full_name':4,
|
||||
'preferred_family_name':16, 'preferred_subfamily_name':17,
|
||||
'wws_family_name':21, 'wws_subfamily_name':22}.iteritems():
|
||||
try:
|
||||
ans[name] = decode_name_record(records[num])
|
||||
except (IndexError, KeyError, ValueError):
|
||||
continue
|
||||
if not ans[name]:
|
||||
del ans[name]
|
||||
|
||||
for platform_id, encoding_id, language_id, src in records[6]:
|
||||
if (platform_id, encoding_id, language_id) == (1, 0, 0):
|
||||
try:
|
||||
ans['postscript_name'] = src.decode('utf-8')
|
||||
break
|
||||
except ValueError:
|
||||
continue
|
||||
elif (platform_id, encoding_id, language_id) == (3, 1, 1033):
|
||||
try:
|
||||
ans['postscript_name'] = src.decode('utf-16-be')
|
||||
break
|
||||
except ValueError:
|
||||
continue
|
||||
|
||||
return ans
|
||||
|
||||
def checksum_of_block(raw):
|
||||
extra = 4 - len(raw)%4
|
||||
raw += b'\0'*extra
|
||||
|
Loading…
x
Reference in New Issue
Block a user