misc/libfreetype/src/pshinter/pshrec.h
branchwebgl
changeset 9521 8054d9d775fd
parent 9282 92af50454cf2
parent 9519 b8b5c82eb61b
child 9950 2759212a27de
equal deleted inserted replaced
9282:92af50454cf2 9521:8054d9d775fd
     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 */