tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

cffparse.h (3451B)


      1 /****************************************************************************
      2 *
      3 * cffparse.h
      4 *
      5 *   CFF token stream parser (specification)
      6 *
      7 * Copyright (C) 1996-2025 by
      8 * David Turner, Robert Wilhelm, and Werner Lemberg.
      9 *
     10 * This file is part of the FreeType project, and may only be used,
     11 * modified, and distributed under the terms of the FreeType project
     12 * license, LICENSE.TXT.  By continuing to use, modify, or distribute
     13 * this file you indicate that you have read the license and
     14 * understand and accept it fully.
     15 *
     16 */
     17 
     18 
     19 #ifndef CFFPARSE_H_
     20 #define CFFPARSE_H_
     21 
     22 
     23 #include <freetype/internal/cfftypes.h>
     24 #include <freetype/internal/ftobjs.h>
     25 
     26 
     27 FT_BEGIN_HEADER
     28 
     29 
     30  /* CFF uses constant parser stack size; */
     31  /* CFF2 can increase from default 193   */
     32 #define CFF_MAX_STACK_DEPTH  96
     33 
     34  /*
     35   * There are plans to remove the `maxstack' operator in a forthcoming
     36   * revision of the CFF2 specification, increasing the (then static) stack
     37   * size to 513.  By making the default stack size equal to the maximum
     38   * stack size, the operator is essentially disabled, which has the
     39   * desired effect in FreeType.
     40   */
     41 #define CFF2_MAX_STACK      513
     42 #define CFF2_DEFAULT_STACK  513
     43 
     44 #define CFF_CODE_TOPDICT    0x1000
     45 #define CFF_CODE_PRIVATE    0x2000
     46 #define CFF2_CODE_TOPDICT   0x3000
     47 #define CFF2_CODE_FONTDICT  0x4000
     48 #define CFF2_CODE_PRIVATE   0x5000
     49 
     50 
     51  typedef struct  CFF_ParserRec_
     52  {
     53    FT_Library  library;
     54    FT_Byte*    start;
     55    FT_Byte*    limit;
     56    FT_Byte*    cursor;
     57 
     58    FT_Byte**   stack;
     59    FT_Byte**   top;
     60    FT_UInt     stackSize;  /* allocated size */
     61 
     62 #ifdef CFF_CONFIG_OPTION_OLD_ENGINE
     63    FT_ListRec  t2_strings;
     64 #endif /* CFF_CONFIG_OPTION_OLD_ENGINE */
     65 
     66    FT_UInt     object_code;
     67    void*       object;
     68 
     69    FT_UShort   num_designs; /* a copy of `CFF_FontRecDict->num_designs' */
     70    FT_UShort   num_axes;    /* a copy of `CFF_FontRecDict->num_axes'    */
     71 
     72  } CFF_ParserRec, *CFF_Parser;
     73 
     74 
     75  FT_LOCAL( FT_Long )
     76  cff_parse_num( CFF_Parser  parser,
     77                 FT_Byte**   d );
     78 
     79  FT_LOCAL( FT_Fixed )
     80  cff_parse_fixed( CFF_Parser  parser,
     81                   FT_Byte**   d );
     82 
     83  FT_LOCAL( FT_Error )
     84  cff_parser_init( CFF_Parser  parser,
     85                   FT_UInt     code,
     86                   void*       object,
     87                   FT_Library  library,
     88                   FT_UInt     stackSize,
     89                   FT_UShort   num_designs,
     90                   FT_UShort   num_axes );
     91 
     92  FT_LOCAL( void )
     93  cff_parser_done( CFF_Parser  parser );
     94 
     95  FT_LOCAL( FT_Error )
     96  cff_parser_run( CFF_Parser  parser,
     97                  FT_Byte*    start,
     98                  FT_Byte*    limit );
     99 
    100 
    101  enum
    102  {
    103    cff_kind_none = 0,
    104    cff_kind_num,
    105    cff_kind_fixed,
    106    cff_kind_fixed_thousand,
    107    cff_kind_string,
    108    cff_kind_bool,
    109    cff_kind_delta,
    110    cff_kind_delta_fixed,
    111    cff_kind_callback,
    112    cff_kind_blend,
    113 
    114    cff_kind_max  /* do not remove */
    115  };
    116 
    117 
    118  /* now generate handlers for the most simple fields */
    119  typedef FT_Error  (*CFF_Field_Reader)( CFF_Parser  parser );
    120 
    121  typedef struct  CFF_Field_Handler_
    122  {
    123    int               kind;
    124    int               code;
    125    FT_UInt           offset;
    126    FT_Byte           size;
    127    CFF_Field_Reader  reader;
    128    FT_UInt           array_max;
    129    FT_UInt           count_offset;
    130 
    131 #ifdef FT_DEBUG_LEVEL_TRACE
    132    const char*       id;
    133 #endif
    134 
    135  } CFF_Field_Handler;
    136 
    137 
    138 FT_END_HEADER
    139 
    140 
    141 #endif /* CFFPARSE_H_ */
    142 
    143 
    144 /* END */