xref: /inferno-os/libfreetype/ttobjs.h (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth /***************************************************************************/
2*37da2899SCharles.Forsyth /*                                                                         */
3*37da2899SCharles.Forsyth /*  ttobjs.h                                                               */
4*37da2899SCharles.Forsyth /*                                                                         */
5*37da2899SCharles.Forsyth /*    Objects manager (specification).                                     */
6*37da2899SCharles.Forsyth /*                                                                         */
7*37da2899SCharles.Forsyth /*  Copyright 1996-2001, 2002 by                                           */
8*37da2899SCharles.Forsyth /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9*37da2899SCharles.Forsyth /*                                                                         */
10*37da2899SCharles.Forsyth /*  This file is part of the FreeType project, and may only be used,       */
11*37da2899SCharles.Forsyth /*  modified, and distributed under the terms of the FreeType project      */
12*37da2899SCharles.Forsyth /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13*37da2899SCharles.Forsyth /*  this file you indicate that you have read the license and              */
14*37da2899SCharles.Forsyth /*  understand and accept it fully.                                        */
15*37da2899SCharles.Forsyth /*                                                                         */
16*37da2899SCharles.Forsyth /***************************************************************************/
17*37da2899SCharles.Forsyth 
18*37da2899SCharles.Forsyth 
19*37da2899SCharles.Forsyth #ifndef __TTOBJS_H__
20*37da2899SCharles.Forsyth #define __TTOBJS_H__
21*37da2899SCharles.Forsyth 
22*37da2899SCharles.Forsyth 
23*37da2899SCharles.Forsyth #include <ft2build.h>
24*37da2899SCharles.Forsyth #include FT_INTERNAL_OBJECTS_H
25*37da2899SCharles.Forsyth #include FT_INTERNAL_TRUETYPE_TYPES_H
26*37da2899SCharles.Forsyth 
27*37da2899SCharles.Forsyth 
28*37da2899SCharles.Forsyth FT_BEGIN_HEADER
29*37da2899SCharles.Forsyth 
30*37da2899SCharles.Forsyth 
31*37da2899SCharles.Forsyth   /*************************************************************************/
32*37da2899SCharles.Forsyth   /*                                                                       */
33*37da2899SCharles.Forsyth   /* <Type>                                                                */
34*37da2899SCharles.Forsyth   /*    TT_Driver                                                          */
35*37da2899SCharles.Forsyth   /*                                                                       */
36*37da2899SCharles.Forsyth   /* <Description>                                                         */
37*37da2899SCharles.Forsyth   /*    A handle to a TrueType driver object.                              */
38*37da2899SCharles.Forsyth   /*                                                                       */
39*37da2899SCharles.Forsyth   typedef struct TT_DriverRec_*  TT_Driver;
40*37da2899SCharles.Forsyth 
41*37da2899SCharles.Forsyth 
42*37da2899SCharles.Forsyth   /*************************************************************************/
43*37da2899SCharles.Forsyth   /*                                                                       */
44*37da2899SCharles.Forsyth   /* <Type>                                                                */
45*37da2899SCharles.Forsyth   /*    TT_Instance                                                        */
46*37da2899SCharles.Forsyth   /*                                                                       */
47*37da2899SCharles.Forsyth   /* <Description>                                                         */
48*37da2899SCharles.Forsyth   /*    A handle to a TrueType size object.                                */
49*37da2899SCharles.Forsyth   /*                                                                       */
50*37da2899SCharles.Forsyth   typedef struct TT_SizeRec_*  TT_Size;
51*37da2899SCharles.Forsyth 
52*37da2899SCharles.Forsyth 
53*37da2899SCharles.Forsyth   /*************************************************************************/
54*37da2899SCharles.Forsyth   /*                                                                       */
55*37da2899SCharles.Forsyth   /* <Type>                                                                */
56*37da2899SCharles.Forsyth   /*    TT_GlyphSlot                                                       */
57*37da2899SCharles.Forsyth   /*                                                                       */
58*37da2899SCharles.Forsyth   /* <Description>                                                         */
59*37da2899SCharles.Forsyth   /*    A handle to a TrueType glyph slot object.                          */
60*37da2899SCharles.Forsyth   /*                                                                       */
61*37da2899SCharles.Forsyth   /* <Note>                                                                */
62*37da2899SCharles.Forsyth   /*    This is a direct typedef of FT_GlyphSlot, as there is nothing      */
63*37da2899SCharles.Forsyth   /*    specific about the TrueType glyph slot.                            */
64*37da2899SCharles.Forsyth   /*                                                                       */
65*37da2899SCharles.Forsyth   typedef FT_GlyphSlot  TT_GlyphSlot;
66*37da2899SCharles.Forsyth 
67*37da2899SCharles.Forsyth 
68*37da2899SCharles.Forsyth   /*************************************************************************/
69*37da2899SCharles.Forsyth   /*                                                                       */
70*37da2899SCharles.Forsyth   /* <Struct>                                                              */
71*37da2899SCharles.Forsyth   /*    TT_GraphicsState                                                   */
72*37da2899SCharles.Forsyth   /*                                                                       */
73*37da2899SCharles.Forsyth   /* <Description>                                                         */
74*37da2899SCharles.Forsyth   /*    The TrueType graphics state used during bytecode interpretation.   */
75*37da2899SCharles.Forsyth   /*                                                                       */
76*37da2899SCharles.Forsyth   typedef struct  TT_GraphicsState_
77*37da2899SCharles.Forsyth   {
78*37da2899SCharles.Forsyth     FT_UShort      rp0;
79*37da2899SCharles.Forsyth     FT_UShort      rp1;
80*37da2899SCharles.Forsyth     FT_UShort      rp2;
81*37da2899SCharles.Forsyth 
82*37da2899SCharles.Forsyth     FT_UnitVector  dualVector;
83*37da2899SCharles.Forsyth     FT_UnitVector  projVector;
84*37da2899SCharles.Forsyth     FT_UnitVector  freeVector;
85*37da2899SCharles.Forsyth 
86*37da2899SCharles.Forsyth     FT_Long        loop;
87*37da2899SCharles.Forsyth     FT_F26Dot6     minimum_distance;
88*37da2899SCharles.Forsyth     FT_Int         round_state;
89*37da2899SCharles.Forsyth 
90*37da2899SCharles.Forsyth     FT_Bool        auto_flip;
91*37da2899SCharles.Forsyth     FT_F26Dot6     control_value_cutin;
92*37da2899SCharles.Forsyth     FT_F26Dot6     single_width_cutin;
93*37da2899SCharles.Forsyth     FT_F26Dot6     single_width_value;
94*37da2899SCharles.Forsyth     FT_Short       delta_base;
95*37da2899SCharles.Forsyth     FT_Short       delta_shift;
96*37da2899SCharles.Forsyth 
97*37da2899SCharles.Forsyth     FT_Byte        instruct_control;
98*37da2899SCharles.Forsyth     FT_Bool        scan_control;
99*37da2899SCharles.Forsyth     FT_Int         scan_type;
100*37da2899SCharles.Forsyth 
101*37da2899SCharles.Forsyth     FT_UShort      gep0;
102*37da2899SCharles.Forsyth     FT_UShort      gep1;
103*37da2899SCharles.Forsyth     FT_UShort      gep2;
104*37da2899SCharles.Forsyth 
105*37da2899SCharles.Forsyth   } TT_GraphicsState;
106*37da2899SCharles.Forsyth 
107*37da2899SCharles.Forsyth 
108*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
109*37da2899SCharles.Forsyth 
110*37da2899SCharles.Forsyth   FT_LOCAL( void )
111*37da2899SCharles.Forsyth   tt_glyphzone_done( TT_GlyphZone  zone );
112*37da2899SCharles.Forsyth 
113*37da2899SCharles.Forsyth   FT_LOCAL( FT_Error )
114*37da2899SCharles.Forsyth   tt_glyphzone_new( FT_Memory     memory,
115*37da2899SCharles.Forsyth                     FT_UShort     maxPoints,
116*37da2899SCharles.Forsyth                     FT_Short      maxContours,
117*37da2899SCharles.Forsyth                     TT_GlyphZone  zone );
118*37da2899SCharles.Forsyth 
119*37da2899SCharles.Forsyth #endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
120*37da2899SCharles.Forsyth 
121*37da2899SCharles.Forsyth 
122*37da2899SCharles.Forsyth 
123*37da2899SCharles.Forsyth   /*************************************************************************/
124*37da2899SCharles.Forsyth   /*                                                                       */
125*37da2899SCharles.Forsyth   /*  EXECUTION SUBTABLES                                                  */
126*37da2899SCharles.Forsyth   /*                                                                       */
127*37da2899SCharles.Forsyth   /*  These sub-tables relate to instruction execution.                    */
128*37da2899SCharles.Forsyth   /*                                                                       */
129*37da2899SCharles.Forsyth   /*************************************************************************/
130*37da2899SCharles.Forsyth 
131*37da2899SCharles.Forsyth 
132*37da2899SCharles.Forsyth #define TT_MAX_CODE_RANGES  3
133*37da2899SCharles.Forsyth 
134*37da2899SCharles.Forsyth 
135*37da2899SCharles.Forsyth   /*************************************************************************/
136*37da2899SCharles.Forsyth   /*                                                                       */
137*37da2899SCharles.Forsyth   /* There can only be 3 active code ranges at once:                       */
138*37da2899SCharles.Forsyth   /*   - the Font Program                                                  */
139*37da2899SCharles.Forsyth   /*   - the CVT Program                                                   */
140*37da2899SCharles.Forsyth   /*   - a glyph's instructions set                                        */
141*37da2899SCharles.Forsyth   /*                                                                       */
142*37da2899SCharles.Forsyth   typedef enum  TT_CodeRange_Tag_
143*37da2899SCharles.Forsyth   {
144*37da2899SCharles.Forsyth     tt_coderange_none = 0,
145*37da2899SCharles.Forsyth     tt_coderange_font,
146*37da2899SCharles.Forsyth     tt_coderange_cvt,
147*37da2899SCharles.Forsyth     tt_coderange_glyph
148*37da2899SCharles.Forsyth 
149*37da2899SCharles.Forsyth   } TT_CodeRange_Tag;
150*37da2899SCharles.Forsyth 
151*37da2899SCharles.Forsyth 
152*37da2899SCharles.Forsyth   typedef struct  TT_CodeRange_
153*37da2899SCharles.Forsyth   {
154*37da2899SCharles.Forsyth     FT_Byte*  base;
155*37da2899SCharles.Forsyth     FT_ULong  size;
156*37da2899SCharles.Forsyth 
157*37da2899SCharles.Forsyth   } TT_CodeRange;
158*37da2899SCharles.Forsyth 
159*37da2899SCharles.Forsyth   typedef TT_CodeRange  TT_CodeRangeTable[TT_MAX_CODE_RANGES];
160*37da2899SCharles.Forsyth 
161*37da2899SCharles.Forsyth 
162*37da2899SCharles.Forsyth   /*************************************************************************/
163*37da2899SCharles.Forsyth   /*                                                                       */
164*37da2899SCharles.Forsyth   /* Defines a function/instruction definition record.                     */
165*37da2899SCharles.Forsyth   /*                                                                       */
166*37da2899SCharles.Forsyth   typedef struct  TT_DefRecord_
167*37da2899SCharles.Forsyth   {
168*37da2899SCharles.Forsyth     FT_Int   range;      /* in which code range is it located? */
169*37da2899SCharles.Forsyth     FT_Long  start;      /* where does it start?               */
170*37da2899SCharles.Forsyth     FT_UInt  opc;        /* function #, or instruction code    */
171*37da2899SCharles.Forsyth     FT_Bool  active;     /* is it active?                      */
172*37da2899SCharles.Forsyth 
173*37da2899SCharles.Forsyth   } TT_DefRecord, *TT_DefArray;
174*37da2899SCharles.Forsyth 
175*37da2899SCharles.Forsyth 
176*37da2899SCharles.Forsyth   /*************************************************************************/
177*37da2899SCharles.Forsyth   /*                                                                       */
178*37da2899SCharles.Forsyth   /* Subglyph transformation record.                                       */
179*37da2899SCharles.Forsyth   /*                                                                       */
180*37da2899SCharles.Forsyth   typedef struct  TT_Transform_
181*37da2899SCharles.Forsyth   {
182*37da2899SCharles.Forsyth     FT_Fixed    xx, xy;     /* transformation matrix coefficients */
183*37da2899SCharles.Forsyth     FT_Fixed    yx, yy;
184*37da2899SCharles.Forsyth     FT_F26Dot6  ox, oy;     /* offsets        */
185*37da2899SCharles.Forsyth 
186*37da2899SCharles.Forsyth   } TT_Transform;
187*37da2899SCharles.Forsyth 
188*37da2899SCharles.Forsyth 
189*37da2899SCharles.Forsyth   /*************************************************************************/
190*37da2899SCharles.Forsyth   /*                                                                       */
191*37da2899SCharles.Forsyth   /* Subglyph loading record.  Used to load composite components.          */
192*37da2899SCharles.Forsyth   /*                                                                       */
193*37da2899SCharles.Forsyth   typedef struct  TT_SubglyphRec_
194*37da2899SCharles.Forsyth   {
195*37da2899SCharles.Forsyth     FT_Long          index;        /* subglyph index; initialized with -1 */
196*37da2899SCharles.Forsyth     FT_Bool          is_scaled;    /* is the subglyph scaled?             */
197*37da2899SCharles.Forsyth     FT_Bool          is_hinted;    /* should it be hinted?                */
198*37da2899SCharles.Forsyth     FT_Bool          preserve_pps; /* preserve phantom points?            */
199*37da2899SCharles.Forsyth 
200*37da2899SCharles.Forsyth     FT_Long          file_offset;
201*37da2899SCharles.Forsyth 
202*37da2899SCharles.Forsyth     FT_BBox          bbox;
203*37da2899SCharles.Forsyth     FT_Pos           left_bearing;
204*37da2899SCharles.Forsyth     FT_Pos           advance;
205*37da2899SCharles.Forsyth 
206*37da2899SCharles.Forsyth     TT_GlyphZoneRec  zone;
207*37da2899SCharles.Forsyth 
208*37da2899SCharles.Forsyth     FT_Long          arg1;         /* first argument                      */
209*37da2899SCharles.Forsyth     FT_Long          arg2;         /* second argument                     */
210*37da2899SCharles.Forsyth 
211*37da2899SCharles.Forsyth     FT_UShort        element_flag; /* current load element flag           */
212*37da2899SCharles.Forsyth 
213*37da2899SCharles.Forsyth     TT_Transform     transform;    /* transformation matrix               */
214*37da2899SCharles.Forsyth 
215*37da2899SCharles.Forsyth     FT_Vector        pp1, pp2;     /* phantom points                      */
216*37da2899SCharles.Forsyth 
217*37da2899SCharles.Forsyth   } TT_SubGlyphRec, *TT_SubGlyph_Stack;
218*37da2899SCharles.Forsyth 
219*37da2899SCharles.Forsyth 
220*37da2899SCharles.Forsyth   /*************************************************************************/
221*37da2899SCharles.Forsyth   /*                                                                       */
222*37da2899SCharles.Forsyth   /* A note regarding non-squared pixels:                                  */
223*37da2899SCharles.Forsyth   /*                                                                       */
224*37da2899SCharles.Forsyth   /* (This text will probably go into some docs at some time; for now, it  */
225*37da2899SCharles.Forsyth   /*  is kept here to explain some definitions in the TIns_Metrics         */
226*37da2899SCharles.Forsyth   /*  record).                                                             */
227*37da2899SCharles.Forsyth   /*                                                                       */
228*37da2899SCharles.Forsyth   /* The CVT is a one-dimensional array containing values that control     */
229*37da2899SCharles.Forsyth   /* certain important characteristics in a font, like the height of all   */
230*37da2899SCharles.Forsyth   /* capitals, all lowercase letter, default spacing or stem width/height. */
231*37da2899SCharles.Forsyth   /*                                                                       */
232*37da2899SCharles.Forsyth   /* These values are found in FUnits in the font file, and must be scaled */
233*37da2899SCharles.Forsyth   /* to pixel coordinates before being used by the CVT and glyph programs. */
234*37da2899SCharles.Forsyth   /* Unfortunately, when using distinct x and y resolutions (or distinct x */
235*37da2899SCharles.Forsyth   /* and y pointsizes), there are two possible scalings.                   */
236*37da2899SCharles.Forsyth   /*                                                                       */
237*37da2899SCharles.Forsyth   /* A first try was to implement a `lazy' scheme where all values were    */
238*37da2899SCharles.Forsyth   /* scaled when first used.  However, while some values are always used   */
239*37da2899SCharles.Forsyth   /* in the same direction, some others are used under many different      */
240*37da2899SCharles.Forsyth   /* circumstances and orientations.                                       */
241*37da2899SCharles.Forsyth   /*                                                                       */
242*37da2899SCharles.Forsyth   /* I have found a simpler way to do the same, and it even seems to work  */
243*37da2899SCharles.Forsyth   /* in most of the cases:                                                 */
244*37da2899SCharles.Forsyth   /*                                                                       */
245*37da2899SCharles.Forsyth   /* - All CVT values are scaled to the maximum ppem size.                 */
246*37da2899SCharles.Forsyth   /*                                                                       */
247*37da2899SCharles.Forsyth   /* - When performing a read or write in the CVT, a ratio factor is used  */
248*37da2899SCharles.Forsyth   /*   to perform adequate scaling.  Example:                              */
249*37da2899SCharles.Forsyth   /*                                                                       */
250*37da2899SCharles.Forsyth   /*     x_ppem = 14                                                       */
251*37da2899SCharles.Forsyth   /*     y_ppem = 10                                                       */
252*37da2899SCharles.Forsyth   /*                                                                       */
253*37da2899SCharles.Forsyth   /*   We choose ppem = x_ppem = 14 as the CVT scaling size.  All cvt      */
254*37da2899SCharles.Forsyth   /*   entries are scaled to it.                                           */
255*37da2899SCharles.Forsyth   /*                                                                       */
256*37da2899SCharles.Forsyth   /*     x_ratio = 1.0                                                     */
257*37da2899SCharles.Forsyth   /*     y_ratio = y_ppem/ppem (< 1.0)                                     */
258*37da2899SCharles.Forsyth   /*                                                                       */
259*37da2899SCharles.Forsyth   /*   We compute the current ratio like:                                  */
260*37da2899SCharles.Forsyth   /*                                                                       */
261*37da2899SCharles.Forsyth   /*   - If projVector is horizontal,                                      */
262*37da2899SCharles.Forsyth   /*       ratio = x_ratio = 1.0                                           */
263*37da2899SCharles.Forsyth   /*                                                                       */
264*37da2899SCharles.Forsyth   /*   - if projVector is vertical,                                        */
265*37da2899SCharles.Forsyth   /*       ratio = y_ratio                                                 */
266*37da2899SCharles.Forsyth   /*                                                                       */
267*37da2899SCharles.Forsyth   /*   - else,                                                             */
268*37da2899SCharles.Forsyth   /*       ratio = sqrt( (proj.x * x_ratio) ^ 2 + (proj.y * y_ratio) ^ 2 ) */
269*37da2899SCharles.Forsyth   /*                                                                       */
270*37da2899SCharles.Forsyth   /*   Reading a cvt value returns                                         */
271*37da2899SCharles.Forsyth   /*     ratio * cvt[index]                                                */
272*37da2899SCharles.Forsyth   /*                                                                       */
273*37da2899SCharles.Forsyth   /*   Writing a cvt value in pixels:                                      */
274*37da2899SCharles.Forsyth   /*     cvt[index] / ratio                                                */
275*37da2899SCharles.Forsyth   /*                                                                       */
276*37da2899SCharles.Forsyth   /*   The current ppem is simply                                          */
277*37da2899SCharles.Forsyth   /*     ratio * ppem                                                      */
278*37da2899SCharles.Forsyth   /*                                                                       */
279*37da2899SCharles.Forsyth   /*************************************************************************/
280*37da2899SCharles.Forsyth 
281*37da2899SCharles.Forsyth 
282*37da2899SCharles.Forsyth   /*************************************************************************/
283*37da2899SCharles.Forsyth   /*                                                                       */
284*37da2899SCharles.Forsyth   /* Metrics used by the TrueType size and context objects.                */
285*37da2899SCharles.Forsyth   /*                                                                       */
286*37da2899SCharles.Forsyth   typedef struct  TT_Size_Metrics_
287*37da2899SCharles.Forsyth   {
288*37da2899SCharles.Forsyth     /* for non-square pixels */
289*37da2899SCharles.Forsyth     FT_Long     x_ratio;
290*37da2899SCharles.Forsyth     FT_Long     y_ratio;
291*37da2899SCharles.Forsyth 
292*37da2899SCharles.Forsyth     FT_UShort   ppem;               /* maximum ppem size              */
293*37da2899SCharles.Forsyth     FT_Long     ratio;              /* current ratio                  */
294*37da2899SCharles.Forsyth     FT_Fixed    scale;
295*37da2899SCharles.Forsyth 
296*37da2899SCharles.Forsyth     FT_F26Dot6  compensations[4];   /* device-specific compensations  */
297*37da2899SCharles.Forsyth 
298*37da2899SCharles.Forsyth     FT_Bool     valid;
299*37da2899SCharles.Forsyth 
300*37da2899SCharles.Forsyth     FT_Bool     rotated;            /* `is the glyph rotated?'-flag   */
301*37da2899SCharles.Forsyth     FT_Bool     stretched;          /* `is the glyph stretched?'-flag */
302*37da2899SCharles.Forsyth 
303*37da2899SCharles.Forsyth   } TT_Size_Metrics;
304*37da2899SCharles.Forsyth 
305*37da2899SCharles.Forsyth 
306*37da2899SCharles.Forsyth   /*************************************************************************/
307*37da2899SCharles.Forsyth   /*                                                                       */
308*37da2899SCharles.Forsyth   /* TrueType size class.                                                  */
309*37da2899SCharles.Forsyth   /*                                                                       */
310*37da2899SCharles.Forsyth   typedef struct  TT_SizeRec_
311*37da2899SCharles.Forsyth   {
312*37da2899SCharles.Forsyth     FT_SizeRec         root;
313*37da2899SCharles.Forsyth 
314*37da2899SCharles.Forsyth     TT_Size_Metrics    ttmetrics;
315*37da2899SCharles.Forsyth 
316*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_EMBEDDED_BITMAPS
317*37da2899SCharles.Forsyth 
318*37da2899SCharles.Forsyth     FT_UInt            strike_index;    /* 0xFFFF to indicate invalid */
319*37da2899SCharles.Forsyth     FT_Size_Metrics    strike_metrics;  /* current strike's metrics   */
320*37da2899SCharles.Forsyth 
321*37da2899SCharles.Forsyth #endif
322*37da2899SCharles.Forsyth 
323*37da2899SCharles.Forsyth #ifdef TT_CONFIG_OPTION_BYTECODE_INTERPRETER
324*37da2899SCharles.Forsyth 
325*37da2899SCharles.Forsyth     FT_UInt            num_function_defs; /* number of function definitions */
326*37da2899SCharles.Forsyth     FT_UInt            max_function_defs;
327*37da2899SCharles.Forsyth     TT_DefArray        function_defs;     /* table of function definitions  */
328*37da2899SCharles.Forsyth 
329*37da2899SCharles.Forsyth     FT_UInt            num_instruction_defs;  /* number of ins. definitions */
330*37da2899SCharles.Forsyth     FT_UInt            max_instruction_defs;
331*37da2899SCharles.Forsyth     TT_DefArray        instruction_defs;      /* table of ins. definitions  */
332*37da2899SCharles.Forsyth 
333*37da2899SCharles.Forsyth     FT_UInt            max_func;
334*37da2899SCharles.Forsyth     FT_UInt            max_ins;
335*37da2899SCharles.Forsyth 
336*37da2899SCharles.Forsyth     TT_CodeRangeTable  codeRangeTable;
337*37da2899SCharles.Forsyth 
338*37da2899SCharles.Forsyth     TT_GraphicsState   GS;
339*37da2899SCharles.Forsyth 
340*37da2899SCharles.Forsyth     FT_ULong           cvt_size;      /* the scaled control value table */
341*37da2899SCharles.Forsyth     FT_Long*           cvt;
342*37da2899SCharles.Forsyth 
343*37da2899SCharles.Forsyth     FT_UShort          storage_size; /* The storage area is now part of */
344*37da2899SCharles.Forsyth     FT_Long*           storage;      /* the instance                    */
345*37da2899SCharles.Forsyth 
346*37da2899SCharles.Forsyth     TT_GlyphZoneRec    twilight;     /* The instance's twilight zone    */
347*37da2899SCharles.Forsyth 
348*37da2899SCharles.Forsyth     /* debugging variables */
349*37da2899SCharles.Forsyth 
350*37da2899SCharles.Forsyth     /* When using the debugger, we must keep the */
351*37da2899SCharles.Forsyth     /* execution context tied to the instance    */
352*37da2899SCharles.Forsyth     /* object rather than asking it on demand.   */
353*37da2899SCharles.Forsyth 
354*37da2899SCharles.Forsyth     FT_Bool            debug;
355*37da2899SCharles.Forsyth     TT_ExecContext     context;
356*37da2899SCharles.Forsyth 
357*37da2899SCharles.Forsyth #endif /* TT_CONFIG_OPTION_BYTECODE_INTERPRETER */
358*37da2899SCharles.Forsyth 
359*37da2899SCharles.Forsyth   } TT_SizeRec;
360*37da2899SCharles.Forsyth 
361*37da2899SCharles.Forsyth 
362*37da2899SCharles.Forsyth   /*************************************************************************/
363*37da2899SCharles.Forsyth   /*                                                                       */
364*37da2899SCharles.Forsyth   /* TrueType driver class.                                                */
365*37da2899SCharles.Forsyth   /*                                                                       */
366*37da2899SCharles.Forsyth   typedef struct  TT_DriverRec_
367*37da2899SCharles.Forsyth   {
368*37da2899SCharles.Forsyth     FT_DriverRec     root;
369*37da2899SCharles.Forsyth     TT_ExecContext   context;  /* execution context        */
370*37da2899SCharles.Forsyth     TT_GlyphZoneRec  zone;     /* glyph loader points zone */
371*37da2899SCharles.Forsyth 
372*37da2899SCharles.Forsyth     void*            extension_component;
373*37da2899SCharles.Forsyth 
374*37da2899SCharles.Forsyth   } TT_DriverRec;
375*37da2899SCharles.Forsyth 
376*37da2899SCharles.Forsyth 
377*37da2899SCharles.Forsyth   /*************************************************************************/
378*37da2899SCharles.Forsyth   /*                                                                       */
379*37da2899SCharles.Forsyth   /* Face functions                                                        */
380*37da2899SCharles.Forsyth   /*                                                                       */
381*37da2899SCharles.Forsyth   FT_LOCAL( FT_Error )
382*37da2899SCharles.Forsyth   tt_face_init( FT_Stream      stream,
383*37da2899SCharles.Forsyth                 TT_Face        face,
384*37da2899SCharles.Forsyth                 FT_Int         face_index,
385*37da2899SCharles.Forsyth                 FT_Int         num_params,
386*37da2899SCharles.Forsyth                 FT_Parameter*  params );
387*37da2899SCharles.Forsyth 
388*37da2899SCharles.Forsyth   FT_LOCAL( void )
389*37da2899SCharles.Forsyth   tt_face_done( TT_Face  face );
390*37da2899SCharles.Forsyth 
391*37da2899SCharles.Forsyth 
392*37da2899SCharles.Forsyth   /*************************************************************************/
393*37da2899SCharles.Forsyth   /*                                                                       */
394*37da2899SCharles.Forsyth   /* Size functions                                                        */
395*37da2899SCharles.Forsyth   /*                                                                       */
396*37da2899SCharles.Forsyth   FT_LOCAL( FT_Error )
397*37da2899SCharles.Forsyth   tt_size_init( TT_Size  size );
398*37da2899SCharles.Forsyth 
399*37da2899SCharles.Forsyth   FT_LOCAL( void )
400*37da2899SCharles.Forsyth   tt_size_done( TT_Size  size );
401*37da2899SCharles.Forsyth 
402*37da2899SCharles.Forsyth   FT_LOCAL( FT_Error )
403*37da2899SCharles.Forsyth   tt_size_reset( TT_Size  size );
404*37da2899SCharles.Forsyth 
405*37da2899SCharles.Forsyth 
406*37da2899SCharles.Forsyth   /*************************************************************************/
407*37da2899SCharles.Forsyth   /*                                                                       */
408*37da2899SCharles.Forsyth   /* Driver functions                                                      */
409*37da2899SCharles.Forsyth   /*                                                                       */
410*37da2899SCharles.Forsyth   FT_LOCAL( FT_Error )
411*37da2899SCharles.Forsyth   tt_driver_init( TT_Driver  driver );
412*37da2899SCharles.Forsyth 
413*37da2899SCharles.Forsyth   FT_LOCAL( void )
414*37da2899SCharles.Forsyth   tt_driver_done( TT_Driver  driver );
415*37da2899SCharles.Forsyth 
416*37da2899SCharles.Forsyth 
417*37da2899SCharles.Forsyth FT_END_HEADER
418*37da2899SCharles.Forsyth 
419*37da2899SCharles.Forsyth #endif /* __TTOBJS_H__ */
420*37da2899SCharles.Forsyth 
421*37da2899SCharles.Forsyth 
422*37da2899SCharles.Forsyth /* END */
423