Edit

kc3-lang/freetype/src/truetype/ttinterp.h

Branch :

  • Show log

    Commit

  • Author : Werner Lemberg
    Date : 2007-02-12 22:01:18
    Hash : 406d25f3
    Message : more formatting and copyright years

  • src/truetype/ttinterp.h
  • /***************************************************************************/
    /*                                                                         */
    /*  ttinterp.h                                                             */
    /*                                                                         */
    /*    TrueType bytecode interpreter (specification).                       */
    /*                                                                         */
    /*  Copyright 1996-2001, 2002, 2003, 2004, 2005, 2006, 2007 by             */
    /*  David Turner, Robert Wilhelm, and Werner Lemberg.                      */
    /*                                                                         */
    /*  This file is part of the FreeType project, and may only be used,       */
    /*  modified, and distributed under the terms of the FreeType project      */
    /*  license, LICENSE.TXT.  By continuing to use, modify, or distribute     */
    /*  this file you indicate that you have read the license and              */
    /*  understand and accept it fully.                                        */
    /*                                                                         */
    /***************************************************************************/
    
    
    #ifndef __TTINTERP_H__
    #define __TTINTERP_H__
    
    #include <ft2build.h>
    #include "ttobjs.h"
    
    
    FT_BEGIN_HEADER
    
    
    #ifndef TT_CONFIG_OPTION_STATIC_INTERPRETER /* indirect implementation */
    
    #define EXEC_OP_   TT_ExecContext  exc,
    #define EXEC_OP    TT_ExecContext  exc
    #define EXEC_ARG_  exc,
    #define EXEC_ARG   exc
    
    #else                                       /* static implementation */
    
    #define EXEC_OP_   /* void */
    #define EXEC_OP    /* void */
    #define EXEC_ARG_  /* void */
    #define EXEC_ARG   /* void */
    
    #endif /* TT_CONFIG_OPTION_STATIC_INTERPRETER */
    
    
      /*************************************************************************/
      /*                                                                       */
      /* Rounding mode constants.                                              */
      /*                                                                       */
    #define TT_Round_Off             5
    #define TT_Round_To_Half_Grid    0
    #define TT_Round_To_Grid         1
    #define TT_Round_To_Double_Grid  2
    #define TT_Round_Up_To_Grid      4
    #define TT_Round_Down_To_Grid    3
    #define TT_Round_Super           6
    #define TT_Round_Super_45        7
    
    
      /*************************************************************************/
      /*                                                                       */
      /* Function types used by the interpreter, depending on various modes    */
      /* (e.g. the rounding mode, whether to render a vertical or horizontal   */
      /* line etc).                                                            */
      /*                                                                       */
      /*************************************************************************/
    
      /* Rounding function */
      typedef FT_F26Dot6
      (*TT_Round_Func)( EXEC_OP_ FT_F26Dot6  distance,
                                 FT_F26Dot6  compensation );
    
      /* Point displacement along the freedom vector routine */
      typedef void
      (*TT_Move_Func)( EXEC_OP_ TT_GlyphZone  zone,
                                FT_UShort     point,
                                FT_F26Dot6    distance );
    
      /* Distance projection along one of the projection vectors */
      typedef FT_F26Dot6
      (*TT_Project_Func)( EXEC_OP_ FT_Pos   dx,
                                   FT_Pos   dy );
    
      /* reading a cvt value.  Take care of non-square pixels if necessary */
      typedef FT_F26Dot6
      (*TT_Get_CVT_Func)( EXEC_OP_ FT_ULong  idx );
    
      /* setting or moving a cvt value.  Take care of non-square pixels  */
      /* if necessary                                                    */
      typedef void
      (*TT_Set_CVT_Func)( EXEC_OP_ FT_ULong    idx,
                                   FT_F26Dot6  value );
    
    
      /*************************************************************************/
      /*                                                                       */
      /* This structure defines a call record, used to manage function calls.  */
      /*                                                                       */
      typedef struct  TT_CallRec_
      {
        FT_Int   Caller_Range;
        FT_Long  Caller_IP;
        FT_Long  Cur_Count;
        FT_Long  Cur_Restart;
    
      } TT_CallRec, *TT_CallStack;
    
    
      /*************************************************************************/
      /*                                                                       */
      /* The main structure for the interpreter which collects all necessary   */
      /* variables and states.                                                 */
      /*                                                                       */
      typedef struct  TT_ExecContextRec_
      {
        TT_Face            face;
        TT_Size            size;
        FT_Memory          memory;
    
        /* instructions state */
    
        FT_Error           error;      /* last execution error */
    
        FT_Long            top;        /* top of exec. stack   */
    
        FT_UInt            stackSize;  /* size of exec. stack  */
        FT_Long*           stack;      /* current exec. stack  */
    
        FT_Long            args;
        FT_UInt            new_top;    /* new top after exec.  */
    
        TT_GlyphZoneRec    zp0,        /* zone records */
                           zp1,
                           zp2,
                           pts,
                           twilight;
    
        FT_Size_Metrics    metrics;
        TT_Size_Metrics    tt_metrics; /* size metrics */
    
        TT_GraphicsState   GS;         /* current graphics state */
    
        FT_Int             curRange;  /* current code range number   */
        FT_Byte*           code;      /* current code range          */
        FT_Long            IP;        /* current instruction pointer */
        FT_Long            codeSize;  /* size of current range       */
    
        FT_Byte            opcode;    /* current opcode              */
        FT_Int             length;    /* length of current opcode    */
    
        FT_Bool            step_ins;  /* true if the interpreter must */
                                      /* increment IP after ins. exec */
        FT_Long            cvtSize;
        FT_Long*           cvt;
    
        FT_UInt            glyphSize; /* glyph instructions buffer size */
        FT_Byte*           glyphIns;  /* glyph instructions buffer */
    
        FT_UInt            numFDefs;  /* number of function defs         */
        FT_UInt            maxFDefs;  /* maximum number of function defs */
        TT_DefArray        FDefs;     /* table of FDefs entries          */
    
        FT_UInt            numIDefs;  /* number of instruction defs */
        FT_UInt            maxIDefs;  /* maximum number of ins defs */
        TT_DefArray        IDefs;     /* table of IDefs entries     */
    
        FT_UInt            maxFunc;   /* maximum function index     */
        FT_UInt            maxIns;    /* maximum instruction index  */
    
        FT_Int             callTop,    /* top of call stack during execution */
                           callSize;   /* size of call stack */
        TT_CallStack       callStack;  /* call stack */
    
        FT_UShort          maxPoints;    /* capacity of this context's `pts' */
        FT_Short           maxContours;  /* record, expressed in points and  */
                                         /* contours.                        */
    
        TT_CodeRangeTable  codeRangeTable;  /* table of valid code ranges */
                                            /* useful for the debugger   */
    
        FT_UShort          storeSize;  /* size of current storage */
        FT_Long*           storage;    /* storage area            */
    
        FT_F26Dot6         period;     /* values used for the */
        FT_F26Dot6         phase;      /* `SuperRounding'     */
        FT_F26Dot6         threshold;
    
    #if 0
        /* this seems to be unused */
        FT_Int             cur_ppem;   /* ppem along the current proj vector */
    #endif
    
        FT_Bool            instruction_trap; /* If `True', the interpreter will */
                                             /* exit after each instruction     */
    
        TT_GraphicsState   default_GS;       /* graphics state resulting from   */
                                             /* the prep program                */
        FT_Bool            is_composite;     /* true if the glyph is composite  */
        FT_Bool            pedantic_hinting; /* true if pedantic interpretation */
    
        /* latest interpreter additions */
    
        FT_Long            F_dot_P;    /* dot product of freedom and projection */
                                       /* vectors                               */
        TT_Round_Func      func_round; /* current rounding function             */
    
        TT_Project_Func    func_project,   /* current projection function */
                           func_dualproj,  /* current dual proj. function */
                           func_freeProj;  /* current freedom proj. func  */
    
        TT_Move_Func       func_move;      /* current point move function */
        TT_Move_Func       func_move_orig; /* move original position function */
    
        TT_Get_CVT_Func    func_read_cvt;  /* read a cvt entry              */
        TT_Set_CVT_Func    func_write_cvt; /* write a cvt entry (in pixels) */
        TT_Set_CVT_Func    func_move_cvt;  /* incr a cvt entry (in pixels)  */
    
        FT_Bool            grayscale;      /* are we hinting for grayscale? */
    
      } TT_ExecContextRec;
    
    
      extern const TT_GraphicsState  tt_default_graphics_state;
    
    
      FT_LOCAL( FT_Error )
      TT_Goto_CodeRange( TT_ExecContext  exec,
                         FT_Int          range,
                         FT_Long         IP );
    
      FT_LOCAL( FT_Error )
      TT_Set_CodeRange( TT_ExecContext  exec,
                        FT_Int          range,
                        void*           base,
                        FT_Long         length );
    
      FT_LOCAL( FT_Error )
      TT_Clear_CodeRange( TT_ExecContext  exec,
                          FT_Int          range );
    
    
      /*************************************************************************/
      /*                                                                       */
      /* <Function>                                                            */
      /*    TT_New_Context                                                     */
      /*                                                                       */
      /* <Description>                                                         */
      /*    Queries the face context for a given font.  Note that there is     */
      /*    now a _single_ execution context in the TrueType driver which is   */
      /*    shared among faces.                                                */
      /*                                                                       */
      /* <Input>                                                               */
      /*    face :: A handle to the source face object.                        */
      /*                                                                       */
      /* <Return>                                                              */
      /*    A handle to the execution context.  Initialized for `face'.        */
      /*                                                                       */
      /* <Note>                                                                */
      /*    Only the glyph loader and debugger should call this function.      */
      /*                                                                       */
      FT_EXPORT( TT_ExecContext )
      TT_New_Context( TT_Driver  driver );
    
      FT_LOCAL( FT_Error )
      TT_Done_Context( TT_ExecContext  exec );
    
      FT_LOCAL( FT_Error )
      TT_Load_Context( TT_ExecContext  exec,
                       TT_Face         face,
                       TT_Size         size );
    
      FT_LOCAL( FT_Error )
      TT_Save_Context( TT_ExecContext  exec,
                       TT_Size         ins );
    
      FT_LOCAL( FT_Error )
      TT_Run_Context( TT_ExecContext  exec,
                      FT_Bool         debug );
    
    
      /*************************************************************************/
      /*                                                                       */
      /* <Function>                                                            */
      /*    TT_RunIns                                                          */
      /*                                                                       */
      /* <Description>                                                         */
      /*    Executes one or more instruction in the execution context.  This   */
      /*    is the main function of the TrueType opcode interpreter.           */
      /*                                                                       */
      /* <Input>                                                               */
      /*    exec :: A handle to the target execution context.                  */
      /*                                                                       */
      /* <Return>                                                              */
      /*    FreeType error code.  0 means success.                             */
      /*                                                                       */
      /* <Note>                                                                */
      /*    Only the object manager and debugger should call this function.    */
      /*                                                                       */
      /*    This function is publicly exported because it is directly          */
      /*    invoked by the TrueType debugger.                                  */
      /*                                                                       */
      FT_EXPORT( FT_Error )
      TT_RunIns( TT_ExecContext  exec );
    
    
    FT_END_HEADER
    
    #endif /* __TTINTERP_H__ */
    
    
    /* END */