Home | History | Annotate | Download | only in pshinter
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  pshrec.h                                                               */
      4 /*                                                                         */
      5 /*    Postscript (Type1/Type2) hints recorder (specification).             */
      6 /*                                                                         */
      7 /*  Copyright 2001, 2002, 2003, 2006, 2008 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   typedef enum  PS_Hint_Flags_
     65   {
     66     PS_HINT_FLAG_GHOST  = 1,
     67     PS_HINT_FLAG_BOTTOM = 2
     68 
     69   } PS_Hint_Flags;
     70 
     71 
     72   /* hint descriptor */
     73   typedef struct  PS_HintRec_
     74   {
     75     FT_Int   pos;
     76     FT_Int   len;
     77     FT_UInt  flags;
     78 
     79   } PS_HintRec;
     80 
     81 
     82 #define ps_hint_is_active( x )  ( (x)->flags & PS_HINT_FLAG_ACTIVE )
     83 #define ps_hint_is_ghost( x )   ( (x)->flags & PS_HINT_FLAG_GHOST  )
     84 #define ps_hint_is_bottom( x )  ( (x)->flags & PS_HINT_FLAG_BOTTOM )
     85 
     86 
     87   /* hints table descriptor */
     88   typedef struct  PS_Hint_TableRec_
     89   {
     90     FT_UInt  num_hints;
     91     FT_UInt  max_hints;
     92     PS_Hint  hints;
     93 
     94   } PS_Hint_TableRec, *PS_Hint_Table;
     95 
     96 
     97   /* hint and counter mask descriptor */
     98   typedef struct  PS_MaskRec_
     99   {
    100     FT_UInt   num_bits;
    101     FT_UInt   max_bits;
    102     FT_Byte*  bytes;
    103     FT_UInt   end_point;
    104 
    105   } PS_MaskRec, *PS_Mask;
    106 
    107 
    108   /* masks and counters table descriptor */
    109   typedef struct  PS_Mask_TableRec_
    110   {
    111     FT_UInt  num_masks;
    112     FT_UInt  max_masks;
    113     PS_Mask  masks;
    114 
    115   } PS_Mask_TableRec, *PS_Mask_Table;
    116 
    117 
    118  /* dimension-specific hints descriptor */
    119   typedef struct  PS_DimensionRec_
    120   {
    121     PS_Hint_TableRec  hints;
    122     PS_Mask_TableRec  masks;
    123     PS_Mask_TableRec  counters;
    124 
    125   } PS_DimensionRec, *PS_Dimension;
    126 
    127 
    128   /* glyph hints descriptor                                */
    129   /* dimension 0 => X coordinates + vertical hints/stems   */
    130   /* dimension 1 => Y coordinates + horizontal hints/stems */
    131   typedef struct  PS_HintsRec_
    132   {
    133     FT_Memory        memory;
    134     FT_Error         error;
    135     FT_UInt32        magic;
    136     PS_Hint_Type     hint_type;
    137     PS_DimensionRec  dimension[2];
    138 
    139   } PS_HintsRec, *PS_Hints;
    140 
    141   /* */
    142 
    143   /* initialize hints recorder */
    144   FT_LOCAL( FT_Error )
    145   ps_hints_init( PS_Hints   hints,
    146                  FT_Memory  memory );
    147 
    148   /* finalize hints recorder */
    149   FT_LOCAL( void )
    150   ps_hints_done( PS_Hints  hints );
    151 
    152   /* initialize Type1 hints recorder interface */
    153   FT_LOCAL( void )
    154   t1_hints_funcs_init( T1_Hints_FuncsRec*  funcs );
    155 
    156   /* initialize Type2 hints recorder interface */
    157   FT_LOCAL( void )
    158   t2_hints_funcs_init( T2_Hints_FuncsRec*  funcs );
    159 
    160 
    161 #ifdef DEBUG_HINTER
    162   extern PS_Hints  ps_debug_hints;
    163   extern  int      ps_debug_no_horz_hints;
    164   extern  int      ps_debug_no_vert_hints;
    165 #endif
    166 
    167  /* */
    168 
    169 
    170 FT_END_HEADER
    171 
    172 
    173 #endif /* __PS_HINTER_RECORD_H__ */
    174 
    175 
    176 /* END */
    177