configure.ac: Add AM_GNU_GETTEXT_VERSION([0.17]). Remove ALL_LINGUAS.
[enscript.git] / afmlib / deffont.c
1 /*
2  * The default font.
3  * Copyright (c) 1995, 1996, 1997 Markku Rossi.
4  *
5  * Author: Markku Rossi <mtr@iki.fi>
6  */
7
8 /*
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2, or (at your option)
12  * any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; see the file COPYING.  If not, write to
21  * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
22  * Boston, MA 02110-1301, USA.
23  */
24
25 #include "afmint.h"
26 #include "afm.h"
27
28
29 /*
30  * Static variables.
31  */
32
33 static AFMEncodingTable builtin_courier[] =
34 {
35   {32,  "space"},
36   {33,  "exclam"},
37   {34,  "quotedbl"},
38   {35,  "numbersign"},
39   {36,  "dollar"},
40   {37,  "percent"},
41   {38,  "ampersand"},
42   {39,  "quoteright"},
43   {40,  "parenleft"},
44   {41,  "parenright"},
45   {42,  "asterisk"},
46   {43,  "plus"},
47   {44,  "comma"},
48   {45,  "hyphen"},
49   {46,  "period"},
50   {47,  "slash"},
51   {48,  "zero"},
52   {49,  "one"},
53   {50,  "two"},
54   {51,  "three"},
55   {52,  "four"},
56   {53,  "five"},
57   {54,  "six"},
58   {55,  "seven"},
59   {56,  "eight"},
60   {57,  "nine"},
61   {58,  "colon"},
62   {59,  "semicolon"},
63   {60,  "less"},
64   {61,  "equal"},
65   {62,  "greater"},
66   {63,  "question"},
67   {64,  "at"},
68   {65,  "A"},
69   {66,  "B"},
70   {67,  "C"},
71   {68,  "D"},
72   {69,  "E"},
73   {70,  "F"},
74   {71,  "G"},
75   {72,  "H"},
76   {73,  "I"},
77   {74,  "J"},
78   {75,  "K"},
79   {76,  "L"},
80   {77,  "M"},
81   {78,  "N"},
82   {79,  "O"},
83   {80,  "P"},
84   {81,  "Q"},
85   {82,  "R"},
86   {83,  "S"},
87   {84,  "T"},
88   {85,  "U"},
89   {86,  "V"},
90   {87,  "W"},
91   {88,  "X"},
92   {89,  "Y"},
93   {90,  "Z"},
94   {91,  "bracketleft"},
95   {92,  "backslash"},
96   {93,  "bracketright"},
97   {94,  "asciicircum"},
98   {95,  "underscore"},
99   {96,  "quoteleft"},
100   {97,  "a"},
101   {98,  "b"},
102   {99,  "c"},
103   {100, "d"},
104   {101, "e"},
105   {102, "f"},
106   {103, "g"},
107   {104, "h"},
108   {105, "i"},
109   {106, "j"},
110   {107, "k"},
111   {108, "l"},
112   {109, "m"},
113   {110, "n"},
114   {111, "o"},
115   {112, "p"},
116   {113, "q"},
117   {114, "r"},
118   {115, "s"},
119   {116, "t"},
120   {117, "u"},
121   {118, "v"},
122   {119, "w"},
123   {120, "x"},
124   {121, "y"},
125   {122, "z"},
126   {123, "braceleft"},
127   {124, "bar"},
128   {125, "braceright"},
129   {126, "asciitilde"},
130   {161, "exclamdown"},
131   {162, "cent"},
132   {163, "sterling"},
133   {164, "fraction"},
134   {165, "yen"},
135   {166, "florin"},
136   {167, "section"},
137   {168, "currency"},
138   {169, "quotesingle"},
139   {170, "quotedblleft"},
140   {171, "guillemotleft"},
141   {172, "guilsinglleft"},
142   {173, "guilsinglright"},
143   {174, "fi"},
144   {175, "fl"},
145   {177, "endash"},
146   {178, "dagger"},
147   {179, "daggerdbl"},
148   {180, "periodcentered"},
149   {182, "paragraph"},
150   {183, "bullet"},
151   {184, "quotesinglbase"},
152   {185, "quotedblbase"},
153   {186, "quotedblright"},
154   {187, "guillemotright"},
155   {188, "ellipsis"},
156   {189, "perthousand"},
157   {191, "questiondown"},
158   {193, "grave"},
159   {194, "acute"},
160   {195, "circumflex"},
161   {196, "tilde"},
162   {197, "macron"},
163   {198, "breve"},
164   {199, "dotaccent"},
165   {200, "dieresis"},
166   {202, "ring"},
167   {203, "cedilla"},
168   {205, "hungarumlaut"},
169   {206, "ogonek"},
170   {207, "caron"},
171   {208, "emdash"},
172   {225, "AE"},
173   {227, "ordfeminine"},
174   {232, "Lslash"},
175   {233, "Oslash"},
176   {234, "OE"},
177   {235, "ordmasculine"},
178   {241, "ae"},
179   {245, "dotlessi"},
180   {248, "lslash"},
181   {249, "oslash"},
182   {250, "oe"},
183   {251, "germandbls"},
184   {-1,  "Aacute"},
185   {-1,  "Acircumflex"},
186   {-1,  "Adieresis"},
187   {-1,  "Agrave"},
188   {-1,  "Aring"},
189   {-1,  "Atilde"},
190   {-1,  "Ccedilla"},
191   {-1,  "Eacute"},
192   {-1,  "Ecircumflex"},
193   {-1,  "Edieresis"},
194   {-1,  "Egrave"},
195   {-1,  "Eth"},
196   {-1,  "Gcaron"},
197   {-1,  "IJ"},
198   {-1,  "Iacute"},
199   {-1,  "Icircumflex"},
200   {-1,  "Idieresis"},
201   {-1,  "Idot"},
202   {-1,  "Igrave"},
203   {-1,  "LL"},
204   {-1,  "Ntilde"},
205   {-1,  "Oacute"},
206   {-1,  "Ocircumflex"},
207   {-1,  "Odieresis"},
208   {-1,  "Ograve"},
209   {-1,  "Otilde"},
210   {-1,  "Scaron"},
211   {-1,  "Scedilla"},
212   {-1,  "Thorn"},
213   {-1,  "Uacute"},
214   {-1,  "Ucircumflex"},
215   {-1,  "Udieresis"},
216   {-1,  "Ugrave"},
217   {-1,  "Yacute"},
218   {-1,  "Ydieresis"},
219   {-1,  "Zcaron"},
220   {-1,  "aacute"},
221   {-1,  "acircumflex"},
222   {-1,  "adieresis"},
223   {-1,  "agrave"},
224   {-1,  "aring"},
225   {-1,  "arrowboth"},
226   {-1,  "arrowdown"},
227   {-1,  "arrowleft"},
228   {-1,  "arrowright"},
229   {-1,  "arrowup"},
230   {-1,  "atilde"},
231   {-1,  "brokenbar"},
232   {-1,  "ccedilla"},
233   {-1,  "center"},
234   {-1,  "copyright"},
235   {-1,  "dectab"},
236   {-1,  "degree"},
237   {-1,  "divide"},
238   {-1,  "down"},
239   {-1,  "eacute"},
240   {-1,  "ecircumflex"},
241   {-1,  "edieresis"},
242   {-1,  "egrave"},
243   {-1,  "eth"},
244   {-1,  "format"},
245   {-1,  "gcaron"},
246   {-1,  "graybox"},
247   {-1,  "iacute"},
248   {-1,  "icircumflex"},
249   {-1,  "idieresis"},
250   {-1,  "igrave"},
251   {-1,  "ij"},
252   {-1,  "indent"},
253   {-1,  "largebullet"},
254   {-1,  "left"},
255   {-1,  "lira"},
256   {-1,  "ll"},
257   {-1,  "logicalnot"},
258   {-1,  "merge"},
259   {-1,  "minus"},
260   {-1,  "mu"},
261   {-1,  "multiply"},
262   {-1,  "notegraphic"},
263   {-1,  "ntilde"},
264   {-1,  "oacute"},
265   {-1,  "ocircumflex"},
266   {-1,  "odieresis"},
267   {-1,  "ograve"},
268   {-1,  "onehalf"},
269   {-1,  "onequarter"},
270   {-1,  "onesuperior"},
271   {-1,  "otilde"},
272   {-1,  "overscore"},
273   {-1,  "plusminus"},
274   {-1,  "prescription"},
275   {-1,  "registered"},
276   {-1,  "return"},
277   {-1,  "scaron"},
278   {-1,  "scedilla"},
279   {-1,  "square"},
280   {-1,  "stop"},
281   {-1,  "tab"},
282   {-1,  "thorn"},
283   {-1,  "threequarters"},
284   {-1,  "threesuperior"},
285   {-1,  "trademark"},
286   {-1,  "twosuperior"},
287   {-1,  "uacute"},
288   {-1,  "ucircumflex"},
289   {-1,  "udieresis"},
290   {-1,  "ugrave"},
291   {-1,  "up"},
292   {-1,  "yacute"},
293   {-1,  "ydieresis"},
294   {-1,  "zcaron"},
295   {0, NULL},
296 };
297
298 #define NUM_CHARACTER_METRICS \
299   (sizeof (builtin_courier) / sizeof (AFMEncodingTable) - 1)
300
301 /*
302  * Public functions.
303  */
304
305 AFMError
306 afm_open_default_font (AFMHandle handle, AFMFont *font_return)
307 {
308   AFMFont font;
309   AFMIndividualCharacterMetrics *cm;
310   int i;
311
312   /* Alloc memory. */
313
314   font = (AFMFont) calloc (1, sizeof (*font));
315   if (font == NULL)
316     goto error_out;
317   font->private
318     = (struct afm_font_private_data_st *) calloc (1, sizeof (*font->private));
319   if (font->private == NULL)
320     goto error_out;
321   font->private->fontnames = strhash_init ();
322   if (font->private->fontnames == NULL)
323     goto error_out;
324
325   /* Version. */
326   font->version = 4.0;
327
328   /* Global Font Info. */
329
330   font->global_info.FontName = (char *) malloc (strlen ("Courier") + 1);
331   if (font->global_info.FontName == NULL)
332     goto error_out;
333   strcpy (font->global_info.FontName, "Courier");
334
335   font->global_info.FontBBox_llx = -40.0;
336   font->global_info.FontBBox_lly = -290.0;
337   font->global_info.FontBBox_urx = 640.0;
338   font->global_info.FontBBox_ury = 795.0;
339
340   /* Writing directions. */
341   font->writing_direction_metrics[0].is_valid = AFMTrue;
342   font->writing_direction_metrics[0].IsFixedPitch = AFMTrue;
343   font->writing_direction_metrics[0].CharWidth_x = 600.0;
344   font->writing_direction_metrics[0].CharWidth_y = 0.0;
345
346   /* Character Metrics. */
347
348   font->num_character_metrics = NUM_CHARACTER_METRICS;
349   font->character_metrics
350     = (AFMIndividualCharacterMetrics *)
351       calloc (NUM_CHARACTER_METRICS, sizeof (AFMIndividualCharacterMetrics));
352   if (font->character_metrics == NULL)
353     goto error_out;
354
355   for (i = 0; builtin_courier[i].character; i++)
356     {
357       cm = &font->character_metrics[i];
358       cm->name = (char *) malloc (strlen (builtin_courier[i].character) + 1);
359       if (cm->name == NULL)
360         goto error_out;
361       strcpy (cm->name, builtin_courier[i].character);
362
363       if (!strhash_put (font->private->fontnames, cm->name,
364                         strlen (cm->name), cm, NULL))
365         goto error_out;
366
367       cm->character_code = builtin_courier[i].code;
368       cm->w0x = 600.0;
369       cm->w0y = 0.0;
370     }
371
372   *font_return = font;
373
374   return AFM_SUCCESS;
375
376
377  error_out:
378   (void) afm_close_font (font);
379
380   return AFM_ERROR_MEMORY;
381 }