(root)/
freetype-2.13.2/
src/
pshinter/
pshrec.h
       1  /****************************************************************************
       2   *
       3   * pshrec.h
       4   *
       5   *   Postscript (Type1/Type2) hints recorder (specification).
       6   *
       7   * Copyright (C) 2001-2023 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 */