Home | History | Annotate | Download | only in autofit
      1 /***************************************************************************/
      2 /*                                                                         */
      3 /*  afcjk.h                                                                */
      4 /*                                                                         */
      5 /*    Auto-fitter hinting routines for CJK script (specification).         */
      6 /*                                                                         */
      7 /*  Copyright 2006, 2007, 2011 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   FT_LOCAL( FT_Error )
    107   af_cjk_metrics_init( AF_CJKMetrics  metrics,
    108                        FT_Face        face );
    109 
    110   FT_LOCAL( void )
    111   af_cjk_metrics_scale( AF_CJKMetrics  metrics,
    112                         AF_Scaler      scaler );
    113 
    114   FT_LOCAL( FT_Error )
    115   af_cjk_hints_init( AF_GlyphHints  hints,
    116                      AF_CJKMetrics  metrics );
    117 
    118   FT_LOCAL( FT_Error )
    119   af_cjk_hints_apply( AF_GlyphHints  hints,
    120                       FT_Outline*    outline,
    121                       AF_CJKMetrics  metrics );
    122 
    123   /* Shared. called from afindic.c */
    124   FT_LOCAL( void )
    125   af_cjk_metrics_check_digits( AF_CJKMetrics  metrics,
    126                                FT_Face        face );
    127 
    128   FT_LOCAL( void )
    129   af_cjk_metrics_init_widths( AF_CJKMetrics  metrics,
    130                               FT_Face        face,
    131                               FT_ULong       charcode );
    132 
    133 
    134 /* */
    135 
    136 FT_END_HEADER
    137 
    138 #endif /* __AFCJK_H__ */
    139 
    140 
    141 /* END */
    142