diff options
| author | pinky <> | 2007-01-07 21:41:39 +0000 |
|---|---|---|
| committer | pinky <> | 2007-01-07 21:41:39 +0000 |
| commit | 05bb5d58295cd959c34f1fbcd5b605cd6dafaacc (patch) | |
| tree | 3b3651037037c1617a54ef3d216e8c11ea8cdddf /bin/reportlab/lib/fonts.py | |
| parent | 62524af2f41454a2302efb21f15a95318d257a76 (diff) | |
Repotrlab 2.0
bzr revid: pinky-b8333ccaab5dad8ff965b6c380fadadf30d5212a
Diffstat (limited to 'bin/reportlab/lib/fonts.py')
| -rw-r--r-- | bin/reportlab/lib/fonts.py | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/bin/reportlab/lib/fonts.py b/bin/reportlab/lib/fonts.py new file mode 100644 index 00000000000..7793530fbc8 --- /dev/null +++ b/bin/reportlab/lib/fonts.py @@ -0,0 +1,89 @@ +#!/bin/env python +#Copyright ReportLab Europe Ltd. 2000-2004 +#see license.txt for license details +#history http://www.reportlab.co.uk/cgi-bin/viewcvs.cgi/public/reportlab/trunk/reportlab/lib/fonts.py +__version__=''' $Id: fonts.py 2385 2004-06-17 15:26:05Z rgbecker $ ''' +import string, sys, os +############################################################################### +# A place to put useful font stuff +############################################################################### +# +# Font Mappings +# The brute force approach to finding the correct postscript font name; +# much safer than the rule-based ones we tried. +# preprocessor to reduce font face names to the shortest list +# possible. Add any aliases you wish; it keeps looking up +# until it finds no more translations to do. Any input +# will be lowercased before checking. +_family_alias = { + 'serif':'times', + 'sansserif':'helvetica', + 'monospaced':'courier', + 'arial':'helvetica' + } +#maps a piddle font to a postscript one. +_tt2ps_map = { + #face, bold, italic -> ps name + ('times', 0, 0) :'Times-Roman', + ('times', 1, 0) :'Times-Bold', + ('times', 0, 1) :'Times-Italic', + ('times', 1, 1) :'Times-BoldItalic', + + ('courier', 0, 0) :'Courier', + ('courier', 1, 0) :'Courier-Bold', + ('courier', 0, 1) :'Courier-Oblique', + ('courier', 1, 1) :'Courier-BoldOblique', + + ('helvetica', 0, 0) :'Helvetica', + ('helvetica', 1, 0) :'Helvetica-Bold', + ('helvetica', 0, 1) :'Helvetica-Oblique', + ('helvetica', 1, 1) :'Helvetica-BoldOblique', + + + # there is only one Symbol font + ('symbol', 0, 0) :'Symbol', + ('symbol', 1, 0) :'Symbol', + ('symbol', 0, 1) :'Symbol', + ('symbol', 1, 1) :'Symbol', + + # ditto for dingbats + ('zapfdingbats', 0, 0) :'ZapfDingbats', + ('zapfdingbats', 1, 0) :'ZapfDingbats', + ('zapfdingbats', 0, 1) :'ZapfDingbats', + ('zapfdingbats', 1, 1) :'ZapfDingbats', + + + } + +_ps2tt_map={} +for k,v in _tt2ps_map.items(): + if not _ps2tt_map.has_key(k): + _ps2tt_map[string.lower(v)] = k + +def ps2tt(psfn): + 'ps fontname to family name, bold, italic' + psfn = string.lower(psfn) + if _ps2tt_map.has_key(psfn): + return _ps2tt_map[psfn] + raise ValueError, "Can't map determine family/bold/italic for %s" % psfn + +def tt2ps(fn,b,i): + 'family name + bold & italic to ps font name' + K = (string.lower(fn),b,i) + if _tt2ps_map.has_key(K): + return _tt2ps_map[K] + else: + fn, b1, i1 = ps2tt(K[0]) + K = fn, b1|b, i1|i + if _tt2ps_map.has_key(K): + return _tt2ps_map[K] + raise ValueError, "Can't find concrete font for family=%s, bold=%d, italic=%d" % (fn, b, i) + +def addMapping(face, bold, italic, psname): + 'allow a custom font to be put in the mapping' + k = (string.lower(face), bold, italic) + _tt2ps_map[k] = psname + # rebuild inverse - inefficient + for k,v in _tt2ps_map.items(): + if not _ps2tt_map.has_key(k): + _ps2tt_map[string.lower(v)] = k |
