- add third_party src.
[platform/framework/web/crosswalk.git] / src / third_party / freetype2 / src / src / autofit / aflatin.h
1 /***************************************************************************/
2 /*                                                                         */
3 /*  aflatin.h                                                              */
4 /*                                                                         */
5 /*    Auto-fitter hinting routines for latin script (specification).       */
6 /*                                                                         */
7 /*  Copyright 2003, 2004, 2005, 2006, 2007, 2009 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 __AFLATIN_H__
20 #define __AFLATIN_H__
21
22 #include "afhints.h"
23
24
25 FT_BEGIN_HEADER
26
27
28   /* the latin-specific script class */
29
30   AF_DECLARE_SCRIPT_CLASS(af_latin_script_class)
31
32
33 /* constants are given with units_per_em == 2048 in mind */
34 #define AF_LATIN_CONSTANT( metrics, c ) \
35   ( ( (c) * (FT_Long)( (AF_LatinMetrics)(metrics) )->units_per_em ) / 2048 )
36
37
38   /*************************************************************************/
39   /*************************************************************************/
40   /*****                                                               *****/
41   /*****            L A T I N   G L O B A L   M E T R I C S            *****/
42   /*****                                                               *****/
43   /*************************************************************************/
44   /*************************************************************************/
45
46
47   /*
48    *  The following declarations could be embedded in the file `aflatin.c';
49    *  they have been made semi-public to allow alternate script hinters to
50    *  re-use some of them.
51    */
52
53
54   /* Latin (global) metrics management */
55
56   enum
57   {
58     AF_LATIN_BLUE_CAPITAL_TOP,
59     AF_LATIN_BLUE_CAPITAL_BOTTOM,
60     AF_LATIN_BLUE_SMALL_F_TOP,
61     AF_LATIN_BLUE_SMALL_TOP,
62     AF_LATIN_BLUE_SMALL_BOTTOM,
63     AF_LATIN_BLUE_SMALL_MINOR,
64
65     AF_LATIN_BLUE_MAX
66   };
67
68
69 #define AF_LATIN_IS_TOP_BLUE( b )  ( (b) == AF_LATIN_BLUE_CAPITAL_TOP || \
70                                      (b) == AF_LATIN_BLUE_SMALL_F_TOP || \
71                                      (b) == AF_LATIN_BLUE_SMALL_TOP   )
72
73 #define AF_LATIN_MAX_WIDTHS  16
74 #define AF_LATIN_MAX_BLUES   AF_LATIN_BLUE_MAX
75
76
77   enum
78   {
79     AF_LATIN_BLUE_ACTIVE     = 1 << 0,
80     AF_LATIN_BLUE_TOP        = 1 << 1,
81     AF_LATIN_BLUE_ADJUSTMENT = 1 << 2,  /* used for scale adjustment */
82                                         /* optimization              */
83     AF_LATIN_BLUE_FLAG_MAX
84   };
85
86
87   typedef struct  AF_LatinBlueRec_
88   {
89     AF_WidthRec  ref;
90     AF_WidthRec  shoot;
91     FT_UInt      flags;
92
93   } AF_LatinBlueRec, *AF_LatinBlue;
94
95
96   typedef struct  AF_LatinAxisRec_
97   {
98     FT_Fixed         scale;
99     FT_Pos           delta;
100
101     FT_UInt          width_count;
102     AF_WidthRec      widths[AF_LATIN_MAX_WIDTHS];
103     FT_Pos           edge_distance_threshold;
104     FT_Pos           standard_width;
105     FT_Bool          extra_light;
106
107     /* ignored for horizontal metrics */
108     FT_Bool          control_overshoot;
109     FT_UInt          blue_count;
110     AF_LatinBlueRec  blues[AF_LATIN_BLUE_MAX];
111
112     FT_Fixed         org_scale;
113     FT_Pos           org_delta;
114
115   } AF_LatinAxisRec, *AF_LatinAxis;
116
117
118   typedef struct  AF_LatinMetricsRec_
119   {
120     AF_ScriptMetricsRec  root;
121     FT_UInt              units_per_em;
122     AF_LatinAxisRec      axis[AF_DIMENSION_MAX];
123
124   } AF_LatinMetricsRec, *AF_LatinMetrics;
125
126
127   FT_LOCAL( FT_Error )
128   af_latin_metrics_init( AF_LatinMetrics  metrics,
129                          FT_Face          face );
130
131   FT_LOCAL( void )
132   af_latin_metrics_scale( AF_LatinMetrics  metrics,
133                           AF_Scaler        scaler );
134
135   FT_LOCAL( void )
136   af_latin_metrics_init_widths( AF_LatinMetrics  metrics,
137                                 FT_Face          face,
138                                 FT_ULong         charcode );
139
140   FT_LOCAL( void )
141   af_latin_metrics_check_digits( AF_LatinMetrics  metrics,
142                                  FT_Face          face );
143
144
145   /*************************************************************************/
146   /*************************************************************************/
147   /*****                                                               *****/
148   /*****           L A T I N   G L Y P H   A N A L Y S I S             *****/
149   /*****                                                               *****/
150   /*************************************************************************/
151   /*************************************************************************/
152
153   enum
154   {
155     AF_LATIN_HINTS_HORZ_SNAP   = 1 << 0, /* enable stem width snapping  */
156     AF_LATIN_HINTS_VERT_SNAP   = 1 << 1, /* enable stem height snapping */
157     AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height    */
158                                          /* adjustment                  */
159     AF_LATIN_HINTS_MONO        = 1 << 3  /* indicate monochrome         */
160                                          /* rendering                   */
161   };
162
163
164 #define AF_LATIN_HINTS_DO_HORZ_SNAP( h )             \
165   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP )
166
167 #define AF_LATIN_HINTS_DO_VERT_SNAP( h )             \
168   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP )
169
170 #define AF_LATIN_HINTS_DO_STEM_ADJUST( h )             \
171   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST )
172
173 #define AF_LATIN_HINTS_DO_MONO( h )             \
174   AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO )
175
176
177   /*
178    *  This shouldn't normally be exported.  However, other scripts might
179    *  like to use this function as-is.
180    */
181   FT_LOCAL( FT_Error )
182   af_latin_hints_compute_segments( AF_GlyphHints  hints,
183                                    AF_Dimension   dim );
184
185   /*
186    *  This shouldn't normally be exported.  However, other scripts might
187    *  want to use this function as-is.
188    */
189   FT_LOCAL( void )
190   af_latin_hints_link_segments( AF_GlyphHints  hints,
191                                 AF_Dimension   dim );
192
193   /*
194    *  This shouldn't normally be exported.  However, other scripts might
195    *  want to use this function as-is.
196    */
197   FT_LOCAL( FT_Error )
198   af_latin_hints_compute_edges( AF_GlyphHints  hints,
199                                 AF_Dimension   dim );
200
201   FT_LOCAL( FT_Error )
202   af_latin_hints_detect_features( AF_GlyphHints  hints,
203                                   AF_Dimension   dim );
204
205 /* */
206
207 FT_END_HEADER
208
209 #endif /* __AFLATIN_H__ */
210
211
212 /* END */