Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
4349 | Serge | 1 | /***************************************************************************/ |
2 | /* */ |
||
3 | /* aflatin.h */ |
||
4 | /* */ |
||
5 | /* Auto-fitter hinting routines for latin script (specification). */ |
||
6 | /* */ |
||
7 | /* Copyright 2003-2007, 2009, 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 __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, /* set if zone height is <= 3/4px */ |
||
80 | AF_LATIN_BLUE_TOP = 1 << 1, /* result of AF_LATIN_IS_TOP_BLUE */ |
||
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; /* number of used widths */ |
||
102 | AF_WidthRec widths[AF_LATIN_MAX_WIDTHS]; /* widths array */ |
||
103 | FT_Pos edge_distance_threshold; /* used for creating edges */ |
||
104 | FT_Pos standard_width; /* the default stem thickness */ |
||
105 | FT_Bool extra_light; /* is standard width very light? */ |
||
106 | |||
107 | /* ignored for horizontal metrics */ |
||
108 | FT_UInt blue_count; |
||
109 | AF_LatinBlueRec blues[AF_LATIN_BLUE_MAX]; |
||
110 | |||
111 | FT_Fixed org_scale; |
||
112 | FT_Pos org_delta; |
||
113 | |||
114 | } AF_LatinAxisRec, *AF_LatinAxis; |
||
115 | |||
116 | |||
117 | typedef struct AF_LatinMetricsRec_ |
||
118 | { |
||
119 | AF_ScriptMetricsRec root; |
||
120 | FT_UInt units_per_em; |
||
121 | AF_LatinAxisRec axis[AF_DIMENSION_MAX]; |
||
122 | |||
123 | } AF_LatinMetricsRec, *AF_LatinMetrics; |
||
124 | |||
125 | |||
126 | FT_LOCAL( FT_Error ) |
||
127 | af_latin_metrics_init( AF_LatinMetrics metrics, |
||
128 | FT_Face face ); |
||
129 | |||
130 | FT_LOCAL( void ) |
||
131 | af_latin_metrics_scale( AF_LatinMetrics metrics, |
||
132 | AF_Scaler scaler ); |
||
133 | |||
134 | FT_LOCAL( void ) |
||
135 | af_latin_metrics_init_widths( AF_LatinMetrics metrics, |
||
136 | FT_Face face ); |
||
137 | |||
138 | FT_LOCAL( void ) |
||
139 | af_latin_metrics_check_digits( AF_LatinMetrics metrics, |
||
140 | FT_Face face ); |
||
141 | |||
142 | |||
143 | /*************************************************************************/ |
||
144 | /*************************************************************************/ |
||
145 | /***** *****/ |
||
146 | /***** L A T I N G L Y P H A N A L Y S I S *****/ |
||
147 | /***** *****/ |
||
148 | /*************************************************************************/ |
||
149 | /*************************************************************************/ |
||
150 | |||
151 | enum |
||
152 | { |
||
153 | AF_LATIN_HINTS_HORZ_SNAP = 1 << 0, /* enable stem width snapping */ |
||
154 | AF_LATIN_HINTS_VERT_SNAP = 1 << 1, /* enable stem height snapping */ |
||
155 | AF_LATIN_HINTS_STEM_ADJUST = 1 << 2, /* enable stem width/height */ |
||
156 | /* adjustment */ |
||
157 | AF_LATIN_HINTS_MONO = 1 << 3 /* indicate monochrome */ |
||
158 | /* rendering */ |
||
159 | }; |
||
160 | |||
161 | |||
162 | #define AF_LATIN_HINTS_DO_HORZ_SNAP( h ) \ |
||
163 | AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_HORZ_SNAP ) |
||
164 | |||
165 | #define AF_LATIN_HINTS_DO_VERT_SNAP( h ) \ |
||
166 | AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_VERT_SNAP ) |
||
167 | |||
168 | #define AF_LATIN_HINTS_DO_STEM_ADJUST( h ) \ |
||
169 | AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_STEM_ADJUST ) |
||
170 | |||
171 | #define AF_LATIN_HINTS_DO_MONO( h ) \ |
||
172 | AF_HINTS_TEST_OTHER( h, AF_LATIN_HINTS_MONO ) |
||
173 | |||
174 | |||
175 | /* |
||
176 | * The next functions shouldn't normally be exported. However, other |
||
177 | * scripts might like to use these functions as-is. |
||
178 | */ |
||
179 | FT_LOCAL( FT_Error ) |
||
180 | af_latin_hints_compute_segments( AF_GlyphHints hints, |
||
181 | AF_Dimension dim ); |
||
182 | |||
183 | FT_LOCAL( void ) |
||
184 | af_latin_hints_link_segments( AF_GlyphHints hints, |
||
185 | AF_Dimension dim ); |
||
186 | |||
187 | FT_LOCAL( FT_Error ) |
||
188 | af_latin_hints_compute_edges( AF_GlyphHints hints, |
||
189 | AF_Dimension dim ); |
||
190 | |||
191 | FT_LOCAL( FT_Error ) |
||
192 | af_latin_hints_detect_features( AF_GlyphHints hints, |
||
193 | AF_Dimension dim ); |
||
194 | |||
195 | /* */ |
||
196 | |||
197 | FT_END_HEADER |
||
198 | |||
199 | #endif /* __AFLATIN_H__ */ |
||
200 | |||
201 | |||
202 | /* END */><>><>><>><>><>><>=>><> |