On Thu, Mar 01, 2007 at 04:46:01PM +0200, Marius Gedminas wrote:
> Suggested fix: have pygame/sysfont.py parse ~/.fonts.cache-1. (There's
> a slight complication: most fonts.cache-1 files have three fields per
> line (font name, some number, font properties), while ~/.fonts.cache-1
> has four (font name, some number, some other number, font properties).
>
> Actually, as I recall from a discussion about a different bug[1] (that
> still plagues me in 1.7.1), the CVS version of PyGame uses fc-list to
> find fonts on Unix systems, so this bug should be already fixed in CVS.
>
> [1] http://aspn.activestate.com/ASPN/Mail/Message/pygame-users/2970161
For those who do not want to wait for 1.8, here's a patch that fixes
this problem (and the other one too) in 1.7.1: attached.
Marius Gedminas
--
I code in vi because I don't want to learn another OS. :)
-- Robert Love
Patch for pygame 1.7.1:
* Also parse ~/.fonts.conf-1 on Unix systems to find more fonts (needed
to find many TTF fonts on Ubuntu Edgy).
* Fix font style parsing in fonts.conf-1 files (bug described in
http://aspn.activestate.com/ASPN/Mail/Message/pygame-users/2970161).
--- sysfont.py.orig 2007-03-01 16:25:04.000000000 +0200
+++ sysfont.py 2007-03-01 16:46:51.000000000 +0200
@@ -128,21 +128,25 @@
#read the fonts from a unix 'fonts.cache-1' file
-def read_unix_fontscache(dir, file, fonts):
+def read_unix_fontscache(dir, file, fonts, nfields=3):
file = open(os.path.join(dir, file))
for line in file.readlines():
try:
- font, num, vals = line.split(' ', 2)
+ fields = line.split(' ', nfields-1)
except ValueError:
continue
- font = font.replace('"', '')
+ font = fields[0].replace('"', '')
if font[-4:].lower() not in [".ttf", ".ttc"]:
continue
font = os.path.join(dir, font)
- vals = vals.split(':')
+
+ vals = fields[-1].split(':')
name = _simplename(vals[0][1:])
- bold = vals[1].find('Bold') >= 0
- italic = vals[1].find('Italic') >= 0
+ bold = italic = 0
+ for prop in vals[1:]:
+ if prop.startswith('style='):
+ bold = prop.find('Bold') >= 0
+ italic = prop.find('Italic') >= 0
_addfont(name, bold, italic, font, fonts)
@@ -182,6 +186,13 @@
for p in paths:
if os.path.isdir(p):
os.path.walk(p, _fontwalk, fonts)
+ filename = os.path.expanduser('~/.fonts.cache-1')
+ try:
+ # Unlike other fonts.cache-1 files, this one has four fields per line
+ # rather than three
+ read_unix_fontscache('', filename, fonts, nfields=4)
+ except IOError:
+ pass
return fonts
Attachment:
signature.asc
Description: Digital signature