~ubuntu-branches/ubuntu/utopic/hedgewars/utopic

« back to all changes in this revision

Viewing changes to misc/libfreetype/src/truetype/ttinterp.h

  • Committer: Package Import Robot
  • Author(s): Gianfranco Costamagna
  • Date: 2014-01-02 12:37:23 UTC
  • mfrom: (19.1.5 sid)
  • Revision ID: package-import@ubuntu.com-20140102123723-6pdhmyj8tb5y8xbg
Tags: 0.9.20.3-1
New upstream minor release, suitable for unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/***************************************************************************/
2
 
/*                                                                         */
3
 
/*  ttinterp.h                                                             */
4
 
/*                                                                         */
5
 
/*    TrueType bytecode interpreter (specification).                       */
6
 
/*                                                                         */
7
 
/*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007, 2010 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 __TTINTERP_H__
20
 
#define __TTINTERP_H__
21
 
 
22
 
#include <ft2build.h>
23
 
#include "ttobjs.h"
24
 
 
25
 
 
26
 
FT_BEGIN_HEADER
27
 
 
28
 
 
29
 
#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
30
 
 
31
 
#define EXEC_OP_   TT_ExecContext  exc,
32
 
#define EXEC_OP    TT_ExecContext  exc
33
 
#define EXEC_ARG_  exc,
34
 
#define EXEC_ARG   exc
35
 
 
36
 
#else                                       /* static implementation */
37
 
 
38
 
#define EXEC_OP_   /* void */
39
 
#define EXEC_OP    /* void */
40
 
#define EXEC_ARG_  /* void */
41
 
#define EXEC_ARG   /* void */
42
 
 
43
 
#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
44
 
 
45
 
 
46
 
  /*************************************************************************/
47
 
  /*                                                                       */
48
 
  /* Rounding mode constants.                                              */
49
 
  /*                                                                       */
50
 
#define TT_Round_Off             5
51
 
#define TT_Round_To_Half_Grid    0
52
 
#define TT_Round_To_Grid         1
53
 
#define TT_Round_To_Double_Grid  2
54
 
#define TT_Round_Up_To_Grid      4
55
 
#define TT_Round_Down_To_Grid    3
56
 
#define TT_Round_Super           6
57
 
#define TT_Round_Super_45        7
58
 
 
59
 
 
60
 
  /*************************************************************************/
61
 
  /*                                                                       */
62
 
  /* Function types used by the interpreter, depending on various modes    */
63
 
  /* (e.g. the rounding mode, whether to render a vertical or horizontal   */
64
 
  /* line etc).                                                            */
65
 
  /*                                                                       */
66
 
  /*************************************************************************/
67
 
 
68
 
  /* Rounding function */
69
 
  typedef FT_F26Dot6
70
 
  (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6  distance,
71
 
                             FT_F26Dot6  compensation );
72
 
 
73
 
  /* Point displacement along the freedom vector routine */
74
 
  typedef void
75
 
  (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone  zone,
76
 
                            FT_UShort     point,
77
 
                            FT_F26Dot6    distance );
78
 
 
79
 
  /* Distance projection along one of the projection vectors */
80
 
  typedef FT_F26Dot6
81
 
  (*TT_Project_Func)( EXEC_OP_ FT_Pos   dx,
82
 
                               FT_Pos   dy );
83
 
 
84
 
  /* reading a cvt value.  Take care of non-square pixels if necessary */
85
 
  typedef FT_F26Dot6
86
 
  (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong  idx );
87
 
 
88
 
  /* setting or moving a cvt value.  Take care of non-square pixels  */
89
 
  /* if necessary                                                    */
90
 
  typedef void
91
 
  (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong    idx,
92
 
                               FT_F26Dot6  value );
93
 
 
94
 
 
95
 
  /*************************************************************************/
96
 
  /*                                                                       */
97
 
  /* This structure defines a call record, used to manage function calls.  */
98
 
  /*                                                                       */
99
 
  typedef struct  TT_CallRec_
100
 
  {
101
 
    FT_Int   Caller_Range;
102
 
    FT_Long  Caller_IP;
103
 
    FT_Long  Cur_Count;
104
 
    FT_Long  Cur_Restart;
105
 
 
106
 
  } TT_CallRec, *TT_CallStack;
107
 
 
108
 
 
109
 
  /*************************************************************************/
110
 
  /*                                                                       */
111
 
  /* The main structure for the interpreter which collects all necessary   */
112
 
  /* variables and states.                                                 */
113
 
  /*                                                                       */
114
 
  typedef struct  TT_ExecContextRec_
115
 
  {
116
 
    TT_Face            face;
117
 
    TT_Size            size;
118
 
    FT_Memory          memory;
119
 
 
120
 
    /* instructions state */
121
 
 
122
 
    FT_Error           error;      /* last execution error */
123
 
 
124
 
    FT_Long            top;        /* top of exec. stack   */
125
 
 
126
 
    FT_UInt            stackSize;  /* size of exec. stack  */
127
 
    FT_Long*           stack;      /* current exec. stack  */
128
 
 
129
 
    FT_Long            args;
130
 
    FT_UInt            new_top;    /* new top after exec.  */
131
 
 
132
 
    TT_GlyphZoneRec    zp0,        /* zone records */
133
 
                       zp1,
134
 
                       zp2,
135
 
                       pts,
136
 
                       twilight;
137
 
 
138
 
    FT_Size_Metrics    metrics;
139
 
    TT_Size_Metrics    tt_metrics; /* size metrics */
140
 
 
141
 
    TT_GraphicsState   GS;         /* current graphics state */
142
 
 
143
 
    FT_Int             curRange;  /* current code range number   */
144
 
    FT_Byte*           code;      /* current code range          */
145
 
    FT_Long            IP;        /* current instruction pointer */
146
 
    FT_Long            codeSize;  /* size of current range       */
147
 
 
148
 
    FT_Byte            opcode;    /* current opcode              */
149
 
    FT_Int             length;    /* length of current opcode    */
150
 
 
151
 
    FT_Bool            step_ins;  /* true if the interpreter must */
152
 
                                  /* increment IP after ins. exec */
153
 
    FT_ULong           cvtSize;
154
 
    FT_Long*           cvt;
155
 
 
156
 
    FT_UInt            glyphSize; /* glyph instructions buffer size */
157
 
    FT_Byte*           glyphIns;  /* glyph instructions buffer */
158
 
 
159
 
    FT_UInt            numFDefs;  /* number of function defs         */
160
 
    FT_UInt            maxFDefs;  /* maximum number of function defs */
161
 
    TT_DefArray        FDefs;     /* table of FDefs entries          */
162
 
 
163
 
    FT_UInt            numIDefs;  /* number of instruction defs */
164
 
    FT_UInt            maxIDefs;  /* maximum number of ins defs */
165
 
    TT_DefArray        IDefs;     /* table of IDefs entries     */
166
 
 
167
 
    FT_UInt            maxFunc;   /* maximum function index     */
168
 
    FT_UInt            maxIns;    /* maximum instruction index  */
169
 
 
170
 
    FT_Int             callTop,    /* top of call stack during execution */
171
 
                       callSize;   /* size of call stack */
172
 
    TT_CallStack       callStack;  /* call stack */
173
 
 
174
 
    FT_UShort          maxPoints;    /* capacity of this context's `pts' */
175
 
    FT_Short           maxContours;  /* record, expressed in points and  */
176
 
                                     /* contours.                        */
177
 
 
178
 
    TT_CodeRangeTable  codeRangeTable;  /* table of valid code ranges */
179
 
                                        /* useful for the debugger   */
180
 
 
181
 
    FT_UShort          storeSize;  /* size of current storage */
182
 
    FT_Long*           storage;    /* storage area            */
183
 
 
184
 
    FT_F26Dot6         period;     /* values used for the */
185
 
    FT_F26Dot6         phase;      /* `SuperRounding'     */
186
 
    FT_F26Dot6         threshold;
187
 
 
188
 
#if 0
189
 
    /* this seems to be unused */
190
 
    FT_Int             cur_ppem;   /* ppem along the current proj vector */
191
 
#endif
192
 
 
193
 
    FT_Bool            instruction_trap; /* If `True', the interpreter will */
194
 
                                         /* exit after each instruction     */
195
 
 
196
 
    TT_GraphicsState   default_GS;       /* graphics state resulting from   */
197
 
                                         /* the prep program                */
198
 
    FT_Bool            is_composite;     /* true if the glyph is composite  */
199
 
    FT_Bool            pedantic_hinting; /* true if pedantic interpretation */
200
 
 
201
 
    /* latest interpreter additions */
202
 
 
203
 
    FT_Long            F_dot_P;    /* dot product of freedom and projection */
204
 
                                   /* vectors                               */
205
 
    TT_Round_Func      func_round; /* current rounding function             */
206
 
 
207
 
    TT_Project_Func    func_project,   /* current projection function */
208
 
                       func_dualproj,  /* current dual proj. function */
209
 
                       func_freeProj;  /* current freedom proj. func  */
210
 
 
211
 
    TT_Move_Func       func_move;      /* current point move function */
212
 
    TT_Move_Func       func_move_orig; /* move original position function */
213
 
 
214
 
    TT_Get_CVT_Func    func_read_cvt;  /* read a cvt entry              */
215
 
    TT_Set_CVT_Func    func_write_cvt; /* write a cvt entry (in pixels) */
216
 
    TT_Set_CVT_Func    func_move_cvt;  /* incr a cvt entry (in pixels)  */
217
 
 
218
 
    FT_Bool            grayscale;      /* are we hinting for grayscale? */
219
 
 
220
 
  } TT_ExecContextRec;
221
 
 
222
 
 
223
 
  extern const TT_GraphicsState  tt_default_graphics_state;
224
 
 
225
 
 
226
 
  FT_LOCAL( FT_Error )
227
 
  TT_Goto_CodeRange( TT_ExecContext  exec,
228
 
                     FT_Int          range,
229
 
                     FT_Long         IP );
230
 
 
231
 
  FT_LOCAL( FT_Error )
232
 
  TT_Set_CodeRange( TT_ExecContext  exec,
233
 
                    FT_Int          range,
234
 
                    void*           base,
235
 
                    FT_Long         length );
236
 
 
237
 
  FT_LOCAL( FT_Error )
238
 
  TT_Clear_CodeRange( TT_ExecContext  exec,
239
 
                      FT_Int          range );
240
 
 
241
 
 
242
 
  FT_LOCAL( FT_Error )
243
 
  Update_Max( FT_Memory  memory,
244
 
              FT_ULong*  size,
245
 
              FT_Long    multiplier,
246
 
              void*      _pbuff,
247
 
              FT_ULong   new_max );
248
 
 
249
 
 
250
 
  /*************************************************************************/
251
 
  /*                                                                       */
252
 
  /* <Function>                                                            */
253
 
  /*    TT_New_Context                                                     */
254
 
  /*                                                                       */
255
 
  /* <Description>                                                         */
256
 
  /*    Queries the face context for a given font.  Note that there is     */
257
 
  /*    now a _single_ execution context in the TrueType driver which is   */
258
 
  /*    shared among faces.                                                */
259
 
  /*                                                                       */
260
 
  /* <Input>                                                               */
261
 
  /*    face :: A handle to the source face object.                        */
262
 
  /*                                                                       */
263
 
  /* <Return>                                                              */
264
 
  /*    A handle to the execution context.  Initialized for `face'.        */
265
 
  /*                                                                       */
266
 
  /* <Note>                                                                */
267
 
  /*    Only the glyph loader and debugger should call this function.      */
268
 
  /*                                                                       */
269
 
  FT_EXPORT( TT_ExecContext )
270
 
  TT_New_Context( TT_Driver  driver );
271
 
 
272
 
  FT_LOCAL( FT_Error )
273
 
  TT_Done_Context( TT_ExecContext  exec );
274
 
 
275
 
  FT_LOCAL( FT_Error )
276
 
  TT_Load_Context( TT_ExecContext  exec,
277
 
                   TT_Face         face,
278
 
                   TT_Size         size );
279
 
 
280
 
  FT_LOCAL( FT_Error )
281
 
  TT_Save_Context( TT_ExecContext  exec,
282
 
                   TT_Size         ins );
283
 
 
284
 
  FT_LOCAL( FT_Error )
285
 
  TT_Run_Context( TT_ExecContext  exec,
286
 
                  FT_Bool         debug );
287
 
 
288
 
 
289
 
  /*************************************************************************/
290
 
  /*                                                                       */
291
 
  /* <Function>                                                            */
292
 
  /*    TT_RunIns                                                          */
293
 
  /*                                                                       */
294
 
  /* <Description>                                                         */
295
 
  /*    Executes one or more instruction in the execution context.  This   */
296
 
  /*    is the main function of the TrueType opcode interpreter.           */
297
 
  /*                                                                       */
298
 
  /* <Input>                                                               */
299
 
  /*    exec :: A handle to the target execution context.                  */
300
 
  /*                                                                       */
301
 
  /* <Return>                                                              */
302
 
  /*    FreeType error code.  0 means success.                             */
303
 
  /*                                                                       */
304
 
  /* <Note>                                                                */
305
 
  /*    Only the object manager and debugger should call this function.    */
306
 
  /*                                                                       */
307
 
  /*    This function is publicly exported because it is directly          */
308
 
  /*    invoked by the TrueType debugger.                                  */
309
 
  /*                                                                       */
310
 
  FT_EXPORT( FT_Error )
311
 
  TT_RunIns( TT_ExecContext  exec );
312
 
 
313
 
 
314
 
FT_END_HEADER
315
 
 
316
 
#endif /* __TTINTERP_H__ */
317
 
 
318
 
 
319
 
/* END */