• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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