1049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
2049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
3049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  ttinterp.h                                                             */
4049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
5049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*    TrueType bytecode interpreter (specification).                       */
6049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
7727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease/*  Copyright 1996-2007, 2010, 2012-2013 by                                */
8049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
9049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
10049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  This file is part of the FreeType project, and may only be used,       */
11049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  modified, and distributed under the terms of the FreeType project      */
12049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
13049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  this file you indicate that you have read the license and              */
14049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*  understand and accept it fully.                                        */
15049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/*                                                                         */
16049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/***************************************************************************/
17049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
18049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
19049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef __TTINTERP_H__
20049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define __TTINTERP_H__
21049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
22049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include <ft2build.h>
23049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#include "ttobjs.h"
24049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
25049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
26049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_BEGIN_HEADER
27049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
28049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
29049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
30049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
31049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_OP_   TT_ExecContext  exc,
32049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_OP    TT_ExecContext  exc
33049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_ARG_  exc,
34049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_ARG   exc
35049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
36049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#else                                       /* static implementation */
37049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
38049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_OP_   /* void */
39049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_OP    /* void */
40049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_ARG_  /* void */
41049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define EXEC_ARG   /* void */
42049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
43049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
44049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
45049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
46049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
47049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
48049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Rounding mode constants.                                              */
49049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
50049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_Off             5
51049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_To_Half_Grid    0
52049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_To_Grid         1
53049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_To_Double_Grid  2
54049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_Up_To_Grid      4
55049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_Down_To_Grid    3
56049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_Super           6
57049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#define TT_Round_Super_45        7
58049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
59049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
60049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
61049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
62049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Function types used by the interpreter, depending on various modes    */
63049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* (e.g. the rounding mode, whether to render a vertical or horizontal   */
64049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* line etc).                                                            */
65049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
66049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
67049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
68049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Rounding function */
69049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_F26Dot6
70049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6  distance,
71049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                             FT_F26Dot6  compensation );
72049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
73049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Point displacement along the freedom vector routine */
74049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
75049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone  zone,
76049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                            FT_UShort     point,
77049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                            FT_F26Dot6    distance );
78049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
79049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* Distance projection along one of the projection vectors */
80049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_F26Dot6
81049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_Project_Func)( EXEC_OP_ FT_Pos   dx,
82049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                               FT_Pos   dy );
83049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
84049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* reading a cvt value.  Take care of non-square pixels if necessary */
85049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef FT_F26Dot6
86049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong  idx );
87049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
88049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* setting or moving a cvt value.  Take care of non-square pixels  */
89049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* if necessary                                                    */
90049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef void
91049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong    idx,
92049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                               FT_F26Dot6  value );
93049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
94049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
95049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
96049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
97049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* This structure defines a call record, used to manage function calls.  */
98049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
99049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  TT_CallRec_
100049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
101049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int   Caller_Range;
102049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long  Caller_IP;
103049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long  Cur_Count;
104ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease
105ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    TT_DefRecord  *Def; /* either FDEF or IDEF */
106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } TT_CallRec, *TT_CallStack;
108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
110727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
111727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
112727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /*************************************************************************/
113727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /*                                                                       */
114727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /* These structures define rules used to tweak subpixel hinting for      */
115727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /* various fonts.  "", 0, "", NULL value indicates to match any value.   */
116727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  /*                                                                       */
117727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
118727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define SPH_MAX_NAME_SIZE      32
119727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#define SPH_MAX_CLASS_MEMBERS  100
120727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
121727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  typedef struct  SPH_TweakRule_
122727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  {
123727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char      family[SPH_MAX_NAME_SIZE];
124727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const FT_UInt   ppem;
125727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char      style[SPH_MAX_NAME_SIZE];
126727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const FT_ULong  glyph;
127727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
128727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  } SPH_TweakRule;
129727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
130727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
131727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  typedef struct  SPH_ScaleRule_
132727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  {
133727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char      family[SPH_MAX_NAME_SIZE];
134727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const FT_UInt   ppem;
135727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char      style[SPH_MAX_NAME_SIZE];
136727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const FT_ULong  glyph;
137727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const FT_ULong  scale;
138727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
139727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  } SPH_ScaleRule;
140727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
141727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
142727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  typedef struct  SPH_Font_Class_
143727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  {
144727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char  name[SPH_MAX_NAME_SIZE];
145727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    const char  member[SPH_MAX_CLASS_MEMBERS][SPH_MAX_NAME_SIZE];
146727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
147727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease  } SPH_Font_Class;
148727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
149727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
150727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
151727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
152049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
153049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
154049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* The main structure for the interpreter which collects all necessary   */
155049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* variables and states.                                                 */
156049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
157049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  typedef struct  TT_ExecContextRec_
158049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  {
159049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Face            face;
160049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Size            size;
161049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Memory          memory;
162049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
163049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* instructions state */
164049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
165049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Error           error;      /* last execution error */
166049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
167049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long            top;        /* top of exec. stack   */
168049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
169049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            stackSize;  /* size of exec. stack  */
170049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long*           stack;      /* current exec. stack  */
171049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
172049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long            args;
173049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            new_top;    /* new top after exec.  */
174049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
175049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_GlyphZoneRec    zp0,        /* zone records */
176049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       zp1,
177049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       zp2,
178049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       pts,
179049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       twilight;
180049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
181049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Size_Metrics    metrics;
182049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Size_Metrics    tt_metrics; /* size metrics */
183049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
184049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_GraphicsState   GS;         /* current graphics state */
185049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
186049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             curRange;  /* current code range number   */
187049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Byte*           code;      /* current code range          */
188049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long            IP;        /* current instruction pointer */
189049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long            codeSize;  /* size of current range       */
190049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
191049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Byte            opcode;    /* current opcode              */
192049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             length;    /* length of current opcode    */
193049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
194049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            step_ins;  /* true if the interpreter must */
195049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                  /* increment IP after ins. exec */
196aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich    FT_ULong           cvtSize;
197049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long*           cvt;
198049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
199049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            glyphSize; /* glyph instructions buffer size */
200049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Byte*           glyphIns;  /* glyph instructions buffer */
201049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
202049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            numFDefs;  /* number of function defs         */
203049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            maxFDefs;  /* maximum number of function defs */
204049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_DefArray        FDefs;     /* table of FDefs entries          */
205049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
206049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            numIDefs;  /* number of instruction defs */
207049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            maxIDefs;  /* maximum number of ins defs */
208049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_DefArray        IDefs;     /* table of IDefs entries     */
209049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
210049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            maxFunc;   /* maximum function index     */
211049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UInt            maxIns;    /* maximum instruction index  */
212049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
213049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             callTop,    /* top of call stack during execution */
214049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       callSize;   /* size of call stack */
215049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_CallStack       callStack;  /* call stack */
216049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
217049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UShort          maxPoints;    /* capacity of this context's `pts' */
218049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Short           maxContours;  /* record, expressed in points and  */
219049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                     /* contours.                        */
220049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
221049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_CodeRangeTable  codeRangeTable;  /* table of valid code ranges */
222049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                        /* useful for the debugger   */
223049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
224049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_UShort          storeSize;  /* size of current storage */
225049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long*           storage;    /* storage area            */
226049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
227049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_F26Dot6         period;     /* values used for the */
228049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_F26Dot6         phase;      /* `SuperRounding'     */
229049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_F26Dot6         threshold;
230049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
231049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#if 0
232049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* this seems to be unused */
233049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Int             cur_ppem;   /* ppem along the current proj vector */
234049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif
235049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
236049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            instruction_trap; /* If `True', the interpreter will */
237049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                         /* exit after each instruction     */
238049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
239049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_GraphicsState   default_GS;       /* graphics state resulting from   */
240049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                         /* the prep program                */
241049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            is_composite;     /* true if the glyph is composite  */
242049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            pedantic_hinting; /* true if pedantic interpretation */
243049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
244049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    /* latest interpreter additions */
245049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
246049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Long            F_dot_P;    /* dot product of freedom and projection */
247049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                                   /* vectors                               */
248049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Round_Func      func_round; /* current rounding function             */
249049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
250049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Project_Func    func_project,   /* current projection function */
251049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       func_dualproj,  /* current dual proj. function */
252049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                       func_freeProj;  /* current freedom proj. func  */
253049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
254049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Move_Func       func_move;      /* current point move function */
255049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Move_Func       func_move_orig; /* move original position function */
256049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
257049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Get_CVT_Func    func_read_cvt;  /* read a cvt entry              */
258049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Set_CVT_Func    func_write_cvt; /* write a cvt entry (in pixels) */
259049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    TT_Set_CVT_Func    func_move_cvt;  /* incr a cvt entry (in pixels)  */
260049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
261049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project    FT_Bool            grayscale;      /* are we hinting for grayscale? */
262049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
263727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING
264727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    TT_Round_Func      func_round_sphn;   /* subpixel rounding function */
265727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
266ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease    FT_Bool            subpixel;          /* Using subpixel hinting?       */
267727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            ignore_x_mode;     /* Standard rendering mode for   */
268727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                                          /* subpixel hinting.  On if gray */
269ec0bab5697bb31ba980810145f62e3799946ec60Victoria Lease                                          /* or subpixel hinting is on.    */
270727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
271727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    /* The following 4 aren't fully implemented but here for MS rasterizer */
272727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    /* compatibility.                                                      */
273727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            compatible_widths;     /* compatible widths?        */
274727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            symmetrical_smoothing; /* symmetrical_smoothing?    */
275727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            bgr;                   /* bgr instead of rgb?       */
276727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            subpixel_positioned;   /* subpixel positioned       */
277727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                                              /* (DirectWrite ClearType)?  */
278727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
279727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Int             rasterizer_version;    /* MS rasterizer version     */
280727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
281727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_Bool            iup_called;            /* IUP called for glyph?     */
282727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
283727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_ULong           sph_tweak_flags;       /* flags to control          */
284727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                                              /* hint tweaks               */
285727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
286727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease    FT_ULong           sph_in_func_flags;     /* flags to indicate if in   */
287727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease                                              /* special functions         */
288727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
289727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */
290727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
291049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  } TT_ExecContextRec;
292049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  extern const TT_GraphicsState  tt_default_graphics_state;
295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
297727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#ifdef TT_USE_BYTECODE_INTERPRETER
298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
299049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Goto_CodeRange( TT_ExecContext  exec,
300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                     FT_Int          range,
301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                     FT_Long         IP );
302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Set_CodeRange( TT_ExecContext  exec,
305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    FT_Int          range,
306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    void*           base,
307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                    FT_Long         length );
308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Clear_CodeRange( TT_ExecContext  exec,
311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                      FT_Int          range );
312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
314aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich  FT_LOCAL( FT_Error )
315aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich  Update_Max( FT_Memory  memory,
316aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich              FT_ULong*  size,
317aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich              FT_Long    multiplier,
318aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich              void*      _pbuff,
319aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich              FT_ULong   new_max );
320727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif /* TT_USE_BYTECODE_INTERPRETER */
321aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich
322aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich
323049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
324049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Function>                                                            */
326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    TT_New_Context                                                     */
327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Description>                                                         */
329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    Queries the face context for a given font.  Note that there is     */
330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    now a _single_ execution context in the TrueType driver which is   */
331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    shared among faces.                                                */
332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Input>                                                               */
334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    face :: A handle to the source face object.                        */
335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Return>                                                              */
337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    A handle to the execution context.  Initialized for `face'.        */
338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Note>                                                                */
340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    Only the glyph loader and debugger should call this function.      */
341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_EXPORT( TT_ExecContext )
343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_New_Context( TT_Driver  driver );
344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
345727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease
346727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#ifdef TT_USE_BYTECODE_INTERPRETER
347049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
348049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Done_Context( TT_ExecContext  exec );
349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Load_Context( TT_ExecContext  exec,
352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                   TT_Face         face,
353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                   TT_Size         size );
354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
356049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Save_Context( TT_ExecContext  exec,
357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                   TT_Size         ins );
358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_LOCAL( FT_Error )
360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_Run_Context( TT_ExecContext  exec,
361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project                  FT_Bool         debug );
362727dee178a392d20eb050d0c446f2fcc29058fa1Victoria Lease#endif /* TT_USE_BYTECODE_INTERPRETER */
363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
364049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*************************************************************************/
366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Function>                                                            */
368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    TT_RunIns                                                          */
369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Description>                                                         */
371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    Executes one or more instruction in the execution context.  This   */
372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    is the main function of the TrueType opcode interpreter.           */
373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
374049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Input>                                                               */
375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    exec :: A handle to the target execution context.                  */
376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Return>                                                              */
378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    FreeType error code.  0 means success.                             */
379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /* <Note>                                                                */
381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    Only the object manager and debugger should call this function.    */
382049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
383049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    This function is publicly exported because it is directly          */
384049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*    invoked by the TrueType debugger.                                  */
385049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  /*                                                                       */
386049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  FT_EXPORT( FT_Error )
387049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project  TT_RunIns( TT_ExecContext  exec );
388049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
389049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
390049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER
391049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
392049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __TTINTERP_H__ */
393049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project
395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */
396