Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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.