Moved fonts access to new resource API

This commit is contained in:
Kovid Goyal 2009-09-07 20:03:19 -06:00
parent f9ff180347
commit 9bd19f734e
36 changed files with 33 additions and 111 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -403,16 +403,15 @@ def prepare_string_for_xml(raw, attribute=False):
return raw return raw
if isosx: if isosx:
import glob, shutil
fdir = os.path.expanduser('~/.fonts') fdir = os.path.expanduser('~/.fonts')
try: try:
if not os.path.exists(fdir): if not os.path.exists(fdir):
os.makedirs(fdir) os.makedirs(fdir)
if not os.path.exists(os.path.join(fdir, 'LiberationSans_Regular.ttf')): if not os.path.exists(os.path.join(fdir, 'LiberationSans_Regular.ttf')):
from calibre.ebooks.lrf.fonts.liberation import __all__ as fonts base = P('fonts/liberation/*.ttf')
for font in fonts: for f in glob.glob(base):
l = {} shutil.copy2(f, fdir)
exec 'from calibre.ebooks.lrf.fonts.liberation.'+font+' import font_data' in l
open(os.path.join(fdir, font+'.ttf'), 'wb').write(l['font_data'])
except: except:
import traceback import traceback
traceback.print_exc() traceback.print_exc()

View File

@ -1,7 +1,6 @@
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import os import os
from calibre.ptempfile import PersistentTemporaryFile
try: try:
from PIL import ImageFont from PIL import ImageFont
@ -22,52 +21,40 @@ FONT_MAP = {
} }
LIBERATION_FONT_MAP = { LIBERATION_FONT_MAP = {
'Swis721 BT Roman' : 'LiberationSans_Regular', 'Swis721 BT Roman' : 'LiberationSans-Regular',
'Dutch801 Rm BT Roman' : 'LiberationSerif_Regular', 'Dutch801 Rm BT Roman' : 'LiberationSerif-Regular',
'Courier10 BT Roman' : 'LiberationMono_Regular', 'Courier10 BT Roman' : 'LiberationMono-Regular',
} }
SYSTEM_FONT_MAP = {}
for key, val in LIBERATION_FONT_MAP.items():
SYSTEM_FONT_MAP[key] = SYSTEM_FONT_PATH + val.replace('_', '-') + '.ttf'
FONT_FILE_MAP = {} FONT_FILE_MAP = {}
SYSTEM_FONT_MAP = {}
for key, val in LIBERATION_FONT_MAP.items():
SYSTEM_FONT_MAP[key] = SYSTEM_FONT_PATH + val + '.ttf'
def get_font_path(name): def get_font_path(name):
if FONT_FILE_MAP.has_key(name) and os.access(FONT_FILE_MAP[name].name, os.R_OK): if FONT_FILE_MAP.has_key(name) and os.access(FONT_FILE_MAP[name], os.R_OK):
return FONT_FILE_MAP[name].name return FONT_FILE_MAP[name]
# translate font into file name # translate font into file name
fname = FONT_MAP[name] for m, s in ((FONT_MAP, 'prs500'), (LIBERATION_FONT_MAP, 'liberation')):
fname = m[name]+'.ttf'
# first, check configuration in /etc/ # first, check configuration in /etc/
etc_file = os.path.join(os.path.sep, 'etc', 'calibre', 'fonts', fname + '.ttf') etc_file = os.path.join(os.path.sep, 'etc', 'calibre', 'fonts', fname)
if os.access(etc_file, os.R_OK): if os.access(etc_file, os.R_OK):
return etc_file return etc_file
# then, try calibre shipped ones # then, try calibre shipped ones
try: f = P('fonts/%s/%s'%(s,fname))
try: if os.path.exists(f):
font_mod = __import__('calibre.ebooks.lrf.fonts.prs500', {}, {}, return f
[fname], -1)
getattr(font_mod, fname)
except (ImportError, AttributeError):
font_mod = __import__('calibre.ebooks.lrf.fonts.liberation', {}, {},
[LIBERATION_FONT_MAP[name]], -1)
p = PersistentTemporaryFile('.ttf', 'font_')
p.write(getattr(font_mod, fname).font_data)
p.close()
FONT_FILE_MAP[name] = p
return p.name
except ImportError:
pass
# finally, try system default ones # finally, try system default ones
if SYSTEM_FONT_MAP.has_key(name) and os.access(SYSTEM_FONT_MAP[name], os.R_OK): if SYSTEM_FONT_MAP.has_key(name) and os.access(SYSTEM_FONT_MAP[name], os.R_OK):
return SYSTEM_FONT_MAP[name] return SYSTEM_FONT_MAP[name]
# not found # not found
raise SystemError, 'font %s (in file %s) not installed' % (name, fname) raise SystemError('font %s (in file %s) not installed' % (name, fname))
def get_font(name, size, encoding='unic'): def get_font(name, size, encoding='unic'):
''' '''

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,5 +0,0 @@
__all__ = ['LiberationMono_Bold', 'LiberationMono_Regular', 'LiberationSans_Bold',
'LiberationSans_Regular', 'LiberationSerif_Bold', 'LiberationSerif_Regular',
'LiberationMono_BoldItalic', 'LiberationMono_Italic',
'LiberationSans_BoldItalic', 'LiberationSans_Italic',
'LiberationSerif_BoldItalic', 'LiberationSerif_Italic']

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,6 +1,6 @@
__license__ = 'GPL v3' __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import collections, itertools import collections, itertools, glob
from PyQt4.QtCore import Qt, QByteArray, SIGNAL from PyQt4.QtCore import Qt, QByteArray, SIGNAL
from PyQt4.QtGui import QGraphicsRectItem, QGraphicsScene, QPen, \ from PyQt4.QtGui import QGraphicsRectItem, QGraphicsScene, QPen, \
@ -410,30 +410,9 @@ class Document(QGraphicsScene):
font_map[font] = [str(i) for i in QFontDatabase.applicationFontFamilies(id)][0] font_map[font] = [str(i) for i in QFontDatabase.applicationFontFamilies(id)][0]
if load_substitutions: if load_substitutions:
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic base = P('fonts/liberation/*.ttf')
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data)) for f in glob.glob(base):
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Italic QFontDatabase.addApplicationFont(f)
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Regular.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Italic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Regular.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Italic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Regular.font_data))
self.font_loader = FontLoader(font_map, self.dpi) self.font_loader = FontLoader(font_map, self.dpi)

View File

@ -5,10 +5,10 @@ __docformat__ = 'restructuredtext en'
''' '''
''' '''
import os, math, re import os, math, re, glob
from PyQt4.Qt import QWidget, QSize, QSizePolicy, QUrl, SIGNAL, Qt, QTimer, \ from PyQt4.Qt import QWidget, QSize, QSizePolicy, QUrl, SIGNAL, Qt, QTimer, \
QPainter, QPalette, QBrush, QFontDatabase, QDialog, \ QPainter, QPalette, QBrush, QFontDatabase, QDialog, \
QByteArray, QColor, QPoint, QImage, QRegion, \ QColor, QPoint, QImage, QRegion, \
QFont, QObject, QApplication, pyqtSignature QFont, QObject, QApplication, pyqtSignature
from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings
@ -20,32 +20,9 @@ from calibre.constants import iswindows
from calibre import prints from calibre import prints
def load_builtin_fonts(): def load_builtin_fonts():
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic base = P('fonts/liberation/*.ttf')
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data)) for f in glob.glob(base):
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Italic QFontDatabase.addApplicationFont(f)
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Regular.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Italic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Regular.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_Italic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_Italic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Bold
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_Bold.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSerif_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSerif_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationSans_Regular
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationSans_Regular.font_data))
#for f in QFontDatabase().families():
# print f
return 'Liberation Serif', 'Liberation Sans', 'Liberation Mono' return 'Liberation Serif', 'Liberation Sans', 'Liberation Mono'
def config(defaults=None): def config(defaults=None):