tor-browser

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

pshrec.h (4103B)


      1 /****************************************************************************
      2 *
      3 * pshrec.h
      4 *
      5 *   Postscript (Type1/Type2) hints recorder (specification).
      6 *
      7 * Copyright (C) 2001-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  /***************************************************************************
     20   *
     21   * The functions defined here are called from the Type 1, CID and CFF
     22   * font drivers to record the hints of a given character/glyph.
     23   *
     24   * The hints are recorded in a unified format, and are later processed
     25   * by the `optimizer' and `fitter' to adjust the outlines to the pixel
     26   * grid.
     27   *
     28   */
     29 
     30 
     31 #ifndef PSHREC_H_
     32 #define PSHREC_H_
     33 
     34 
     35 #include <freetype/internal/pshints.h>
     36 #include "pshglob.h"
     37 
     38 
     39 FT_BEGIN_HEADER
     40 
     41 
     42  /*************************************************************************/
     43  /*************************************************************************/
     44  /*****                                                               *****/
     45  /*****                 GLYPH HINTS RECORDER INTERNALS                *****/
     46  /*****                                                               *****/
     47  /*************************************************************************/
     48  /*************************************************************************/
     49 
     50  /* handle to hint record */
     51  typedef struct PS_HintRec_*  PS_Hint;
     52 
     53  /* hint types */
     54  typedef enum  PS_Hint_Type_
     55  {
     56    PS_HINT_TYPE_1 = 1,
     57    PS_HINT_TYPE_2 = 2
     58 
     59  } PS_Hint_Type;
     60 
     61 
     62  /* hint flags */
     63 #define PS_HINT_FLAG_GHOST   1U
     64 #define PS_HINT_FLAG_BOTTOM  2U
     65 
     66 
     67  /* hint descriptor */
     68  typedef struct  PS_HintRec_
     69  {
     70    FT_Int   pos;
     71    FT_Int   len;
     72    FT_UInt  flags;
     73 
     74  } PS_HintRec;
     75 
     76 
     77 #define ps_hint_is_active( x )  ( (x)->flags & PS_HINT_FLAG_ACTIVE )
     78 #define ps_hint_is_ghost( x )   ( (x)->flags & PS_HINT_FLAG_GHOST  )
     79 #define ps_hint_is_bottom( x )  ( (x)->flags & PS_HINT_FLAG_BOTTOM )
     80 
     81 
     82  /* hints table descriptor */
     83  typedef struct  PS_Hint_TableRec_
     84  {
     85    FT_UInt  num_hints;
     86    FT_UInt  max_hints;
     87    PS_Hint  hints;
     88 
     89  } PS_Hint_TableRec, *PS_Hint_Table;
     90 
     91 
     92  /* hint and counter mask descriptor */
     93  typedef struct  PS_MaskRec_
     94  {
     95    FT_UInt   num_bits;
     96    FT_UInt   max_bits;
     97    FT_Byte*  bytes;
     98    FT_UInt   end_point;
     99 
    100  } PS_MaskRec, *PS_Mask;
    101 
    102 
    103  /* masks and counters table descriptor */
    104  typedef struct  PS_Mask_TableRec_
    105  {
    106    FT_UInt  num_masks;
    107    FT_UInt  max_masks;
    108    PS_Mask  masks;
    109 
    110  } PS_Mask_TableRec, *PS_Mask_Table;
    111 
    112 
    113 /* dimension-specific hints descriptor */
    114  typedef struct  PS_DimensionRec_
    115  {
    116    PS_Hint_TableRec  hints;
    117    PS_Mask_TableRec  masks;
    118    PS_Mask_TableRec  counters;
    119 
    120  } PS_DimensionRec, *PS_Dimension;
    121 
    122 
    123  /* glyph hints descriptor                                */
    124  /* dimension 0 => X coordinates + vertical hints/stems   */
    125  /* dimension 1 => Y coordinates + horizontal hints/stems */
    126  typedef struct  PS_HintsRec_
    127  {
    128    FT_Memory        memory;
    129    FT_Error         error;
    130    FT_UInt32        magic;
    131    PS_Hint_Type     hint_type;
    132    PS_DimensionRec  dimension[2];
    133 
    134  } PS_HintsRec, *PS_Hints;
    135 
    136  /* */
    137 
    138  /* initialize hints recorder */
    139  FT_LOCAL( void )
    140  ps_hints_init( PS_Hints   hints,
    141                 FT_Memory  memory );
    142 
    143  /* finalize hints recorder */
    144  FT_LOCAL( void )
    145  ps_hints_done( PS_Hints  hints );
    146 
    147  /* initialize Type1 hints recorder interface */
    148  FT_LOCAL( void )
    149  t1_hints_funcs_init( T1_Hints_FuncsRec*  funcs );
    150 
    151  /* initialize Type2 hints recorder interface */
    152  FT_LOCAL( void )
    153  t2_hints_funcs_init( T2_Hints_FuncsRec*  funcs );
    154 
    155 
    156 #ifdef DEBUG_HINTER
    157  extern PS_Hints  ps_debug_hints;
    158  extern  int      ps_debug_no_horz_hints;
    159  extern  int      ps_debug_no_vert_hints;
    160 #endif
    161 
    162 /* */
    163 
    164 
    165 FT_END_HEADER
    166 
    167 
    168 #endif /* PSHREC_H_ */
    169 
    170 
    171 /* END */