mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -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'
|
__docformat__ = 'restructuredtext en'
|
||||||
|
|
||||||
from future_builtins import map
|
from future_builtins import map
|
||||||
|
from calibre.utils.fonts.utils import get_all_font_names
|
||||||
|
|
||||||
class FontMetrics(object):
|
class FontMetrics(object):
|
||||||
|
|
||||||
@ -32,6 +33,13 @@ class FontMetrics(object):
|
|||||||
self.os2.read_data()
|
self.os2.read_data()
|
||||||
self.post = self.sfnt[b'post']
|
self.post = self.sfnt[b'post']
|
||||||
self.post.read_data()
|
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):
|
def underline_thickness(self, pixel_size=12.0):
|
||||||
'Thickness for lines (in pixels) at the specified size'
|
'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,
|
return (family_name, subfamily_name, full_name, preferred_family_name,
|
||||||
preferred_subfamily_name, wws_family_name, wws_subfamily_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):
|
def checksum_of_block(raw):
|
||||||
extra = 4 - len(raw)%4
|
extra = 4 - len(raw)%4
|
||||||
raw += b'\0'*extra
|
raw += b'\0'*extra
|
||||||
|
Loading…
x
Reference in New Issue
Block a user