* src/docgen/LPRDoc.py: Font autodetection: trying freefont,

MS fonts, and then stock Gnome fonts.


svn: r2981
This commit is contained in:
Alex Roitman 2004-03-08 22:32:13 +00:00
parent 0f8da3197c
commit ee99826261
2 changed files with 90 additions and 17 deletions

View File

@ -1,3 +1,7 @@
2004-03-08 Alex Roitman <shura@alex.neuro.umn.edu>
* src/docgen/LPRDoc.py: Font autodetection: trying freefont,
MS fonts, and then stock Gnome fonts.
2004-03-07 Alex Roitman <shura@alex.neuro.umn.edu> 2004-03-07 Alex Roitman <shura@alex.neuro.umn.edu>
* src/docgen/LPRDoc.py: Support for graphic reports. * src/docgen/LPRDoc.py: Support for graphic reports.

View File

@ -55,7 +55,10 @@ newpath = [
] ]
sys.path = newpath + sys.path sys.path = newpath + sys.path
### end FIXME ### ### end FIXME ###
import gnomeprint, gnomeprint.ui import gnomeprint, gnomeprint.ui
### FIXME ###
if gnomeprint.Context.__dict__.has_key('grestore'): if gnomeprint.Context.__dict__.has_key('grestore'):
support_photos = 1 support_photos = 1
else: else:
@ -63,6 +66,7 @@ else:
print "LPRDoc: Photos and rotated text (used in TimeChart)" print "LPRDoc: Photos and rotated text (used in TimeChart)"
print "are not supported for direct priting." print "are not supported for direct priting."
print "Get gnome-python from CVS or wait for the next gnome-python release." print "Get gnome-python from CVS or wait for the next gnome-python release."
### end FIXME ###
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #
@ -89,13 +93,77 @@ _SUPER_ELEVATION_FRACTION = 0.3
_SUPER_SIZE_REDUCTION = 2 _SUPER_SIZE_REDUCTION = 2
# Font constants -- specific for gnome-print # Font constants -- specific for gnome-print
_FONT_SANS_SERIF = "Arial" _TTF_FREEFONT = ( ( 'FreeSerif Medium',
_FONT_SERIF = "Times New Roman" 'FreeSerif Bold',
_FONT_MONOSPACE = "Courier New" 'FreeSerif Italic',
_FONT_BOLD = "Bold" 'FreeSerif BoldItalic' ),
_FONT_ITALIC = "Italic" ( 'FreeSans Medium',
_FONT_BOLD_ITALIC = "Bold Italic" 'FreeSans Bold',
_FONT_REGULAR = "Regular" 'FreeSans Oblique',
'FreeSans BoldOblique'),
( 'FreeMono Medium',
'FreeMono Bold',
'FreeMono Oblique',
'FreeMono BoldOblique')
)
_MS_TTFONT = ( ( 'Times New Roman Regular',
'Times New Roman Bold',
'Times New Roman Italic',
'Times New Roman Bold Italic' ),
( 'Arial Regular',
'Arial Bold',
'Arial Italic',
'Arial Bold Italic'),
( 'Courier New Regular',
'Courier New Bold',
'Courier New Italic',
'Courier New Bold Italic')
)
_GNOME_FONT = ( ( 'Serif Regular',
'Serif Bold',
'Serif Italic',
'Serif Bold Italic' ),
( 'Sans Regular',
'Sans Bold',
'Sans Italic',
'Sans Bold Italic'),
( 'Monospace Regular',
'Monospace New Bold',
'Monospace New Italic',
'Monospace New Bold Italic')
)
# Search for ttf-freefont first
ttf_not_found = 0
for family in _TTF_FREEFONT:
for font in family:
if font not in gnomeprint.font_list():
ttf_not_found = 1
break
if ttf_not_found:
print "Free true type fonts not found."
# Search for MS ttfs
ms_not_found = 0
for family in _MS_TTFONT:
for font in family:
if font not in gnomeprint.font_list():
ms_not_found = 1
break
if ms_not_found:
print "Microsoft true type fonts not found."
print "Using Gnome standard fonts."
print "Non-ascii characters will appear garbled in the output."
print "INSTALL Free true type fonts from http://www.nongnu.org/freefont/"
_FONT_SET = _GNOME_FONT
else:
print "Found Microsoft true type fonts. Will use them for now."
print "These fonts are not free. "
print "We would advise you to switch to Free true type fonts"
print "INSTALL Free true type fonts from http://www.nongnu.org/freefont/"
_FONT_SET = _MS_TTFONT
else:
_FONT_SET = _TTF_FREEFONT
# Formatting directive constants # Formatting directive constants
_LINE_BREAK = "Break" _LINE_BREAK = "Break"
@ -127,24 +195,25 @@ def find_font_from_fontstyle(fontstyle):
fontstyle - a BaseDoc.FontStyle() instance fontstyle - a BaseDoc.FontStyle() instance
""" """
if fontstyle.get_type_face() == BaseDoc.FONT_SANS_SERIF: if fontstyle.get_type_face() == BaseDoc.FONT_SERIF:
face = _FONT_SANS_SERIF family = _FONT_SET[0]
elif fontstyle.get_type_face() == BaseDoc.FONT_SERIF: elif fontstyle.get_type_face() == BaseDoc.FONT_SANS_SERIF:
face = _FONT_SERIF family = _FONT_SET[1]
elif fontstyle.get_type_face() == BaseDoc.FONT_MONOSPACE: elif fontstyle.get_type_face() == BaseDoc.FONT_MONOSPACE:
face = _FONT_MONOSPACE family = _FONT_SET[2]
if fontstyle.get_bold(): if fontstyle.get_bold():
modifier = _FONT_BOLD
if fontstyle.get_italic(): if fontstyle.get_italic():
modifier = _FONT_BOLD_ITALIC font = family[3]
elif fontstyle.get_italic():
modifier = _FONT_ITALIC
else: else:
modifier = _FONT_REGULAR font = family[1]
elif fontstyle.get_italic():
font = family[2]
else:
font = family[0]
size = fontstyle.get_size() size = fontstyle.get_size()
return gnomeprint.font_find_closest("%s %s" % (face, modifier),size) return gnomeprint.font_find_closest(font,size)
#------------------------------------------------------------------------ #------------------------------------------------------------------------
# #