]> git.saurik.com Git - wxWidgets.git/blob - src/freetype/type1z/z1parse.h
added missing return on error
[wxWidgets.git] / src / freetype / type1z / z1parse.h
1 /***************************************************************************/
2 /* */
3 /* z1parse.h */
4 /* */
5 /* Experimental Type 1 parser (specification). */
6 /* */
7 /* Copyright 1996-2000 by */
8 /* David Turner, Robert Wilhelm, and Werner Lemberg. */
9 /* */
10 /* This file is part of the FreeType project, and may only be used, */
11 /* modified, and distributed under the terms of the FreeType project */
12 /* license, LICENSE.TXT. By continuing to use, modify, or distribute */
13 /* this file you indicate that you have read the license and */
14 /* understand and accept it fully. */
15 /* */
16 /***************************************************************************/
17
18
19 #ifndef Z1PARSE_H
20 #define Z1PARSE_H
21
22 #include <freetype/internal/t1types.h>
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
28
29 /* simple enumeration type used to identify token types */
30 typedef enum Z1_Token_Type_
31 {
32 t1_token_none = 0,
33 t1_token_any,
34 t1_token_string,
35 t1_token_array,
36
37 /* do not remove */
38 t1_token_max
39
40 } Z1_Token_Type;
41
42
43 /* a simple structure used to identify tokens */
44 typedef struct Z1_Token_Rec_
45 {
46 FT_Byte* start; /* first character of token in input stream */
47 FT_Byte* limit; /* first character after the token */
48 Z1_Token_Type type; /* type of token.. */
49
50 } Z1_Token_Rec;
51
52
53 /* enumeration type used to identify object fields */
54 typedef enum Z1_Field_Type_
55 {
56 t1_field_none = 0,
57 t1_field_bool,
58 t1_field_integer,
59 t1_field_fixed,
60 t1_field_string,
61 t1_field_integer_array,
62 t1_field_fixed_array,
63
64 /* do not remove */
65 t1_field_max
66
67 } Z1_Field_Type;
68
69
70 /* structure type used to model object fields */
71 typedef struct Z1_Field_Rec_
72 {
73 Z1_Field_Type type; /* type of field */
74 FT_UInt offset; /* offset of field in object */
75 FT_UInt size; /* size of field in bytes */
76 FT_UInt array_max; /* maximum number of elements for array */
77 FT_UInt count_offset; /* offset of element count for arrays */
78 FT_Int flag_bit; /* bit number for field flag */
79
80 } Z1_Field_Rec;
81
82
83 #define Z1_FIELD_REF( s, f ) ( ((s*)0)->f )
84
85 #define Z1_FIELD_BOOL( _ftype, _fname ) \
86 { \
87 t1_field_bool, \
88 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
89 sizeof ( Z1_FIELD_REF( _ftype, _fname ) ), \
90 0, 0, 0 \
91 }
92
93 #define Z1_FIELD_NUM( _ftype, _fname ) \
94 { \
95 t1_field_integer, \
96 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
97 sizeof ( Z1_FIELD_REF( _ftype, _fname ) ), \
98 0, 0, 0 \
99 }
100
101 #define Z1_FIELD_FIXED( _ftype, _fname, _power ) \
102 { \
103 t1_field_fixed, \
104 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
105 sizeof ( Z1_FIELD_REF( _ftype, _fname ) ), \
106 0, 0, 0 \
107 }
108
109 #define Z1_FIELD_STRING( _ftype, _fname ) \
110 { \
111 t1_field_string, \
112 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
113 sizeof ( Z1_FIELD_REF( _ftype, _fname ) ), \
114 0, 0, 0 \
115 }
116
117 #define Z1_FIELD_NUM_ARRAY( _ftype, _fname, _fcount, _fmax ) \
118 { \
119 t1_field_integer, \
120 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
121 sizeof ( Z1_FIELD_REF( _ftype, _fname )[0] ), \
122 _fmax, \
123 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fcount ), \
124 0 \
125 }
126
127 #define Z1_FIELD_FIXED_ARRAY( _ftype, _fname, _fcount, _fmax ) \
128 { \
129 t1_field_fixed, \
130 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
131 sizeof ( Z1_FIELD_REF( _ftype, _fname )[0] ), \
132 _fmax, \
133 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fcount ), \
134 0 \
135 }
136
137 #define Z1_FIELD_NUM_ARRAY2( _ftype, _fname, _fmax ) \
138 { \
139 t1_field_integer, \
140 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
141 sizeof ( Z1_FIELD_REF( _ftype, _fname )[0] ), \
142 _fmax, \
143 0, 0 \
144 }
145
146 #define Z1_FIELD_FIXED_ARRAY2( _ftype, _fname, _fmax ) \
147 { \
148 t1_field_fixed, \
149 (FT_UInt)(char*)&Z1_FIELD_REF( _ftype, _fname ), \
150 sizeof ( Z1_FIELD_REF( _ftype, _fname )[0] ), \
151 _fmax, \
152 0, 0 \
153 }
154
155
156 /*************************************************************************/
157 /* */
158 /* <Struct> */
159 /* Z1_Table */
160 /* */
161 /* <Description> */
162 /* A Z1_Table is a simple object used to store an array of objects in */
163 /* a single memory block. */
164 /* */
165 /* <Fields> */
166 /* block :: The address in memory of the growheap's block. This */
167 /* can change between two object adds, due to the use of */
168 /* reallocation. */
169 /* */
170 /* cursor :: The current top of the grow heap within its block. */
171 /* */
172 /* capacity :: The current size of the heap block. Increments in */
173 /* 1kByte blocks. */
174 /* */
175 /* init :: A boolean. Set when the table has been initialized */
176 /* (the table user should set this field). */
177 /* */
178 /* max_elems :: The maximum number of elements in the table. */
179 /* */
180 /* num_elems :: The current number of elements in the table. */
181 /* */
182 /* elements :: A table of element addresses within the block. */
183 /* */
184 /* lengths :: A table of element sizes within the block. */
185 /* */
186 /* memory :: The memory object used for memory operations */
187 /* (allocation/reallocation). */
188 /* */
189 typedef struct Z1_Table_
190 {
191 FT_Byte* block; /* current memory block */
192 FT_Int cursor; /* current cursor in memory block */
193 FT_Int capacity; /* current size of memory block */
194 FT_Long init;
195
196 FT_Int max_elems;
197 FT_Int num_elems;
198 FT_Byte** elements; /* addresses of table elements */
199 FT_Int* lengths; /* lengths of table elements */
200
201 FT_Memory memory;
202
203 } Z1_Table;
204
205
206 /*************************************************************************/
207 /* */
208 /* <Struct> */
209 /* Z1_Parser */
210 /* */
211 /* <Description> */
212 /* A Z1_Parser is an object used to parse a Type 1 fonts very */
213 /* quickly. */
214 /* */
215 /* <Fields> */
216 /* stream :: The current input stream. */
217 /* */
218 /* memory :: The current memory object. */
219 /* */
220 /* base_dict :: A pointer to the top-level dictionary. */
221 /* */
222 /* base_len :: The length in bytes of the top dictionary. */
223 /* */
224 /* private_dict :: A pointer to the private dictionary. */
225 /* */
226 /* private_len :: The length in bytes of the private dictionary. */
227 /* */
228 /* in_pfb :: A boolean. Indicates that we are handling a PFB */
229 /* file. */
230 /* */
231 /* in_memory :: A boolean. Indicates a memory-based stream. */
232 /* */
233 /* single_block :: A boolean. Indicates that the private dictionary */
234 /* is stored in lieu of the base dictionary. */
235 /* */
236 /* cursor :: The current parser cursor. */
237 /* */
238 /* limit :: The current parser limit (first byte after the */
239 /* current dictionary). */
240 /* */
241 /* error :: The current parsing error. */
242 /* */
243 typedef struct Z1_Parser_
244 {
245 FT_Stream stream;
246 FT_Memory memory;
247
248 FT_Byte* base_dict;
249 FT_Int base_len;
250
251 FT_Byte* private_dict;
252 FT_Int private_len;
253
254 FT_Byte in_pfb;
255 FT_Byte in_memory;
256 FT_Byte single_block;
257
258 FT_Byte* cursor;
259 FT_Byte* limit;
260 FT_Error error;
261
262 } Z1_Parser;
263
264
265 LOCAL_DEF
266 FT_Error Z1_New_Table( Z1_Table* table,
267 FT_Int count,
268 FT_Memory memory );
269
270
271 LOCAL_DEF
272 FT_Error Z1_Add_Table( Z1_Table* table,
273 FT_Int index,
274 void* object,
275 FT_Int length );
276
277 #if 0
278 LOCAL_DEF
279 void Z1_Done_Table( Z1_Table* table );
280 #endif
281
282 LOCAL_DEF
283 void Z1_Release_Table( Z1_Table* table );
284
285 LOCAL_DEF
286 FT_Long Z1_ToInt( Z1_Parser* parser );
287
288 LOCAL_DEF
289 FT_Long Z1_ToFixed( Z1_Parser* parser,
290 FT_Int power_ten );
291
292 LOCAL_DEF
293 FT_Int Z1_ToCoordArray( Z1_Parser* parser,
294 FT_Int max_coords,
295 FT_Short* coords );
296
297 LOCAL_DEF
298 FT_Int Z1_ToFixedArray( Z1_Parser* parser,
299 FT_Int max_values,
300 FT_Fixed* values,
301 FT_Int power_ten );
302
303 #if 0
304 LOCAL_DEF
305 FT_String* Z1_ToString( Z1_Parser* parser );
306
307 LOCAL_DEF
308 FT_Bool Z1_ToBool( Z1_Parser* parser );
309 #endif
310
311
312 LOCAL_DEF
313 void Z1_Skip_Spaces( Z1_Parser* parser );
314
315 LOCAL_DEF
316 void Z1_ToToken( Z1_Parser* parser,
317 Z1_Token_Rec* token );
318
319 LOCAL_FUNC
320 void Z1_ToTokenArray( Z1_Parser* parser,
321 Z1_Token_Rec* tokens,
322 FT_UInt max_tokens,
323 FT_Int* pnum_tokens );
324
325 LOCAL_DEF
326 FT_Error Z1_Load_Field( Z1_Parser* parser,
327 const Z1_Field_Rec* field,
328 void** objects,
329 FT_UInt max_objects,
330 FT_ULong* pflags );
331
332 LOCAL_DEF
333 FT_Error Z1_Load_Field_Table( Z1_Parser* parser,
334 const Z1_Field_Rec* field,
335 void** objects,
336 FT_UInt max_objects,
337 FT_ULong* pflags );
338
339
340 LOCAL_DEF
341 FT_Error Z1_New_Parser( Z1_Parser* parser,
342 FT_Stream stream,
343 FT_Memory memory );
344
345 LOCAL_DEF
346 FT_Error Z1_Get_Private_Dict( Z1_Parser* parser );
347
348 LOCAL_DEF
349 void Z1_Decrypt( FT_Byte* buffer,
350 FT_Int length,
351 FT_UShort seed );
352
353 LOCAL_DEF
354 void Z1_Done_Parser( Z1_Parser* parser );
355
356 #ifdef __cplusplus
357 }
358 #endif
359
360 #endif /* Z1PARSE_H */
361
362
363 /* END */