Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /***************************************************************************/
  2. /*                                                                         */
  3. /*  afcjk.h                                                                */
  4. /*                                                                         */
  5. /*    Auto-fitter hinting routines for CJK script (specification).         */
  6. /*                                                                         */
  7. /*  Copyright 2006, 2007, 2011, 2012 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. #ifndef __AFCJK_H__
  20. #define __AFCJK_H__
  21.  
  22. #include "afhints.h"
  23. #include "aflatin.h"
  24.  
  25.  
  26. FT_BEGIN_HEADER
  27.  
  28.  
  29.   /* the CJK-specific script class */
  30.  
  31.   AF_DECLARE_SCRIPT_CLASS( af_cjk_script_class )
  32.  
  33.   /* CJK (global) metrics management */
  34.  
  35.   /*
  36.    *  CJK glyphs tend to fill the square.  So we have both vertical and
  37.    *  horizontal blue zones.  But some glyphs have flat bounding strokes that
  38.    *  leave some space between neighbour glyphs.
  39.    */
  40.   enum
  41.   {
  42.     AF_CJK_BLUE_TOP,
  43.     AF_CJK_BLUE_BOTTOM,
  44.     AF_CJK_BLUE_LEFT,
  45.     AF_CJK_BLUE_RIGHT,
  46.  
  47.     AF_CJK_BLUE_MAX
  48.   };
  49.  
  50.  
  51. #define AF_CJK_MAX_WIDTHS  16
  52. #define AF_CJK_MAX_BLUES   AF_CJK_BLUE_MAX
  53.  
  54.  
  55.   enum
  56.   {
  57.     AF_CJK_BLUE_ACTIVE     = 1 << 0,
  58.     AF_CJK_BLUE_IS_TOP     = 1 << 1,
  59.     AF_CJK_BLUE_IS_RIGHT   = 1 << 2,
  60.     AF_CJK_BLUE_ADJUSTMENT = 1 << 3,  /* used for scale adjustment */
  61.                                       /* optimization              */
  62.     AF_CJK_BLUE_FLAG_MAX
  63.   };
  64.  
  65.  
  66.   typedef struct  AF_CJKBlueRec_
  67.   {
  68.     AF_WidthRec  ref;
  69.     AF_WidthRec  shoot; /* undershoot */
  70.     FT_UInt      flags;
  71.  
  72.   } AF_CJKBlueRec, *AF_CJKBlue;
  73.  
  74.  
  75.   typedef struct  AF_CJKAxisRec_
  76.   {
  77.     FT_Fixed       scale;
  78.     FT_Pos         delta;
  79.  
  80.     FT_UInt        width_count;
  81.     AF_WidthRec    widths[AF_CJK_MAX_WIDTHS];
  82.     FT_Pos         edge_distance_threshold;
  83.     FT_Pos         standard_width;
  84.     FT_Bool        extra_light;
  85.  
  86.     /* used for horizontal metrics too for CJK */
  87.     FT_Bool        control_overshoot;
  88.     FT_UInt        blue_count;
  89.     AF_CJKBlueRec  blues[AF_CJK_BLUE_MAX];
  90.  
  91.     FT_Fixed       org_scale;
  92.     FT_Pos         org_delta;
  93.  
  94.   } AF_CJKAxisRec, *AF_CJKAxis;
  95.  
  96.  
  97.   typedef struct  AF_CJKMetricsRec_
  98.   {
  99.     AF_ScriptMetricsRec  root;
  100.     FT_UInt              units_per_em;
  101.     AF_CJKAxisRec        axis[AF_DIMENSION_MAX];
  102.  
  103.   } AF_CJKMetricsRec, *AF_CJKMetrics;
  104.  
  105.  
  106. #ifdef AF_CONFIG_OPTION_CJK
  107.   FT_LOCAL( FT_Error )
  108.   af_cjk_metrics_init( AF_CJKMetrics  metrics,
  109.                        FT_Face        face );
  110.  
  111.   FT_LOCAL( void )
  112.   af_cjk_metrics_scale( AF_CJKMetrics  metrics,
  113.                         AF_Scaler      scaler );
  114.  
  115.   FT_LOCAL( FT_Error )
  116.   af_cjk_hints_init( AF_GlyphHints  hints,
  117.                      AF_CJKMetrics  metrics );
  118.  
  119.   FT_LOCAL( FT_Error )
  120.   af_cjk_hints_apply( AF_GlyphHints  hints,
  121.                       FT_Outline*    outline,
  122.                       AF_CJKMetrics  metrics );
  123.  
  124.   /* shared; called from afindic.c */
  125.   FT_LOCAL( void )
  126.   af_cjk_metrics_check_digits( AF_CJKMetrics  metrics,
  127.                                FT_Face        face );
  128.  
  129.   FT_LOCAL( void )
  130.   af_cjk_metrics_init_widths( AF_CJKMetrics  metrics,
  131.                               FT_Face        face );
  132. #endif /* AF_CONFIG_OPTION_CJK */
  133.  
  134.  
  135. /* */
  136.  
  137. FT_END_HEADER
  138.  
  139. #endif /* __AFCJK_H__ */
  140.  
  141.  
  142. /* END */
  143.