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
if isosx:
import glob, shutil
fdir = os.path.expanduser('~/.fonts')
try:
if not os.path.exists(fdir):
os.makedirs(fdir)
if not os.path.exists(os.path.join(fdir, 'LiberationSans_Regular.ttf')):
from calibre.ebooks.lrf.fonts.liberation import __all__ as fonts
for font in fonts:
l = {}
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'])
base = P('fonts/liberation/*.ttf')
for f in glob.glob(base):
shutil.copy2(f, fdir)
except:
import traceback
traceback.print_exc()

View File

@ -1,7 +1,6 @@
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import os
from calibre.ptempfile import PersistentTemporaryFile
try:
from PIL import ImageFont
@ -22,52 +21,40 @@ FONT_MAP = {
}
LIBERATION_FONT_MAP = {
'Swis721 BT Roman' : 'LiberationSans_Regular',
'Dutch801 Rm BT Roman' : 'LiberationSerif_Regular',
'Courier10 BT Roman' : 'LiberationMono_Regular',
'Swis721 BT Roman' : 'LiberationSans-Regular',
'Dutch801 Rm BT Roman' : 'LiberationSerif-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 = {}
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):
if FONT_FILE_MAP.has_key(name) and os.access(FONT_FILE_MAP[name].name, os.R_OK):
return FONT_FILE_MAP[name].name
if FONT_FILE_MAP.has_key(name) and os.access(FONT_FILE_MAP[name], os.R_OK):
return FONT_FILE_MAP[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/
etc_file = os.path.join(os.path.sep, 'etc', 'calibre', 'fonts', fname + '.ttf')
if os.access(etc_file, os.R_OK):
return etc_file
# first, check configuration in /etc/
etc_file = os.path.join(os.path.sep, 'etc', 'calibre', 'fonts', fname)
if os.access(etc_file, os.R_OK):
return etc_file
# then, try calibre shipped ones
try:
try:
font_mod = __import__('calibre.ebooks.lrf.fonts.prs500', {}, {},
[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
# then, try calibre shipped ones
f = P('fonts/%s/%s'%(s,fname))
if os.path.exists(f):
return f
# finally, try system default ones
if SYSTEM_FONT_MAP.has_key(name) and os.access(SYSTEM_FONT_MAP[name], os.R_OK):
return SYSTEM_FONT_MAP[name]
# 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'):
'''

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'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import collections, itertools
import collections, itertools, glob
from PyQt4.QtCore import Qt, QByteArray, SIGNAL
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]
if load_substitutions:
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Italic
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))
base = P('fonts/liberation/*.ttf')
for f in glob.glob(base):
QFontDatabase.addApplicationFont(f)
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, \
QPainter, QPalette, QBrush, QFontDatabase, QDialog, \
QByteArray, QColor, QPoint, QImage, QRegion, \
QColor, QPoint, QImage, QRegion, \
QFont, QObject, QApplication, pyqtSignature
from PyQt4.QtWebKit import QWebPage, QWebView, QWebSettings
@ -20,32 +20,9 @@ from calibre.constants import iswindows
from calibre import prints
def load_builtin_fonts():
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_BoldItalic
QFontDatabase.addApplicationFontFromData(QByteArray(LiberationMono_BoldItalic.font_data))
from calibre.ebooks.lrf.fonts.liberation import LiberationMono_Italic
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
base = P('fonts/liberation/*.ttf')
for f in glob.glob(base):
QFontDatabase.addApplicationFont(f)
return 'Liberation Serif', 'Liberation Sans', 'Liberation Mono'
def config(defaults=None):