1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* ttinterp.h */ 4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* TrueType bytecode interpreter (specification). */ 6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* Copyright 1996-2007, 2010, 2012-2013 by */ 8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* David Turner, Robert Wilhelm, and Werner Lemberg. */ 9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 10ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* This file is part of the FreeType project, and may only be used, */ 11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* modified, and distributed under the terms of the FreeType project */ 12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* license, LICENSE.TXT. By continuing to use, modify, or distribute */ 13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* this file you indicate that you have read the license and */ 14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* understand and accept it fully. */ 15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* */ 16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/***************************************************************************/ 17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef __TTINTERP_H__ 20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define __TTINTERP_H__ 21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "../../include/ft2build.h" 23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "ttobjs.h" 24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 26ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_BEGIN_HEADER 27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */ 30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_OP_ TT_ExecContext exc, 32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_OP TT_ExecContext exc 33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_ARG_ exc, 34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_ARG exc 35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#else /* static implementation */ 37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_OP_ /* void */ 39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_OP /* void */ 40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_ARG_ /* void */ 41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define EXEC_ARG /* void */ 42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */ 44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 45ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Rounding mode constants. */ 49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_Off 5 51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_To_Half_Grid 0 52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_To_Grid 1 53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_To_Double_Grid 2 54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_Up_To_Grid 4 55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_Down_To_Grid 3 56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_Super 6 57ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define TT_Round_Super_45 7 58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Function types used by the interpreter, depending on various modes */ 63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (e.g. the rounding mode, whether to render a vertical or horizontal */ 64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* line etc). */ 65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Rounding function */ 69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_F26Dot6 70ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6 distance, 71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 compensation ); 72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Point displacement along the freedom vector routine */ 74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone zone, 76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort point, 77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 distance ); 78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Distance projection along one of the projection vectors */ 80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_F26Dot6 81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Project_Func)( EXEC_OP_ FT_Pos dx, 82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Pos dy ); 83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* reading a cvt value. Take care of non-square pixels if necessary */ 85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef FT_F26Dot6 86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong idx ); 87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* setting or moving a cvt value. Take care of non-square pixels */ 89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* if necessary */ 90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef void 91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong idx, 92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 value ); 93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 94ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 95ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 96ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 97ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This structure defines a call record, used to manage function calls. */ 98ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 99ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_CallRec_ 100ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 101ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int Caller_Range; 102ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long Caller_IP; 103ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long Cur_Count; 104ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long Cur_Restart; 105ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long Cur_End; 106ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 107ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_CallRec, *TT_CallStack; 108ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 109ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 110ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 111ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 112ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 113ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 114ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* These structures define rules used to tweak subpixel hinting for */ 115ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* various fonts. "", 0, "", NULL value indicates to match any value. */ 116ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 117ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 118ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define SPH_MAX_NAME_SIZE 32 119ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#define SPH_MAX_CLASS_MEMBERS 100 120ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 121ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct SPH_TweakRule_ 122ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 123ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char family[SPH_MAX_NAME_SIZE]; 124ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_UInt ppem; 125ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char style[SPH_MAX_NAME_SIZE]; 126ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_ULong glyph; 127ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 128ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } SPH_TweakRule; 129ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 130ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 131ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct SPH_ScaleRule_ 132ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 133ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char family[SPH_MAX_NAME_SIZE]; 134ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_UInt ppem; 135ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char style[SPH_MAX_NAME_SIZE]; 136ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_ULong glyph; 137ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const FT_ULong scale; 138ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 139ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } SPH_ScaleRule; 140ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 141ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 142ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct SPH_Font_Class_ 143ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 144ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char name[SPH_MAX_NAME_SIZE]; 145ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov const char member[SPH_MAX_CLASS_MEMBERS][SPH_MAX_NAME_SIZE]; 146ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 147ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } SPH_Font_Class; 148ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 149ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 150ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 151ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 152ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 153ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 154ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The main structure for the interpreter which collects all necessary */ 155ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* variables and states. */ 156ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 157ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov typedef struct TT_ExecContextRec_ 158ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov { 159ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Face face; 160ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Size size; 161ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Memory memory; 162ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 163ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* instructions state */ 164ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 165ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Error error; /* last execution error */ 166ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 167ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long top; /* top of exec. stack */ 168ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 169ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt stackSize; /* size of exec. stack */ 170ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long* stack; /* current exec. stack */ 171ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 172ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long args; 173ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt new_top; /* new top after exec. */ 174ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 175ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GlyphZoneRec zp0, /* zone records */ 176ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov zp1, 177ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov zp2, 178ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov pts, 179ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov twilight; 180ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 181ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Size_Metrics metrics; 182ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Size_Metrics tt_metrics; /* size metrics */ 183ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 184ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GraphicsState GS; /* current graphics state */ 185ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 186ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int curRange; /* current code range number */ 187ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* code; /* current code range */ 188ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long IP; /* current instruction pointer */ 189ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long codeSize; /* size of current range */ 190ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 191ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte opcode; /* current opcode */ 192ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int length; /* length of current opcode */ 193ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 194ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool step_ins; /* true if the interpreter must */ 195ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* increment IP after ins. exec */ 196ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong cvtSize; 197ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long* cvt; 198ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 199ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt glyphSize; /* glyph instructions buffer size */ 200ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Byte* glyphIns; /* glyph instructions buffer */ 201ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 202ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt numFDefs; /* number of function defs */ 203ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt maxFDefs; /* maximum number of function defs */ 204ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_DefArray FDefs; /* table of FDefs entries */ 205ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 206ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt numIDefs; /* number of instruction defs */ 207ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt maxIDefs; /* maximum number of ins defs */ 208ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_DefArray IDefs; /* table of IDefs entries */ 209ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 210ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt maxFunc; /* maximum function index */ 211ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UInt maxIns; /* maximum instruction index */ 212ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 213ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int callTop, /* top of call stack during execution */ 214ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov callSize; /* size of call stack */ 215ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_CallStack callStack; /* call stack */ 216ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 217ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort maxPoints; /* capacity of this context's `pts' */ 218ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Short maxContours; /* record, expressed in points and */ 219ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* contours. */ 220ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 221ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_CodeRangeTable codeRangeTable; /* table of valid code ranges */ 222ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* useful for the debugger */ 223ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 224ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_UShort storeSize; /* size of current storage */ 225ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long* storage; /* storage area */ 226ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 227ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 period; /* values used for the */ 228ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 phase; /* `SuperRounding' */ 229ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_F26Dot6 threshold; 230ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 231ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#if 0 232ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* this seems to be unused */ 233ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int cur_ppem; /* ppem along the current proj vector */ 234ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif 235ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 236ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool instruction_trap; /* If `True', the interpreter will */ 237ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* exit after each instruction */ 238ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 239ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_GraphicsState default_GS; /* graphics state resulting from */ 240ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* the prep program */ 241ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool is_composite; /* true if the glyph is composite */ 242ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool pedantic_hinting; /* true if pedantic interpretation */ 243ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 244ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* latest interpreter additions */ 245ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 246ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long F_dot_P; /* dot product of freedom and projection */ 247ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* vectors */ 248ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Round_Func func_round; /* current rounding function */ 249ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 250ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Project_Func func_project, /* current projection function */ 251ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov func_dualproj, /* current dual proj. function */ 252ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov func_freeProj; /* current freedom proj. func */ 253ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 254ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Move_Func func_move; /* current point move function */ 255ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Move_Func func_move_orig; /* move original position function */ 256ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 257ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Get_CVT_Func func_read_cvt; /* read a cvt entry */ 258ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Set_CVT_Func func_write_cvt; /* write a cvt entry (in pixels) */ 259ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Set_CVT_Func func_move_cvt; /* incr a cvt entry (in pixels) */ 260ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 261ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool grayscale; /* are we hinting for grayscale? */ 262ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 263ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 264ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Round_Func func_round_sphn; /* subpixel rounding function */ 265ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 266ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool grayscale_hinting; /* Using grayscale hinting? */ 267ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool subpixel_hinting; /* Using subpixel hinting? */ 268ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool native_hinting; /* Using native hinting? */ 269ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool ignore_x_mode; /* Standard rendering mode for */ 270ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* subpixel hinting. On if gray */ 271ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* or subpixel hinting is on ) */ 272ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 273ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* The following 4 aren't fully implemented but here for MS rasterizer */ 274ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* compatibility. */ 275ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool compatible_widths; /* compatible widths? */ 276ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool symmetrical_smoothing; /* symmetrical_smoothing? */ 277ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool bgr; /* bgr instead of rgb? */ 278ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool subpixel_positioned; /* subpixel positioned */ 279ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* (DirectWrite ClearType)? */ 280ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 281ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int rasterizer_version; /* MS rasterizer version */ 282ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 283ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool iup_called; /* IUP called for glyph? */ 284ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 285ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong sph_tweak_flags; /* flags to control */ 286ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* hint tweaks */ 287ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 288ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong sph_in_func_flags; /* flags to indicate if in */ 289ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* special functions */ 290ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 291ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 292ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 293ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov } TT_ExecContextRec; 294ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 295ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 296ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov extern const TT_GraphicsState tt_default_graphics_state; 297ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 298ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 299ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_USE_BYTECODE_INTERPRETER 300ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 301ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Goto_CodeRange( TT_ExecContext exec, 302ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int range, 303ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long IP ); 304ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 305ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 306ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Set_CodeRange( TT_ExecContext exec, 307ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int range, 308ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* base, 309ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long length ); 310ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 311ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 312ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Clear_CodeRange( TT_ExecContext exec, 313ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Int range ); 314ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 315ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 316ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 317ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov Update_Max( FT_Memory memory, 318ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong* size, 319ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Long multiplier, 320ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov void* _pbuff, 321ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_ULong new_max ); 322ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_USE_BYTECODE_INTERPRETER */ 323ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 324ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 325ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 326ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 327ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 328ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_New_Context */ 329ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 330ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 331ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Queries the face context for a given font. Note that there is */ 332ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* now a _single_ execution context in the TrueType driver which is */ 333ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* shared among faces. */ 334ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 335ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 336ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* face :: A handle to the source face object. */ 337ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 338ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 339ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* A handle to the execution context. Initialized for `face'. */ 340ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 341ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 342ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Only the glyph loader and debugger should call this function. */ 343ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 344ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( TT_ExecContext ) 345ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_New_Context( TT_Driver driver ); 346ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 347ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 348ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#ifdef TT_USE_BYTECODE_INTERPRETER 349ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 350ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Done_Context( TT_ExecContext exec ); 351ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 352ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 353ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Load_Context( TT_ExecContext exec, 354ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Face face, 355ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Size size ); 356ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 357ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 358ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Save_Context( TT_ExecContext exec, 359ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Size ins ); 360ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 361ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_LOCAL( FT_Error ) 362ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_Run_Context( TT_ExecContext exec, 363ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_Bool debug ); 364ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* TT_USE_BYTECODE_INTERPRETER */ 365ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 366ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 367ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /*************************************************************************/ 368ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 369ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Function> */ 370ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* TT_RunIns */ 371ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 372ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Description> */ 373ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Executes one or more instruction in the execution context. This */ 374ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* is the main function of the TrueType opcode interpreter. */ 375ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 376ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Input> */ 377ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* exec :: A handle to the target execution context. */ 378ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 379ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Return> */ 380ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* FreeType error code. 0 means success. */ 381ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 382ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* <Note> */ 383ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* Only the object manager and debugger should call this function. */ 384ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 385ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* This function is publicly exported because it is directly */ 386ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* invoked by the TrueType debugger. */ 387ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov /* */ 388ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov FT_EXPORT( FT_Error ) 389ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov TT_RunIns( TT_ExecContext exec ); 390ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 391ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 392ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovFT_END_HEADER 393ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 394ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#endif /* __TTINTERP_H__ */ 395ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 396ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov 397ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov/* END */ 398