~ubuntu-branches/ubuntu/wily/python-imaging/wily

« back to all changes in this revision

Viewing changes to .pc/git-updates.diff/PIL/ImageFont.py

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-01-31 20:49:20 UTC
  • mfrom: (1.1.4)
  • mto: This revision was merged to the branch mainline in revision 29.
  • Revision ID: package-import@ubuntu.com-20130131204920-7tnuhqhlsqdza4c2
Rewrite build dependencies to allow cross builds.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# The Python Imaging Library.
 
3
# $Id$
 
4
#
 
5
# PIL raster font management
 
6
#
 
7
# History:
 
8
# 1996-08-07 fl   created (experimental)
 
9
# 1997-08-25 fl   minor adjustments to handle fonts from pilfont 0.3
 
10
# 1999-02-06 fl   rewrote most font management stuff in C
 
11
# 1999-03-17 fl   take pth files into account in load_path (from Richard Jones)
 
12
# 2001-02-17 fl   added freetype support
 
13
# 2001-05-09 fl   added TransposedFont wrapper class
 
14
# 2002-03-04 fl   make sure we have a "L" or "1" font
 
15
# 2002-12-04 fl   skip non-directory entries in the system path
 
16
# 2003-04-29 fl   add embedded default font
 
17
# 2003-09-27 fl   added support for truetype charmap encodings
 
18
#
 
19
# Todo:
 
20
# Adapt to PILFONT2 format (16-bit fonts, compressed, single file)
 
21
#
 
22
# Copyright (c) 1997-2003 by Secret Labs AB
 
23
# Copyright (c) 1996-2003 by Fredrik Lundh
 
24
#
 
25
# See the README file for information on usage and redistribution.
 
26
#
 
27
 
 
28
import Image
 
29
import os, string, sys
 
30
 
 
31
class _imagingft_not_installed:
 
32
    # module placeholder
 
33
    def __getattr__(self, id):
 
34
        raise ImportError("The _imagingft C module is not installed")
 
35
 
 
36
try:
 
37
    import _imagingft
 
38
    core = _imagingft
 
39
    del _imagingft
 
40
except ImportError:
 
41
    core = _imagingft_not_installed()
 
42
 
 
43
# FIXME: add support for pilfont2 format (see FontFile.py)
 
44
 
 
45
# --------------------------------------------------------------------
 
46
# Font metrics format:
 
47
#       "PILfont" LF
 
48
#       fontdescriptor LF
 
49
#       (optional) key=value... LF
 
50
#       "DATA" LF
 
51
#       binary data: 256*10*2 bytes (dx, dy, dstbox, srcbox)
 
52
#
 
53
# To place a character, cut out srcbox and paste at dstbox,
 
54
# relative to the character position.  Then move the character
 
55
# position according to dx, dy.
 
56
# --------------------------------------------------------------------
 
57
 
 
58
##
 
59
# The <b>ImageFont</b> module defines a class with the same name.
 
60
# Instances of this class store bitmap fonts, and are used with the
 
61
# <b>text</b> method of the <b>ImageDraw</b> class.
 
62
# <p>
 
63
# PIL uses it's own font file format to store bitmap fonts. You can
 
64
# use the <b>pilfont</b> utility to convert BDF and PCF font
 
65
# descriptors (X window font formats) to this format.
 
66
# <p>
 
67
# Starting with version 1.1.4, PIL can be configured to support
 
68
# TrueType and OpenType fonts.  For earlier version, TrueType
 
69
# support is only available as part of the imToolkit package
 
70
#
 
71
# @see ImageDraw#ImageDraw.text
 
72
# @see pilfont
 
73
 
 
74
class ImageFont:
 
75
    "PIL font wrapper"
 
76
 
 
77
    def _load_pilfont(self, filename):
 
78
 
 
79
        file = open(filename, "rb")
 
80
 
 
81
        for ext in (".png", ".gif", ".pbm"):
 
82
            try:
 
83
                fullname = os.path.splitext(filename)[0] + ext
 
84
                image = Image.open(fullname)
 
85
            except:
 
86
                pass
 
87
            else:
 
88
                if image and image.mode in ("1", "L"):
 
89
                    break
 
90
        else:
 
91
            raise IOError("cannot find glyph data file")
 
92
 
 
93
        self.file = fullname
 
94
 
 
95
        return self._load_pilfont_data(file, image)
 
96
 
 
97
    def _load_pilfont_data(self, file, image):
 
98
 
 
99
        # read PILfont header
 
100
        if file.readline() != "PILfont\n":
 
101
            raise SyntaxError("Not a PILfont file")
 
102
        d = string.split(file.readline(), ";")
 
103
        self.info = [] # FIXME: should be a dictionary
 
104
        while True:
 
105
            s = file.readline()
 
106
            if not s or s == "DATA\n":
 
107
                break
 
108
            self.info.append(s)
 
109
 
 
110
        # read PILfont metrics
 
111
        data = file.read(256*20)
 
112
 
 
113
        # check image
 
114
        if image.mode not in ("1", "L"):
 
115
            raise TypeError("invalid font image mode")
 
116
 
 
117
        image.load()
 
118
 
 
119
        self.font = Image.core.font(image.im, data)
 
120
 
 
121
        # delegate critical operations to internal type
 
122
        self.getsize = self.font.getsize
 
123
        self.getmask = self.font.getmask
 
124
 
 
125
##
 
126
# Wrapper for FreeType fonts.  Application code should use the
 
127
# <b>truetype</b> factory function to create font objects.
 
128
 
 
129
class FreeTypeFont:
 
130
    "FreeType font wrapper (requires _imagingft service)"
 
131
 
 
132
    def __init__(self, file, size, index=0, encoding=""):
 
133
        # FIXME: use service provider instead
 
134
        self.font = core.getfont(file, size, index, encoding)
 
135
 
 
136
    def getname(self):
 
137
        return self.font.family, self.font.style
 
138
 
 
139
    def getmetrics(self):
 
140
        return self.font.ascent, self.font.descent
 
141
 
 
142
    def getsize(self, text):
 
143
        return self.font.getsize(text)[0]
 
144
 
 
145
    def getmask(self, text, mode=""):
 
146
        return self.getmask2(text, mode)[0]
 
147
 
 
148
    def getmask2(self, text, mode="", fill=Image.core.fill):
 
149
        size, offset = self.font.getsize(text)
 
150
        im = fill("L", size, 0)
 
151
        self.font.render(text, im.id, mode=="1")
 
152
        return im, offset
 
153
 
 
154
##
 
155
# Wrapper that creates a transposed font from any existing font
 
156
# object.
 
157
#
 
158
# @param font A font object.
 
159
# @param orientation An optional orientation.  If given, this should
 
160
#     be one of Image.FLIP_LEFT_RIGHT, Image.FLIP_TOP_BOTTOM,
 
161
#     Image.ROTATE_90, Image.ROTATE_180, or Image.ROTATE_270.
 
162
 
 
163
class TransposedFont:
 
164
    "Wrapper for writing rotated or mirrored text"
 
165
 
 
166
    def __init__(self, font, orientation=None):
 
167
        self.font = font
 
168
        self.orientation = orientation # any 'transpose' argument, or None
 
169
 
 
170
    def getsize(self, text):
 
171
        w, h = self.font.getsize(text)
 
172
        if self.orientation in (Image.ROTATE_90, Image.ROTATE_270):
 
173
            return h, w
 
174
        return w, h
 
175
 
 
176
    def getmask(self, text, mode=""):
 
177
        im = self.font.getmask(text, mode)
 
178
        if self.orientation is not None:
 
179
            return im.transpose(self.orientation)
 
180
        return im
 
181
 
 
182
##
 
183
# Load font file.  This function loads a font object from the given
 
184
# bitmap font file, and returns the corresponding font object.
 
185
#
 
186
# @param filename Name of font file.
 
187
# @return A font object.
 
188
# @exception IOError If the file could not be read.
 
189
 
 
190
def load(filename):
 
191
    "Load a font file."
 
192
    f = ImageFont()
 
193
    f._load_pilfont(filename)
 
194
    return f
 
195
 
 
196
##
 
197
# Load a TrueType or OpenType font file, and create a font object.
 
198
# This function loads a font object from the given file, and creates
 
199
# a font object for a font of the given size.
 
200
# <p>
 
201
# This function requires the _imagingft service.
 
202
#
 
203
# @param filename A truetype font file.  Under Windows, if the file
 
204
#    is not found in this filename, the loader also looks in Windows
 
205
#    <b>fonts</b> directory
 
206
# @param size The requested size, in points.
 
207
# @param index Which font face to load (default is first available face).
 
208
# @param encoding Which font encoding to use (default is Unicode).  Common
 
209
#    encodings are "unic" (Unicode), "symb" (Microsoft Symbol), "ADOB"
 
210
#    (Adobe Standard), "ADBE" (Adobe Expert), and "armn" (Apple Roman).
 
211
#    See the FreeType documentation for more information.
 
212
# @return A font object.
 
213
# @exception IOError If the file could not be read.
 
214
 
 
215
def truetype(filename, size, index=0, encoding=""):
 
216
    "Load a truetype font file."
 
217
    try:
 
218
        return FreeTypeFont(filename, size, index, encoding)
 
219
    except IOError:
 
220
        if sys.platform == "win32":
 
221
            # check the windows font repository
 
222
            # NOTE: must use uppercase WINDIR, to work around bugs in
 
223
            # 1.5.2's os.environ.get()
 
224
            windir = os.environ.get("WINDIR")
 
225
            if windir:
 
226
                filename = os.path.join(windir, "fonts", filename)
 
227
                return FreeTypeFont(filename, size, index, encoding)
 
228
        raise
 
229
 
 
230
##
 
231
# Load font file.  Same as load, but searches for a bitmap font along
 
232
# the Python path.
 
233
#
 
234
# @param filename Name of font file.
 
235
# @return A font object.
 
236
# @exception IOError If the file could not be read.
 
237
# @see #load
 
238
 
 
239
def load_path(filename):
 
240
    "Load a font file, searching along the Python path."
 
241
    for dir in sys.path:
 
242
        if Image.isDirectory(dir):
 
243
            try:
 
244
                return load(os.path.join(dir, filename))
 
245
            except IOError:
 
246
                pass
 
247
    raise IOError("cannot find font file")
 
248
 
 
249
##
 
250
# Load a (probably rather ugly) default font.
 
251
#
 
252
# @return A font object.
 
253
 
 
254
def load_default():
 
255
    "Load a default font."
 
256
    from StringIO import StringIO
 
257
    import base64
 
258
    f = ImageFont()
 
259
    f._load_pilfont_data(
 
260
         # courB08
 
261
         StringIO(base64.decodestring('''
 
262
UElMZm9udAo7Ozs7OzsxMDsKREFUQQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
263
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
264
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
265
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
266
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
267
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
268
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
269
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
270
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
271
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
272
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
273
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAA//8AAQAAAAAAAAABAAEA
 
274
BgAAAAH/+gADAAAAAQAAAAMABgAGAAAAAf/6AAT//QADAAAABgADAAYAAAAA//kABQABAAYAAAAL
 
275
AAgABgAAAAD/+AAFAAEACwAAABAACQAGAAAAAP/5AAUAAAAQAAAAFQAHAAYAAP////oABQAAABUA
 
276
AAAbAAYABgAAAAH/+QAE//wAGwAAAB4AAwAGAAAAAf/5AAQAAQAeAAAAIQAIAAYAAAAB//kABAAB
 
277
ACEAAAAkAAgABgAAAAD/+QAE//0AJAAAACgABAAGAAAAAP/6AAX//wAoAAAALQAFAAYAAAAB//8A
 
278
BAACAC0AAAAwAAMABgAAAAD//AAF//0AMAAAADUAAQAGAAAAAf//AAMAAAA1AAAANwABAAYAAAAB
 
279
//kABQABADcAAAA7AAgABgAAAAD/+QAFAAAAOwAAAEAABwAGAAAAAP/5AAYAAABAAAAARgAHAAYA
 
280
AAAA//kABQAAAEYAAABLAAcABgAAAAD/+QAFAAAASwAAAFAABwAGAAAAAP/5AAYAAABQAAAAVgAH
 
281
AAYAAAAA//kABQAAAFYAAABbAAcABgAAAAD/+QAFAAAAWwAAAGAABwAGAAAAAP/5AAUAAABgAAAA
 
282
ZQAHAAYAAAAA//kABQAAAGUAAABqAAcABgAAAAD/+QAFAAAAagAAAG8ABwAGAAAAAf/8AAMAAABv
 
283
AAAAcQAEAAYAAAAA//wAAwACAHEAAAB0AAYABgAAAAD/+gAE//8AdAAAAHgABQAGAAAAAP/7AAT/
 
284
/gB4AAAAfAADAAYAAAAB//oABf//AHwAAACAAAUABgAAAAD/+gAFAAAAgAAAAIUABgAGAAAAAP/5
 
285
AAYAAQCFAAAAiwAIAAYAAP////oABgAAAIsAAACSAAYABgAA////+gAFAAAAkgAAAJgABgAGAAAA
 
286
AP/6AAUAAACYAAAAnQAGAAYAAP////oABQAAAJ0AAACjAAYABgAA////+gAFAAAAowAAAKkABgAG
 
287
AAD////6AAUAAACpAAAArwAGAAYAAAAA//oABQAAAK8AAAC0AAYABgAA////+gAGAAAAtAAAALsA
 
288
BgAGAAAAAP/6AAQAAAC7AAAAvwAGAAYAAP////oABQAAAL8AAADFAAYABgAA////+gAGAAAAxQAA
 
289
AMwABgAGAAD////6AAUAAADMAAAA0gAGAAYAAP////oABQAAANIAAADYAAYABgAA////+gAGAAAA
 
290
2AAAAN8ABgAGAAAAAP/6AAUAAADfAAAA5AAGAAYAAP////oABQAAAOQAAADqAAYABgAAAAD/+gAF
 
291
AAEA6gAAAO8ABwAGAAD////6AAYAAADvAAAA9gAGAAYAAAAA//oABQAAAPYAAAD7AAYABgAA////
 
292
+gAFAAAA+wAAAQEABgAGAAD////6AAYAAAEBAAABCAAGAAYAAP////oABgAAAQgAAAEPAAYABgAA
 
293
////+gAGAAABDwAAARYABgAGAAAAAP/6AAYAAAEWAAABHAAGAAYAAP////oABgAAARwAAAEjAAYA
 
294
BgAAAAD/+gAFAAABIwAAASgABgAGAAAAAf/5AAQAAQEoAAABKwAIAAYAAAAA//kABAABASsAAAEv
 
295
AAgABgAAAAH/+QAEAAEBLwAAATIACAAGAAAAAP/5AAX//AEyAAABNwADAAYAAAAAAAEABgACATcA
 
296
AAE9AAEABgAAAAH/+QAE//wBPQAAAUAAAwAGAAAAAP/7AAYAAAFAAAABRgAFAAYAAP////kABQAA
 
297
AUYAAAFMAAcABgAAAAD/+wAFAAABTAAAAVEABQAGAAAAAP/5AAYAAAFRAAABVwAHAAYAAAAA//sA
 
298
BQAAAVcAAAFcAAUABgAAAAD/+QAFAAABXAAAAWEABwAGAAAAAP/7AAYAAgFhAAABZwAHAAYAAP//
 
299
//kABQAAAWcAAAFtAAcABgAAAAD/+QAGAAABbQAAAXMABwAGAAAAAP/5AAQAAgFzAAABdwAJAAYA
 
300
AP////kABgAAAXcAAAF+AAcABgAAAAD/+QAGAAABfgAAAYQABwAGAAD////7AAUAAAGEAAABigAF
 
301
AAYAAP////sABQAAAYoAAAGQAAUABgAAAAD/+wAFAAABkAAAAZUABQAGAAD////7AAUAAgGVAAAB
 
302
mwAHAAYAAAAA//sABgACAZsAAAGhAAcABgAAAAD/+wAGAAABoQAAAacABQAGAAAAAP/7AAYAAAGn
 
303
AAABrQAFAAYAAAAA//kABgAAAa0AAAGzAAcABgAA////+wAGAAABswAAAboABQAGAAD////7AAUA
 
304
AAG6AAABwAAFAAYAAP////sABgAAAcAAAAHHAAUABgAAAAD/+wAGAAABxwAAAc0ABQAGAAD////7
 
305
AAYAAgHNAAAB1AAHAAYAAAAA//sABQAAAdQAAAHZAAUABgAAAAH/+QAFAAEB2QAAAd0ACAAGAAAA
 
306
Av/6AAMAAQHdAAAB3gAHAAYAAAAA//kABAABAd4AAAHiAAgABgAAAAD/+wAF//0B4gAAAecAAgAA
 
307
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
308
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
309
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
310
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
311
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
312
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
313
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
314
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
315
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
316
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
317
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
 
318
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAB
 
319
//sAAwACAecAAAHpAAcABgAAAAD/+QAFAAEB6QAAAe4ACAAGAAAAAP/5AAYAAAHuAAAB9AAHAAYA
 
320
AAAA//oABf//AfQAAAH5AAUABgAAAAD/+QAGAAAB+QAAAf8ABwAGAAAAAv/5AAMAAgH/AAACAAAJ
 
321
AAYAAAAA//kABQABAgAAAAIFAAgABgAAAAH/+gAE//sCBQAAAggAAQAGAAAAAP/5AAYAAAIIAAAC
 
322
DgAHAAYAAAAB//kABf/+Ag4AAAISAAUABgAA////+wAGAAACEgAAAhkABQAGAAAAAP/7AAX//gIZ
 
323
AAACHgADAAYAAAAA//wABf/9Ah4AAAIjAAEABgAAAAD/+QAHAAACIwAAAioABwAGAAAAAP/6AAT/
 
324
+wIqAAACLgABAAYAAAAA//kABP/8Ai4AAAIyAAMABgAAAAD/+gAFAAACMgAAAjcABgAGAAAAAf/5
 
325
AAT//QI3AAACOgAEAAYAAAAB//kABP/9AjoAAAI9AAQABgAAAAL/+QAE//sCPQAAAj8AAgAGAAD/
 
326
///7AAYAAgI/AAACRgAHAAYAAAAA//kABgABAkYAAAJMAAgABgAAAAH//AAD//0CTAAAAk4AAQAG
 
327
AAAAAf//AAQAAgJOAAACUQADAAYAAAAB//kABP/9AlEAAAJUAAQABgAAAAH/+QAF//4CVAAAAlgA
 
328
BQAGAAD////7AAYAAAJYAAACXwAFAAYAAP////kABgAAAl8AAAJmAAcABgAA////+QAGAAACZgAA
 
329
Am0ABwAGAAD////5AAYAAAJtAAACdAAHAAYAAAAA//sABQACAnQAAAJ5AAcABgAA////9wAGAAAC
 
330
eQAAAoAACQAGAAD////3AAYAAAKAAAAChwAJAAYAAP////cABgAAAocAAAKOAAkABgAA////9wAG
 
331
AAACjgAAApUACQAGAAD////4AAYAAAKVAAACnAAIAAYAAP////cABgAAApwAAAKjAAkABgAA////
 
332
+gAGAAACowAAAqoABgAGAAAAAP/6AAUAAgKqAAACrwAIAAYAAP////cABQAAAq8AAAK1AAkABgAA
 
333
////9wAFAAACtQAAArsACQAGAAD////3AAUAAAK7AAACwQAJAAYAAP////gABQAAAsEAAALHAAgA
 
334
BgAAAAD/9wAEAAACxwAAAssACQAGAAAAAP/3AAQAAALLAAACzwAJAAYAAAAA//cABAAAAs8AAALT
 
335
AAkABgAAAAD/+AAEAAAC0wAAAtcACAAGAAD////6AAUAAALXAAAC3QAGAAYAAP////cABgAAAt0A
 
336
AALkAAkABgAAAAD/9wAFAAAC5AAAAukACQAGAAAAAP/3AAUAAALpAAAC7gAJAAYAAAAA//cABQAA
 
337
Au4AAALzAAkABgAAAAD/9wAFAAAC8wAAAvgACQAGAAAAAP/4AAUAAAL4AAAC/QAIAAYAAAAA//oA
 
338
Bf//Av0AAAMCAAUABgAA////+gAGAAADAgAAAwkABgAGAAD////3AAYAAAMJAAADEAAJAAYAAP//
 
339
//cABgAAAxAAAAMXAAkABgAA////9wAGAAADFwAAAx4ACQAGAAD////4AAYAAAAAAAoABwASAAYA
 
340
AP////cABgAAAAcACgAOABMABgAA////+gAFAAAADgAKABQAEAAGAAD////6AAYAAAAUAAoAGwAQ
 
341
AAYAAAAA//gABgAAABsACgAhABIABgAAAAD/+AAGAAAAIQAKACcAEgAGAAAAAP/4AAYAAAAnAAoA
 
342
LQASAAYAAAAA//gABgAAAC0ACgAzABIABgAAAAD/+QAGAAAAMwAKADkAEQAGAAAAAP/3AAYAAAA5
 
343
AAoAPwATAAYAAP////sABQAAAD8ACgBFAA8ABgAAAAD/+wAFAAIARQAKAEoAEQAGAAAAAP/4AAUA
 
344
AABKAAoATwASAAYAAAAA//gABQAAAE8ACgBUABIABgAAAAD/+AAFAAAAVAAKAFkAEgAGAAAAAP/5
 
345
AAUAAABZAAoAXgARAAYAAAAA//gABgAAAF4ACgBkABIABgAAAAD/+AAGAAAAZAAKAGoAEgAGAAAA
 
346
AP/4AAYAAABqAAoAcAASAAYAAAAA//kABgAAAHAACgB2ABEABgAAAAD/+AAFAAAAdgAKAHsAEgAG
 
347
AAD////4AAYAAAB7AAoAggASAAYAAAAA//gABQAAAIIACgCHABIABgAAAAD/+AAFAAAAhwAKAIwA
 
348
EgAGAAAAAP/4AAUAAACMAAoAkQASAAYAAAAA//gABQAAAJEACgCWABIABgAAAAD/+QAFAAAAlgAK
 
349
AJsAEQAGAAAAAP/6AAX//wCbAAoAoAAPAAYAAAAA//oABQABAKAACgClABEABgAA////+AAGAAAA
 
350
pQAKAKwAEgAGAAD////4AAYAAACsAAoAswASAAYAAP////gABgAAALMACgC6ABIABgAA////+QAG
 
351
AAAAugAKAMEAEQAGAAD////4AAYAAgDBAAoAyAAUAAYAAP////kABQACAMgACgDOABMABgAA////
 
352
+QAGAAIAzgAKANUAEw==
 
353
''')), Image.open(StringIO(base64.decodestring('''
 
354
iVBORw0KGgoAAAANSUhEUgAAAx4AAAAUAQAAAAArMtZoAAAEwElEQVR4nABlAJr/AHVE4czCI/4u
 
355
Mc4b7vuds/xzjz5/3/7u/n9vMe7vnfH/9++vPn/xyf5zhxzjt8GHw8+2d83u8x27199/nxuQ6Od9
 
356
M43/5z2I+9n9ZtmDBwMQECDRQw/eQIQohJXxpBCNVE6QCCAAAAD//wBlAJr/AgALyj1t/wINwq0g
 
357
LeNZUworuN1cjTPIzrTX6ofHWeo3v336qPzfEwRmBnHTtf95/fglZK5N0PDgfRTslpGBvz7LFc4F
 
358
IUXBWQGjQ5MGCx34EDFPwXiY4YbYxavpnhHFrk14CDAAAAD//wBlAJr/AgKqRooH2gAgPeggvUAA
 
359
Bu2WfgPoAwzRAABAAAAAAACQgLz/3Uv4Gv+gX7BJgDeeGP6AAAD1NMDzKHD7ANWr3loYbxsAD791
 
360
NAADfcoIDyP44K/jv4Y63/Z+t98Ovt+ub4T48LAAAAD//wBlAJr/AuplMlADJAAAAGuAphWpqhMx
 
361
in0A/fRvAYBABPgBwBUgABBQ/sYAyv9g0bCHgOLoGAAAAAAAREAAwI7nr0ArYpow7aX8//9LaP/9
 
362
SjdavWA8ePHeBIKB//81/83ndznOaXx379wAAAD//wBlAJr/AqDxW+D3AABAAbUh/QMnbQag/gAY
 
363
AYDAAACgtgD/gOqAAAB5IA/8AAAk+n9w0AAA8AAAmFRJuPo27ciC0cD5oeW4E7KA/wD3ECMAn2tt
 
364
y8PgwH8AfAxFzC0JzeAMtratAsC/ffwAAAD//wBlAJr/BGKAyCAA4AAAAvgeYTAwHd1kmQF5chkG
 
365
ABoMIHcL5xVpTfQbUqzlAAAErwAQBgAAEOClA5D9il08AEh/tUzdCBsXkbgACED+woQg8Si9VeqY
 
366
lODCn7lmF6NhnAEYgAAA/NMIAAAAAAD//2JgjLZgVGBg5Pv/Tvpc8hwGBjYGJADjHDrAwPzAjv/H
 
367
/Wf3PzCwtzcwHmBgYGcwbZz8wHaCAQMDOwMDQ8MCBgYOC3W7mp+f0w+wHOYxO3OG+e376hsMZjk3
 
368
AAAAAP//YmCMY2A4wMAIN5e5gQETPD6AZisDAwMDgzSDAAPjByiHcQMDAwMDg1nOze1lByRu5/47
 
369
c4859311AYNZzg0AAAAA//9iYGDBYihOIIMuwIjGL39/fwffA8b//xv/P2BPtzzHwCBjUQAAAAD/
 
370
/yLFBrIBAAAA//9i1HhcwdhizX7u8NZNzyLbvT97bfrMf/QHI8evOwcSqGUJAAAA//9iYBB81iSw
 
371
pEE170Qrg5MIYydHqwdDQRMrAwcVrQAAAAD//2J4x7j9AAMDn8Q/BgYLBoaiAwwMjPdvMDBYM1Tv
 
372
oJodAAAAAP//Yqo/83+dxePWlxl3npsel9lvLfPcqlE9725C+acfVLMEAAAA//9i+s9gwCoaaGMR
 
373
evta/58PTEWzr21hufPjA8N+qlnBwAAAAAD//2JiWLci5v1+HmFXDqcnULE/MxgYGBj+f6CaJQAA
 
374
AAD//2Ji2FrkY3iYpYC5qDeGgeEMAwPDvwQBBoYvcTwOVLMEAAAA//9isDBgkP///0EOg9z35v//
 
375
Gc/eeW7BwPj5+QGZhANUswMAAAD//2JgqGBgYGBgqEMXlvhMPUsAAAAA//8iYDd1AAAAAP//AwDR
 
376
w7IkEbzhVQAAAABJRU5ErkJggg==
 
377
'''))))
 
378
    return f
 
379
 
 
380
if __name__ == "__main__":
 
381
    # create font data chunk for embedding
 
382
    import base64, os, sys
 
383
    font = "../Images/courB08"
 
384
    print "    f._load_pilfont_data("
 
385
    print "         # %s" % os.path.basename(font)
 
386
    print "         StringIO(base64.decodestring('''"
 
387
    base64.encode(open(font + ".pil", "rb"), sys.stdout)
 
388
    print "''')), Image.open(StringIO(base64.decodestring('''"
 
389
    base64.encode(open(font + ".pbm", "rb"), sys.stdout)
 
390
    print "'''))))"