File Coverage

lib/Graphics/Fig/FontSize.pm
Criterion Covered Total %
statement 48 55 87.2
branch 12 26 46.1
condition 2 6 33.3
subroutine 6 6 100.0
pod 0 1 0.0
total 68 94 72.3


line stmt bran cond sub pod time code
1             #
2             # XFig Drawing Library
3             #
4             # Copyright (c) 2017 D Scott Guthridge
5             #
6             # This program is free software: you can redistribute it and/or modify it under
7             # the terms of the Artistic License as published by the Perl Foundation, either
8             # version 2.0 of the License, or (at your option) any later version.
9             #
10             # This program is distributed in the hope that it will be useful, but WITHOUT
11             # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12             # FOR A PARTICULAR PURPOSE. See the Artistic License for more details.
13             #
14             # You should have received a copy of the Artistic License along with this
15             # program. If not, see .
16             #
17             package Graphics::Fig::FontSize;
18             our $VERSION = 'v1.0.8';
19              
20 12     12   114 use strict;
  12         22  
  12         278  
21 12     12   46 use warnings;
  12         18  
  12         277  
22 12     12   58 use POSIX qw(floor ceil);
  12         19  
  12         74  
23 12     12   798 use Carp;
  12         19  
  12         51488  
24              
25             #
26             # @CharacterWidths500: widths of each (ASCII / Latin-1) character in
27             # each PostScript font assuming a point size of 500.
28             #
29             my @CharacterWidths500 = (
30             [ # Times Roman (default)
31             0, 0, 0, 0, 0, 0, 0, 0,
32             0, 0, 0, 0, 0, 0, 0, 0,
33             0, 0, 0, 0, 0, 0, 0, 0,
34             0, 0, 0, 0, 0, 0, 0, 0,
35             140, 186, 228, 279, 279, 465, 434, 101,
36             186, 186, 279, 315, 140, 186, 140, 155,
37             279, 279, 279, 279, 279, 279, 279, 279,
38             279, 279, 155, 155, 315, 315, 315, 248,
39             514, 403, 372, 372, 403, 341, 310, 403,
40             403, 186, 217, 403, 341, 496, 403, 403,
41             310, 403, 372, 310, 341, 403, 403, 527,
42             403, 403, 341, 186, 155, 186, 262, 279,
43             186, 248, 279, 248, 279, 248, 186, 279,
44             279, 155, 155, 279, 155, 434, 279, 279,
45             279, 279, 186, 217, 155, 279, 279, 403,
46             279, 279, 248, 268, 112, 268, 302, 0,
47             0, 0, 0, 0, 0, 0, 0, 0,
48             0, 0, 0, 0, 0, 0, 0, 0,
49             0, 0, 0, 0, 0, 0, 0, 0,
50             0, 0, 0, 0, 0, 0, 0, 0,
51             140, 186, 279, 279, 279, 279, 112, 279,
52             186, 424, 154, 279, 315, 186, 424, 186,
53             223, 315, 168, 168, 186, 279, 253, 140,
54             186, 168, 173, 279, 419, 419, 419, 248,
55             403, 403, 403, 403, 403, 403, 496, 372,
56             341, 341, 341, 341, 186, 186, 186, 186,
57             403, 403, 403, 403, 403, 403, 403, 315,
58             403, 403, 403, 403, 403, 403, 310, 279,
59             248, 248, 248, 248, 248, 248, 372, 248,
60             248, 248, 248, 248, 155, 155, 155, 155,
61             279, 279, 279, 279, 279, 279, 279, 315,
62             279, 279, 279, 279, 279, 279, 279, 279
63             ],
64             [ # Times Italic
65             0, 0, 0, 0, 0, 0, 0, 0,
66             0, 0, 0, 0, 0, 0, 0, 0,
67             0, 0, 0, 0, 0, 0, 0, 0,
68             0, 0, 0, 0, 0, 0, 0, 0,
69             140, 186, 235, 279, 279, 465, 434, 119,
70             186, 186, 279, 377, 140, 186, 140, 155,
71             279, 279, 279, 279, 279, 279, 279, 279,
72             279, 279, 186, 186, 377, 377, 377, 279,
73             514, 341, 341, 372, 403, 341, 341, 403,
74             403, 186, 248, 372, 310, 465, 372, 403,
75             341, 403, 341, 279, 310, 403, 341, 465,
76             341, 310, 310, 217, 155, 217, 236, 279,
77             186, 279, 279, 248, 279, 248, 155, 279,
78             279, 155, 155, 248, 155, 403, 279, 279,
79             279, 279, 217, 217, 155, 279, 248, 372,
80             248, 248, 217, 223, 154, 223, 302, 0,
81             0, 0, 0, 0, 0, 0, 0, 0,
82             0, 0, 0, 0, 0, 0, 0, 0,
83             0, 0, 0, 0, 0, 0, 0, 0,
84             0, 0, 0, 0, 0, 0, 0, 0,
85             140, 217, 279, 279, 279, 279, 154, 279,
86             186, 424, 154, 279, 377, 186, 424, 186,
87             223, 377, 168, 168, 186, 279, 292, 140,
88             186, 168, 173, 279, 419, 419, 419, 279,
89             341, 341, 341, 341, 341, 341, 496, 372,
90             341, 341, 341, 341, 186, 186, 186, 186,
91             403, 372, 403, 403, 403, 403, 403, 377,
92             403, 403, 403, 403, 403, 310, 341, 279,
93             279, 279, 279, 279, 279, 279, 372, 248,
94             248, 248, 248, 248, 155, 155, 155, 155,
95             279, 279, 279, 279, 279, 279, 279, 377,
96             279, 279, 279, 279, 279, 248, 279, 248
97             ],
98             [ # Times Bold
99             0, 0, 0, 0, 0, 0, 0, 0,
100             0, 0, 0, 0, 0, 0, 0, 0,
101             0, 0, 0, 0, 0, 0, 0, 0,
102             0, 0, 0, 0, 0, 0, 0, 0,
103             140, 186, 310, 279, 279, 558, 465, 155,
104             186, 186, 279, 318, 140, 186, 140, 155,
105             279, 279, 279, 279, 279, 279, 279, 279,
106             279, 279, 186, 186, 318, 318, 318, 279,
107             519, 403, 372, 403, 403, 372, 341, 434,
108             434, 217, 279, 434, 372, 527, 403, 434,
109             341, 434, 403, 310, 372, 403, 403, 558,
110             403, 403, 372, 186, 155, 186, 324, 279,
111             186, 279, 310, 248, 310, 248, 186, 279,
112             310, 155, 186, 310, 155, 465, 310, 279,
113             310, 310, 248, 217, 186, 310, 279, 403,
114             279, 279, 248, 220, 123, 220, 290, 0,
115             0, 0, 0, 0, 0, 0, 0, 0,
116             0, 0, 0, 0, 0, 0, 0, 0,
117             0, 0, 0, 0, 0, 0, 0, 0,
118             0, 0, 0, 0, 0, 0, 0, 0,
119             140, 186, 279, 279, 279, 279, 123, 279,
120             186, 417, 168, 279, 318, 186, 417, 186,
121             223, 318, 168, 168, 186, 310, 302, 140,
122             186, 168, 184, 279, 419, 419, 419, 279,
123             403, 403, 403, 403, 403, 403, 558, 403,
124             372, 372, 372, 372, 217, 217, 217, 217,
125             403, 403, 434, 434, 434, 434, 434, 318,
126             434, 403, 403, 403, 403, 403, 341, 310,
127             279, 279, 279, 279, 279, 279, 403, 248,
128             248, 248, 248, 248, 155, 155, 155, 155,
129             279, 310, 279, 279, 279, 279, 279, 318,
130             279, 310, 310, 310, 310, 279, 310, 279
131             ],
132             [ # Times Bold Italic
133             0, 0, 0, 0, 0, 0, 0, 0,
134             0, 0, 0, 0, 0, 0, 0, 0,
135             0, 0, 0, 0, 0, 0, 0, 0,
136             0, 0, 0, 0, 0, 0, 0, 0,
137             140, 217, 310, 279, 279, 465, 434, 155,
138             186, 186, 279, 318, 140, 186, 140, 155,
139             279, 279, 279, 279, 279, 279, 279, 279,
140             279, 279, 186, 186, 318, 318, 318, 279,
141             465, 372, 372, 372, 403, 372, 372, 403,
142             434, 217, 279, 372, 341, 496, 403, 403,
143             341, 403, 372, 310, 341, 403, 372, 496,
144             372, 341, 341, 186, 155, 186, 318, 279,
145             186, 279, 279, 248, 279, 248, 186, 279,
146             310, 155, 155, 279, 155, 434, 310, 279,
147             279, 279, 217, 217, 155, 310, 248, 372,
148             279, 248, 217, 194, 123, 194, 318, 0,
149             0, 0, 0, 0, 0, 0, 0, 0,
150             0, 0, 0, 0, 0, 0, 0, 0,
151             0, 0, 0, 0, 0, 0, 0, 0,
152             0, 0, 0, 0, 0, 0, 0, 0,
153             140, 217, 279, 279, 279, 279, 123, 279,
154             186, 417, 149, 279, 338, 186, 417, 186,
155             223, 318, 168, 168, 186, 322, 279, 140,
156             186, 168, 168, 279, 419, 419, 419, 279,
157             372, 372, 372, 372, 372, 372, 527, 372,
158             372, 372, 372, 372, 217, 217, 217, 217,
159             403, 403, 403, 403, 403, 403, 403, 318,
160             403, 403, 403, 403, 403, 341, 341, 279,
161             279, 279, 279, 279, 279, 279, 403, 248,
162             248, 248, 248, 248, 155, 155, 155, 155,
163             279, 310, 279, 279, 279, 279, 279, 318,
164             279, 310, 310, 310, 310, 248, 279, 248
165             ],
166             [ # Avantgarde Book
167             0, 0, 0, 0, 0, 0, 0, 0,
168             0, 0, 0, 0, 0, 0, 0, 0,
169             0, 0, 0, 0, 0, 0, 0, 0,
170             0, 0, 0, 0, 0, 0, 0, 0,
171             155, 165, 173, 309, 309, 433, 423, 111,
172             206, 206, 237, 338, 155, 185, 155, 244,
173             309, 309, 309, 309, 309, 309, 309, 309,
174             309, 309, 155, 155, 338, 338, 338, 330,
175             484, 413, 320, 454, 415, 299, 271, 487,
176             381, 126, 269, 330, 258, 513, 413, 485,
177             331, 486, 339, 278, 238, 366, 392, 536,
178             340, 331, 268, 196, 338, 196, 338, 279,
179             211, 381, 381, 361, 382, 363, 175, 376,
180             341, 112, 113, 280, 112, 524, 341, 366,
181             381, 381, 168, 217, 189, 339, 309, 464,
182             268, 299, 237, 196, 375, 196, 338, 0,
183             0, 0, 0, 0, 0, 0, 0, 0,
184             0, 0, 0, 0, 0, 0, 0, 0,
185             0, 0, 0, 0, 0, 0, 0, 0,
186             0, 0, 0, 0, 0, 0, 0, 0,
187             155, 165, 309, 309, 309, 309, 375, 343,
188             206, 417, 206, 237, 338, 185, 417, 271,
189             223, 338, 185, 185, 209, 339, 315, 155,
190             181, 185, 206, 237, 464, 464, 464, 330,
191             413, 413, 413, 413, 413, 413, 554, 454,
192             299, 299, 299, 299, 126, 126, 126, 126,
193             441, 413, 485, 485, 485, 485, 485, 338,
194             485, 366, 366, 366, 366, 331, 331, 309,
195             381, 381, 381, 381, 381, 381, 646, 361,
196             363, 363, 363, 363, 112, 112, 112, 112,
197             366, 341, 366, 366, 366, 366, 366, 338,
198             365, 339, 339, 339, 339, 299, 381, 299
199             ],
200             [ # Avantgarde Book Oblique
201             0, 0, 0, 0, 0, 0, 0, 0,
202             0, 0, 0, 0, 0, 0, 0, 0,
203             0, 0, 0, 0, 0, 0, 0, 0,
204             0, 0, 0, 0, 0, 0, 0, 0,
205             155, 165, 173, 309, 309, 433, 423, 111,
206             206, 206, 237, 338, 155, 185, 155, 244,
207             309, 309, 309, 309, 309, 309, 309, 309,
208             309, 309, 155, 155, 338, 338, 338, 330,
209             484, 413, 320, 454, 415, 299, 271, 487,
210             381, 126, 269, 330, 258, 513, 413, 485,
211             331, 486, 339, 278, 238, 366, 392, 536,
212             340, 331, 268, 196, 338, 196, 338, 279,
213             211, 381, 381, 361, 382, 363, 175, 376,
214             341, 112, 113, 280, 112, 524, 341, 366,
215             381, 381, 168, 217, 189, 339, 309, 464,
216             268, 299, 237, 196, 375, 196, 338, 0,
217             0, 0, 0, 0, 0, 0, 0, 0,
218             0, 0, 0, 0, 0, 0, 0, 0,
219             0, 0, 0, 0, 0, 0, 0, 0,
220             0, 0, 0, 0, 0, 0, 0, 0,
221             155, 165, 309, 309, 309, 309, 375, 343,
222             206, 417, 206, 237, 338, 185, 417, 271,
223             223, 338, 185, 185, 209, 339, 315, 155,
224             181, 185, 206, 237, 464, 464, 464, 330,
225             413, 413, 413, 413, 413, 413, 554, 454,
226             299, 299, 299, 299, 126, 126, 126, 126,
227             441, 413, 485, 485, 485, 485, 485, 338,
228             485, 366, 366, 366, 366, 331, 331, 309,
229             381, 381, 381, 381, 381, 381, 646, 361,
230             363, 363, 363, 363, 112, 112, 112, 112,
231             366, 341, 366, 366, 366, 366, 366, 338,
232             365, 339, 339, 339, 339, 299, 381, 299
233             ],
234             [ # Avantgarde Demi
235             0, 0, 0, 0, 0, 0, 0, 0,
236             0, 0, 0, 0, 0, 0, 0, 0,
237             0, 0, 0, 0, 0, 0, 0, 0,
238             0, 0, 0, 0, 0, 0, 0, 0,
239             156, 156, 201, 313, 313, 480, 380, 123,
240             212, 212, 246, 335, 156, 235, 156, 257,
241             313, 313, 313, 313, 313, 313, 313, 313,
242             313, 313, 156, 156, 335, 335, 335, 313,
243             413, 413, 324, 436, 391, 290, 268, 469,
244             380, 156, 268, 346, 246, 503, 413, 469,
245             313, 469, 324, 290, 235, 357, 391, 503,
246             380, 346, 279, 179, 357, 179, 335, 279,
247             235, 369, 369, 357, 369, 357, 156, 369,
248             335, 134, 145, 324, 134, 525, 335, 357,
249             369, 369, 179, 246, 168, 335, 313, 447,
250             313, 324, 257, 190, 335, 190, 335, 0,
251             0, 0, 0, 0, 0, 0, 0, 0,
252             0, 0, 0, 0, 0, 0, 0, 0,
253             0, 0, 0, 0, 0, 0, 0, 0,
254             0, 0, 0, 0, 0, 0, 0, 0,
255             156, 156, 313, 313, 313, 313, 335, 313,
256             279, 413, 201, 257, 335, 235, 413, 235,
257             223, 335, 188, 188, 235, 322, 335, 156,
258             190, 188, 201, 257, 469, 469, 469, 313,
259             413, 413, 413, 413, 413, 413, 503, 436,
260             290, 290, 290, 290, 156, 156, 156, 156,
261             414, 413, 469, 469, 469, 469, 469, 335,
262             469, 357, 357, 357, 357, 346, 313, 335,
263             369, 369, 369, 369, 369, 369, 603, 357,
264             357, 357, 357, 357, 134, 134, 134, 134,
265             357, 335, 357, 357, 357, 357, 357, 335,
266             369, 335, 335, 335, 335, 324, 369, 324
267             ],
268             [ # Avantguard Demi Oblique
269             0, 0, 0, 0, 0, 0, 0, 0,
270             0, 0, 0, 0, 0, 0, 0, 0,
271             0, 0, 0, 0, 0, 0, 0, 0,
272             0, 0, 0, 0, 0, 0, 0, 0,
273             156, 156, 201, 313, 313, 480, 380, 123,
274             212, 212, 246, 335, 156, 235, 156, 257,
275             313, 313, 313, 313, 313, 313, 313, 313,
276             313, 313, 156, 156, 335, 335, 335, 313,
277             413, 413, 324, 436, 391, 290, 268, 469,
278             380, 156, 268, 346, 246, 503, 413, 469,
279             313, 469, 324, 290, 235, 357, 391, 503,
280             380, 346, 279, 179, 357, 179, 335, 279,
281             235, 369, 369, 357, 369, 357, 156, 369,
282             335, 134, 145, 324, 134, 525, 335, 357,
283             369, 369, 179, 246, 168, 335, 313, 447,
284             313, 324, 257, 190, 335, 190, 335, 0,
285             0, 0, 0, 0, 0, 0, 0, 0,
286             0, 0, 0, 0, 0, 0, 0, 0,
287             0, 0, 0, 0, 0, 0, 0, 0,
288             0, 0, 0, 0, 0, 0, 0, 0,
289             156, 156, 313, 313, 313, 313, 335, 313,
290             279, 413, 201, 257, 335, 235, 413, 235,
291             223, 335, 188, 188, 235, 322, 335, 156,
292             190, 188, 201, 257, 469, 469, 469, 313,
293             413, 413, 413, 413, 413, 413, 503, 436,
294             290, 290, 290, 290, 156, 156, 156, 156,
295             414, 413, 469, 469, 469, 469, 469, 335,
296             469, 357, 357, 357, 357, 346, 313, 335,
297             369, 369, 369, 369, 369, 369, 603, 357,
298             357, 357, 357, 357, 134, 134, 134, 134,
299             357, 335, 357, 357, 357, 357, 357, 335,
300             369, 335, 335, 335, 335, 324, 369, 324
301             ],
302             [ # Bookman Light
303             0, 0, 0, 0, 0, 0, 0, 0,
304             0, 0, 0, 0, 0, 0, 0, 0,
305             0, 0, 0, 0, 0, 0, 0, 0,
306             0, 0, 0, 0, 0, 0, 0, 0,
307             179, 168, 212, 346, 346, 503, 447, 123,
308             168, 168, 246, 335, 179, 223, 179, 335,
309             346, 346, 346, 346, 346, 346, 346, 346,
310             346, 346, 179, 179, 335, 335, 335, 302,
311             458, 380, 413, 413, 447, 402, 357, 447,
312             447, 190, 335, 402, 335, 514, 413, 447,
313             346, 458, 402, 369, 346, 436, 391, 536,
314             402, 357, 357, 168, 335, 168, 335, 279,
315             190, 324, 346, 290, 346, 290, 179, 302,
316             369, 168, 168, 346, 168, 525, 369, 313,
317             346, 324, 246, 290, 212, 380, 290, 436,
318             313, 302, 268, 156, 335, 156, 335, 0,
319             0, 0, 0, 0, 0, 0, 0, 0,
320             0, 0, 0, 0, 0, 0, 0, 0,
321             0, 0, 0, 0, 0, 0, 0, 0,
322             0, 0, 0, 0, 0, 0, 0, 0,
323             179, 168, 346, 346, 346, 346, 335, 290,
324             235, 413, 235, 201, 335, 223, 413, 246,
325             223, 335, 208, 208, 190, 380, 335, 179,
326             179, 208, 235, 201, 519, 519, 519, 302,
327             380, 380, 380, 380, 380, 380, 704, 413,
328             402, 402, 402, 402, 190, 190, 190, 190,
329             447, 413, 447, 447, 447, 447, 447, 335,
330             447, 436, 436, 436, 436, 357, 346, 369,
331             324, 324, 324, 324, 324, 324, 480, 290,
332             290, 290, 290, 290, 168, 168, 168, 168,
333             313, 369, 313, 313, 313, 313, 313, 335,
334             313, 380, 380, 380, 380, 302, 346, 302
335             ],
336             [ # Bookman Light Italic
337             0, 0, 0, 0, 0, 0, 0, 0,
338             0, 0, 0, 0, 0, 0, 0, 0,
339             0, 0, 0, 0, 0, 0, 0, 0,
340             0, 0, 0, 0, 0, 0, 0, 0,
341             168, 179, 201, 346, 346, 447, 458, 112,
342             156, 156, 246, 335, 168, 179, 168, 335,
343             346, 346, 346, 346, 346, 346, 346, 346,
344             346, 346, 168, 168, 335, 335, 335, 302,
345             436, 391, 402, 402, 413, 380, 346, 424,
346             447, 179, 313, 402, 324, 480, 402, 424,
347             335, 436, 391, 357, 335, 402, 380, 536,
348             391, 369, 324, 145, 335, 145, 335, 279,
349             190, 346, 335, 268, 357, 302, 190, 313,
350             346, 156, 156, 335, 156, 491, 346, 302,
351             335, 313, 223, 302, 190, 346, 302, 491,
352             302, 335, 290, 201, 335, 212, 335, 0,
353             0, 0, 0, 0, 0, 0, 0, 0,
354             0, 0, 0, 0, 0, 0, 0, 0,
355             0, 0, 0, 0, 0, 0, 0, 0,
356             0, 0, 0, 0, 0, 0, 0, 0,
357             168, 179, 346, 346, 346, 346, 335, 346,
358             235, 413, 246, 168, 335, 179, 413, 246,
359             223, 335, 208, 208, 179, 346, 346, 168,
360             179, 208, 223, 168, 519, 519, 519, 302,
361             391, 391, 391, 391, 391, 391, 681, 402,
362             380, 380, 380, 380, 179, 179, 179, 179,
363             413, 402, 424, 424, 424, 424, 424, 335,
364             424, 402, 402, 402, 402, 369, 335, 346,
365             346, 346, 346, 346, 346, 346, 491, 268,
366             302, 302, 302, 302, 156, 156, 156, 156,
367             302, 346, 302, 302, 302, 302, 302, 335,
368             302, 346, 346, 346, 346, 335, 335, 335
369             ],
370             [ # Bookman Demi
371             0, 0, 0, 0, 0, 0, 0, 0,
372             0, 0, 0, 0, 0, 0, 0, 0,
373             0, 0, 0, 0, 0, 0, 0, 0,
374             0, 0, 0, 0, 0, 0, 0, 0,
375             190, 201, 235, 369, 369, 525, 447, 134,
376             179, 179, 257, 335, 190, 201, 190, 335,
377             369, 369, 369, 369, 369, 369, 369, 369,
378             369, 369, 190, 190, 335, 335, 335, 369,
379             458, 402, 402, 413, 436, 402, 380, 436,
380             458, 223, 357, 447, 357, 525, 413, 447,
381             369, 447, 436, 369, 391, 413, 402, 525,
382             436, 391, 357, 168, 335, 168, 335, 279,
383             223, 324, 335, 324, 357, 324, 212, 324,
384             380, 201, 190, 369, 190, 558, 380, 346,
385             357, 346, 257, 290, 257, 369, 335, 447,
386             335, 346, 313, 179, 335, 179, 335, 0,
387             0, 0, 0, 0, 0, 0, 0, 0,
388             0, 0, 0, 0, 0, 0, 0, 0,
389             0, 0, 0, 0, 0, 0, 0, 0,
390             0, 0, 0, 0, 0, 0, 0, 0,
391             190, 201, 369, 369, 369, 369, 335, 335,
392             279, 413, 223, 223, 335, 201, 413, 257,
393             223, 335, 221, 221, 223, 369, 447, 190,
394             201, 221, 223, 223, 553, 553, 553, 369,
395             402, 402, 402, 402, 402, 402, 637, 413,
396             402, 402, 402, 402, 223, 223, 223, 223,
397             436, 413, 447, 447, 447, 447, 447, 335,
398             447, 413, 413, 413, 413, 391, 369, 369,
399             324, 324, 324, 324, 324, 324, 491, 324,
400             324, 324, 324, 324, 201, 201, 201, 201,
401             346, 380, 346, 346, 346, 346, 346, 335,
402             346, 369, 369, 369, 369, 346, 357, 346
403             ],
404             [ # Bookman Demi Italic
405             0, 0, 0, 0, 0, 0, 0, 0,
406             0, 0, 0, 0, 0, 0, 0, 0,
407             0, 0, 0, 0, 0, 0, 0, 0,
408             0, 0, 0, 0, 0, 0, 0, 0,
409             190, 179, 212, 380, 380, 491, 547, 101,
410             145, 145, 257, 335, 190, 156, 190, 201,
411             380, 380, 380, 380, 380, 380, 380, 380,
412             380, 380, 190, 190, 346, 335, 346, 346,
413             436, 402, 402, 391, 424, 402, 369, 424,
414             447, 212, 346, 436, 357, 480, 413, 424,
415             357, 424, 413, 391, 391, 413, 369, 558,
416             413, 369, 380, 145, 324, 145, 346, 279,
417             212, 380, 335, 313, 380, 313, 235, 346,
418             391, 212, 179, 391, 212, 536, 380, 335,
419             369, 346, 279, 302, 246, 380, 302, 480,
420             346, 335, 313, 168, 346, 168, 346, 0,
421             0, 0, 0, 0, 0, 0, 0, 0,
422             0, 0, 0, 0, 0, 0, 0, 0,
423             0, 0, 0, 0, 0, 0, 0, 0,
424             0, 0, 0, 0, 0, 0, 0, 0,
425             190, 179, 380, 380, 380, 380, 346, 346,
426             290, 436, 246, 212, 346, 156, 436, 268,
427             223, 335, 228, 228, 190, 380, 380, 190,
428             201, 228, 246, 212, 570, 570, 570, 346,
429             402, 402, 402, 402, 402, 402, 637, 391,
430             402, 402, 402, 402, 212, 212, 212, 212,
431             424, 413, 424, 424, 424, 424, 424, 335,
432             424, 413, 413, 413, 413, 369, 357, 369,
433             380, 380, 380, 380, 380, 380, 491, 313,
434             313, 313, 313, 313, 212, 212, 212, 212,
435             335, 380, 335, 335, 335, 335, 335, 335,
436             335, 380, 380, 380, 380, 335, 369, 335
437             ],
438             [ # Courier
439             0, 0, 0, 0, 0, 0, 0, 0,
440             0, 0, 0, 0, 0, 0, 0, 0,
441             0, 0, 0, 0, 0, 0, 0, 0,
442             0, 0, 0, 0, 0, 0, 0, 0,
443             334, 334, 334, 334, 334, 334, 334, 334,
444             334, 334, 334, 334, 334, 334, 334, 334,
445             334, 334, 334, 334, 334, 334, 334, 334,
446             334, 334, 334, 334, 334, 334, 334, 334,
447             334, 334, 334, 334, 334, 334, 334, 334,
448             334, 334, 334, 334, 334, 334, 334, 334,
449             334, 334, 334, 334, 334, 334, 334, 334,
450             334, 334, 334, 334, 334, 334, 334, 334,
451             334, 334, 334, 334, 334, 334, 334, 334,
452             334, 334, 334, 334, 334, 334, 334, 334,
453             334, 334, 334, 334, 334, 334, 334, 334,
454             334, 334, 334, 334, 334, 334, 334, 0,
455             0, 0, 0, 0, 0, 0, 0, 0,
456             0, 0, 0, 0, 0, 0, 0, 0,
457             0, 0, 0, 0, 0, 0, 0, 0,
458             0, 0, 0, 0, 0, 0, 0, 0,
459             334, 334, 334, 334, 334, 334, 334, 334,
460             334, 334, 334, 334, 334, 334, 334, 334,
461             334, 334, 334, 334, 334, 334, 334, 334,
462             334, 334, 334, 334, 334, 334, 334, 334,
463             334, 334, 334, 334, 334, 334, 334, 334,
464             334, 334, 334, 334, 334, 334, 334, 334,
465             334, 334, 334, 334, 334, 334, 334, 334,
466             334, 334, 334, 334, 334, 334, 334, 334,
467             334, 334, 334, 334, 334, 334, 334, 334,
468             334, 334, 334, 334, 334, 334, 334, 334,
469             334, 334, 334, 334, 334, 334, 334, 334,
470             334, 334, 334, 334, 334, 334, 334, 334
471             ],
472             [ # Courier Oblique
473             0, 0, 0, 0, 0, 0, 0, 0,
474             0, 0, 0, 0, 0, 0, 0, 0,
475             0, 0, 0, 0, 0, 0, 0, 0,
476             0, 0, 0, 0, 0, 0, 0, 0,
477             334, 334, 334, 334, 334, 334, 334, 334,
478             334, 334, 334, 334, 334, 334, 334, 334,
479             334, 334, 334, 334, 334, 334, 334, 334,
480             334, 334, 334, 334, 334, 334, 334, 334,
481             334, 334, 334, 334, 334, 334, 334, 334,
482             334, 334, 334, 334, 334, 334, 334, 334,
483             334, 334, 334, 334, 334, 334, 334, 334,
484             334, 334, 334, 334, 334, 334, 334, 334,
485             334, 334, 334, 334, 334, 334, 334, 334,
486             334, 334, 334, 334, 334, 334, 334, 334,
487             334, 334, 334, 334, 334, 334, 334, 334,
488             334, 334, 334, 334, 334, 334, 334, 0,
489             0, 0, 0, 0, 0, 0, 0, 0,
490             0, 0, 0, 0, 0, 0, 0, 0,
491             0, 0, 0, 0, 0, 0, 0, 0,
492             0, 0, 0, 0, 0, 0, 0, 0,
493             334, 334, 334, 334, 334, 334, 334, 334,
494             334, 334, 334, 334, 334, 334, 334, 334,
495             334, 334, 334, 334, 334, 334, 334, 334,
496             334, 334, 334, 334, 334, 334, 334, 334,
497             334, 334, 334, 334, 334, 334, 334, 334,
498             334, 334, 334, 334, 334, 334, 334, 334,
499             334, 334, 334, 334, 334, 334, 334, 334,
500             334, 334, 334, 334, 334, 334, 334, 334,
501             334, 334, 334, 334, 334, 334, 334, 334,
502             334, 334, 334, 334, 334, 334, 334, 334,
503             334, 334, 334, 334, 334, 334, 334, 334,
504             334, 334, 334, 334, 334, 334, 334, 334
505             ],
506             [ # Courier Bold
507             0, 0, 0, 0, 0, 0, 0, 0,
508             0, 0, 0, 0, 0, 0, 0, 0,
509             0, 0, 0, 0, 0, 0, 0, 0,
510             0, 0, 0, 0, 0, 0, 0, 0,
511             334, 334, 334, 334, 334, 334, 334, 334,
512             334, 334, 334, 334, 334, 334, 334, 334,
513             334, 334, 334, 334, 334, 334, 334, 334,
514             334, 334, 334, 334, 334, 334, 334, 334,
515             334, 334, 334, 334, 334, 334, 334, 334,
516             334, 334, 334, 334, 334, 334, 334, 334,
517             334, 334, 334, 334, 334, 334, 334, 334,
518             334, 334, 334, 334, 334, 334, 334, 334,
519             334, 334, 334, 334, 334, 334, 334, 334,
520             334, 334, 334, 334, 334, 334, 334, 334,
521             334, 334, 334, 334, 334, 334, 334, 334,
522             334, 334, 334, 334, 334, 334, 334, 0,
523             0, 0, 0, 0, 0, 0, 0, 0,
524             0, 0, 0, 0, 0, 0, 0, 0,
525             0, 0, 0, 0, 0, 0, 0, 0,
526             0, 0, 0, 0, 0, 0, 0, 0,
527             334, 334, 334, 334, 334, 334, 334, 334,
528             334, 334, 334, 334, 334, 334, 334, 334,
529             334, 334, 334, 334, 334, 334, 334, 334,
530             334, 334, 334, 334, 334, 334, 334, 334,
531             334, 334, 334, 334, 334, 334, 334, 334,
532             334, 334, 334, 334, 334, 334, 334, 334,
533             334, 334, 334, 334, 334, 334, 334, 334,
534             334, 334, 334, 334, 334, 334, 334, 334,
535             334, 334, 334, 334, 334, 334, 334, 334,
536             334, 334, 334, 334, 334, 334, 334, 334,
537             334, 334, 334, 334, 334, 334, 334, 334,
538             334, 334, 334, 334, 334, 334, 334, 334
539             ],
540             [ # Courier Bold Oblique
541             0, 0, 0, 0, 0, 0, 0, 0,
542             0, 0, 0, 0, 0, 0, 0, 0,
543             0, 0, 0, 0, 0, 0, 0, 0,
544             0, 0, 0, 0, 0, 0, 0, 0,
545             335, 335, 335, 335, 335, 335, 335, 335,
546             335, 335, 335, 335, 335, 335, 335, 335,
547             335, 335, 335, 335, 335, 335, 335, 335,
548             335, 335, 335, 335, 335, 335, 335, 335,
549             335, 335, 335, 335, 335, 335, 335, 335,
550             335, 335, 335, 335, 335, 335, 335, 335,
551             335, 335, 335, 335, 335, 335, 335, 335,
552             335, 335, 335, 335, 335, 335, 335, 335,
553             335, 335, 335, 335, 335, 335, 335, 335,
554             335, 335, 335, 335, 335, 335, 335, 335,
555             335, 335, 335, 335, 335, 335, 335, 335,
556             335, 335, 335, 335, 335, 335, 335, 0,
557             0, 0, 0, 0, 0, 0, 0, 0,
558             0, 0, 0, 0, 0, 0, 0, 0,
559             0, 0, 0, 0, 0, 0, 0, 0,
560             0, 0, 0, 0, 0, 0, 0, 0,
561             335, 335, 335, 335, 335, 335, 335, 335,
562             335, 335, 335, 335, 335, 335, 335, 335,
563             335, 335, 335, 335, 335, 335, 335, 335,
564             335, 335, 335, 335, 335, 335, 335, 335,
565             335, 335, 335, 335, 335, 335, 335, 335,
566             335, 335, 335, 335, 335, 335, 335, 335,
567             335, 335, 335, 335, 335, 335, 335, 335,
568             335, 335, 335, 335, 335, 335, 335, 335,
569             335, 335, 335, 335, 335, 335, 335, 335,
570             335, 335, 335, 335, 335, 335, 335, 335,
571             335, 335, 335, 335, 335, 335, 335, 335,
572             335, 335, 335, 335, 335, 335, 335, 335
573             ],
574             [ # Helvetica
575             0, 0, 0, 0, 0, 0, 0, 0,
576             0, 0, 0, 0, 0, 0, 0, 0,
577             0, 0, 0, 0, 0, 0, 0, 0,
578             0, 0, 0, 0, 0, 0, 0, 0,
579             155, 155, 198, 310, 310, 496, 372, 107,
580             186, 186, 217, 326, 155, 186, 155, 155,
581             310, 310, 310, 310, 310, 310, 310, 310,
582             310, 310, 155, 155, 326, 326, 326, 310,
583             567, 372, 372, 403, 403, 372, 341, 434,
584             403, 155, 279, 372, 310, 465, 403, 434,
585             372, 434, 403, 372, 341, 403, 372, 527,
586             372, 372, 341, 155, 155, 155, 262, 310,
587             186, 310, 310, 279, 310, 310, 155, 310,
588             310, 124, 124, 279, 124, 465, 310, 310,
589             310, 310, 186, 279, 155, 310, 279, 403,
590             279, 279, 279, 186, 145, 186, 326, 0,
591             0, 0, 0, 0, 0, 0, 0, 0,
592             0, 0, 0, 0, 0, 0, 0, 0,
593             0, 0, 0, 0, 0, 0, 0, 0,
594             0, 0, 0, 0, 0, 0, 0, 0,
595             155, 186, 310, 310, 310, 310, 145, 310,
596             186, 411, 207, 310, 326, 186, 411, 186,
597             338, 326, 196, 196, 186, 310, 300, 155,
598             186, 196, 204, 310, 485, 485, 485, 341,
599             372, 372, 372, 372, 372, 372, 558, 403,
600             372, 372, 372, 372, 155, 155, 155, 155,
601             403, 403, 434, 434, 434, 434, 434, 326,
602             434, 403, 403, 403, 403, 372, 372, 341,
603             310, 310, 310, 310, 310, 310, 496, 279,
604             310, 310, 310, 310, 155, 155, 155, 155,
605             310, 310, 310, 310, 310, 310, 310, 326,
606             341, 310, 310, 310, 310, 279, 310, 279
607             ],
608             [ # Helvetica Oblique
609             0, 0, 0, 0, 0, 0, 0, 0,
610             0, 0, 0, 0, 0, 0, 0, 0,
611             0, 0, 0, 0, 0, 0, 0, 0,
612             0, 0, 0, 0, 0, 0, 0, 0,
613             155, 155, 198, 310, 310, 496, 372, 107,
614             186, 186, 217, 326, 155, 186, 155, 155,
615             310, 310, 310, 310, 310, 310, 310, 310,
616             310, 310, 155, 155, 326, 326, 326, 310,
617             567, 372, 372, 403, 403, 372, 341, 434,
618             403, 155, 279, 372, 310, 465, 403, 434,
619             372, 434, 403, 372, 341, 403, 372, 527,
620             372, 372, 341, 155, 155, 155, 262, 310,
621             186, 310, 310, 279, 310, 310, 155, 310,
622             310, 124, 124, 279, 124, 465, 310, 310,
623             310, 310, 186, 279, 155, 310, 279, 403,
624             279, 279, 279, 186, 145, 186, 326, 0,
625             0, 0, 0, 0, 0, 0, 0, 0,
626             0, 0, 0, 0, 0, 0, 0, 0,
627             0, 0, 0, 0, 0, 0, 0, 0,
628             0, 0, 0, 0, 0, 0, 0, 0,
629             155, 186, 310, 310, 310, 310, 145, 310,
630             186, 411, 207, 310, 326, 186, 411, 186,
631             338, 326, 218, 218, 186, 310, 300, 155,
632             186, 218, 204, 310, 529, 529, 529, 341,
633             372, 372, 372, 372, 372, 372, 558, 403,
634             372, 372, 372, 372, 155, 155, 155, 155,
635             403, 403, 434, 434, 434, 434, 434, 326,
636             434, 403, 403, 403, 403, 372, 372, 341,
637             310, 310, 310, 310, 310, 310, 496, 279,
638             310, 310, 310, 310, 155, 155, 155, 155,
639             310, 310, 310, 310, 310, 310, 310, 326,
640             341, 310, 310, 310, 310, 279, 310, 279
641             ],
642             [ # Helvetica Bold
643             0, 0, 0, 0, 0, 0, 0, 0,
644             0, 0, 0, 0, 0, 0, 0, 0,
645             0, 0, 0, 0, 0, 0, 0, 0,
646             0, 0, 0, 0, 0, 0, 0, 0,
647             155, 186, 265, 310, 310, 496, 403, 133,
648             186, 186, 217, 326, 155, 186, 155, 155,
649             310, 310, 310, 310, 310, 310, 310, 310,
650             310, 310, 186, 186, 326, 326, 326, 341,
651             544, 403, 403, 403, 403, 372, 341, 434,
652             403, 155, 310, 403, 341, 465, 403, 434,
653             372, 434, 403, 372, 341, 403, 372, 527,
654             372, 372, 341, 186, 155, 186, 326, 310,
655             186, 310, 341, 310, 341, 310, 186, 341,
656             341, 155, 155, 310, 155, 496, 341, 341,
657             341, 341, 217, 310, 186, 341, 310, 434,
658             310, 310, 279, 217, 156, 217, 326, 0,
659             0, 0, 0, 0, 0, 0, 0, 0,
660             0, 0, 0, 0, 0, 0, 0, 0,
661             0, 0, 0, 0, 0, 0, 0, 0,
662             0, 0, 0, 0, 0, 0, 0, 0,
663             155, 186, 310, 310, 310, 310, 156, 310,
664             186, 411, 207, 310, 326, 186, 411, 186,
665             338, 326, 196, 196, 186, 341, 310, 155,
666             186, 196, 204, 310, 485, 485, 485, 341,
667             403, 403, 403, 403, 403, 403, 558, 403,
668             372, 372, 372, 372, 155, 155, 155, 155,
669             403, 403, 434, 434, 434, 434, 434, 326,
670             434, 403, 403, 403, 403, 372, 372, 341,
671             310, 310, 310, 310, 310, 310, 496, 310,
672             310, 310, 310, 310, 155, 155, 155, 155,
673             341, 341, 341, 341, 341, 341, 341, 326,
674             341, 341, 341, 341, 341, 310, 341, 310
675             ],
676             [ # Helvetica Bold Oblique
677             0, 0, 0, 0, 0, 0, 0, 0,
678             0, 0, 0, 0, 0, 0, 0, 0,
679             0, 0, 0, 0, 0, 0, 0, 0,
680             0, 0, 0, 0, 0, 0, 0, 0,
681             155, 186, 265, 310, 310, 496, 403, 133,
682             186, 186, 217, 326, 155, 186, 155, 155,
683             310, 310, 310, 310, 310, 310, 310, 310,
684             310, 310, 186, 186, 326, 326, 326, 341,
685             544, 403, 403, 403, 403, 372, 341, 434,
686             403, 155, 310, 403, 341, 465, 403, 434,
687             372, 434, 403, 372, 341, 403, 372, 527,
688             372, 372, 341, 186, 155, 186, 326, 310,
689             186, 310, 341, 310, 341, 310, 186, 341,
690             341, 155, 155, 310, 155, 496, 341, 341,
691             341, 341, 217, 310, 186, 341, 310, 434,
692             310, 310, 279, 217, 156, 217, 326, 0,
693             0, 0, 0, 0, 0, 0, 0, 0,
694             0, 0, 0, 0, 0, 0, 0, 0,
695             0, 0, 0, 0, 0, 0, 0, 0,
696             0, 0, 0, 0, 0, 0, 0, 0,
697             155, 186, 310, 310, 310, 310, 156, 310,
698             186, 411, 207, 310, 326, 186, 411, 186,
699             338, 326, 248, 248, 186, 341, 310, 155,
700             186, 248, 204, 310, 589, 589, 589, 341,
701             403, 403, 403, 403, 403, 403, 558, 403,
702             372, 372, 372, 372, 155, 155, 155, 155,
703             403, 403, 434, 434, 434, 434, 434, 326,
704             434, 403, 403, 403, 403, 372, 372, 341,
705             310, 310, 310, 310, 310, 310, 496, 310,
706             310, 310, 310, 310, 155, 155, 155, 155,
707             341, 341, 341, 341, 341, 341, 341, 326,
708             341, 341, 341, 341, 341, 310, 341, 310
709             ],
710             [ # Helvetica Narrow
711             0, 0, 0, 0, 0, 0, 0, 0,
712             0, 0, 0, 0, 0, 0, 0, 0,
713             0, 0, 0, 0, 0, 0, 0, 0,
714             0, 0, 0, 0, 0, 0, 0, 0,
715             127, 127, 162, 255, 255, 407, 305, 88,
716             152, 152, 178, 267, 127, 152, 127, 127,
717             255, 255, 255, 255, 255, 255, 255, 255,
718             255, 255, 127, 127, 267, 267, 267, 255,
719             465, 305, 305, 331, 331, 305, 280, 356,
720             331, 127, 229, 305, 255, 381, 331, 356,
721             305, 356, 331, 305, 280, 331, 305, 432,
722             305, 305, 280, 127, 127, 127, 215, 255,
723             152, 255, 255, 229, 255, 255, 127, 255,
724             255, 102, 102, 229, 102, 381, 255, 255,
725             255, 255, 152, 229, 127, 255, 229, 331,
726             229, 229, 229, 153, 119, 153, 267, 0,
727             0, 0, 0, 0, 0, 0, 0, 0,
728             0, 0, 0, 0, 0, 0, 0, 0,
729             0, 0, 0, 0, 0, 0, 0, 0,
730             0, 0, 0, 0, 0, 0, 0, 0,
731             127, 152, 255, 255, 255, 255, 119, 255,
732             152, 337, 169, 255, 267, 152, 337, 152,
733             183, 267, 152, 152, 152, 255, 246, 127,
734             152, 152, 167, 255, 382, 382, 382, 280,
735             305, 305, 305, 305, 305, 305, 458, 331,
736             305, 305, 305, 305, 127, 127, 127, 127,
737             331, 331, 356, 356, 356, 356, 356, 267,
738             356, 331, 331, 331, 331, 305, 305, 280,
739             255, 255, 255, 255, 255, 255, 407, 229,
740             255, 255, 255, 255, 127, 127, 127, 127,
741             255, 255, 255, 255, 255, 255, 255, 267,
742             280, 255, 255, 255, 255, 229, 255, 229
743             ],
744             [ # Helvetica Narrow Oblique
745             0, 0, 0, 0, 0, 0, 0, 0,
746             0, 0, 0, 0, 0, 0, 0, 0,
747             0, 0, 0, 0, 0, 0, 0, 0,
748             0, 0, 0, 0, 0, 0, 0, 0,
749             127, 127, 162, 255, 255, 407, 305, 88,
750             152, 152, 178, 267, 127, 152, 127, 127,
751             255, 255, 255, 255, 255, 255, 255, 255,
752             255, 255, 127, 127, 267, 267, 267, 255,
753             465, 305, 305, 331, 331, 305, 280, 356,
754             331, 127, 229, 305, 255, 381, 331, 356,
755             305, 356, 331, 305, 280, 331, 305, 432,
756             305, 305, 280, 127, 127, 127, 215, 255,
757             152, 255, 255, 229, 255, 255, 127, 255,
758             255, 102, 102, 229, 102, 381, 255, 255,
759             255, 255, 152, 229, 127, 255, 229, 331,
760             229, 229, 229, 153, 119, 153, 267, 0,
761             0, 0, 0, 0, 0, 0, 0, 0,
762             0, 0, 0, 0, 0, 0, 0, 0,
763             0, 0, 0, 0, 0, 0, 0, 0,
764             0, 0, 0, 0, 0, 0, 0, 0,
765             127, 152, 255, 255, 255, 255, 119, 255,
766             152, 337, 169, 255, 267, 152, 337, 152,
767             183, 267, 152, 152, 152, 255, 246, 127,
768             152, 152, 167, 255, 382, 382, 382, 280,
769             305, 305, 305, 305, 305, 305, 458, 331,
770             305, 305, 305, 305, 127, 127, 127, 127,
771             331, 331, 356, 356, 356, 356, 356, 267,
772             356, 331, 331, 331, 331, 305, 305, 280,
773             255, 255, 255, 255, 255, 255, 407, 229,
774             255, 255, 255, 255, 127, 127, 127, 127,
775             255, 255, 255, 255, 255, 255, 255, 267,
776             280, 255, 255, 255, 255, 229, 255, 229
777             ],
778             [ # Helvetica Narrow Bold
779             0, 0, 0, 0, 0, 0, 0, 0,
780             0, 0, 0, 0, 0, 0, 0, 0,
781             0, 0, 0, 0, 0, 0, 0, 0,
782             0, 0, 0, 0, 0, 0, 0, 0,
783             127, 152, 217, 255, 255, 407, 331, 109,
784             152, 152, 178, 267, 127, 152, 127, 127,
785             255, 255, 255, 255, 255, 255, 255, 255,
786             255, 255, 152, 152, 267, 267, 267, 280,
787             447, 331, 331, 331, 331, 305, 280, 356,
788             331, 127, 255, 331, 280, 381, 331, 356,
789             305, 356, 331, 305, 280, 331, 305, 432,
790             305, 305, 280, 152, 127, 152, 267, 255,
791             152, 255, 280, 255, 280, 255, 152, 280,
792             280, 127, 127, 255, 127, 407, 280, 280,
793             280, 280, 178, 255, 152, 280, 255, 356,
794             255, 255, 229, 178, 128, 178, 267, 0,
795             0, 0, 0, 0, 0, 0, 0, 0,
796             0, 0, 0, 0, 0, 0, 0, 0,
797             0, 0, 0, 0, 0, 0, 0, 0,
798             0, 0, 0, 0, 0, 0, 0, 0,
799             127, 152, 255, 255, 255, 255, 128, 255,
800             152, 337, 169, 255, 267, 152, 337, 152,
801             183, 267, 152, 152, 152, 280, 255, 127,
802             152, 152, 167, 255, 382, 382, 382, 280,
803             331, 331, 331, 331, 331, 331, 458, 331,
804             305, 305, 305, 305, 127, 127, 127, 127,
805             331, 331, 356, 356, 356, 356, 356, 267,
806             356, 331, 331, 331, 331, 305, 305, 280,
807             255, 255, 255, 255, 255, 255, 407, 255,
808             255, 255, 255, 255, 127, 127, 127, 127,
809             280, 280, 280, 280, 280, 280, 280, 267,
810             280, 280, 280, 280, 280, 255, 280, 255
811             ],
812             [ # Helvetica Narrow Bold Oblique
813             0, 0, 0, 0, 0, 0, 0, 0,
814             0, 0, 0, 0, 0, 0, 0, 0,
815             0, 0, 0, 0, 0, 0, 0, 0,
816             0, 0, 0, 0, 0, 0, 0, 0,
817             127, 152, 217, 255, 255, 407, 331, 109,
818             152, 152, 178, 267, 127, 152, 127, 127,
819             255, 255, 255, 255, 255, 255, 255, 255,
820             255, 255, 152, 152, 267, 267, 267, 280,
821             447, 331, 331, 331, 331, 305, 280, 356,
822             331, 127, 255, 331, 280, 381, 331, 356,
823             305, 356, 331, 305, 280, 331, 305, 432,
824             305, 305, 280, 152, 127, 152, 267, 255,
825             152, 255, 280, 255, 280, 255, 152, 280,
826             280, 127, 127, 255, 127, 407, 280, 280,
827             280, 280, 178, 255, 152, 280, 255, 356,
828             255, 255, 229, 178, 128, 178, 267, 0,
829             0, 0, 0, 0, 0, 0, 0, 0,
830             0, 0, 0, 0, 0, 0, 0, 0,
831             0, 0, 0, 0, 0, 0, 0, 0,
832             0, 0, 0, 0, 0, 0, 0, 0,
833             127, 152, 255, 255, 255, 255, 128, 255,
834             152, 337, 169, 255, 267, 152, 337, 152,
835             183, 267, 152, 152, 152, 280, 255, 127,
836             152, 152, 167, 255, 382, 382, 382, 280,
837             331, 331, 331, 331, 331, 331, 458, 331,
838             305, 305, 305, 305, 127, 127, 127, 127,
839             331, 331, 356, 356, 356, 356, 356, 267,
840             356, 331, 331, 331, 331, 305, 305, 280,
841             255, 255, 255, 255, 255, 255, 407, 255,
842             255, 255, 255, 255, 127, 127, 127, 127,
843             280, 280, 280, 280, 280, 280, 280, 267,
844             280, 280, 280, 280, 280, 255, 280, 255
845             ],
846             [ # New Century Schoolbook Roman
847             0, 0, 0, 0, 0, 0, 0, 0,
848             0, 0, 0, 0, 0, 0, 0, 0,
849             0, 0, 0, 0, 0, 0, 0, 0,
850             0, 0, 0, 0, 0, 0, 0, 0,
851             155, 165, 217, 310, 310, 465, 455, 114,
852             186, 186, 279, 338, 155, 186, 155, 155,
853             310, 310, 310, 310, 310, 310, 310, 310,
854             310, 310, 155, 155, 338, 338, 338, 248,
855             411, 403, 403, 403, 434, 403, 372, 434,
856             465, 227, 310, 434, 372, 527, 455, 434,
857             372, 434, 403, 352, 372, 455, 403, 548,
858             393, 393, 341, 186, 338, 186, 338, 279,
859             186, 310, 310, 248, 320, 279, 186, 300,
860             341, 176, 165, 331, 176, 496, 341, 279,
861             320, 310, 248, 259, 217, 341, 300, 434,
862             300, 300, 269, 186, 338, 186, 338, 0,
863             0, 0, 0, 0, 0, 0, 0, 0,
864             0, 0, 0, 0, 0, 0, 0, 0,
865             0, 0, 0, 0, 0, 0, 0, 0,
866             0, 0, 0, 0, 0, 0, 0, 0,
867             155, 165, 310, 310, 310, 310, 338, 279,
868             186, 411, 186, 238, 338, 186, 411, 186,
869             223, 338, 186, 186, 186, 341, 338, 155,
870             186, 186, 168, 238, 466, 466, 466, 248,
871             403, 403, 403, 403, 403, 403, 558, 403,
872             403, 403, 403, 403, 227, 227, 227, 227,
873             434, 455, 434, 434, 434, 434, 434, 338,
874             434, 455, 455, 455, 455, 393, 372, 320,
875             310, 310, 310, 310, 310, 310, 444, 248,
876             279, 279, 279, 279, 176, 176, 176, 176,
877             279, 341, 279, 279, 279, 279, 279, 338,
878             279, 341, 341, 341, 341, 300, 320, 300
879             ],
880             [ # New Century Schoolbook Roman Italic
881             0, 0, 0, 0, 0, 0, 0, 0,
882             0, 0, 0, 0, 0, 0, 0, 0,
883             0, 0, 0, 0, 0, 0, 0, 0,
884             0, 0, 0, 0, 0, 0, 0, 0,
885             155, 186, 223, 310, 310, 465, 476, 155,
886             186, 186, 279, 338, 155, 186, 155, 338,
887             310, 310, 310, 310, 310, 310, 310, 310,
888             310, 310, 155, 155, 338, 338, 338, 248,
889             417, 393, 403, 403, 434, 403, 372, 434,
890             465, 227, 341, 414, 372, 527, 455, 434,
891             372, 434, 414, 372, 382, 455, 393, 517,
892             393, 382, 372, 186, 338, 186, 338, 279,
893             186, 320, 310, 248, 341, 248, 186, 300,
894             341, 186, 176, 310, 186, 496, 341, 279,
895             320, 310, 248, 248, 197, 341, 290, 434,
896             279, 279, 259, 186, 338, 186, 338, 0,
897             0, 0, 0, 0, 0, 0, 0, 0,
898             0, 0, 0, 0, 0, 0, 0, 0,
899             0, 0, 0, 0, 0, 0, 0, 0,
900             0, 0, 0, 0, 0, 0, 0, 0,
901             155, 186, 310, 310, 310, 310, 338, 279,
902             186, 417, 236, 238, 338, 186, 417, 186,
903             223, 338, 186, 186, 186, 341, 363, 155,
904             186, 186, 208, 238, 466, 466, 466, 248,
905             393, 393, 393, 393, 393, 393, 486, 403,
906             403, 403, 403, 403, 227, 227, 227, 227,
907             434, 455, 434, 434, 434, 434, 434, 338,
908             434, 455, 455, 455, 455, 382, 372, 310,
909             320, 320, 320, 320, 320, 320, 403, 248,
910             248, 248, 248, 248, 186, 186, 186, 186,
911             279, 341, 279, 279, 279, 279, 279, 338,
912             279, 341, 341, 341, 341, 279, 320, 279
913             ],
914             [ # New Century Schoolbook Roman Bold
915             0, 0, 0, 0, 0, 0, 0, 0,
916             0, 0, 0, 0, 0, 0, 0, 0,
917             0, 0, 0, 0, 0, 0, 0, 0,
918             0, 0, 0, 0, 0, 0, 0, 0,
919             160, 165, 186, 320, 320, 465, 476, 135,
920             217, 217, 279, 338, 155, 186, 155, 155,
921             320, 320, 320, 320, 320, 320, 320, 320,
922             320, 320, 155, 155, 338, 338, 338, 279,
923             417, 424, 434, 434, 465, 424, 403, 465,
924             486, 248, 362, 455, 403, 548, 465, 465,
925             424, 465, 455, 372, 403, 465, 424, 548,
926             403, 403, 372, 217, 338, 217, 338, 279,
927             186, 341, 362, 310, 372, 320, 217, 341,
928             382, 207, 197, 372, 197, 538, 382, 341,
929             372, 362, 290, 279, 238, 382, 341, 496,
930             341, 341, 300, 217, 338, 217, 338, 0,
931             0, 0, 0, 0, 0, 0, 0, 0,
932             0, 0, 0, 0, 0, 0, 0, 0,
933             0, 0, 0, 0, 0, 0, 0, 0,
934             0, 0, 0, 0, 0, 0, 0, 0,
935             160, 165, 320, 320, 320, 320, 338, 279,
936             186, 417, 205, 279, 338, 186, 417, 186,
937             223, 338, 192, 192, 186, 382, 417, 155,
938             186, 192, 205, 279, 481, 481, 481, 279,
939             424, 424, 424, 424, 424, 424, 548, 434,
940             424, 424, 424, 424, 248, 248, 248, 248,
941             465, 465, 465, 465, 465, 465, 465, 338,
942             465, 465, 465, 465, 465, 403, 424, 341,
943             341, 341, 341, 341, 341, 341, 486, 310,
944             320, 320, 320, 320, 207, 207, 207, 207,
945             341, 382, 341, 341, 341, 341, 341, 338,
946             341, 382, 382, 382, 382, 341, 372, 341
947             ],
948             [ # New Century Schoolbook Roman Bold Italic
949             0, 0, 0, 0, 0, 0, 0, 0,
950             0, 0, 0, 0, 0, 0, 0, 0,
951             0, 0, 0, 0, 0, 0, 0, 0,
952             0, 0, 0, 0, 0, 0, 0, 0,
953             160, 186, 223, 320, 320, 496, 496, 160,
954             227, 227, 279, 338, 160, 186, 160, 155,
955             320, 320, 320, 320, 320, 320, 320, 320,
956             320, 320, 160, 160, 338, 338, 338, 269,
957             417, 414, 424, 424, 465, 414, 393, 455,
958             486, 248, 372, 434, 393, 527, 476, 465,
959             414, 465, 444, 382, 403, 465, 414, 527,
960             414, 393, 393, 227, 338, 227, 338, 279,
961             186, 372, 341, 300, 372, 290, 217, 341,
962             382, 217, 207, 362, 217, 527, 382, 320,
963             362, 352, 290, 269, 227, 382, 310, 465,
964             320, 290, 290, 227, 338, 227, 338, 0,
965             0, 0, 0, 0, 0, 0, 0, 0,
966             0, 0, 0, 0, 0, 0, 0, 0,
967             0, 0, 0, 0, 0, 0, 0, 0,
968             0, 0, 0, 0, 0, 0, 0, 0,
969             160, 186, 320, 320, 320, 320, 338, 279,
970             186, 417, 230, 269, 338, 186, 417, 186,
971             223, 338, 192, 192, 186, 382, 363, 160,
972             186, 192, 199, 269, 481, 481, 481, 269,
973             414, 414, 414, 414, 414, 414, 496, 424,
974             414, 414, 414, 414, 248, 248, 248, 248,
975             465, 476, 465, 465, 465, 465, 465, 338,
976             465, 465, 465, 465, 465, 393, 414, 320,
977             372, 372, 372, 372, 372, 372, 455, 300,
978             290, 290, 290, 290, 217, 217, 217, 217,
979             320, 382, 320, 320, 320, 320, 320, 338,
980             320, 382, 382, 382, 382, 290, 362, 290
981             ],
982             [ # Palatino Roman
983             0, 0, 0, 0, 0, 0, 0, 0,
984             0, 0, 0, 0, 0, 0, 0, 0,
985             0, 0, 0, 0, 0, 0, 0, 0,
986             0, 0, 0, 0, 0, 0, 0, 0,
987             140, 155, 207, 279, 279, 469, 434, 116,
988             186, 186, 217, 338, 140, 186, 140, 338,
989             279, 279, 279, 279, 279, 279, 279, 279,
990             279, 279, 140, 140, 338, 338, 338, 248,
991             417, 434, 341, 396, 432, 341, 310, 426,
992             465, 188, 186, 405, 341, 528, 464, 439,
993             337, 439, 373, 293, 342, 434, 403, 558,
994             372, 372, 372, 186, 338, 186, 338, 279,
995             186, 279, 309, 248, 341, 267, 186, 310,
996             325, 162, 131, 310, 162, 493, 325, 305,
997             336, 313, 221, 237, 182, 337, 315, 466,
998             288, 310, 279, 186, 338, 186, 338, 0,
999             0, 0, 0, 0, 0, 0, 0, 0,
1000             0, 0, 0, 0, 0, 0, 0, 0,
1001             0, 0, 0, 0, 0, 0, 0, 0,
1002             0, 0, 0, 0, 0, 0, 0, 0,
1003             140, 155, 279, 279, 279, 279, 338, 279,
1004             186, 417, 186, 279, 338, 186, 417, 186,
1005             223, 338, 168, 168, 186, 337, 351, 140,
1006             186, 168, 186, 279, 419, 419, 419, 248,
1007             434, 434, 434, 434, 434, 434, 527, 396,
1008             341, 341, 341, 341, 188, 188, 188, 188,
1009             432, 464, 439, 439, 439, 439, 439, 338,
1010             465, 434, 434, 434, 434, 372, 337, 310,
1011             279, 279, 279, 279, 279, 279, 423, 248,
1012             267, 267, 267, 267, 160, 160, 160, 160,
1013             305, 325, 305, 305, 305, 305, 305, 338,
1014             310, 337, 337, 337, 337, 310, 336, 310
1015             ],
1016             [ # Palatino Italic
1017             0, 0, 0, 0, 0, 0, 0, 0,
1018             0, 0, 0, 0, 0, 0, 0, 0,
1019             0, 0, 0, 0, 0, 0, 0, 0,
1020             0, 0, 0, 0, 0, 0, 0, 0,
1021             140, 186, 279, 279, 279, 496, 434, 186,
1022             186, 186, 217, 338, 140, 186, 140, 165,
1023             279, 279, 279, 279, 279, 279, 279, 279,
1024             279, 279, 140, 140, 338, 338, 338, 279,
1025             417, 403, 341, 372, 434, 341, 310, 403,
1026             434, 186, 186, 372, 310, 527, 434, 434,
1027             341, 434, 372, 310, 341, 434, 403, 527,
1028             403, 372, 372, 186, 338, 186, 338, 279,
1029             186, 248, 259, 227, 279, 217, 155, 279,
1030             279, 155, 155, 248, 155, 434, 310, 248,
1031             279, 259, 217, 217, 186, 310, 279, 403,
1032             279, 279, 248, 186, 338, 186, 338, 0,
1033             0, 0, 0, 0, 0, 0, 0, 0,
1034             0, 0, 0, 0, 0, 0, 0, 0,
1035             0, 0, 0, 0, 0, 0, 0, 0,
1036             0, 0, 0, 0, 0, 0, 0, 0,
1037             140, 186, 279, 279, 279, 279, 338, 279,
1038             186, 417, 186, 279, 338, 186, 417, 186,
1039             223, 338, 168, 168, 186, 310, 279, 140,
1040             186, 168, 186, 279, 419, 419, 419, 279,
1041             403, 403, 403, 403, 403, 403, 525, 372,
1042             341, 341, 341, 341, 186, 186, 186, 186,
1043             434, 434, 434, 434, 434, 434, 434, 338,
1044             434, 434, 434, 434, 434, 372, 341, 279,
1045             248, 248, 248, 248, 248, 248, 356, 227,
1046             217, 217, 217, 217, 155, 155, 155, 155,
1047             248, 310, 248, 248, 248, 248, 248, 338,
1048             248, 310, 310, 310, 310, 279, 279, 279
1049             ],
1050             [ # Palatino Bold
1051             0, 0, 0, 0, 0, 0, 0, 0,
1052             0, 0, 0, 0, 0, 0, 0, 0,
1053             0, 0, 0, 0, 0, 0, 0, 0,
1054             0, 0, 0, 0, 0, 0, 0, 0,
1055             140, 155, 224, 279, 279, 496, 465, 127,
1056             186, 186, 248, 338, 140, 186, 140, 165,
1057             279, 279, 279, 279, 279, 279, 279, 279,
1058             279, 279, 140, 140, 338, 338, 338, 248,
1059             417, 434, 372, 403, 465, 341, 310, 465,
1060             465, 217, 217, 434, 341, 558, 465, 465,
1061             341, 465, 403, 341, 372, 434, 434, 558,
1062             372, 372, 372, 186, 338, 186, 338, 279,
1063             186, 279, 341, 248, 341, 279, 217, 310,
1064             341, 186, 186, 341, 186, 496, 341, 310,
1065             341, 341, 217, 248, 186, 341, 310, 465,
1066             279, 310, 279, 173, 338, 173, 338, 0,
1067             0, 0, 0, 0, 0, 0, 0, 0,
1068             0, 0, 0, 0, 0, 0, 0, 0,
1069             0, 0, 0, 0, 0, 0, 0, 0,
1070             0, 0, 0, 0, 0, 0, 0, 0,
1071             140, 155, 279, 279, 279, 279, 338, 279,
1072             186, 417, 245, 279, 338, 186, 417, 186,
1073             223, 338, 168, 168, 186, 341, 358, 140,
1074             186, 168, 272, 279, 419, 419, 419, 248,
1075             434, 434, 434, 434, 434, 434, 558, 403,
1076             341, 341, 341, 341, 217, 217, 217, 217,
1077             465, 465, 465, 465, 465, 465, 465, 338,
1078             465, 434, 434, 434, 434, 372, 341, 341,
1079             279, 279, 279, 279, 279, 279, 434, 248,
1080             279, 279, 279, 279, 186, 186, 186, 186,
1081             310, 341, 310, 310, 310, 310, 310, 338,
1082             310, 341, 341, 341, 341, 310, 341, 310
1083             ],
1084             [ # Palatino Bold Italic
1085             0, 0, 0, 0, 0, 0, 0, 0,
1086             0, 0, 0, 0, 0, 0, 0, 0,
1087             0, 0, 0, 0, 0, 0, 0, 0,
1088             0, 0, 0, 0, 0, 0, 0, 0,
1089             140, 186, 279, 279, 279, 496, 465, 140,
1090             186, 186, 248, 338, 140, 217, 140, 176,
1091             279, 279, 279, 279, 279, 279, 279, 279,
1092             279, 279, 140, 140, 338, 338, 338, 248,
1093             465, 403, 372, 382, 434, 341, 310, 434,
1094             434, 217, 217, 403, 341, 527, 434, 465,
1095             372, 465, 403, 310, 341, 434, 372, 558,
1096             403, 341, 372, 186, 338, 186, 338, 279,
1097             186, 310, 300, 248, 310, 248, 186, 279,
1098             310, 186, 186, 310, 186, 465, 310, 310,
1099             310, 300, 217, 248, 217, 310, 310, 465,
1100             279, 310, 279, 186, 338, 186, 338, 0,
1101             0, 0, 0, 0, 0, 0, 0, 0,
1102             0, 0, 0, 0, 0, 0, 0, 0,
1103             0, 0, 0, 0, 0, 0, 0, 0,
1104             0, 0, 0, 0, 0, 0, 0, 0,
1105             140, 186, 279, 279, 279, 279, 338, 310,
1106             186, 417, 186, 279, 338, 217, 417, 186,
1107             223, 338, 168, 168, 186, 310, 310, 140,
1108             186, 168, 186, 279, 419, 419, 419, 248,
1109             403, 403, 403, 403, 403, 403, 527, 382,
1110             341, 341, 341, 341, 217, 217, 217, 217,
1111             434, 434, 465, 465, 465, 465, 465, 338,
1112             465, 434, 434, 434, 434, 341, 372, 310,
1113             310, 310, 310, 310, 310, 310, 412, 248,
1114             248, 248, 248, 248, 186, 186, 186, 186,
1115             310, 310, 310, 310, 310, 310, 310, 338,
1116             310, 310, 310, 310, 310, 310, 310, 310
1117             ],
1118             [ # Symbol
1119             0, 0, 0, 0, 0, 0, 0, 0,
1120             0, 0, 0, 0, 0, 0, 0, 0,
1121             0, 0, 0, 0, 0, 0, 0, 0,
1122             0, 0, 0, 0, 0, 0, 0, 0,
1123             140, 186, 398, 279, 307, 465, 434, 245,
1124             186, 186, 279, 307, 140, 307, 140, 155,
1125             279, 279, 279, 279, 279, 279, 279, 279,
1126             279, 279, 155, 155, 307, 307, 307, 248,
1127             307, 403, 372, 403, 342, 341, 426, 337,
1128             403, 186, 352, 403, 383, 496, 403, 403,
1129             429, 414, 310, 331, 341, 385, 245, 429,
1130             360, 444, 341, 186, 482, 186, 367, 279,
1131             279, 352, 307, 307, 276, 245, 291, 229,
1132             337, 184, 337, 307, 307, 322, 291, 307,
1133             307, 291, 307, 337, 245, 322, 398, 383,
1134             275, 383, 276, 268, 112, 268, 307, 0,
1135             0, 0, 0, 0, 0, 0, 0, 0,
1136             0, 0, 0, 0, 0, 0, 0, 0,
1137             0, 0, 0, 0, 0, 0, 0, 0,
1138             0, 0, 0, 0, 0, 0, 0, 0,
1139             0, 346, 138, 307, 93, 398, 279, 420,
1140             420, 420, 420, 582, 551, 337, 551, 337,
1141             223, 307, 229, 307, 307, 398, 276, 257,
1142             307, 307, 307, 307, 558, 337, 558, 367,
1143             460, 383, 444, 551, 429, 429, 460, 429,
1144             429, 398, 398, 398, 398, 398, 398, 398,
1145             429, 398, 441, 441, 497, 460, 307, 140,
1146             398, 337, 337, 582, 551, 337, 551, 337,
1147             276, 184, 441, 441, 439, 398, 214, 214,
1148             214, 214, 214, 214, 276, 276, 276, 276,
1149             0, 184, 153, 383, 383, 383, 214, 214,
1150             214, 214, 214, 214, 276, 276, 276, 0
1151             ],
1152             [ # Zapf Chancery Medium Italic
1153             0, 0, 0, 0, 0, 0, 0, 0,
1154             0, 0, 0, 0, 0, 0, 0, 0,
1155             0, 0, 0, 0, 0, 0, 0, 0,
1156             0, 0, 0, 0, 0, 0, 0, 0,
1157             123, 156, 123, 246, 246, 380, 436, 89,
1158             145, 123, 235, 290, 123, 156, 123, 190,
1159             246, 246, 246, 246, 246, 246, 246, 246,
1160             246, 246, 145, 134, 290, 290, 290, 212,
1161             391, 346, 335, 290, 391, 346, 324, 346,
1162             380, 212, 223, 369, 324, 469, 391, 335,
1163             302, 335, 335, 257, 279, 413, 357, 491,
1164             313, 313, 346, 134, 268, 179, 290, 279,
1165             123, 235, 235, 190, 246, 190, 179, 223,
1166             246, 134, 123, 246, 134, 346, 257, 223,
1167             246, 223, 168, 179, 179, 257, 246, 380,
1168             235, 223, 246, 134, 290, 134, 290, 0,
1169             0, 0, 0, 0, 0, 0, 0, 0,
1170             0, 0, 0, 0, 0, 0, 0, 0,
1171             0, 0, 0, 0, 0, 0, 0, 0,
1172             0, 0, 0, 0, 0, 0, 0, 0,
1173             123, 156, 246, 246, 246, 246, 290, 235,
1174             201, 413, 145, 190, 290, 156, 413, 246,
1175             223, 290, 147, 147, 168, 257, 279, 123,
1176             168, 147, 145, 212, 369, 369, 369, 223,
1177             346, 346, 346, 346, 346, 346, 413, 290,
1178             346, 346, 346, 346, 212, 212, 212, 212,
1179             391, 391, 335, 335, 335, 335, 335, 290,
1180             369, 413, 413, 413, 413, 313, 302, 235,
1181             235, 235, 235, 235, 235, 235, 302, 190,
1182             190, 190, 190, 190, 134, 134, 134, 134,
1183             223, 257, 223, 223, 223, 223, 223, 290,
1184             246, 257, 257, 257, 257, 223, 246, 223
1185             ],
1186             [ # Zapf Dinbats
1187             0, 0, 0, 0, 0, 0, 0, 0,
1188             0, 0, 0, 0, 0, 0, 0, 0,
1189             0, 0, 0, 0, 0, 0, 0, 0,
1190             0, 0, 0, 0, 0, 0, 0, 0,
1191             155, 544, 537, 544, 547, 401, 441, 441,
1192             442, 385, 536, 524, 307, 477, 509, 521,
1193             509, 528, 544, 422, 472, 425, 425, 319,
1194             378, 426, 424, 424, 421, 276, 308, 300,
1195             322, 386, 439, 440, 440, 441, 443, 443,
1196             456, 460, 441, 470, 460, 465, 456, 464,
1197             515, 415, 404, 418, 441, 442, 388, 433,
1198             429, 442, 424, 395, 395, 381, 391, 461,
1199             455, 441, 441, 395, 384, 389, 385, 439,
1200             439, 398, 442, 438, 442, 487, 425, 425,
1201             425, 424, 424, 498, 498, 440, 438, 245,
1202             77, 155, 232, 219, 219, 373, 373, 0,
1203             0, 0, 0, 0, 0, 0, 0, 0,
1204             0, 0, 0, 0, 0, 0, 0, 0,
1205             0, 0, 0, 0, 0, 0, 0, 0,
1206             0, 0, 0, 0, 0, 0, 0, 0,
1207             0, 409, 304, 304, 508, 372, 424, 424,
1208             433, 332, 387, 350, 440, 440, 440, 440,
1209             440, 440, 440, 440, 440, 440, 440, 440,
1210             440, 440, 440, 440, 440, 440, 440, 440,
1211             440, 440, 440, 440, 440, 440, 440, 440,
1212             440, 440, 440, 440, 440, 440, 440, 440,
1213             440, 440, 440, 440, 499, 468, 567, 256,
1214             418, 516, 418, 513, 518, 518, 518, 466,
1215             487, 462, 516, 516, 512, 519, 520, 259,
1216             493, 467, 467, 484, 484, 389, 389, 488,
1217             0, 488, 424, 528, 430, 483, 430, 496,
1218             540, 496, 464, 487, 518, 542, 513, 0
1219             ],
1220             );
1221              
1222             #
1223             # @FontScale: font scaling parameters for each PostScript font
1224             #
1225             # The parameters scale linearly but with different slopes. Also,
1226             # they have minimum or maximimum values. Calculate from the point
1227             # size as follows:
1228             #
1229             # minLeftBearing(pointSize) = MIN(leftBearingMax,
1230             # pointSize * leftBearingSlope + leftBearingIntercept);
1231             #
1232             # maxRightBearing(pointSize) = MIN(rightBearingMax,
1233             # pointSize * rightBearingSlope + rightBearingIntercept);
1234             #
1235             # maxWidth(pointSize) = MAX(widthMin,
1236             # pointSize * widthSlope + widthIntercept)
1237             #
1238             # maxAscent(pointSize) = MAX(ascentMin,
1239             # pointSize * ascentSlope + ascentIntercept)
1240             #
1241             # maxDescent(pointSize) = MAX(descentMin,
1242             # pointSize * descentSlope + descentIntercept)
1243             #
1244             # To calculate per-character widths at a given point size, we use:
1245             #
1246             # width = characterWidthAt500 * maxWidth(pointSize) /
1247             # (500 * widthSlope + widthIntercept)
1248             #
1249             my @FontScale = (
1250             # Times Roman
1251             {
1252             leftBearingMax => 0.000,
1253             leftBearingSlope => -0.078,
1254             leftBearingIntercept => -0.065,
1255             rightBearingMin => 6.000,
1256             rightBearingSlope => 1.042,
1257             rightBearingIntercept => -0.502,
1258             widthMin => 6.000,
1259             widthSlope => 1.056,
1260             widthIntercept => -0.669,
1261             ascentMin => 6.000,
1262             ascentSlope => 1.022,
1263             ascentIntercept => -0.266,
1264             descentMin => 2.000,
1265             descentSlope => 0.244,
1266             descentIntercept => 0.071
1267             },
1268             # Times Italic
1269             {
1270             leftBearingMax => -1.000,
1271             leftBearingSlope => -0.188,
1272             leftBearingIntercept => 0.259,
1273             rightBearingMin => 5.000,
1274             rightBearingSlope => 1.018,
1275             rightBearingIntercept => -0.211,
1276             widthMin => 6.000,
1277             widthSlope => 1.028,
1278             widthIntercept => -0.336,
1279             ascentMin => 6.000,
1280             ascentSlope => 1.009,
1281             ascentIntercept => -0.113,
1282             descentMin => 2.000,
1283             descentSlope => 0.243,
1284             descentIntercept => 0.089
1285             },
1286             # Times Bold
1287             {
1288             leftBearingMax => 0.000,
1289             leftBearingSlope => -0.071,
1290             leftBearingIntercept => -0.148,
1291             rightBearingMin => 6.000,
1292             rightBearingSlope => 1.095,
1293             rightBearingIntercept => -0.145,
1294             widthMin => 6.000,
1295             widthSlope => 1.117,
1296             widthIntercept => -0.408,
1297             ascentMin => 7.000,
1298             ascentSlope => 1.060,
1299             ascentIntercept => -0.724,
1300             descentMin => 1.000,
1301             descentSlope => 0.243,
1302             descentIntercept => 0.083
1303             },
1304             # Times Bold Italic
1305             {
1306             leftBearingMax => -1.000,
1307             leftBearingSlope => -0.222,
1308             leftBearingIntercept => -0.332,
1309             rightBearingMin => 6.000,
1310             rightBearingSlope => 1.051,
1311             rightBearingIntercept => -0.612,
1312             widthMin => 6.000,
1313             widthSlope => 1.056,
1314             widthIntercept => -0.669,
1315             ascentMin => 7.000,
1316             ascentSlope => 1.063,
1317             ascentIntercept => -0.752,
1318             descentMin => 1.000,
1319             descentSlope => 0.244,
1320             descentIntercept => 0.078
1321             },
1322             # Avantgarde Book
1323             {
1324             leftBearingMax => 0.000,
1325             leftBearingSlope => -0.086,
1326             leftBearingIntercept => 0.033,
1327             rightBearingMin => 7.000,
1328             rightBearingSlope => 1.248,
1329             rightBearingIntercept => 0.025,
1330             widthMin => 7.000,
1331             widthSlope => 1.293,
1332             widthIntercept => -0.516,
1333             ascentMin => 7.000,
1334             ascentSlope => 1.090,
1335             ascentIntercept => -0.076,
1336             descentMin => 1.000,
1337             descentSlope => 0.269,
1338             descentIntercept => -0.223
1339             },
1340             # Avantgarde Book Oblique
1341             {
1342             leftBearingMax => 0.000,
1343             leftBearingSlope => -0.091,
1344             leftBearingIntercept => 0.088,
1345             rightBearingMin => 7.000,
1346             rightBearingSlope => 1.310,
1347             rightBearingIntercept => -0.724,
1348             widthMin => 7.000,
1349             widthSlope => 1.293,
1350             widthIntercept => -0.516,
1351             ascentMin => 7.000,
1352             ascentSlope => 1.085,
1353             ascentIntercept => -0.021,
1354             descentMin => 1.000,
1355             descentSlope => 0.254,
1356             descentIntercept => -0.051
1357             },
1358             # Avantgarde Demi
1359             {
1360             leftBearingMax => 0.000,
1361             leftBearingSlope => -0.085,
1362             leftBearingIntercept => 0.019,
1363             rightBearingMin => 6.000,
1364             rightBearingSlope => 1.173,
1365             rightBearingIntercept => -0.080,
1366             widthMin => 6.000,
1367             widthSlope => 1.207,
1368             widthIntercept => -0.487,
1369             ascentMin => 7.000,
1370             ascentSlope => 1.115,
1371             ascentIntercept => 0.621,
1372             descentMin => 2.000,
1373             descentSlope => 0.281,
1374             descentIntercept => -0.376
1375             },
1376             # Avantgarde Demi Oblique
1377             {
1378             leftBearingMax => 0.000,
1379             leftBearingSlope => -0.030,
1380             leftBearingIntercept => 0.361,
1381             rightBearingMin => 7.000,
1382             rightBearingSlope => 1.239,
1383             rightBearingIntercept => -0.873,
1384             widthMin => 6.000,
1385             widthSlope => 1.207,
1386             widthIntercept => -0.487,
1387             ascentMin => 7.000,
1388             ascentSlope => 1.123,
1389             ascentIntercept => 0.524,
1390             descentMin => 2.000,
1391             descentSlope => 0.282,
1392             descentIntercept => -0.383
1393             },
1394             # Bookman Light
1395             {
1396             leftBearingMax => -1.000,
1397             leftBearingSlope => -0.123,
1398             leftBearingIntercept => 0.476,
1399             rightBearingMin => 7.000,
1400             rightBearingSlope => 1.398,
1401             rightBearingIntercept => -0.771,
1402             widthMin => 8.000,
1403             widthSlope => 1.409,
1404             widthIntercept => -0.911,
1405             ascentMin => 7.000,
1406             ascentSlope => 1.030,
1407             ascentIntercept => -0.361,
1408             descentMin => 1.000,
1409             descentSlope => 0.270,
1410             descentIntercept => -0.244
1411             },
1412             # Bookman Light Italic
1413             {
1414             leftBearingMax => -1.000,
1415             leftBearingSlope => -0.222,
1416             leftBearingIntercept => -0.332,
1417             rightBearingMin => 8.000,
1418             rightBearingSlope => 1.417,
1419             rightBearingIntercept => 0.002,
1420             widthMin => 7.000,
1421             widthSlope => 1.363,
1422             widthIntercept => -0.355,
1423             ascentMin => 6.000,
1424             ascentSlope => 0.979,
1425             ascentIntercept => 0.248,
1426             descentMin => 1.000,
1427             descentSlope => 0.247,
1428             descentIntercept => 0.037
1429             },
1430             # Bookman Demi
1431             {
1432             leftBearingMax => -1.000,
1433             leftBearingSlope => -0.106,
1434             leftBearingIntercept => 0.268,
1435             rightBearingMin => 7.000,
1436             rightBearingSlope => 1.284,
1437             rightBearingIntercept => -0.405,
1438             widthMin => 7.000,
1439             widthSlope => 1.273,
1440             widthIntercept => -0.280,
1441             ascentMin => 7.000,
1442             ascentSlope => 1.029,
1443             ascentIntercept => 0.646,
1444             descentMin => 2.000,
1445             descentSlope => 0.278,
1446             descentIntercept => -0.334
1447             },
1448             # Bookman Demi Italic
1449             {
1450             leftBearingMax => -1.000,
1451             leftBearingSlope => -0.258,
1452             leftBearingIntercept => 0.098,
1453             rightBearingMin => 7.000,
1454             rightBearingSlope => 1.348,
1455             rightBearingIntercept => -0.174,
1456             widthMin => 7.000,
1457             widthSlope => 1.273,
1458             widthIntercept => -0.280,
1459             ascentMin => 7.000,
1460             ascentSlope => 1.033,
1461             ascentIntercept => 0.605,
1462             descentMin => 2.000,
1463             descentSlope => 0.243,
1464             descentIntercept => 0.083
1465             },
1466             # Courier
1467             {
1468             leftBearingMax => 0.000,
1469             leftBearingSlope => -0.014,
1470             leftBearingIntercept => 0.167,
1471             rightBearingMin => 4.000,
1472             rightBearingSlope => 0.684,
1473             rightBearingIntercept => -0.205,
1474             widthMin => 4.000,
1475             widthSlope => 0.667,
1476             widthIntercept => -0.007,
1477             ascentMin => 6.000,
1478             ascentSlope => 0.905,
1479             ascentIntercept => 0.141,
1480             descentMin => 1.000,
1481             descentSlope => 0.241,
1482             descentIntercept => 0.110
1483             },
1484             # Courier Oblique
1485             {
1486             leftBearingMax => 0.000,
1487             leftBearingSlope => -0.068,
1488             leftBearingIntercept => -0.190,
1489             rightBearingMin => 4.000,
1490             rightBearingSlope => 0.791,
1491             rightBearingIntercept => -0.487,
1492             widthMin => 4.000,
1493             widthSlope => 0.667,
1494             widthIntercept => -0.007,
1495             ascentMin => 6.000,
1496             ascentSlope => 0.905,
1497             ascentIntercept => 0.141,
1498             descentMin => 1.000,
1499             descentSlope => 0.241,
1500             descentIntercept => 0.111
1501             },
1502             # Courier Bold
1503             {
1504             leftBearingMax => 0.000,
1505             leftBearingSlope => -0.047,
1506             leftBearingIntercept => -0.440,
1507             rightBearingMin => 4.000,
1508             rightBearingSlope => 0.705,
1509             rightBearingIntercept => -0.455,
1510             widthMin => 4.000,
1511             widthSlope => 0.667,
1512             widthIntercept => -0.007,
1513             ascentMin => 6.000,
1514             ascentSlope => 0.971,
1515             ascentIntercept => 0.345,
1516             descentMin => 2.000,
1517             descentSlope => 0.256,
1518             descentIntercept => -0.070
1519             },
1520             # Courier Bold Oblique
1521             {
1522             leftBearingMax => 0.000,
1523             leftBearingSlope => -0.068,
1524             leftBearingIntercept => -0.190,
1525             rightBearingMin => 4.000,
1526             rightBearingSlope => 0.820,
1527             rightBearingIntercept => 0.160,
1528             widthMin => 4.000,
1529             widthSlope => 0.670,
1530             widthIntercept => -0.040,
1531             ascentMin => 6.000,
1532             ascentSlope => 0.971,
1533             ascentIntercept => 0.345,
1534             descentMin => 2.000,
1535             descentSlope => 0.256,
1536             descentIntercept => -0.070
1537             },
1538             # Helvetica
1539             {
1540             leftBearingMax => 0.000,
1541             leftBearingSlope => -0.025,
1542             leftBearingIntercept => 0.306,
1543             rightBearingMin => 6.000,
1544             rightBearingSlope => 1.064,
1545             rightBearingIntercept => -0.766,
1546             widthMin => 6.000,
1547             widthSlope => 1.135,
1548             widthIntercept => -0.618,
1549             ascentMin => 7.000,
1550             ascentSlope => 1.063,
1551             ascentIntercept => 0.244,
1552             descentMin => 2.000,
1553             descentSlope => 0.245,
1554             descentIntercept => 0.054
1555             },
1556             # Helvetica Oblique
1557             {
1558             leftBearingMax => 0.000,
1559             leftBearingSlope => -0.072,
1560             leftBearingIntercept => -0.134,
1561             rightBearingMin => 7.000,
1562             rightBearingSlope => 1.215,
1563             rightBearingIntercept => -0.581,
1564             widthMin => 6.000,
1565             widthSlope => 1.135,
1566             widthIntercept => -0.618,
1567             ascentMin => 7.000,
1568             ascentSlope => 1.063,
1569             ascentIntercept => 0.244,
1570             descentMin => 2.000,
1571             descentSlope => 0.246,
1572             descentIntercept => 0.054
1573             },
1574             # Helvetica Bold
1575             {
1576             leftBearingMax => 0.000,
1577             leftBearingSlope => -0.025,
1578             leftBearingIntercept => 0.306,
1579             rightBearingMin => 6.000,
1580             rightBearingSlope => 1.078,
1581             rightBearingIntercept => 0.063,
1582             widthMin => 6.000,
1583             widthSlope => 1.117,
1584             widthIntercept => -0.408,
1585             ascentMin => 7.000,
1586             ascentSlope => 1.058,
1587             ascentIntercept => 0.299,
1588             descentMin => 2.000,
1589             descentSlope => 0.246,
1590             descentIntercept => 0.049
1591             },
1592             # Helvetica Bold Oblique
1593             {
1594             leftBearingMax => 0.000,
1595             leftBearingSlope => -0.072,
1596             leftBearingIntercept => -0.134,
1597             rightBearingMin => 7.000,
1598             rightBearingSlope => 1.235,
1599             rightBearingIntercept => -0.816,
1600             widthMin => 6.000,
1601             widthSlope => 1.178,
1602             widthIntercept => -0.137,
1603             ascentMin => 7.000,
1604             ascentSlope => 1.063,
1605             ascentIntercept => 0.243,
1606             descentMin => 2.000,
1607             descentSlope => 0.246,
1608             descentIntercept => 0.048
1609             },
1610             # Helvetica Narrow
1611             {
1612             leftBearingMax => 0.000,
1613             leftBearingSlope => -0.016,
1614             leftBearingIntercept => 0.195,
1615             rightBearingMin => 5.000,
1616             rightBearingSlope => 0.872,
1617             rightBearingIntercept => -0.465,
1618             widthMin => 5.000,
1619             widthSlope => 0.929,
1620             widthIntercept => -0.150,
1621             ascentMin => 7.000,
1622             ascentSlope => 1.053,
1623             ascentIntercept => 0.368,
1624             descentMin => 1.000,
1625             descentSlope => 0.251,
1626             descentIntercept => -0.014
1627             },
1628             # Helvetica Narrow Oblique
1629             {
1630             leftBearingMax => 0.000,
1631             leftBearingSlope => -0.054,
1632             leftBearingIntercept => -0.356,
1633             rightBearingMin => 5.000,
1634             rightBearingSlope => 1.004,
1635             rightBearingIntercept => -0.044,
1636             widthMin => 5.000,
1637             widthSlope => 0.929,
1638             widthIntercept => -0.150,
1639             ascentMin => 7.000,
1640             ascentSlope => 1.053,
1641             ascentIntercept => 0.368,
1642             descentMin => 1.000,
1643             descentSlope => 0.251,
1644             descentIntercept => -0.014
1645             },
1646             # Helvetica Narrow Bold
1647             {
1648             leftBearingMax => 0.000,
1649             leftBearingSlope => -0.044,
1650             leftBearingIntercept => -0.467,
1651             rightBearingMin => 5.000,
1652             rightBearingSlope => 0.874,
1653             rightBearingIntercept => -0.493,
1654             widthMin => 5.000,
1655             widthSlope => 0.915,
1656             widthIntercept => 0.017,
1657             ascentMin => 7.000,
1658             ascentSlope => 1.089,
1659             ascentIntercept => -0.063,
1660             descentMin => 2.000,
1661             descentSlope => 0.255,
1662             descentIntercept => -0.056
1663             },
1664             # Helvetica Narrow Bold Oblique
1665             {
1666             leftBearingMax => 0.000,
1667             leftBearingSlope => -0.040,
1668             leftBearingIntercept => 0.486,
1669             rightBearingMin => 5.000,
1670             rightBearingSlope => 1.007,
1671             rightBearingIntercept => -0.085,
1672             widthMin => 5.000,
1673             widthSlope => 0.915,
1674             widthIntercept => 0.017,
1675             ascentMin => 7.000,
1676             ascentSlope => 1.105,
1677             ascentIntercept => -0.257,
1678             descentMin => 2.000,
1679             descentSlope => 0.255,
1680             descentIntercept => -0.056
1681             },
1682             # New Century Schoolbook Roman
1683             {
1684             leftBearingMax => 0.000,
1685             leftBearingSlope => -0.092,
1686             leftBearingIntercept => 0.102,
1687             rightBearingMin => 6.000,
1688             rightBearingSlope => 1.090,
1689             rightBearingIntercept => -0.076,
1690             widthMin => 6.000,
1691             widthSlope => 1.117,
1692             widthIntercept => -0.408,
1693             ascentMin => 7.000,
1694             ascentSlope => 1.093,
1695             ascentIntercept => -0.117,
1696             descentMin => 1.000,
1697             descentSlope => 0.244,
1698             descentIntercept => 0.069
1699             },
1700             # New Century Schoolbook Italic
1701             {
1702             leftBearingMax => -1.000,
1703             leftBearingSlope => -0.186,
1704             leftBearingIntercept => 0.233,
1705             rightBearingMin => 6.000,
1706             rightBearingSlope => 1.086,
1707             rightBearingIntercept => -0.035,
1708             widthMin => 6.000,
1709             widthSlope => 1.056,
1710             widthIntercept => -0.669,
1711             ascentMin => 6.000,
1712             ascentSlope => 1.078,
1713             ascentIntercept => 0.063,
1714             descentMin => 2.000,
1715             descentSlope => 0.244,
1716             descentIntercept => 0.069
1717             },
1718             # New Century Schoolbook Bold
1719             {
1720             leftBearingMax => 0.000,
1721             leftBearingSlope => -0.092,
1722             leftBearingIntercept => 0.102,
1723             rightBearingMin => 6.000,
1724             rightBearingSlope => 1.086,
1725             rightBearingIntercept => -0.035,
1726             widthMin => 6.000,
1727             widthSlope => 1.095,
1728             widthIntercept => -0.146,
1729             ascentMin => 7.000,
1730             ascentSlope => 1.106,
1731             ascentIntercept => -0.271,
1732             descentMin => 2.000,
1733             descentSlope => 0.250,
1734             descentIntercept => -0.000
1735             },
1736             # New Century Schoolbook Bold Italic
1737             {
1738             leftBearingMax => -1.000,
1739             leftBearingSlope => -0.191,
1740             leftBearingIntercept => 0.287,
1741             rightBearingMin => 6.000,
1742             rightBearingSlope => 1.111,
1743             rightBearingIntercept => -0.326,
1744             widthMin => 6.000,
1745             widthSlope => 1.056,
1746             widthIntercept => -0.669,
1747             ascentMin => 7.000,
1748             ascentSlope => 1.112,
1749             ascentIntercept => 0.656,
1750             descentMin => 1.000,
1751             descentSlope => 0.248,
1752             descentIntercept => 0.027
1753             },
1754             # Palatino Roman
1755             {
1756             leftBearingMax => 0.000,
1757             leftBearingSlope => -0.043,
1758             leftBearingIntercept => -0.481,
1759             rightBearingMin => 6.000,
1760             rightBearingSlope => 1.099,
1761             rightBearingIntercept => -0.188,
1762             widthMin => 6.000,
1763             widthSlope => 1.117,
1764             widthIntercept => -0.408,
1765             ascentMin => 7.000,
1766             ascentSlope => 1.055,
1767             ascentIntercept => -0.655,
1768             descentMin => 2.000,
1769             descentSlope => 0.316,
1770             descentIntercept => 0.210
1771             },
1772             # Palatino Italic
1773             {
1774             leftBearingMax => -1.000,
1775             leftBearingSlope => -0.181,
1776             leftBearingIntercept => 0.176,
1777             rightBearingMin => 6.000,
1778             rightBearingSlope => 1.094,
1779             rightBearingIntercept => -0.132,
1780             widthMin => 6.000,
1781             widthSlope => 1.056,
1782             widthIntercept => -0.669,
1783             ascentMin => 6.000,
1784             ascentSlope => 1.048,
1785             ascentIntercept => -0.572,
1786             descentMin => 2.000,
1787             descentSlope => 0.308,
1788             descentIntercept => 0.302
1789             },
1790             # Palatino Bold
1791             {
1792             leftBearingMax => 0.000,
1793             leftBearingSlope => -0.013,
1794             leftBearingIntercept => 0.153,
1795             rightBearingMin => 6.000,
1796             rightBearingSlope => 1.104,
1797             rightBearingIntercept => -0.243,
1798             widthMin => 6.000,
1799             widthSlope => 1.117,
1800             widthIntercept => -0.408,
1801             ascentMin => 7.000,
1802             ascentSlope => 1.044,
1803             ascentIntercept => -0.529,
1804             descentMin => 2.000,
1805             descentSlope => 0.299,
1806             descentIntercept => -0.590
1807             },
1808             # Palatino Bold Italic
1809             {
1810             leftBearingMax => -1.000,
1811             leftBearingSlope => -0.145,
1812             leftBearingIntercept => -0.255,
1813             rightBearingMin => 6.000,
1814             rightBearingSlope => 1.199,
1815             rightBearingIntercept => -0.386,
1816             widthMin => 6.000,
1817             widthSlope => 1.117,
1818             widthIntercept => -0.408,
1819             ascentMin => 6.000,
1820             ascentSlope => 1.045,
1821             ascentIntercept => -0.544,
1822             descentMin => 2.000,
1823             descentSlope => 0.302,
1824             descentIntercept => 0.370
1825             },
1826             # Symbol
1827             {
1828             leftBearingMax => -1.000,
1829             leftBearingSlope => -0.202,
1830             leftBearingIntercept => 0.427,
1831             rightBearingMin => 7.000,
1832             rightBearingSlope => 1.219,
1833             rightBearingIntercept => -0.622,
1834             widthMin => 6.000,
1835             widthSlope => 1.163,
1836             widthIntercept => 0.044,
1837             ascentMin => 6.000,
1838             ascentSlope => 1.129,
1839             ascentIntercept => -0.549,
1840             descentMin => 2.000,
1841             descentSlope => 0.327,
1842             descentIntercept => 0.078
1843             },
1844             # Zapf Chancery Medium Italic
1845             {
1846             leftBearingMax => -1.000,
1847             leftBearingSlope => -0.148,
1848             leftBearingIntercept => -0.226,
1849             rightBearingMin => 6.000,
1850             rightBearingSlope => 1.155,
1851             rightBearingIntercept => 0.141,
1852             widthMin => 5.000,
1853             widthSlope => 0.982,
1854             widthIntercept => 0.220,
1855             ascentMin => 5.000,
1856             ascentSlope => 0.918,
1857             ascentIntercept => -0.011,
1858             descentMin => 1.000,
1859             descentSlope => 0.299,
1860             descentIntercept => -0.584
1861             },
1862             # Zapf Dingbats
1863             {
1864             leftBearingMax => 0.000,
1865             leftBearingSlope => -0.002,
1866             leftBearingIntercept => 0.025,
1867             rightBearingMin => 6.000,
1868             rightBearingSlope => 1.095,
1869             rightBearingIntercept => -0.145,
1870             widthMin => 6.000,
1871             widthSlope => 1.136,
1872             widthIntercept => -0.632,
1873             ascentMin => 5.000,
1874             ascentSlope => 0.914,
1875             ascentIntercept => 0.031,
1876             descentMin => 1.000,
1877             descentSlope => 0.159,
1878             descentIntercept => 0.088
1879             }
1880             );
1881              
1882             #
1883             # Graphics::Fig::FontSize::_getFontBounds
1884             # $fontIndex: integer 0..34
1885             # $fontSize: number >= 0
1886             #
1887             sub _getFontBounds {
1888 1     1   1 my $fontIndex = shift;
1889 1         2 my $fontSize = shift;
1890              
1891 1 50 33     5 die "bad font index: $fontIndex" if $fontIndex < 0 || $fontIndex > 34;
1892 1 50       4 die "bad font size: $fontSize" if $fontSize < 0;
1893 1         2 my $data = $FontScale[$fontIndex];
1894              
1895             #
1896             # Calculate leftmost reach of a character in this font (typically
1897             # negative) relative to the (left) reference point.
1898             #
1899             my $minLeftBearing = $fontSize * $data->{leftBearingSlope} +
1900 1         3 $data->{leftBearingIntercept};
1901 1 50       3 if ($minLeftBearing > $data->{leftBearingMax}) {
1902 0         0 $minLeftBearing = $data->{leftBearingMax};
1903             }
1904              
1905             #
1906             # Calculate rightmost reach of a character in this font relative to
1907             # the (left) reference point.
1908             #
1909             my $maxRightBearing = $fontSize * $data->{rightBearingSlope} +
1910 1         3 $data->{rightBearingIntercept};
1911 1 50       2 if ($maxRightBearing < $data->{rightBearingMin}) {
1912 0         0 $maxRightBearing = $data->{rightBearingMin};
1913             }
1914              
1915             #
1916             # Calculate the maximum width of a character in this font.
1917             #
1918 1         3 my $maxWidth = $fontSize * $data->{widthSlope} + $data->{widthIntercept};
1919 1 50       2 if ($maxWidth < $data->{widthMin}) {
1920 0         0 $maxWidth = $data->{widthMin};
1921             }
1922              
1923             #
1924             # Calculate uppermost reach of a character in this font relative to
1925             # the (left) reference point.
1926             #
1927 1         2 my $maxAscent = $fontSize * $data->{ascentSlope} + $data->{ascentIntercept};
1928 1 50       3 if ($maxAscent < $data->{ascentMin}) {
1929 0         0 $maxAscent = $data->{ascentMin};
1930             }
1931              
1932             #
1933             # Calculate the downward most reach of a character in this font
1934             # (positive down) relative to the (left) reference point.
1935             #
1936             my $maxDescent = $fontSize * $data->{descentSlope} +
1937 1         2 $data->{descentIntercept};
1938 1 50       3 if ($maxDescent > $data->{descentMin}) {
1939 1         2 $maxDescent = $data->{descentMin};
1940             }
1941              
1942             #
1943             # Calculate the maximum width of a character at point size 500.
1944             #
1945 1         2 my $maxWidth500 = 500 * $data->{widthSlope} + $data->{widthIntercept};
1946              
1947             return {
1948 1         6 minLeftBearing => $minLeftBearing,
1949             maxRightBearing => $maxRightBearing,
1950             maxWidth => $maxWidth,
1951             maxAscent => $maxAscent,
1952             maxDescent => $maxDescent,
1953             maxWidth500 => $maxWidth500
1954             };
1955             }
1956              
1957             #
1958             # Graphics::Fig::FontSize::getTextSize
1959             # $fontRef: [ fontFlag, fontNumber ]
1960             # $fontSize: real
1961             # $text: a text string
1962             #
1963             sub getTextSize {
1964 1     1 0 2 my $fontRef = shift;
1965 1         1 my $fontSize = shift;
1966 1         2 my $text = shift;
1967              
1968             #
1969             # Find the PostScript font index.
1970             #
1971 1         2 my $fontIndex;
1972 1 50       3 if ($fontRef->[0] & 4) {
1973             #
1974             # Postscript font. Map -1 (default) to Roman; otherwise,
1975             # take the index as-is.
1976             #
1977 0 0       0 if ($fontRef->[1] >= 0) {
1978 0         0 $fontIndex = $fontRef->[1];
1979             } else {
1980 0         0 $fontIndex = 0;
1981             }
1982             } else {
1983             #
1984             # Map LaTeX fonts to nearest PostScript font.
1985             #
1986 1 50       2 die "bad index" if $fontRef->[1] > 5;
1987 1         3 $fontIndex = (
1988             0, # default
1989             0, # roman
1990             2, # bold
1991             1, # italic
1992             16, # sans serif
1993             12 # typewriter
1994             )[$fontRef->[1]];
1995             }
1996 1 50       3 die if !defined($fontIndex);
1997 1 50 33     5 die if $fontIndex < 0 || $fontIndex > 34;
1998              
1999             #
2000             # Get the font size as integer.
2001             #
2002 1         18 $fontSize = ceil($fontSize - 0.0001);
2003              
2004             #
2005             # Get the maximum bounds for this pointsize.
2006             #
2007 1         5 my $fontBounds = &_getFontBounds($fontIndex, $fontSize);
2008 1         2 my $scale = $fontBounds->{maxWidth} / $fontBounds->{maxWidth500};
2009              
2010             #
2011             # Find the text width.
2012             #
2013 1         2 my $width = 0.0;
2014 1         3 for (my $i = 0; $i < length($text); ++$i) {
2015 12         14 my $n = ord(substr($text, $i, 1));
2016              
2017 12 50       13 die if $n > 255;
2018 12         27 $width += ceil($scale * $CharacterWidths500[$fontIndex][$n]);
2019             }
2020              
2021             #
2022             # Return the dimensions relative to the left-hand side reference
2023             # point in inches. Signs are positive to the right and down.
2024             #
2025             #
2026             # Vertical dimensions are based on the maximum ascent and descent
2027             # values of the current font. It would be more consistent with xfig
2028             # if we included the per-character ascent and descent values along
2029             # with the widths and made these bounds fit the actual text. The left
2030             # bound should really come from floor($fontBounds->{minLeftBearing}),
2031             # since a few characters extend slightly left of the reference point.
2032             # But xfig doesn't include this, so we're more consistent by leaving
2033             # it out.
2034             #
2035             return {
2036             left => 0,
2037             right => ceil($width) / 80.0,
2038             up => -ceil($fontBounds->{maxAscent}) / 80.0,
2039 1         10 down => ceil($fontBounds->{maxDescent}) / 80.0
2040             };
2041             }
2042              
2043             1;