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/* */ 7a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang/* 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; 104049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long Cur_Restart; 105e3b631da8034f7c6ecc6d809cd9e46d306215c32Xianzhu Wang FT_Long Cur_End; 106049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 107049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } TT_CallRec, *TT_CallStack; 108049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 109049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 110a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 111a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 112a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /*************************************************************************/ 113a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 114a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* These structures define rules used to tweak subpixel hinting for */ 115a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* various fonts. "", 0, "", NULL value indicates to match any value. */ 116a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* */ 117a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 118a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_MAX_NAME_SIZE 32 119a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#define SPH_MAX_CLASS_MEMBERS 100 120a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 121a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang typedef struct SPH_TweakRule_ 122a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 123a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char family[SPH_MAX_NAME_SIZE]; 124a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_UInt ppem; 125a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char style[SPH_MAX_NAME_SIZE]; 126a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_ULong glyph; 127a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 128a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } SPH_TweakRule; 129a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 130a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 131a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang typedef struct SPH_ScaleRule_ 132a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 133a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char family[SPH_MAX_NAME_SIZE]; 134a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_UInt ppem; 135a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char style[SPH_MAX_NAME_SIZE]; 136a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_ULong glyph; 137a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const FT_ULong scale; 138a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 139a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } SPH_ScaleRule; 140a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 141a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 142a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang typedef struct SPH_Font_Class_ 143a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang { 144a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char name[SPH_MAX_NAME_SIZE]; 145a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang const char member[SPH_MAX_CLASS_MEMBERS][SPH_MAX_NAME_SIZE]; 146a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 147a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang } SPH_Font_Class; 148a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 149a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 150a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 151a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 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 263a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_CONFIG_OPTION_SUBPIXEL_HINTING 264a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang TT_Round_Func func_round_sphn; /* subpixel rounding function */ 265a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 266a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool grayscale_hinting; /* Using grayscale hinting? */ 267a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool subpixel_hinting; /* Using subpixel hinting? */ 268a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool native_hinting; /* Using native hinting? */ 269a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool ignore_x_mode; /* Standard rendering mode for */ 270a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* subpixel hinting. On if gray */ 271a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* or subpixel hinting is on ) */ 272a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 273a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* The following 4 aren't fully implemented but here for MS rasterizer */ 274a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* compatibility. */ 275a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool compatible_widths; /* compatible widths? */ 276a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool symmetrical_smoothing; /* symmetrical_smoothing? */ 277a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool bgr; /* bgr instead of rgb? */ 278a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool subpixel_positioned; /* subpixel positioned */ 279a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* (DirectWrite ClearType)? */ 280a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 281a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Int rasterizer_version; /* MS rasterizer version */ 282a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 283a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_Bool iup_called; /* IUP called for glyph? */ 284a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 285a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_ULong sph_tweak_flags; /* flags to control */ 286a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* hint tweaks */ 287a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 288a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang FT_ULong sph_in_func_flags; /* flags to indicate if in */ 289a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang /* special functions */ 290a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 291a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_CONFIG_OPTION_SUBPIXEL_HINTING */ 292a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 293049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project } TT_ExecContextRec; 294049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 295049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 296049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project extern const TT_GraphicsState tt_default_graphics_state; 297049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 298049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 299a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_USE_BYTECODE_INTERPRETER 300049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 301049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Goto_CodeRange( TT_ExecContext exec, 302049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int range, 303049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long IP ); 304049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 305049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 306049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Set_CodeRange( TT_ExecContext exec, 307049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int range, 308049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project void* base, 309049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Long length ); 310049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 311049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 312049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Clear_CodeRange( TT_ExecContext exec, 313049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Int range ); 314049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 315049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 316aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_LOCAL( FT_Error ) 317aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich Update_Max( FT_Memory memory, 318aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_ULong* size, 319aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_Long multiplier, 320aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich void* _pbuff, 321aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich FT_ULong new_max ); 322a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_USE_BYTECODE_INTERPRETER */ 323aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich 324aacb8e1368a883fcbc9fe64fd0e460cef9c9b20cNick Kralevich 325049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 326049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 327049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 328049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* TT_New_Context */ 329049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 330049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 331049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Queries the face context for a given font. Note that there is */ 332049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* now a _single_ execution context in the TrueType driver which is */ 333049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* shared among faces. */ 334049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 335049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 336049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* face :: A handle to the source face object. */ 337049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 338049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 339049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* A handle to the execution context. Initialized for `face'. */ 340049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 341049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Note> */ 342049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Only the glyph loader and debugger should call this function. */ 343049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 344049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT( TT_ExecContext ) 345049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_New_Context( TT_Driver driver ); 346049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 347a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang 348a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#ifdef TT_USE_BYTECODE_INTERPRETER 349049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 350049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Done_Context( TT_ExecContext exec ); 351049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 352049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 353049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Load_Context( TT_ExecContext exec, 354049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Face face, 355049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size size ); 356049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 357049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 358049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Save_Context( TT_ExecContext exec, 359049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Size ins ); 360049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 361049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_LOCAL( FT_Error ) 362049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_Run_Context( TT_ExecContext exec, 363049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_Bool debug ); 364a2b9955b49034a51dfbc8bf9f4e9d312149cecacXianzhu Wang#endif /* TT_USE_BYTECODE_INTERPRETER */ 365049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 366049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 367049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /*************************************************************************/ 368049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 369049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Function> */ 370049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* TT_RunIns */ 371049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 372049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Description> */ 373049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Executes one or more instruction in the execution context. This */ 374049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* is the main function of the TrueType opcode interpreter. */ 375049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 376049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Input> */ 377049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* exec :: A handle to the target execution context. */ 378049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 379049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Return> */ 380049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* FreeType error code. 0 means success. */ 381049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 382049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* <Note> */ 383049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* Only the object manager and debugger should call this function. */ 384049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 385049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* This function is publicly exported because it is directly */ 386049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* invoked by the TrueType debugger. */ 387049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project /* */ 388049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project FT_EXPORT( FT_Error ) 389049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project TT_RunIns( TT_ExecContext exec ); 390049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 391049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 392049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source ProjectFT_END_HEADER 393049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 394049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project#endif /* __TTINTERP_H__ */ 395049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 396049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project 397049d6fea481044fcc000e7782e5bc7046fc70844The Android Open Source Project/* END */ 398