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