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