Home | History | Annotate | Download | only in pshinter
      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 */
    173