Remove flex/bison-generated states files from repository.
[enscript.git] / afmlib / afmint.h
1 /*
2  * Internal header for the AFM library.
3  * Copyright (c) 1995-1999 Markku Rossi.
4  *
5  * Author: Markku Rossi <mtr@iki.fi>
6  */
7
8 /*
9  * Enscript 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 3 of the License, or
12  * (at your option) any later version.
13  *
14  * Enscript 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 Enscript.  If not, see <http://www.gnu.org/licenses/>.
21  */
22
23 #ifndef AFMINT_H
24 #define AFMINT_H
25
26 /*
27  * Config stuffs.
28  */
29
30 #ifdef HAVE_CONFIG_H
31 #include <config.h>
32 #endif
33
34 #include <stdio.h>
35
36 #ifndef ___P
37 #if PROTOTYPES
38 #define ___P(protos) protos
39 #else /* no PROTOTYPES */
40 #define ___P(protos) ()
41 #endif /* no PROTOTYPES */
42 #endif
43
44 #if STDC_HEADERS
45
46 #include <stdlib.h>
47 #include <string.h>
48
49 #else /* no STDC_HEADERS */
50
51 #if HAVE_STDLIB_H
52 #include <stdlib.h>
53 #endif
54
55 #if HAVE_STRING_H
56 #include <string.h>
57 #endif
58
59 #ifndef HAVE_STRCHR
60 #define strchr index
61 #define strrchr rindex
62 #endif
63 char *strchr ();
64 char *strrchr ();
65
66 #ifndef HAVE_MEMCPY
67 #define memcpy(d, s, n) bcopy((s), (d), (n))
68 #endif
69
70 #ifndef HAVE_STRERROR
71 extern char *strerror ___P ((int));
72 #endif
73
74 #endif /* no STDC_HEADERS */
75
76 #if HAVE_UNISTD_H
77 #include <unistd.h>
78 #endif
79
80 #include <setjmp.h>
81 #include <assert.h>
82 #include <errno.h>
83
84 #include <sys/types.h>
85 #include <sys/stat.h>
86
87 #include "afm.h"
88 #include "strhash.h"
89
90
91 /*
92  * Types and definitions.
93  */
94
95 /* Error codes. */
96 #define AFM_ERROR                       1
97 #define AFM_ERROR_MEMORY                2
98 #define AFM_ERROR_ARGUMENT              3
99 #define AFM_ERROR_UNKNOWN_FONT          4
100 #define AFM_ERROR_SYNTAX                5
101 #define AFM_ERROR_UNSUPPORTED_FORMAT    6
102 #define AFM_ERROR_FILE_IO               7
103 #define AFM_ERROR_NOT_AFM_FILE          8
104 #define NUM_ERRORS                      9
105
106 /* Pack error and global errno. */
107 #define SYSERROR(code) (errno << 16 | (code))
108
109
110 /* Keys. */
111
112 typedef enum
113 {
114   kComment,
115
116   /* File structure. */
117   kStartFontMetrics,
118   kEndFontMetrics,
119   kStartCompFontMetrics,
120   kEndCompFontMetrics,
121   kStartDescendent,
122   kEndDescendent,
123   kStartMasterFontMetrics,
124   kEndMasterFontMetrics,
125
126   /* Control information. */
127   kMetricsSets,
128   kDescendents,
129   kMasters,
130   kAxes,
131
132   /* Global font information. */
133   kFontName,
134   kFullName,
135   kFamilyName,
136   kWeight,
137   kFontBBox,
138   kVersion,
139   kNotice,
140   kEncodingScheme,
141   kMappingScheme,
142   kEscChar,
143   kCharacterSet,
144   kCharacters,
145   kIsBaseFont,
146   kVVector,
147   kIsFixedV,
148   kCapHeight,
149   kXHeight,
150   kAscender,
151   kDescender,
152   kWeightVector,
153   kBlendDesignPositions,
154   kBlendDesignMap,
155   kBlendAxisTypes,
156
157   /* Writing direction information. */
158   kStartDirection,
159   kEndDirection,
160   kUnderlinePosition,
161   kUnderlineThickness,
162   kItalicAngle,
163   kCharWidth,
164   kIsFixedPitch,
165
166   /* Individual character metrics. */
167   kStartCharMetrics,
168   kEndCharMetrics,
169   kC,
170   kCH,
171   kWX,
172   kW0X,
173   kW1X,
174   kWY,
175   kW0Y,
176   kW1Y,
177   kW,
178   kW0,
179   kW1,
180   kVV,
181   kN,
182   kB,
183   kL,
184
185   /* Kerning data. */
186   kStartKernData,
187   kEndKernData,
188   kStartTrackKern,
189   kEndTrackKern,
190   kTrackKern,
191   kStartKernPairs,
192   kEndKernPairs,
193   kKP,
194   kKPH,
195   kKPX,
196   kKPY,
197
198   /* Composite character data. */
199   kStartComposites,
200   kEndComposites,
201   kCC,
202   kPCC,
203
204   /* Axis information. */
205   kStartAxis,
206   kEndAxis,
207   kAxisType,
208   kAxisLabel,
209
210   /* Master Design Information */
211   kStartMaster,
212   kEndMaster
213
214 } AFMKey;
215
216
217 struct afm_handle_st
218 {
219   unsigned int verbose;         /* verbose level */
220   StringHashPtr font_map;       /* fontname -> AFM filename mapping */
221
222   /* Parse support. */
223   jmp_buf jmpbuf;
224   AFMError parse_error;         /* Error that caused longjmp(). */
225 };
226
227
228 /* Store library's private font data to this structure. */
229 struct afm_font_private_data_st
230 {
231   /* Character that is used for undefined codes (' '). */
232   AFMIndividualCharacterMetrics *undef;
233
234   StringHashPtr fontnames;      /* fontname -> character info mapping */
235   StringHashPtr compositenames; /* composite -> AFMComposite mapping */
236 };
237
238
239 /*
240  * Encoding tables.
241  */
242
243 struct encoding_table_st
244 {
245   int code;
246   char *character;
247 };
248
249 typedef struct encoding_table_st AFMEncodingTable;
250
251 extern AFMEncodingTable afm_88591_encoding[];
252 extern AFMEncodingTable afm_88592_encoding[];
253 extern AFMEncodingTable afm_88593_encoding[];
254 extern AFMEncodingTable afm_88594_encoding[];
255 extern AFMEncodingTable afm_88595_encoding[];
256 extern AFMEncodingTable afm_88597_encoding[];
257 extern AFMEncodingTable afm_88599_encoding[];
258 extern AFMEncodingTable afm_885910_encoding[];
259 extern AFMEncodingTable afm_ibmpc_encoding[];
260 extern AFMEncodingTable afm_mac_encoding[];
261 extern AFMEncodingTable afm_vms_encoding[];
262 extern AFMEncodingTable afm_hp8_encoding[];
263 extern AFMEncodingTable afm_koi8_encoding[];
264
265
266 /*
267  * Global help functions.
268  */
269
270 /* Print message if <level> is larger than library's verbose level. */
271 void afm_message ___P ((AFMHandle handle, unsigned int level, char *message));
272
273 /* Print error message to stderr. */
274 void afm_error ___P ((AFMHandle handle, char *message));
275
276 \f
277 /*
278  * AFM file parsing
279  */
280
281 /* Parse AFM file <filename> and fill up font <font>. */
282 void afm_parse_file ___P ((AFMHandle handle, const char *filename,
283                            AFMFont font));
284
285 #endif /* not AFMINT_H */