xref: /inferno-os/include/freetype/internal/psaux.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /***************************************************************************/
2*37da2899SCharles.Forsyth /*                                                                         */
3*37da2899SCharles.Forsyth /*  psaux.h                                                                */
4*37da2899SCharles.Forsyth /*                                                                         */
5*37da2899SCharles.Forsyth /*    Auxiliary functions and data structures related to PostScript fonts  */
6*37da2899SCharles.Forsyth /*    (specification).                                                     */
7*37da2899SCharles.Forsyth /*                                                                         */
8*37da2899SCharles.Forsyth /*  Copyright 1996-2001, 2002 by                                           */
9*37da2899SCharles.Forsyth /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
10*37da2899SCharles.Forsyth /*                                                                         */
11*37da2899SCharles.Forsyth /*  This file is part of the FreeType project, and may only be used,       */
12*37da2899SCharles.Forsyth /*  modified, and distributed under the terms of the FreeType project      */
13*37da2899SCharles.Forsyth /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
14*37da2899SCharles.Forsyth /*  this file you indicate that you have read the license and              */
15*37da2899SCharles.Forsyth /*  understand and accept it fully.                                        */
16*37da2899SCharles.Forsyth /*                                                                         */
17*37da2899SCharles.Forsyth /***************************************************************************/
18*37da2899SCharles.Forsyth 
19*37da2899SCharles.Forsyth 
20*37da2899SCharles.Forsyth #ifndef __PSAUX_H__
21*37da2899SCharles.Forsyth #define __PSAUX_H__
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth 
24*37da2899SCharles.Forsyth #include <ft2build.h>
25*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H
26*37da2899SCharles.Forsyth #include FT_INTERNAL_TYPE1_TYPES_H
27*37da2899SCharles.Forsyth 
28*37da2899SCharles.Forsyth 
29*37da2899SCharles.Forsyth FT_BEGIN_HEADER
30*37da2899SCharles.Forsyth 
31*37da2899SCharles.Forsyth 
32*37da2899SCharles.Forsyth   /*************************************************************************/
33*37da2899SCharles.Forsyth   /*************************************************************************/
34*37da2899SCharles.Forsyth   /*****                                                               *****/
35*37da2899SCharles.Forsyth   /*****                             T1_TABLE                          *****/
36*37da2899SCharles.Forsyth   /*****                                                               *****/
37*37da2899SCharles.Forsyth   /*************************************************************************/
38*37da2899SCharles.Forsyth   /*************************************************************************/
39*37da2899SCharles.Forsyth 
40*37da2899SCharles.Forsyth 
41*37da2899SCharles.Forsyth   typedef struct PS_TableRec_*              PS_Table;
42*37da2899SCharles.Forsyth   typedef const struct PS_Table_FuncsRec_*  PS_Table_Funcs;
43*37da2899SCharles.Forsyth 
44*37da2899SCharles.Forsyth 
45*37da2899SCharles.Forsyth   /*************************************************************************/
46*37da2899SCharles.Forsyth   /*                                                                       */
47*37da2899SCharles.Forsyth   /* <Struct>                                                              */
48*37da2899SCharles.Forsyth   /*    PS_Table_FuncsRec                                                  */
49*37da2899SCharles.Forsyth   /*                                                                       */
50*37da2899SCharles.Forsyth   /* <Description>                                                         */
51*37da2899SCharles.Forsyth   /*    A set of function pointers to manage PS_Table objects.             */
52*37da2899SCharles.Forsyth   /*                                                                       */
53*37da2899SCharles.Forsyth   /* <Fields>                                                              */
54*37da2899SCharles.Forsyth   /*    table_init    :: Used to initialize a table.                       */
55*37da2899SCharles.Forsyth   /*                                                                       */
56*37da2899SCharles.Forsyth   /*    table_done    :: Finalizes resp. destroy a given table.            */
57*37da2899SCharles.Forsyth   /*                                                                       */
58*37da2899SCharles.Forsyth   /*    table_add     :: Adds a new object to a table.                     */
59*37da2899SCharles.Forsyth   /*                                                                       */
60*37da2899SCharles.Forsyth   /*    table_release :: Releases table data, then finalizes it.           */
61*37da2899SCharles.Forsyth   /*                                                                       */
62*37da2899SCharles.Forsyth   typedef struct  PS_Table_FuncsRec_
63*37da2899SCharles.Forsyth   {
64*37da2899SCharles.Forsyth     FT_Error
65*37da2899SCharles.Forsyth     (*init)( PS_Table   table,
66*37da2899SCharles.Forsyth              FT_Int     count,
67*37da2899SCharles.Forsyth              FT_Memory  memory );
68*37da2899SCharles.Forsyth 
69*37da2899SCharles.Forsyth     void
70*37da2899SCharles.Forsyth     (*done)( PS_Table  table );
71*37da2899SCharles.Forsyth 
72*37da2899SCharles.Forsyth     FT_Error
73*37da2899SCharles.Forsyth     (*add)( PS_Table   table,
74*37da2899SCharles.Forsyth             FT_Int     index,
75*37da2899SCharles.Forsyth             void*      object,
76*37da2899SCharles.Forsyth             FT_Int     length );
77*37da2899SCharles.Forsyth 
78*37da2899SCharles.Forsyth     void
79*37da2899SCharles.Forsyth     (*release)( PS_Table  table );
80*37da2899SCharles.Forsyth 
81*37da2899SCharles.Forsyth   } PS_Table_FuncsRec;
82*37da2899SCharles.Forsyth 
83*37da2899SCharles.Forsyth 
84*37da2899SCharles.Forsyth   /*************************************************************************/
85*37da2899SCharles.Forsyth   /*                                                                       */
86*37da2899SCharles.Forsyth   /* <Struct>                                                              */
87*37da2899SCharles.Forsyth   /*    PS_TableRec                                                        */
88*37da2899SCharles.Forsyth   /*                                                                       */
89*37da2899SCharles.Forsyth   /* <Description>                                                         */
90*37da2899SCharles.Forsyth   /*    A PS_Table is a simple object used to store an array of objects in */
91*37da2899SCharles.Forsyth   /*    a single memory block.                                             */
92*37da2899SCharles.Forsyth   /*                                                                       */
93*37da2899SCharles.Forsyth   /* <Fields>                                                              */
94*37da2899SCharles.Forsyth   /*    block     :: The address in memory of the growheap's block.  This  */
95*37da2899SCharles.Forsyth   /*                 can change between two object adds, due to            */
96*37da2899SCharles.Forsyth   /*                 reallocation.                                         */
97*37da2899SCharles.Forsyth   /*                                                                       */
98*37da2899SCharles.Forsyth   /*    cursor    :: The current top of the grow heap within its block.    */
99*37da2899SCharles.Forsyth   /*                                                                       */
100*37da2899SCharles.Forsyth   /*    capacity  :: The current size of the heap block.  Increments by    */
101*37da2899SCharles.Forsyth   /*                 1kByte chunks.                                        */
102*37da2899SCharles.Forsyth   /*                                                                       */
103*37da2899SCharles.Forsyth   /*    max_elems :: The maximum number of elements in table.              */
104*37da2899SCharles.Forsyth   /*                                                                       */
105*37da2899SCharles.Forsyth   /*    num_elems :: The current number of elements in table.              */
106*37da2899SCharles.Forsyth   /*                                                                       */
107*37da2899SCharles.Forsyth   /*    elements  :: A table of element addresses within the block.        */
108*37da2899SCharles.Forsyth   /*                                                                       */
109*37da2899SCharles.Forsyth   /*    lengths   :: A table of element sizes within the block.            */
110*37da2899SCharles.Forsyth   /*                                                                       */
111*37da2899SCharles.Forsyth   /*    memory    :: The object used for memory operations                 */
112*37da2899SCharles.Forsyth   /*                 (alloc/realloc).                                      */
113*37da2899SCharles.Forsyth   /*                                                                       */
114*37da2899SCharles.Forsyth   /*    funcs     :: A table of method pointers for this object.           */
115*37da2899SCharles.Forsyth   /*                                                                       */
116*37da2899SCharles.Forsyth   typedef struct  PS_TableRec_
117*37da2899SCharles.Forsyth   {
118*37da2899SCharles.Forsyth     FT_Byte*           block;          /* current memory block           */
119*37da2899SCharles.Forsyth     FT_Offset          cursor;         /* current cursor in memory block */
120*37da2899SCharles.Forsyth     FT_Offset          capacity;       /* current size of memory block   */
121*37da2899SCharles.Forsyth     FT_Long            init;
122*37da2899SCharles.Forsyth 
123*37da2899SCharles.Forsyth     FT_Int             max_elems;
124*37da2899SCharles.Forsyth     FT_Int             num_elems;
125*37da2899SCharles.Forsyth     FT_Byte**          elements;       /* addresses of table elements */
126*37da2899SCharles.Forsyth     FT_Int*            lengths;        /* lengths of table elements   */
127*37da2899SCharles.Forsyth 
128*37da2899SCharles.Forsyth     FT_Memory          memory;
129*37da2899SCharles.Forsyth     PS_Table_FuncsRec  funcs;
130*37da2899SCharles.Forsyth 
131*37da2899SCharles.Forsyth   } PS_TableRec;
132*37da2899SCharles.Forsyth 
133*37da2899SCharles.Forsyth 
134*37da2899SCharles.Forsyth   /*************************************************************************/
135*37da2899SCharles.Forsyth   /*************************************************************************/
136*37da2899SCharles.Forsyth   /*****                                                               *****/
137*37da2899SCharles.Forsyth   /*****                       T1 FIELDS & TOKENS                      *****/
138*37da2899SCharles.Forsyth   /*****                                                               *****/
139*37da2899SCharles.Forsyth   /*************************************************************************/
140*37da2899SCharles.Forsyth   /*************************************************************************/
141*37da2899SCharles.Forsyth 
142*37da2899SCharles.Forsyth   typedef struct PS_ParserRec_*  PS_Parser;
143*37da2899SCharles.Forsyth 
144*37da2899SCharles.Forsyth   typedef struct T1_TokenRec_*   T1_Token;
145*37da2899SCharles.Forsyth 
146*37da2899SCharles.Forsyth   typedef struct T1_FieldRec_*   T1_Field;
147*37da2899SCharles.Forsyth 
148*37da2899SCharles.Forsyth 
149*37da2899SCharles.Forsyth   /* simple enumeration type used to identify token types */
150*37da2899SCharles.Forsyth   typedef enum  T1_TokenType_
151*37da2899SCharles.Forsyth   {
152*37da2899SCharles.Forsyth     T1_TOKEN_TYPE_NONE = 0,
153*37da2899SCharles.Forsyth     T1_TOKEN_TYPE_ANY,
154*37da2899SCharles.Forsyth     T1_TOKEN_TYPE_STRING,
155*37da2899SCharles.Forsyth     T1_TOKEN_TYPE_ARRAY,
156*37da2899SCharles.Forsyth 
157*37da2899SCharles.Forsyth     /* do not remove */
158*37da2899SCharles.Forsyth     T1_TOKEN_TYPE_MAX
159*37da2899SCharles.Forsyth 
160*37da2899SCharles.Forsyth   } T1_TokenType;
161*37da2899SCharles.Forsyth 
162*37da2899SCharles.Forsyth 
163*37da2899SCharles.Forsyth   /* a simple structure used to identify tokens */
164*37da2899SCharles.Forsyth   typedef struct  T1_TokenRec_
165*37da2899SCharles.Forsyth   {
166*37da2899SCharles.Forsyth     FT_Byte*      start;   /* first character of token in input stream */
167*37da2899SCharles.Forsyth     FT_Byte*      limit;   /* first character after the token          */
168*37da2899SCharles.Forsyth     T1_TokenType  type;    /* type of token                            */
169*37da2899SCharles.Forsyth 
170*37da2899SCharles.Forsyth   } T1_TokenRec;
171*37da2899SCharles.Forsyth 
172*37da2899SCharles.Forsyth 
173*37da2899SCharles.Forsyth   /* enumeration type used to identify object fields */
174*37da2899SCharles.Forsyth   typedef enum  T1_FieldType_
175*37da2899SCharles.Forsyth   {
176*37da2899SCharles.Forsyth     T1_FIELD_TYPE_NONE = 0,
177*37da2899SCharles.Forsyth     T1_FIELD_TYPE_BOOL,
178*37da2899SCharles.Forsyth     T1_FIELD_TYPE_INTEGER,
179*37da2899SCharles.Forsyth     T1_FIELD_TYPE_FIXED,
180*37da2899SCharles.Forsyth     T1_FIELD_TYPE_STRING,
181*37da2899SCharles.Forsyth     T1_FIELD_TYPE_BBOX,
182*37da2899SCharles.Forsyth     T1_FIELD_TYPE_INTEGER_ARRAY,
183*37da2899SCharles.Forsyth     T1_FIELD_TYPE_FIXED_ARRAY,
184*37da2899SCharles.Forsyth     T1_FIELD_TYPE_CALLBACK,
185*37da2899SCharles.Forsyth 
186*37da2899SCharles.Forsyth     /* do not remove */
187*37da2899SCharles.Forsyth     T1_FIELD_TYPE_MAX
188*37da2899SCharles.Forsyth 
189*37da2899SCharles.Forsyth   } T1_FieldType;
190*37da2899SCharles.Forsyth 
191*37da2899SCharles.Forsyth 
192*37da2899SCharles.Forsyth   typedef enum  T1_FieldLocation_
193*37da2899SCharles.Forsyth   {
194*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_CID_INFO,
195*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_FONT_DICT,
196*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_FONT_INFO,
197*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_PRIVATE,
198*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_BBOX,
199*37da2899SCharles.Forsyth 
200*37da2899SCharles.Forsyth     /* do not remove */
201*37da2899SCharles.Forsyth     T1_FIELD_LOCATION_MAX
202*37da2899SCharles.Forsyth 
203*37da2899SCharles.Forsyth   } T1_FieldLocation;
204*37da2899SCharles.Forsyth 
205*37da2899SCharles.Forsyth 
206*37da2899SCharles.Forsyth   typedef void
207*37da2899SCharles.Forsyth   (*T1_Field_ParseFunc)( FT_Face     face,
208*37da2899SCharles.Forsyth                          FT_Pointer  parser );
209*37da2899SCharles.Forsyth 
210*37da2899SCharles.Forsyth 
211*37da2899SCharles.Forsyth   /* structure type used to model object fields */
212*37da2899SCharles.Forsyth   typedef struct  T1_FieldRec_
213*37da2899SCharles.Forsyth   {
214*37da2899SCharles.Forsyth     const char*         ident;        /* field identifier               */
215*37da2899SCharles.Forsyth     T1_FieldLocation    location;
216*37da2899SCharles.Forsyth     T1_FieldType        type;         /* type of field                  */
217*37da2899SCharles.Forsyth     T1_Field_ParseFunc  reader;
218*37da2899SCharles.Forsyth     FT_UInt             offset;       /* offset of field in object      */
219*37da2899SCharles.Forsyth     FT_Byte             size;         /* size of field in bytes         */
220*37da2899SCharles.Forsyth     FT_UInt             array_max;    /* maximal number of elements for */
221*37da2899SCharles.Forsyth                                       /* array                          */
222*37da2899SCharles.Forsyth     FT_UInt             count_offset; /* offset of element count for    */
223*37da2899SCharles.Forsyth                                       /* arrays                         */
224*37da2899SCharles.Forsyth   } T1_FieldRec;
225*37da2899SCharles.Forsyth 
226*37da2899SCharles.Forsyth 
227*37da2899SCharles.Forsyth #define T1_NEW_SIMPLE_FIELD( _ident, _type, _fname ) \
228*37da2899SCharles.Forsyth           {                                          \
229*37da2899SCharles.Forsyth             _ident, T1CODE, _type,                   \
230*37da2899SCharles.Forsyth             0,                                       \
231*37da2899SCharles.Forsyth             FT_FIELD_OFFSET( _fname ),               \
232*37da2899SCharles.Forsyth             FT_FIELD_SIZE( _fname ),                 \
233*37da2899SCharles.Forsyth             0, 0                                     \
234*37da2899SCharles.Forsyth           },
235*37da2899SCharles.Forsyth 
236*37da2899SCharles.Forsyth #define T1_NEW_CALLBACK_FIELD( _ident, _reader )    \
237*37da2899SCharles.Forsyth           {                                         \
238*37da2899SCharles.Forsyth             _ident, T1CODE, T1_FIELD_TYPE_CALLBACK, \
239*37da2899SCharles.Forsyth             (T1_Field_ParseFunc)_reader,            \
240*37da2899SCharles.Forsyth             0, 0,                                   \
241*37da2899SCharles.Forsyth             0, 0                                    \
242*37da2899SCharles.Forsyth           },
243*37da2899SCharles.Forsyth 
244*37da2899SCharles.Forsyth #define T1_NEW_TABLE_FIELD( _ident, _type, _fname, _max ) \
245*37da2899SCharles.Forsyth           {                                               \
246*37da2899SCharles.Forsyth             _ident, T1CODE, _type,                        \
247*37da2899SCharles.Forsyth             0,                                            \
248*37da2899SCharles.Forsyth             FT_FIELD_OFFSET( _fname ),                    \
249*37da2899SCharles.Forsyth             FT_FIELD_SIZE_DELTA( _fname ),                \
250*37da2899SCharles.Forsyth             _max,                                         \
251*37da2899SCharles.Forsyth             FT_FIELD_OFFSET( num_ ## _fname )             \
252*37da2899SCharles.Forsyth           },
253*37da2899SCharles.Forsyth 
254*37da2899SCharles.Forsyth #define T1_NEW_TABLE_FIELD2( _ident, _type, _fname, _max ) \
255*37da2899SCharles.Forsyth           {                                                \
256*37da2899SCharles.Forsyth             _ident, T1CODE, _type,                         \
257*37da2899SCharles.Forsyth             0,                                             \
258*37da2899SCharles.Forsyth             FT_FIELD_OFFSET( _fname ),                     \
259*37da2899SCharles.Forsyth             FT_FIELD_SIZE_DELTA( _fname ),                 \
260*37da2899SCharles.Forsyth             _max, 0                                        \
261*37da2899SCharles.Forsyth           },
262*37da2899SCharles.Forsyth 
263*37da2899SCharles.Forsyth 
264*37da2899SCharles.Forsyth #define T1_FIELD_TYPE_BOOL( _ident, _fname )                        \
265*37da2899SCharles.Forsyth           T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BOOL, _fname )
266*37da2899SCharles.Forsyth 
267*37da2899SCharles.Forsyth #define T1_FIELD_NUM( _ident, _fname )                                 \
268*37da2899SCharles.Forsyth           T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER, _fname )
269*37da2899SCharles.Forsyth 
270*37da2899SCharles.Forsyth #define T1_FIELD_FIXED( _ident, _fname )                             \
271*37da2899SCharles.Forsyth           T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_FIXED, _fname )
272*37da2899SCharles.Forsyth 
273*37da2899SCharles.Forsyth #define T1_FIELD_STRING( _ident, _fname )                             \
274*37da2899SCharles.Forsyth           T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_STRING, _fname )
275*37da2899SCharles.Forsyth 
276*37da2899SCharles.Forsyth #define T1_FIELD_BBOX( _ident, _fname )                             \
277*37da2899SCharles.Forsyth           T1_NEW_SIMPLE_FIELD( _ident, T1_FIELD_TYPE_BBOX, _fname )
278*37da2899SCharles.Forsyth 
279*37da2899SCharles.Forsyth 
280*37da2899SCharles.Forsyth #define T1_FIELD_NUM_TABLE( _ident, _fname, _fmax )                \
281*37da2899SCharles.Forsyth           T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
282*37da2899SCharles.Forsyth                               _fname, _fmax )
283*37da2899SCharles.Forsyth 
284*37da2899SCharles.Forsyth #define T1_FIELD_FIXED_TABLE( _ident, _fname, _fmax )            \
285*37da2899SCharles.Forsyth           T1_NEW_TABLE_FIELD( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
286*37da2899SCharles.Forsyth                               _fname, _fmax )
287*37da2899SCharles.Forsyth 
288*37da2899SCharles.Forsyth #define T1_FIELD_NUM_TABLE2( _ident, _fname, _fmax )                \
289*37da2899SCharles.Forsyth           T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_INTEGER_ARRAY, \
290*37da2899SCharles.Forsyth                                _fname, _fmax )
291*37da2899SCharles.Forsyth 
292*37da2899SCharles.Forsyth #define T1_FIELD_FIXED_TABLE2( _ident, _fname, _fmax )            \
293*37da2899SCharles.Forsyth           T1_NEW_TABLE_FIELD2( _ident, T1_FIELD_TYPE_FIXED_ARRAY, \
294*37da2899SCharles.Forsyth                                _fname, _fmax )
295*37da2899SCharles.Forsyth 
296*37da2899SCharles.Forsyth #define T1_FIELD_CALLBACK( _ident, _name )       \
297*37da2899SCharles.Forsyth           T1_NEW_CALLBACK_FIELD( _ident, _name )
298*37da2899SCharles.Forsyth 
299*37da2899SCharles.Forsyth 
300*37da2899SCharles.Forsyth   /*************************************************************************/
301*37da2899SCharles.Forsyth   /*************************************************************************/
302*37da2899SCharles.Forsyth   /*****                                                               *****/
303*37da2899SCharles.Forsyth   /*****                            T1 PARSER                          *****/
304*37da2899SCharles.Forsyth   /*****                                                               *****/
305*37da2899SCharles.Forsyth   /*************************************************************************/
306*37da2899SCharles.Forsyth   /*************************************************************************/
307*37da2899SCharles.Forsyth 
308*37da2899SCharles.Forsyth   typedef const struct PS_Parser_FuncsRec_*  PS_Parser_Funcs;
309*37da2899SCharles.Forsyth 
310*37da2899SCharles.Forsyth   typedef struct  PS_Parser_FuncsRec_
311*37da2899SCharles.Forsyth   {
312*37da2899SCharles.Forsyth     void
313*37da2899SCharles.Forsyth     (*init)( PS_Parser  parser,
314*37da2899SCharles.Forsyth              FT_Byte*   base,
315*37da2899SCharles.Forsyth              FT_Byte*   limit,
316*37da2899SCharles.Forsyth              FT_Memory  memory );
317*37da2899SCharles.Forsyth 
318*37da2899SCharles.Forsyth     void
319*37da2899SCharles.Forsyth     (*done)( PS_Parser  parser );
320*37da2899SCharles.Forsyth 
321*37da2899SCharles.Forsyth     void
322*37da2899SCharles.Forsyth     (*skip_spaces)( PS_Parser  parser );
323*37da2899SCharles.Forsyth     void
324*37da2899SCharles.Forsyth     (*skip_alpha)( PS_Parser  parser );
325*37da2899SCharles.Forsyth 
326*37da2899SCharles.Forsyth     FT_Long
327*37da2899SCharles.Forsyth     (*to_int)( PS_Parser  parser );
328*37da2899SCharles.Forsyth     FT_Fixed
329*37da2899SCharles.Forsyth     (*to_fixed)( PS_Parser  parser,
330*37da2899SCharles.Forsyth                  FT_Int     power_ten );
331*37da2899SCharles.Forsyth     FT_Int
332*37da2899SCharles.Forsyth     (*to_coord_array)( PS_Parser  parser,
333*37da2899SCharles.Forsyth                        FT_Int     max_coords,
334*37da2899SCharles.Forsyth                        FT_Short*  coords );
335*37da2899SCharles.Forsyth     FT_Int
336*37da2899SCharles.Forsyth     (*to_fixed_array)( PS_Parser  parser,
337*37da2899SCharles.Forsyth                        FT_Int     max_values,
338*37da2899SCharles.Forsyth                        FT_Fixed*  values,
339*37da2899SCharles.Forsyth                        FT_Int     power_ten );
340*37da2899SCharles.Forsyth 
341*37da2899SCharles.Forsyth     void
342*37da2899SCharles.Forsyth     (*to_token)( PS_Parser  parser,
343*37da2899SCharles.Forsyth                  T1_Token   token );
344*37da2899SCharles.Forsyth     void
345*37da2899SCharles.Forsyth     (*to_token_array)( PS_Parser  parser,
346*37da2899SCharles.Forsyth                        T1_Token   tokens,
347*37da2899SCharles.Forsyth                        FT_UInt    max_tokens,
348*37da2899SCharles.Forsyth                        FT_Int*    pnum_tokens );
349*37da2899SCharles.Forsyth 
350*37da2899SCharles.Forsyth     FT_Error
351*37da2899SCharles.Forsyth     (*load_field)( PS_Parser       parser,
352*37da2899SCharles.Forsyth                    const T1_Field  field,
353*37da2899SCharles.Forsyth                    void**          objects,
354*37da2899SCharles.Forsyth                    FT_UInt         max_objects,
355*37da2899SCharles.Forsyth                    FT_ULong*       pflags );
356*37da2899SCharles.Forsyth 
357*37da2899SCharles.Forsyth     FT_Error
358*37da2899SCharles.Forsyth     (*load_field_table)( PS_Parser       parser,
359*37da2899SCharles.Forsyth                          const T1_Field  field,
360*37da2899SCharles.Forsyth                          void**          objects,
361*37da2899SCharles.Forsyth                          FT_UInt         max_objects,
362*37da2899SCharles.Forsyth                          FT_ULong*       pflags );
363*37da2899SCharles.Forsyth 
364*37da2899SCharles.Forsyth   } PS_Parser_FuncsRec;
365*37da2899SCharles.Forsyth 
366*37da2899SCharles.Forsyth 
367*37da2899SCharles.Forsyth   /*************************************************************************/
368*37da2899SCharles.Forsyth   /*                                                                       */
369*37da2899SCharles.Forsyth   /* <Struct>                                                              */
370*37da2899SCharles.Forsyth   /*    PS_ParserRec                                                       */
371*37da2899SCharles.Forsyth   /*                                                                       */
372*37da2899SCharles.Forsyth   /* <Description>                                                         */
373*37da2899SCharles.Forsyth   /*    A PS_Parser is an object used to parse a Type 1 font very quickly. */
374*37da2899SCharles.Forsyth   /*                                                                       */
375*37da2899SCharles.Forsyth   /* <Fields>                                                              */
376*37da2899SCharles.Forsyth   /*    cursor :: The current position in the text.                        */
377*37da2899SCharles.Forsyth   /*                                                                       */
378*37da2899SCharles.Forsyth   /*    base   :: Start of the processed text.                             */
379*37da2899SCharles.Forsyth   /*                                                                       */
380*37da2899SCharles.Forsyth   /*    limit  :: End of the processed text.                               */
381*37da2899SCharles.Forsyth   /*                                                                       */
382*37da2899SCharles.Forsyth   /*    error  :: The last error returned.                                 */
383*37da2899SCharles.Forsyth   /*                                                                       */
384*37da2899SCharles.Forsyth   /*    memory :: The object used for memory operations (alloc/realloc).   */
385*37da2899SCharles.Forsyth   /*                                                                       */
386*37da2899SCharles.Forsyth   /*    funcs  :: A table of functions for the parser.                     */
387*37da2899SCharles.Forsyth   /*                                                                       */
388*37da2899SCharles.Forsyth   typedef struct  PS_ParserRec_
389*37da2899SCharles.Forsyth   {
390*37da2899SCharles.Forsyth     FT_Byte*   cursor;
391*37da2899SCharles.Forsyth     FT_Byte*   base;
392*37da2899SCharles.Forsyth     FT_Byte*   limit;
393*37da2899SCharles.Forsyth     FT_Error   error;
394*37da2899SCharles.Forsyth     FT_Memory  memory;
395*37da2899SCharles.Forsyth 
396*37da2899SCharles.Forsyth     PS_Parser_FuncsRec  funcs;
397*37da2899SCharles.Forsyth 
398*37da2899SCharles.Forsyth   } PS_ParserRec;
399*37da2899SCharles.Forsyth 
400*37da2899SCharles.Forsyth 
401*37da2899SCharles.Forsyth   /*************************************************************************/
402*37da2899SCharles.Forsyth   /*************************************************************************/
403*37da2899SCharles.Forsyth   /*****                                                               *****/
404*37da2899SCharles.Forsyth   /*****                         T1 BUILDER                            *****/
405*37da2899SCharles.Forsyth   /*****                                                               *****/
406*37da2899SCharles.Forsyth   /*************************************************************************/
407*37da2899SCharles.Forsyth   /*************************************************************************/
408*37da2899SCharles.Forsyth 
409*37da2899SCharles.Forsyth 
410*37da2899SCharles.Forsyth   typedef struct T1_BuilderRec_*  T1_Builder;
411*37da2899SCharles.Forsyth 
412*37da2899SCharles.Forsyth 
413*37da2899SCharles.Forsyth   typedef FT_Error
414*37da2899SCharles.Forsyth   (*T1_Builder_Check_Points_Func)( T1_Builder  builder,
415*37da2899SCharles.Forsyth                                    FT_Int      count );
416*37da2899SCharles.Forsyth 
417*37da2899SCharles.Forsyth   typedef void
418*37da2899SCharles.Forsyth   (*T1_Builder_Add_Point_Func)( T1_Builder  builder,
419*37da2899SCharles.Forsyth                                 FT_Pos      x,
420*37da2899SCharles.Forsyth                                 FT_Pos      y,
421*37da2899SCharles.Forsyth                                 FT_Byte     flag );
422*37da2899SCharles.Forsyth 
423*37da2899SCharles.Forsyth   typedef FT_Error
424*37da2899SCharles.Forsyth   (*T1_Builder_Add_Point1_Func)( T1_Builder  builder,
425*37da2899SCharles.Forsyth                                  FT_Pos      x,
426*37da2899SCharles.Forsyth                                  FT_Pos      y );
427*37da2899SCharles.Forsyth 
428*37da2899SCharles.Forsyth   typedef FT_Error
429*37da2899SCharles.Forsyth   (*T1_Builder_Add_Contour_Func)( T1_Builder  builder );
430*37da2899SCharles.Forsyth 
431*37da2899SCharles.Forsyth   typedef FT_Error
432*37da2899SCharles.Forsyth   (*T1_Builder_Start_Point_Func)( T1_Builder  builder,
433*37da2899SCharles.Forsyth                                   FT_Pos      x,
434*37da2899SCharles.Forsyth                                   FT_Pos      y );
435*37da2899SCharles.Forsyth 
436*37da2899SCharles.Forsyth   typedef void
437*37da2899SCharles.Forsyth   (*T1_Builder_Close_Contour_Func)( T1_Builder  builder );
438*37da2899SCharles.Forsyth 
439*37da2899SCharles.Forsyth 
440*37da2899SCharles.Forsyth   typedef const struct T1_Builder_FuncsRec_*  T1_Builder_Funcs;
441*37da2899SCharles.Forsyth 
442*37da2899SCharles.Forsyth   typedef struct  T1_Builder_FuncsRec_
443*37da2899SCharles.Forsyth   {
444*37da2899SCharles.Forsyth     void
445*37da2899SCharles.Forsyth     (*init)( T1_Builder    builder,
446*37da2899SCharles.Forsyth              FT_Face       face,
447*37da2899SCharles.Forsyth              FT_Size       size,
448*37da2899SCharles.Forsyth              FT_GlyphSlot  slot,
449*37da2899SCharles.Forsyth              FT_Bool       hinting );
450*37da2899SCharles.Forsyth 
451*37da2899SCharles.Forsyth     void
452*37da2899SCharles.Forsyth     (*done)( T1_Builder   builder );
453*37da2899SCharles.Forsyth 
454*37da2899SCharles.Forsyth     T1_Builder_Check_Points_Func   check_points;
455*37da2899SCharles.Forsyth     T1_Builder_Add_Point_Func      add_point;
456*37da2899SCharles.Forsyth     T1_Builder_Add_Point1_Func     add_point1;
457*37da2899SCharles.Forsyth     T1_Builder_Add_Contour_Func    add_contour;
458*37da2899SCharles.Forsyth     T1_Builder_Start_Point_Func    start_point;
459*37da2899SCharles.Forsyth     T1_Builder_Close_Contour_Func  close_contour;
460*37da2899SCharles.Forsyth 
461*37da2899SCharles.Forsyth   } T1_Builder_FuncsRec;
462*37da2899SCharles.Forsyth 
463*37da2899SCharles.Forsyth 
464*37da2899SCharles.Forsyth   /*************************************************************************/
465*37da2899SCharles.Forsyth   /*                                                                       */
466*37da2899SCharles.Forsyth   /* <Structure>                                                           */
467*37da2899SCharles.Forsyth   /*    T1_BuilderRec                                                      */
468*37da2899SCharles.Forsyth   /*                                                                       */
469*37da2899SCharles.Forsyth   /* <Description>                                                         */
470*37da2899SCharles.Forsyth   /*     A structure used during glyph loading to store its outline.       */
471*37da2899SCharles.Forsyth   /*                                                                       */
472*37da2899SCharles.Forsyth   /* <Fields>                                                              */
473*37da2899SCharles.Forsyth   /*    memory       :: The current memory object.                         */
474*37da2899SCharles.Forsyth   /*                                                                       */
475*37da2899SCharles.Forsyth   /*    face         :: The current face object.                           */
476*37da2899SCharles.Forsyth   /*                                                                       */
477*37da2899SCharles.Forsyth   /*    glyph        :: The current glyph slot.                            */
478*37da2899SCharles.Forsyth   /*                                                                       */
479*37da2899SCharles.Forsyth   /*    loader       :: XXX                                                */
480*37da2899SCharles.Forsyth   /*                                                                       */
481*37da2899SCharles.Forsyth   /*    base         :: The base glyph outline.                            */
482*37da2899SCharles.Forsyth   /*                                                                       */
483*37da2899SCharles.Forsyth   /*    current      :: The current glyph outline.                         */
484*37da2899SCharles.Forsyth   /*                                                                       */
485*37da2899SCharles.Forsyth   /*    max_points   :: maximum points in builder outline                  */
486*37da2899SCharles.Forsyth   /*                                                                       */
487*37da2899SCharles.Forsyth   /*    max_contours :: Maximal number of contours in builder outline.     */
488*37da2899SCharles.Forsyth   /*                                                                       */
489*37da2899SCharles.Forsyth   /*    last         :: The last point position.                           */
490*37da2899SCharles.Forsyth   /*                                                                       */
491*37da2899SCharles.Forsyth   /*    scale_x      :: The horizontal scale (FUnits to sub-pixels).       */
492*37da2899SCharles.Forsyth   /*                                                                       */
493*37da2899SCharles.Forsyth   /*    scale_y      :: The vertical scale (FUnits to sub-pixels).         */
494*37da2899SCharles.Forsyth   /*                                                                       */
495*37da2899SCharles.Forsyth   /*    pos_x        :: The horizontal translation (if composite glyph).   */
496*37da2899SCharles.Forsyth   /*                                                                       */
497*37da2899SCharles.Forsyth   /*    pos_y        :: The vertical translation (if composite glyph).     */
498*37da2899SCharles.Forsyth   /*                                                                       */
499*37da2899SCharles.Forsyth   /*    left_bearing :: The left side bearing point.                       */
500*37da2899SCharles.Forsyth   /*                                                                       */
501*37da2899SCharles.Forsyth   /*    advance      :: The horizontal advance vector.                     */
502*37da2899SCharles.Forsyth   /*                                                                       */
503*37da2899SCharles.Forsyth   /*    bbox         :: Unused.                                            */
504*37da2899SCharles.Forsyth   /*                                                                       */
505*37da2899SCharles.Forsyth   /*    path_begun   :: A flag which indicates that a new path has begun.  */
506*37da2899SCharles.Forsyth   /*                                                                       */
507*37da2899SCharles.Forsyth   /*    load_points  :: If this flag is not set, no points are loaded.     */
508*37da2899SCharles.Forsyth   /*                                                                       */
509*37da2899SCharles.Forsyth   /*    no_recurse   :: Set but not used.                                  */
510*37da2899SCharles.Forsyth   /*                                                                       */
511*37da2899SCharles.Forsyth   /*    error        :: An error code that is only used to report memory   */
512*37da2899SCharles.Forsyth   /*                    allocation problems.                               */
513*37da2899SCharles.Forsyth   /*                                                                       */
514*37da2899SCharles.Forsyth   /*    metrics_only :: A boolean indicating that we only want to compute  */
515*37da2899SCharles.Forsyth   /*                    the metrics of a given glyph, not load all of its  */
516*37da2899SCharles.Forsyth   /*                    points.                                            */
517*37da2899SCharles.Forsyth   /*                                                                       */
518*37da2899SCharles.Forsyth   /*    funcs        :: An array of function pointers for the builder.     */
519*37da2899SCharles.Forsyth   /*                                                                       */
520*37da2899SCharles.Forsyth   typedef struct  T1_BuilderRec_
521*37da2899SCharles.Forsyth   {
522*37da2899SCharles.Forsyth     FT_Memory       memory;
523*37da2899SCharles.Forsyth     FT_Face         face;
524*37da2899SCharles.Forsyth     FT_GlyphSlot    glyph;
525*37da2899SCharles.Forsyth     FT_GlyphLoader  loader;
526*37da2899SCharles.Forsyth     FT_Outline*     base;
527*37da2899SCharles.Forsyth     FT_Outline*     current;
528*37da2899SCharles.Forsyth 
529*37da2899SCharles.Forsyth     FT_Vector       last;
530*37da2899SCharles.Forsyth 
531*37da2899SCharles.Forsyth     FT_Fixed        scale_x;
532*37da2899SCharles.Forsyth     FT_Fixed        scale_y;
533*37da2899SCharles.Forsyth 
534*37da2899SCharles.Forsyth     FT_Pos          pos_x;
535*37da2899SCharles.Forsyth     FT_Pos          pos_y;
536*37da2899SCharles.Forsyth 
537*37da2899SCharles.Forsyth     FT_Vector       left_bearing;
538*37da2899SCharles.Forsyth     FT_Vector       advance;
539*37da2899SCharles.Forsyth 
540*37da2899SCharles.Forsyth     FT_BBox         bbox;          /* bounding box */
541*37da2899SCharles.Forsyth     FT_Bool         path_begun;
542*37da2899SCharles.Forsyth     FT_Bool         load_points;
543*37da2899SCharles.Forsyth     FT_Bool         no_recurse;
544*37da2899SCharles.Forsyth     FT_Bool         shift;
545*37da2899SCharles.Forsyth 
546*37da2899SCharles.Forsyth     FT_Error        error;         /* only used for memory errors */
547*37da2899SCharles.Forsyth     FT_Bool         metrics_only;
548*37da2899SCharles.Forsyth 
549*37da2899SCharles.Forsyth     void*           hints_funcs;    /* hinter-specific */
550*37da2899SCharles.Forsyth     void*           hints_globals;  /* hinter-specific */
551*37da2899SCharles.Forsyth 
552*37da2899SCharles.Forsyth     T1_Builder_FuncsRec  funcs;
553*37da2899SCharles.Forsyth 
554*37da2899SCharles.Forsyth   } T1_BuilderRec;
555*37da2899SCharles.Forsyth 
556*37da2899SCharles.Forsyth 
557*37da2899SCharles.Forsyth   /*************************************************************************/
558*37da2899SCharles.Forsyth   /*************************************************************************/
559*37da2899SCharles.Forsyth   /*****                                                               *****/
560*37da2899SCharles.Forsyth   /*****                         T1 DECODER                            *****/
561*37da2899SCharles.Forsyth   /*****                                                               *****/
562*37da2899SCharles.Forsyth   /*************************************************************************/
563*37da2899SCharles.Forsyth   /*************************************************************************/
564*37da2899SCharles.Forsyth 
565*37da2899SCharles.Forsyth #if 0
566*37da2899SCharles.Forsyth 
567*37da2899SCharles.Forsyth   /*************************************************************************/
568*37da2899SCharles.Forsyth   /*                                                                       */
569*37da2899SCharles.Forsyth   /* T1_MAX_SUBRS_CALLS details the maximum number of nested sub-routine   */
570*37da2899SCharles.Forsyth   /* calls during glyph loading.                                           */
571*37da2899SCharles.Forsyth   /*                                                                       */
572*37da2899SCharles.Forsyth #define T1_MAX_SUBRS_CALLS  8
573*37da2899SCharles.Forsyth 
574*37da2899SCharles.Forsyth 
575*37da2899SCharles.Forsyth   /*************************************************************************/
576*37da2899SCharles.Forsyth   /*                                                                       */
577*37da2899SCharles.Forsyth   /* T1_MAX_CHARSTRING_OPERANDS is the charstring stack's capacity.  A     */
578*37da2899SCharles.Forsyth   /* minimum of 16 is required.                                            */
579*37da2899SCharles.Forsyth   /*                                                                       */
580*37da2899SCharles.Forsyth #define T1_MAX_CHARSTRINGS_OPERANDS  32
581*37da2899SCharles.Forsyth 
582*37da2899SCharles.Forsyth #endif /* 0 */
583*37da2899SCharles.Forsyth 
584*37da2899SCharles.Forsyth 
585*37da2899SCharles.Forsyth   typedef struct  T1_Decoder_ZoneRec_
586*37da2899SCharles.Forsyth   {
587*37da2899SCharles.Forsyth     FT_Byte*  cursor;
588*37da2899SCharles.Forsyth     FT_Byte*  base;
589*37da2899SCharles.Forsyth     FT_Byte*  limit;
590*37da2899SCharles.Forsyth 
591*37da2899SCharles.Forsyth   } T1_Decoder_ZoneRec, *T1_Decoder_Zone;
592*37da2899SCharles.Forsyth 
593*37da2899SCharles.Forsyth 
594*37da2899SCharles.Forsyth   typedef struct T1_DecoderRec_*              T1_Decoder;
595*37da2899SCharles.Forsyth   typedef const struct T1_Decoder_FuncsRec_*  T1_Decoder_Funcs;
596*37da2899SCharles.Forsyth 
597*37da2899SCharles.Forsyth 
598*37da2899SCharles.Forsyth   typedef FT_Error
599*37da2899SCharles.Forsyth   (*T1_Decoder_Callback)( T1_Decoder  decoder,
600*37da2899SCharles.Forsyth                           FT_UInt     glyph_index );
601*37da2899SCharles.Forsyth 
602*37da2899SCharles.Forsyth 
603*37da2899SCharles.Forsyth   typedef struct  T1_Decoder_FuncsRec_
604*37da2899SCharles.Forsyth   {
605*37da2899SCharles.Forsyth     FT_Error
606*37da2899SCharles.Forsyth     (*init)( T1_Decoder           decoder,
607*37da2899SCharles.Forsyth              FT_Face              face,
608*37da2899SCharles.Forsyth              FT_Size              size,
609*37da2899SCharles.Forsyth              FT_GlyphSlot         slot,
610*37da2899SCharles.Forsyth              FT_Byte**            glyph_names,
611*37da2899SCharles.Forsyth              PS_Blend             blend,
612*37da2899SCharles.Forsyth              FT_Bool              hinting,
613*37da2899SCharles.Forsyth              FT_Render_Mode       hint_mode,
614*37da2899SCharles.Forsyth              T1_Decoder_Callback  callback );
615*37da2899SCharles.Forsyth 
616*37da2899SCharles.Forsyth     void
617*37da2899SCharles.Forsyth     (*done)( T1_Decoder  decoder );
618*37da2899SCharles.Forsyth 
619*37da2899SCharles.Forsyth     FT_Error
620*37da2899SCharles.Forsyth     (*parse_charstrings)( T1_Decoder  decoder,
621*37da2899SCharles.Forsyth                           FT_Byte*    base,
622*37da2899SCharles.Forsyth                           FT_UInt     len );
623*37da2899SCharles.Forsyth 
624*37da2899SCharles.Forsyth   } T1_Decoder_FuncsRec;
625*37da2899SCharles.Forsyth 
626*37da2899SCharles.Forsyth 
627*37da2899SCharles.Forsyth   typedef struct  T1_DecoderRec_
628*37da2899SCharles.Forsyth   {
629*37da2899SCharles.Forsyth     T1_BuilderRec        builder;
630*37da2899SCharles.Forsyth 
631*37da2899SCharles.Forsyth     FT_Long              stack[T1_MAX_CHARSTRINGS_OPERANDS];
632*37da2899SCharles.Forsyth     FT_Long*             top;
633*37da2899SCharles.Forsyth 
634*37da2899SCharles.Forsyth     T1_Decoder_ZoneRec   zones[T1_MAX_SUBRS_CALLS + 1];
635*37da2899SCharles.Forsyth     T1_Decoder_Zone      zone;
636*37da2899SCharles.Forsyth 
637*37da2899SCharles.Forsyth     PSNames_Service      psnames;      /* for seac */
638*37da2899SCharles.Forsyth     FT_UInt              num_glyphs;
639*37da2899SCharles.Forsyth     FT_Byte**            glyph_names;
640*37da2899SCharles.Forsyth 
641*37da2899SCharles.Forsyth     FT_Int               lenIV;        /* internal for sub routine calls */
642*37da2899SCharles.Forsyth     FT_UInt              num_subrs;
643*37da2899SCharles.Forsyth     FT_Byte**            subrs;
644*37da2899SCharles.Forsyth     FT_Int*              subrs_len;    /* array of subrs length (optional) */
645*37da2899SCharles.Forsyth 
646*37da2899SCharles.Forsyth     FT_Matrix            font_matrix;
647*37da2899SCharles.Forsyth     FT_Vector            font_offset;
648*37da2899SCharles.Forsyth 
649*37da2899SCharles.Forsyth     FT_Int               flex_state;
650*37da2899SCharles.Forsyth     FT_Int               num_flex_vectors;
651*37da2899SCharles.Forsyth     FT_Vector            flex_vectors[7];
652*37da2899SCharles.Forsyth 
653*37da2899SCharles.Forsyth     PS_Blend             blend;       /* for multiple master support */
654*37da2899SCharles.Forsyth 
655*37da2899SCharles.Forsyth     FT_UInt32            hint_flags;
656*37da2899SCharles.Forsyth     FT_Render_Mode       hint_mode;
657*37da2899SCharles.Forsyth 
658*37da2899SCharles.Forsyth     T1_Decoder_Callback  parse_callback;
659*37da2899SCharles.Forsyth     T1_Decoder_FuncsRec  funcs;
660*37da2899SCharles.Forsyth 
661*37da2899SCharles.Forsyth   } T1_DecoderRec;
662*37da2899SCharles.Forsyth 
663*37da2899SCharles.Forsyth 
664*37da2899SCharles.Forsyth   /*************************************************************************/
665*37da2899SCharles.Forsyth   /*************************************************************************/
666*37da2899SCharles.Forsyth   /*****                                                               *****/
667*37da2899SCharles.Forsyth   /*****                     TYPE1 CHARMAPS                            *****/
668*37da2899SCharles.Forsyth   /*****                                                               *****/
669*37da2899SCharles.Forsyth   /*************************************************************************/
670*37da2899SCharles.Forsyth   /*************************************************************************/
671*37da2899SCharles.Forsyth 
672*37da2899SCharles.Forsyth   typedef const struct T1_CMap_ClassesRec_*  T1_CMap_Classes;
673*37da2899SCharles.Forsyth 
674*37da2899SCharles.Forsyth   typedef struct T1_CMap_ClassesRec_
675*37da2899SCharles.Forsyth   {
676*37da2899SCharles.Forsyth     FT_CMap_Class  standard;
677*37da2899SCharles.Forsyth     FT_CMap_Class  expert;
678*37da2899SCharles.Forsyth     FT_CMap_Class  custom;
679*37da2899SCharles.Forsyth     FT_CMap_Class  unicode;
680*37da2899SCharles.Forsyth 
681*37da2899SCharles.Forsyth   } T1_CMap_ClassesRec;
682*37da2899SCharles.Forsyth 
683*37da2899SCharles.Forsyth 
684*37da2899SCharles.Forsyth   /*************************************************************************/
685*37da2899SCharles.Forsyth   /*************************************************************************/
686*37da2899SCharles.Forsyth   /*****                                                               *****/
687*37da2899SCharles.Forsyth   /*****                        PSAux Module Interface                 *****/
688*37da2899SCharles.Forsyth   /*****                                                               *****/
689*37da2899SCharles.Forsyth   /*************************************************************************/
690*37da2899SCharles.Forsyth   /*************************************************************************/
691*37da2899SCharles.Forsyth 
692*37da2899SCharles.Forsyth   typedef struct  PSAux_ServiceRec_
693*37da2899SCharles.Forsyth   {
694*37da2899SCharles.Forsyth     /* don't use `PS_Table_Funcs' and friends to avoid compiler warnings */
695*37da2899SCharles.Forsyth     const PS_Table_FuncsRec*    ps_table_funcs;
696*37da2899SCharles.Forsyth     const PS_Parser_FuncsRec*   ps_parser_funcs;
697*37da2899SCharles.Forsyth     const T1_Builder_FuncsRec*  t1_builder_funcs;
698*37da2899SCharles.Forsyth     const T1_Decoder_FuncsRec*  t1_decoder_funcs;
699*37da2899SCharles.Forsyth 
700*37da2899SCharles.Forsyth     void
701*37da2899SCharles.Forsyth     (*t1_decrypt)( FT_Byte*   buffer,
702*37da2899SCharles.Forsyth                    FT_Offset  length,
703*37da2899SCharles.Forsyth                    FT_UShort  seed );
704*37da2899SCharles.Forsyth 
705*37da2899SCharles.Forsyth     T1_CMap_Classes  t1_cmap_classes;
706*37da2899SCharles.Forsyth 
707*37da2899SCharles.Forsyth   } PSAux_ServiceRec, *PSAux_Service;
708*37da2899SCharles.Forsyth 
709*37da2899SCharles.Forsyth   /* backwards-compatible type definition */
710*37da2899SCharles.Forsyth   typedef PSAux_ServiceRec   PSAux_Interface;
711*37da2899SCharles.Forsyth 
712*37da2899SCharles.Forsyth FT_END_HEADER
713*37da2899SCharles.Forsyth 
714*37da2899SCharles.Forsyth #endif /* __PSAUX_H__ */
715*37da2899SCharles.Forsyth 
716*37da2899SCharles.Forsyth 
717*37da2899SCharles.Forsyth /* END */
718