Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
4349 Serge 1
/***************************************************************************/
2
/*                                                                         */
3
/*  ftautoh.h                                                              */
4
/*                                                                         */
5
/*    FreeType API for controlling the auto-hinter (specification only).   */
6
/*                                                                         */
7
/*  Copyright 2012, 2013 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 __FTAUTOH_H__
20
#define __FTAUTOH_H__
21
 
22
#include 
23
#include FT_FREETYPE_H
24
 
25
#ifdef FREETYPE_H
26
#error "freetype.h of FreeType 1 has been loaded!"
27
#error "Please fix the directory search order for header files"
28
#error "so that freetype.h of FreeType 2 is found first."
29
#endif
30
 
31
 
32
FT_BEGIN_HEADER
33
 
34
 
35
  /**************************************************************************
36
   *
37
   * @section:
38
   *   auto_hinter
39
   *
40
   * @title:
41
   *   The auto-hinter
42
   *
43
   * @abstract:
44
   *   Controlling the auto-hinting module.
45
   *
46
   * @description:
47
   *   While FreeType's auto-hinter doesn't expose API functions by itself,
48
   *   it is possible to control its behaviour with @FT_Property_Set and
49
   *   @FT_Property_Get.  The following lists the available properties
50
   *   together with the necessary macros and structures.
51
   *
52
   *   Note that the auto-hinter's module name is `autofitter' for
53
   *   historical reasons.
54
   *
55
   */
56
 
57
 
58
  /**************************************************************************
59
   *
60
   * @property:
61
   *   glyph-to-script-map
62
   *
63
   * @description:
64
   *   *Experimental* *only*
65
   *
66
   *   The auto-hinter provides various script modules to hint glyphs.
67
   *   Examples of supported scripts are Latin or CJK.  Before a glyph is
68
   *   auto-hinted, the Unicode character map of the font gets examined, and
69
   *   the script is then determined based on Unicode character ranges, see
70
   *   below.
71
   *
72
   *   OpenType fonts, however, often provide much more glyphs than
73
   *   character codes (small caps, superscripts, ligatures, swashes, etc.),
74
   *   to be controlled by so-called `features'.  Handling OpenType features
75
   *   can be quite complicated and thus needs a separate library on top of
76
   *   FreeType.
77
   *
78
   *   The mapping between glyph indices and scripts (in the auto-hinter
79
   *   sense, see the @FT_AUTOHINTER_SCRIPT_XXX values) is stored as an
80
   *   array with `num_glyphs' elements, as found in the font's @FT_Face
81
   *   structure.  The `glyph-to-script-map' property returns a pointer to
82
   *   this array which can be modified as needed.  Note that the
83
   *   modification should happen before the first glyph gets processed by
84
   *   the auto-hinter so that the global analysis of the font shapes
85
   *   actually uses the modified mapping.
86
   *
87
   *   The following example code demonstrates how to access it (omitting
88
   *   the error handling).
89
   *
90
   *   {
91
   *     FT_Library                library;
92
   *     FT_Face                   face;
93
   *     FT_Prop_GlyphToScriptMap  prop;
94
   *
95
   *
96
   *     FT_Init_FreeType( &library );
97
   *     FT_New_Face( library, "foo.ttf", 0, &face );
98
   *
99
   *     prop.face = face;
100
   *
101
   *     FT_Property_Get( library, "autofitter",
102
   *                               "glyph-to-script-map", &prop );
103
   *
104
   *     // adjust `prop.map' as needed right here
105
   *
106
   *     FT_Load_Glyph( face, ..., FT_LOAD_FORCE_AUTOHINT );
107
   *   }
108
   *
109
   */
110
 
111
 
112
  /**************************************************************************
113
   *
114
   * @enum:
115
   *   FT_AUTOHINTER_SCRIPT_XXX
116
   *
117
   * @description:
118
   *   *Experimental* *only*
119
   *
120
   *   A list of constants used for the @glyph-to-script-map property to
121
   *   specify the script submodule the auto-hinter should use for hinting a
122
   *   particular glyph.
123
   *
124
   * @values:
125
   *   FT_AUTOHINTER_SCRIPT_NONE ::
126
   *     Don't auto-hint this glyph.
127
   *
128
   *   FT_AUTOHINTER_SCRIPT_LATIN ::
129
   *     Apply the latin auto-hinter.  For the auto-hinter, `latin' is a
130
   *     very broad term, including Cyrillic and Greek also since characters
131
   *     from those scripts share the same design constraints.
132
   *
133
   *     By default, characters from the following Unicode ranges are
134
   *     assigned to this submodule.
135
   *
136
   *     {
137
   *       U+0020 - U+007F  // Basic Latin (no control characters)
138
   *       U+00A0 - U+00FF  // Latin-1 Supplement (no control characters)
139
   *       U+0100 - U+017F  // Latin Extended-A
140
   *       U+0180 - U+024F  // Latin Extended-B
141
   *       U+0250 - U+02AF  // IPA Extensions
142
   *       U+02B0 - U+02FF  // Spacing Modifier Letters
143
   *       U+0300 - U+036F  // Combining Diacritical Marks
144
   *       U+0370 - U+03FF  // Greek and Coptic
145
   *       U+0400 - U+04FF  // Cyrillic
146
   *       U+0500 - U+052F  // Cyrillic Supplement
147
   *       U+1D00 - U+1D7F  // Phonetic Extensions
148
   *       U+1D80 - U+1DBF  // Phonetic Extensions Supplement
149
   *       U+1DC0 - U+1DFF  // Combining Diacritical Marks Supplement
150
   *       U+1E00 - U+1EFF  // Latin Extended Additional
151
   *       U+1F00 - U+1FFF  // Greek Extended
152
   *       U+2000 - U+206F  // General Punctuation
153
   *       U+2070 - U+209F  // Superscripts and Subscripts
154
   *       U+20A0 - U+20CF  // Currency Symbols
155
   *       U+2150 - U+218F  // Number Forms
156
   *       U+2460 - U+24FF  // Enclosed Alphanumerics
157
   *       U+2C60 - U+2C7F  // Latin Extended-C
158
   *       U+2DE0 - U+2DFF  // Cyrillic Extended-A
159
   *       U+2E00 - U+2E7F  // Supplemental Punctuation
160
   *       U+A640 - U+A69F  // Cyrillic Extended-B
161
   *       U+A720 - U+A7FF  // Latin Extended-D
162
   *       U+FB00 - U+FB06  // Alphab. Present. Forms (Latin Ligatures)
163
   *      U+1D400 - U+1D7FF // Mathematical Alphanumeric Symbols
164
   *      U+1F100 - U+1F1FF // Enclosed Alphanumeric Supplement
165
   *     }
166
   *
167
   *   FT_AUTOHINTER_SCRIPT_CJK ::
168
   *     Apply the CJK auto-hinter, covering Chinese, Japanese, Korean, old
169
   *     Vietnamese, and some other scripts.
170
   *
171
   *     By default, characters from the following Unicode ranges are
172
   *     assigned to this submodule.
173
   *
174
   *     {
175
   *       U+1100 - U+11FF  // Hangul Jamo
176
   *       U+2E80 - U+2EFF  // CJK Radicals Supplement
177
   *       U+2F00 - U+2FDF  // Kangxi Radicals
178
   *       U+2FF0 - U+2FFF  // Ideographic Description Characters
179
   *       U+3000 - U+303F  // CJK Symbols and Punctuation
180
   *       U+3040 - U+309F  // Hiragana
181
   *       U+30A0 - U+30FF  // Katakana
182
   *       U+3100 - U+312F  // Bopomofo
183
   *       U+3130 - U+318F  // Hangul Compatibility Jamo
184
   *       U+3190 - U+319F  // Kanbun
185
   *       U+31A0 - U+31BF  // Bopomofo Extended
186
   *       U+31C0 - U+31EF  // CJK Strokes
187
   *       U+31F0 - U+31FF  // Katakana Phonetic Extensions
188
   *       U+3200 - U+32FF  // Enclosed CJK Letters and Months
189
   *       U+3300 - U+33FF  // CJK Compatibility
190
   *       U+3400 - U+4DBF  // CJK Unified Ideographs Extension A
191
   *       U+4DC0 - U+4DFF  // Yijing Hexagram Symbols
192
   *       U+4E00 - U+9FFF  // CJK Unified Ideographs
193
   *       U+A960 - U+A97F  // Hangul Jamo Extended-A
194
   *       U+AC00 - U+D7AF  // Hangul Syllables
195
   *       U+D7B0 - U+D7FF  // Hangul Jamo Extended-B
196
   *       U+F900 - U+FAFF  // CJK Compatibility Ideographs
197
   *       U+FE10 - U+FE1F  // Vertical forms
198
   *       U+FE30 - U+FE4F  // CJK Compatibility Forms
199
   *       U+FF00 - U+FFEF  // Halfwidth and Fullwidth Forms
200
   *      U+1B000 - U+1B0FF // Kana Supplement
201
   *      U+1D300 - U+1D35F // Tai Xuan Hing Symbols
202
   *      U+1F200 - U+1F2FF // Enclosed Ideographic Supplement
203
   *      U+20000 - U+2A6DF // CJK Unified Ideographs Extension B
204
   *      U+2A700 - U+2B73F // CJK Unified Ideographs Extension C
205
   *      U+2B740 - U+2B81F // CJK Unified Ideographs Extension D
206
   *      U+2F800 - U+2FA1F // CJK Compatibility Ideographs Supplement
207
   *     }
208
   *
209
   *   FT_AUTOHINTER_SCRIPT_INDIC ::
210
   *     Apply the indic auto-hinter, covering all major scripts from the
211
   *     Indian sub-continent and some other related scripts like Thai, Lao,
212
   *     or Tibetan.
213
   *
214
   *     By default, characters from the following Unicode ranges are
215
   *     assigned to this submodule.
216
   *
217
   *     {
218
   *       U+0900 - U+0DFF  // Indic Range
219
   *       U+0F00 - U+0FFF  // Tibetan
220
   *       U+1900 - U+194F  // Limbu
221
   *       U+1B80 - U+1BBF  // Sundanese
222
   *       U+1C80 - U+1CDF  // Meetei Mayak
223
   *       U+A800 - U+A82F  // Syloti Nagri
224
   *      U+11800 - U+118DF // Sharada
225
   *     }
226
   *
227
   *     Note that currently Indic support is rudimentary only, missing blue
228
   *     zone support.
229
   *
230
   */
231
#define FT_AUTOHINTER_SCRIPT_NONE   0
232
#define FT_AUTOHINTER_SCRIPT_LATIN  1
233
#define FT_AUTOHINTER_SCRIPT_CJK    2
234
#define FT_AUTOHINTER_SCRIPT_INDIC  3
235
 
236
 
237
  /**************************************************************************
238
   *
239
   * @struct:
240
   *   FT_Prop_GlyphToScriptMap
241
   *
242
   * @description:
243
   *   *Experimental* *only*
244
   *
245
   *   The data exchange structure for the @glyph-to-script-map property.
246
   *
247
   */
248
   typedef struct  FT_Prop_GlyphToScriptMap_
249
   {
250
     FT_Face   face;
251
     FT_Byte*  map;
252
 
253
   } FT_Prop_GlyphToScriptMap;
254
 
255
 
256
  /**************************************************************************
257
   *
258
   * @property:
259
   *   fallback-script
260
   *
261
   * @description:
262
   *   *Experimental* *only*
263
   *
264
   *   If no auto-hinter script module can be assigned to a glyph, a
265
   *   fallback script gets assigned to it (see also the
266
   *   @glyph-to-script-map property).  By default, this is
267
   *   @FT_AUTOHINTER_SCRIPT_CJK.  Using the `fallback-script' property,
268
   *   this fallback value can be changed.
269
   *
270
   *   {
271
   *     FT_Library  library;
272
   *     FT_UInt     fallback_script = FT_AUTOHINTER_SCRIPT_NONE;
273
   *
274
   *
275
   *     FT_Init_FreeType( &library );
276
   *
277
   *     FT_Property_Set( library, "autofitter",
278
   *                               "fallback-script", &fallback_script );
279
   *   }
280
   *
281
   * @note:
282
   *   This property can be used with @FT_Property_Get also.
283
   *
284
   *   It's important to use the right timing for changing this value: The
285
   *   creation of the glyph-to-script map which eventually uses the
286
   *   fallback script value gets triggered either by setting or reading a
287
   *   face-specific property like @glyph-to-script-map, or by auto-hinting
288
   *   any glyph from that face.  In particular, if you have already created
289
   *   an @FT_Face structure but not loaded any glyph (using the
290
   *   auto-hinter), a change of the fallback glyph will affect this face.
291
   *
292
   */
293
 
294
 
295
  /**************************************************************************
296
   *
297
   * @property:
298
   *   increase-x-height
299
   *
300
   * @description:
301
   *   For ppem values in the range 6~<= ppem <= `increase-x-height', round
302
   *   up the font's x~height much more often than normally.  If the value
303
   *   is set to~0, which is the default, this feature is switched off.  Use
304
   *   this property to improve the legibility of small font sizes if
305
   *   necessary.
306
   *
307
   *   {
308
   *     FT_Library               library;
309
   *     FT_Face                  face;
310
   *     FT_Prop_IncreaseXHeight  prop;
311
   *
312
   *
313
   *     FT_Init_FreeType( &library );
314
   *     FT_New_Face( library, "foo.ttf", 0, &face );
315
   *     FT_Set_Char_Size( face, 10 * 64, 0, 72, 0 );
316
   *
317
   *     prop.face  = face;
318
   *     prop.limit = 14;
319
   *
320
   *     FT_Property_Set( library, "autofitter",
321
   *                               "increase-x-height", &prop );
322
   *   }
323
   *
324
   * @note:
325
   *   This property can be used with @FT_Property_Get also.
326
   *
327
   *   Set this value right after calling @FT_Set_Char_Size, but before
328
   *   loading any glyph (using the auto-hinter).
329
   *
330
   */
331
 
332
 
333
  /**************************************************************************
334
   *
335
   * @struct:
336
   *   FT_Prop_IncreaseXHeight
337
   *
338
   * @description:
339
   *   The data exchange structure for the @increase-x-height property.
340
   *
341
   */
342
   typedef struct  FT_Prop_IncreaseXHeight_
343
   {
344
     FT_Face  face;
345
     FT_UInt  limit;
346
 
347
   } FT_Prop_IncreaseXHeight;
348
 
349
 
350
 /* */
351
 
352
FT_END_HEADER
353
 
354
#endif /* __FTAUTOH_H__ */
355
 
356
 
357
/* END */