]>
Commit | Line | Data |
---|---|---|
b75a7d8f | 1 | /* |
b75a7d8f | 2 | * |
51004dcb | 3 | * (C) Copyright IBM Corp. and others 1998-2013 - All Rights Reserved |
b75a7d8f A |
4 | * |
5 | */ | |
6 | ||
7 | #ifndef __LETYPES_H | |
8 | #define __LETYPES_H | |
9 | ||
374ca955 | 10 | #if !defined(LE_USE_CMEMORY) && (defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION) || defined(U_STATIC_IMPLEMENTATION) || defined(U_COMBINED_IMPLEMENTATION)) |
b75a7d8f A |
11 | #define LE_USE_CMEMORY |
12 | #endif | |
13 | ||
14 | #include "unicode/utypes.h" | |
46f4442e | 15 | |
4388f060 | 16 | #ifdef __cplusplus |
b75a7d8f | 17 | #include "unicode/uobject.h" |
46f4442e | 18 | #endif |
b75a7d8f A |
19 | |
20 | #ifdef LE_USE_CMEMORY | |
21 | #include "cmemory.h" | |
22 | #endif | |
23 | ||
73c04bcf A |
24 | /*! |
25 | * \file | |
46f4442e | 26 | * \brief C API: Basic definitions for the ICU LayoutEngine |
73c04bcf A |
27 | */ |
28 | ||
b75a7d8f A |
29 | /** |
30 | * A type used for signed, 32-bit integers. | |
31 | * | |
32 | * @stable ICU 2.4 | |
33 | */ | |
34 | typedef int32_t le_int32; | |
35 | ||
36 | /** | |
37 | * A type used for unsigned, 32-bit integers. | |
38 | * | |
39 | * @stable ICU 2.4 | |
40 | */ | |
41 | typedef uint32_t le_uint32; | |
42 | ||
43 | /** | |
44 | * A type used for signed, 16-bit integers. | |
45 | * | |
46 | * @stable ICU 2.4 | |
47 | */ | |
48 | typedef int16_t le_int16; | |
49 | ||
50 | /** | |
51 | * A type used for unsigned, 16-bit integers. | |
52 | * | |
53 | * @stable ICU 2.4 | |
54 | */ | |
55 | typedef uint16_t le_uint16; | |
56 | ||
57 | /** | |
58 | * A type used for signed, 8-bit integers. | |
59 | * | |
60 | * @stable ICU 2.4 | |
61 | */ | |
62 | typedef int8_t le_int8; | |
63 | ||
64 | /** | |
65 | * A type used for unsigned, 8-bit integers. | |
66 | * | |
67 | * @stable ICU 2.4 | |
68 | */ | |
69 | typedef uint8_t le_uint8; | |
70 | ||
71 | ||
72 | /** | |
73 | * A type used for boolean values. | |
74 | * | |
75 | * @stable ICU 2.4 | |
76 | */ | |
77 | typedef UBool le_bool; | |
78 | ||
b75a7d8f A |
79 | #ifndef NULL |
80 | /** | |
81 | * Used to represent empty pointers. | |
82 | * | |
83 | * @stable ICU 2.4 | |
84 | */ | |
85 | #define NULL 0 | |
86 | #endif | |
87 | ||
88 | /** | |
89 | * Used for four character tags. | |
90 | * | |
91 | * @stable ICU 2.4 | |
92 | */ | |
93 | typedef le_uint32 LETag; | |
94 | ||
95 | /** | |
96 | * Used for 16-bit glyph indices as they're represented | |
97 | * in TrueType font tables. | |
98 | * | |
73c04bcf | 99 | * @stable ICU 3.2 |
b75a7d8f A |
100 | */ |
101 | typedef le_uint16 TTGlyphID; | |
102 | ||
103 | /** | |
104 | * Used for glyph indices. The low-order 16 bits are | |
105 | * the glyph ID within the font. The next 8 bits are | |
106 | * the sub-font ID within a compound font. The high- | |
107 | * order 8 bits are client defined. The LayoutEngine | |
108 | * will never change or look at the client defined bits. | |
109 | * | |
73c04bcf | 110 | * @stable ICU 3.2 |
b75a7d8f A |
111 | */ |
112 | typedef le_uint32 LEGlyphID; | |
113 | ||
114 | /** | |
115 | * Used to mask off the glyph ID part of an LEGlyphID. | |
116 | * | |
117 | * @see LEGlyphID | |
73c04bcf | 118 | * @stable ICU 3.2 |
b75a7d8f A |
119 | */ |
120 | #define LE_GLYPH_MASK 0x0000FFFF | |
121 | ||
122 | /** | |
123 | * Used to shift the glyph ID part of an LEGlyphID | |
124 | * into the low-order bits. | |
125 | * | |
126 | * @see LEGlyphID | |
73c04bcf | 127 | * @stable ICU 3.2 |
b75a7d8f A |
128 | */ |
129 | #define LE_GLYPH_SHIFT 0 | |
130 | ||
131 | ||
132 | /** | |
133 | * Used to mask off the sub-font ID part of an LEGlyphID. | |
134 | * | |
135 | * @see LEGlyphID | |
73c04bcf | 136 | * @stable ICU 3.2 |
b75a7d8f A |
137 | */ |
138 | #define LE_SUB_FONT_MASK 0x00FF0000 | |
139 | ||
140 | /** | |
141 | * Used to shift the sub-font ID part of an LEGlyphID | |
142 | * into the low-order bits. | |
143 | * | |
144 | * @see LEGlyphID | |
73c04bcf | 145 | * @stable ICU 3.2 |
b75a7d8f A |
146 | */ |
147 | #define LE_SUB_FONT_SHIFT 16 | |
148 | ||
149 | ||
150 | /** | |
151 | * Used to mask off the client-defined part of an LEGlyphID. | |
152 | * | |
153 | * @see LEGlyphID | |
73c04bcf | 154 | * @stable ICU 3.2 |
b75a7d8f A |
155 | */ |
156 | #define LE_CLIENT_MASK 0xFF000000 | |
157 | ||
158 | /** | |
159 | * Used to shift the sub-font ID part of an LEGlyphID | |
160 | * into the low-order bits. | |
161 | * | |
162 | * @see LEGlyphID | |
73c04bcf | 163 | * @stable ICU 3.2 |
b75a7d8f A |
164 | */ |
165 | #define LE_CLIENT_SHIFT 24 | |
166 | ||
167 | ||
168 | /** | |
169 | * A convenience macro to get the Glyph ID part of an LEGlyphID. | |
170 | * | |
171 | * @see LEGlyphID | |
73c04bcf | 172 | * @stable ICU 3.2 |
b75a7d8f A |
173 | */ |
174 | #define LE_GET_GLYPH(gid) ((gid & LE_GLYPH_MASK) >> LE_GLYPH_SHIFT) | |
175 | ||
176 | /** | |
177 | * A convenience macro to get the sub-font ID part of an LEGlyphID. | |
178 | * | |
179 | * @see LEGlyphID | |
73c04bcf | 180 | * @stable ICU 3.2 |
b75a7d8f A |
181 | */ |
182 | #define LE_GET_SUB_FONT(gid) ((gid & LE_SUB_FONT_MASK) >> LE_SUB_FONT_SHIFT) | |
183 | ||
184 | /** | |
185 | * A convenience macro to get the client-defined part of an LEGlyphID. | |
186 | * | |
187 | * @see LEGlyphID | |
73c04bcf | 188 | * @stable ICU 3.2 |
b75a7d8f A |
189 | */ |
190 | #define LE_GET_CLIENT(gid) ((gid & LE_CLIENT_MASK) >> LE_CLIENT_SHIFT) | |
191 | ||
192 | ||
193 | /** | |
194 | * A convenience macro to set the Glyph ID part of an LEGlyphID. | |
195 | * | |
196 | * @see LEGlyphID | |
73c04bcf | 197 | * @stable ICU 3.2 |
b75a7d8f A |
198 | */ |
199 | #define LE_SET_GLYPH(gid, glyph) ((gid & ~LE_GLYPH_MASK) | ((glyph << LE_GLYPH_SHIFT) & LE_GLYPH_MASK)) | |
200 | ||
201 | /** | |
202 | * A convenience macro to set the sub-font ID part of an LEGlyphID. | |
203 | * | |
204 | * @see LEGlyphID | |
73c04bcf | 205 | * @stable ICU 3.2 |
b75a7d8f A |
206 | */ |
207 | #define LE_SET_SUB_FONT(gid, font) ((gid & ~LE_SUB_FONT_MASK) | ((font << LE_SUB_FONT_SHIFT) & LE_SUB_FONT_MASK)) | |
208 | ||
209 | /** | |
210 | * A convenience macro to set the client-defined part of an LEGlyphID. | |
211 | * | |
212 | * @see LEGlyphID | |
73c04bcf | 213 | * @stable ICU 3.2 |
b75a7d8f A |
214 | */ |
215 | #define LE_SET_CLIENT(gid, client) ((gid & ~LE_CLIENT_MASK) | ((client << LE_CLIENT_SHIFT) & LE_CLIENT_MASK)) | |
216 | ||
217 | ||
218 | /** | |
219 | * Used to represent 16-bit Unicode code points. | |
220 | * | |
221 | * @stable ICU 2.4 | |
222 | */ | |
223 | typedef UChar LEUnicode16; | |
224 | ||
225 | /** | |
226 | * Used to represent 32-bit Unicode code points. | |
227 | * | |
228 | * @stable ICU 2.4 | |
229 | */ | |
230 | typedef UChar32 LEUnicode32; | |
231 | ||
4388f060 | 232 | #ifndef U_HIDE_DEPRECATED_API |
b75a7d8f A |
233 | /** |
234 | * Used to represent 16-bit Unicode code points. | |
235 | * | |
236 | * @deprecated since ICU 2.4. Use LEUnicode16 instead | |
237 | */ | |
238 | typedef UChar LEUnicode; | |
4388f060 | 239 | #endif /* U_HIDE_DEPRECATED_API */ |
b75a7d8f A |
240 | |
241 | /** | |
242 | * Used to hold a pair of (x, y) values which represent a point. | |
243 | * | |
244 | * @stable ICU 2.4 | |
245 | */ | |
246 | struct LEPoint | |
247 | { | |
248 | /** | |
249 | * The x coordinate of the point. | |
250 | * | |
251 | * @stable ICU 2.4 | |
252 | */ | |
253 | float fX; | |
254 | ||
255 | /** | |
256 | * The y coordinate of the point. | |
257 | * | |
258 | * @stable ICU 2.4 | |
259 | */ | |
260 | float fY; | |
261 | }; | |
262 | ||
4388f060 | 263 | #ifndef __cplusplus |
b75a7d8f A |
264 | /** |
265 | * Used to hold a pair of (x, y) values which represent a point. | |
266 | * | |
267 | * @stable ICU 2.4 | |
268 | */ | |
269 | typedef struct LEPoint LEPoint; | |
270 | #endif | |
271 | ||
73c04bcf | 272 | |
4388f060 | 273 | #ifndef U_HIDE_INTERNAL_API |
73c04bcf A |
274 | /** |
275 | * A convenience macro to get the length of an array. | |
276 | * | |
277 | * @internal | |
278 | */ | |
279 | #define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0]) | |
280 | ||
b75a7d8f A |
281 | #ifdef LE_USE_CMEMORY |
282 | /** | |
283 | * A convenience macro for copying an array. | |
284 | * | |
285 | * @internal | |
286 | */ | |
287 | #define LE_ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) | |
288 | ||
289 | /** | |
290 | * Allocate an array of basic types. This is used to isolate the rest of | |
291 | * the LayoutEngine code from cmemory.h. | |
292 | * | |
293 | * @internal | |
294 | */ | |
295 | #define LE_NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type)) | |
296 | ||
297 | /** | |
298 | * Re-allocate an array of basic types. This is used to isolate the rest of | |
299 | * the LayoutEngine code from cmemory.h. | |
300 | * | |
301 | * @internal | |
302 | */ | |
303 | #define LE_GROW_ARRAY(array, newSize) uprv_realloc((void *) (array), (newSize) * sizeof (array)[0]) | |
304 | ||
305 | /** | |
306 | * Free an array of basic types. This is used to isolate the rest of | |
307 | * the LayoutEngine code from cmemory.h. | |
308 | * | |
309 | * @internal | |
310 | */ | |
311 | #define LE_DELETE_ARRAY(array) uprv_free((void *) (array)) | |
51004dcb A |
312 | #else |
313 | ||
314 | /* Not using ICU memory - use C std lib versions */ | |
315 | ||
316 | #include <stdlib.h> | |
317 | #include <string.h> | |
318 | ||
319 | /** | |
320 | * A convenience macro to get the length of an array. | |
321 | * | |
322 | * @internal | |
323 | */ | |
324 | #define LE_ARRAY_SIZE(array) (sizeof array / sizeof array[0]) | |
325 | ||
326 | /** | |
327 | * A convenience macro for copying an array. | |
328 | * | |
329 | * @internal | |
330 | */ | |
331 | #define LE_ARRAY_COPY(dst, src, count) memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) | |
332 | ||
333 | /** | |
334 | * Allocate an array of basic types. This is used to isolate the rest of | |
335 | * the LayoutEngine code from cmemory.h. | |
336 | * | |
337 | * @internal | |
338 | */ | |
339 | #define LE_NEW_ARRAY(type, count) (type *) malloc((count) * sizeof(type)) | |
340 | ||
341 | /** | |
342 | * Re-allocate an array of basic types. This is used to isolate the rest of | |
343 | * the LayoutEngine code from cmemory.h. | |
344 | * | |
345 | * @internal | |
346 | */ | |
347 | #define LE_GROW_ARRAY(array, newSize) realloc((void *) (array), (newSize) * sizeof (array)[0]) | |
348 | ||
349 | /** | |
350 | * Free an array of basic types. This is used to isolate the rest of | |
351 | * the LayoutEngine code from cmemory.h. | |
352 | * | |
353 | * @internal | |
354 | */ | |
355 | #define LE_DELETE_ARRAY(array) free((void *) (array)) | |
356 | ||
b75a7d8f | 357 | #endif |
4388f060 | 358 | #endif /* U_HIDE_INTERNAL_API */ |
b75a7d8f A |
359 | |
360 | /** | |
361 | * A macro to construct the four-letter tags used to | |
362 | * label TrueType tables, and for script, language and | |
363 | * feature tags in OpenType tables. | |
364 | * | |
365 | * WARNING: THIS MACRO WILL ONLY WORK CORRECTLY IF | |
366 | * THE ARGUMENT CHARACTERS ARE ASCII. | |
367 | * | |
73c04bcf | 368 | * @stable ICU 3.2 |
b75a7d8f A |
369 | */ |
370 | #define LE_MAKE_TAG(a, b, c, d) \ | |
371 | (((le_uint32)(a) << 24) | \ | |
372 | ((le_uint32)(b) << 16) | \ | |
373 | ((le_uint32)(c) << 8) | \ | |
374 | (le_uint32)(d)) | |
375 | ||
376 | /** | |
377 | * This enumeration defines constants for the standard | |
378 | * TrueType, OpenType and AAT table tags. | |
379 | * | |
73c04bcf | 380 | * @stable ICU 3.2 |
b75a7d8f A |
381 | */ |
382 | enum LETableTags { | |
73c04bcf A |
383 | LE_ACNT_TABLE_TAG = 0x61636E74UL, /**< 'acnt' */ |
384 | LE_AVAR_TABLE_TAG = 0x61766172UL, /**< 'avar' */ | |
385 | LE_BASE_TABLE_TAG = 0x42415345UL, /**< 'BASE' */ | |
386 | LE_BDAT_TABLE_TAG = 0x62646174UL, /**< 'bdat' */ | |
387 | LE_BHED_TABLE_TAG = 0x62686564UL, /**< 'bhed' */ | |
388 | LE_BLOC_TABLE_TAG = 0x626C6F63UL, /**< 'bloc' */ | |
389 | LE_BSLN_TABLE_TAG = 0x62736C6EUL, /**< 'bsln' */ | |
390 | LE_CFF__TABLE_TAG = 0x43464620UL, /**< 'CFF ' */ | |
391 | LE_CMAP_TABLE_TAG = 0x636D6170UL, /**< 'cmap' */ | |
392 | LE_CVAR_TABLE_TAG = 0x63766172UL, /**< 'cvar' */ | |
393 | LE_CVT__TABLE_TAG = 0x63767420UL, /**< 'cvt ' */ | |
394 | LE_DSIG_TABLE_TAG = 0x44534947UL, /**< 'DSIG' */ | |
395 | LE_EBDT_TABLE_TAG = 0x45424454UL, /**< 'EBDT' */ | |
396 | LE_EBLC_TABLE_TAG = 0x45424C43UL, /**< 'EBLC' */ | |
397 | LE_EBSC_TABLE_TAG = 0x45425343UL, /**< 'EBSC' */ | |
398 | LE_FDSC_TABLE_TAG = 0x66647363UL, /**< 'fdsc' */ | |
399 | LE_FEAT_TABLE_TAG = 0x66656174UL, /**< 'feat' */ | |
400 | LE_FMTX_TABLE_TAG = 0x666D7478UL, /**< 'fmtx' */ | |
401 | LE_FPGM_TABLE_TAG = 0x6670676DUL, /**< 'fpgm' */ | |
402 | LE_FVAR_TABLE_TAG = 0x66766172UL, /**< 'fvar' */ | |
403 | LE_GASP_TABLE_TAG = 0x67617370UL, /**< 'gasp' */ | |
404 | LE_GDEF_TABLE_TAG = 0x47444546UL, /**< 'GDEF' */ | |
405 | LE_GLYF_TABLE_TAG = 0x676C7966UL, /**< 'glyf' */ | |
406 | LE_GPOS_TABLE_TAG = 0x47504F53UL, /**< 'GPOS' */ | |
407 | LE_GSUB_TABLE_TAG = 0x47535542UL, /**< 'GSUB' */ | |
408 | LE_GVAR_TABLE_TAG = 0x67766172UL, /**< 'gvar' */ | |
409 | LE_HDMX_TABLE_TAG = 0x68646D78UL, /**< 'hdmx' */ | |
410 | LE_HEAD_TABLE_TAG = 0x68656164UL, /**< 'head' */ | |
411 | LE_HHEA_TABLE_TAG = 0x68686561UL, /**< 'hhea' */ | |
412 | LE_HMTX_TABLE_TAG = 0x686D7478UL, /**< 'hmtx' */ | |
413 | LE_HSTY_TABLE_TAG = 0x68737479UL, /**< 'hsty' */ | |
414 | LE_JUST_TABLE_TAG = 0x6A757374UL, /**< 'just' */ | |
415 | LE_JSTF_TABLE_TAG = 0x4A535446UL, /**< 'JSTF' */ | |
416 | LE_KERN_TABLE_TAG = 0x6B65726EUL, /**< 'kern' */ | |
417 | LE_LCAR_TABLE_TAG = 0x6C636172UL, /**< 'lcar' */ | |
418 | LE_LOCA_TABLE_TAG = 0x6C6F6361UL, /**< 'loca' */ | |
419 | LE_LTSH_TABLE_TAG = 0x4C545348UL, /**< 'LTSH' */ | |
420 | LE_MAXP_TABLE_TAG = 0x6D617870UL, /**< 'maxp' */ | |
421 | LE_MORT_TABLE_TAG = 0x6D6F7274UL, /**< 'mort' */ | |
422 | LE_MORX_TABLE_TAG = 0x6D6F7278UL, /**< 'morx' */ | |
423 | LE_NAME_TABLE_TAG = 0x6E616D65UL, /**< 'name' */ | |
424 | LE_OPBD_TABLE_TAG = 0x6F706264UL, /**< 'opbd' */ | |
425 | LE_OS_2_TABLE_TAG = 0x4F532F32UL, /**< 'OS/2' */ | |
426 | LE_PCLT_TABLE_TAG = 0x50434C54UL, /**< 'PCLT' */ | |
427 | LE_POST_TABLE_TAG = 0x706F7374UL, /**< 'post' */ | |
428 | LE_PREP_TABLE_TAG = 0x70726570UL, /**< 'prep' */ | |
429 | LE_PROP_TABLE_TAG = 0x70726F70UL, /**< 'prop' */ | |
430 | LE_TRAK_TABLE_TAG = 0x7472616BUL, /**< 'trak' */ | |
431 | LE_VDMX_TABLE_TAG = 0x56444D58UL, /**< 'VDMX' */ | |
432 | LE_VHEA_TABLE_TAG = 0x76686561UL, /**< 'vhea' */ | |
433 | LE_VMTX_TABLE_TAG = 0x766D7478UL, /**< 'vmtx' */ | |
434 | LE_VORG_TABLE_TAG = 0x564F5247UL, /**< 'VORG' */ | |
435 | LE_ZAPF_TABLE_TAG = 0x5A617066UL /**< 'Zapf' */ | |
b75a7d8f A |
436 | }; |
437 | ||
438 | /** | |
439 | * This enumeration defines constants for all | |
440 | * the common OpenType feature tags. | |
441 | * | |
73c04bcf | 442 | * @stable ICU 3.2 |
b75a7d8f A |
443 | */ |
444 | enum LEFeatureTags { | |
73c04bcf A |
445 | LE_AALT_FEATURE_TAG = 0x61616C74UL, /**< 'aalt' */ |
446 | LE_ABVF_FEATURE_TAG = 0x61627666UL, /**< 'abvf' */ | |
447 | LE_ABVM_FEATURE_TAG = 0x6162766DUL, /**< 'abvm' */ | |
448 | LE_ABVS_FEATURE_TAG = 0x61627673UL, /**< 'abvs' */ | |
449 | LE_AFRC_FEATURE_TAG = 0x61667263UL, /**< 'afrc' */ | |
450 | LE_AKHN_FEATURE_TAG = 0x616B686EUL, /**< 'akhn' */ | |
451 | LE_BLWF_FEATURE_TAG = 0x626C7766UL, /**< 'blwf' */ | |
452 | LE_BLWM_FEATURE_TAG = 0x626C776DUL, /**< 'blwm' */ | |
453 | LE_BLWS_FEATURE_TAG = 0x626C7773UL, /**< 'blws' */ | |
454 | LE_CALT_FEATURE_TAG = 0x63616C74UL, /**< 'calt' */ | |
455 | LE_CASE_FEATURE_TAG = 0x63617365UL, /**< 'case' */ | |
456 | LE_CCMP_FEATURE_TAG = 0x63636D70UL, /**< 'ccmp' */ | |
51004dcb | 457 | LE_CJCT_FEATURE_TAG = 0x636A6374UL, /**< 'cjct' */ |
73c04bcf A |
458 | LE_CLIG_FEATURE_TAG = 0x636C6967UL, /**< 'clig' */ |
459 | LE_CPSP_FEATURE_TAG = 0x63707370UL, /**< 'cpsp' */ | |
460 | LE_CSWH_FEATURE_TAG = 0x63737768UL, /**< 'cswh' */ | |
461 | LE_CURS_FEATURE_TAG = 0x63757273UL, /**< 'curs' */ | |
462 | LE_C2SC_FEATURE_TAG = 0x63327363UL, /**< 'c2sc' */ | |
463 | LE_C2PC_FEATURE_TAG = 0x63327063UL, /**< 'c2pc' */ | |
464 | LE_DIST_FEATURE_TAG = 0x64697374UL, /**< 'dist' */ | |
465 | LE_DLIG_FEATURE_TAG = 0x646C6967UL, /**< 'dlig' */ | |
466 | LE_DNOM_FEATURE_TAG = 0x646E6F6DUL, /**< 'dnom' */ | |
467 | LE_EXPT_FEATURE_TAG = 0x65787074UL, /**< 'expt' */ | |
468 | LE_FALT_FEATURE_TAG = 0x66616C74UL, /**< 'falt' */ | |
469 | LE_FIN2_FEATURE_TAG = 0x66696E32UL, /**< 'fin2' */ | |
470 | LE_FIN3_FEATURE_TAG = 0x66696E33UL, /**< 'fin3' */ | |
471 | LE_FINA_FEATURE_TAG = 0x66696E61UL, /**< 'fina' */ | |
472 | LE_FRAC_FEATURE_TAG = 0x66726163UL, /**< 'frac' */ | |
473 | LE_FWID_FEATURE_TAG = 0x66776964UL, /**< 'fwid' */ | |
474 | LE_HALF_FEATURE_TAG = 0x68616C66UL, /**< 'half' */ | |
475 | LE_HALN_FEATURE_TAG = 0x68616C6EUL, /**< 'haln' */ | |
476 | LE_HALT_FEATURE_TAG = 0x68616C74UL, /**< 'halt' */ | |
477 | LE_HIST_FEATURE_TAG = 0x68697374UL, /**< 'hist' */ | |
478 | LE_HKNA_FEATURE_TAG = 0x686B6E61UL, /**< 'hkna' */ | |
479 | LE_HLIG_FEATURE_TAG = 0x686C6967UL, /**< 'hlig' */ | |
480 | LE_HNGL_FEATURE_TAG = 0x686E676CUL, /**< 'hngl' */ | |
481 | LE_HWID_FEATURE_TAG = 0x68776964UL, /**< 'hwid' */ | |
482 | LE_INIT_FEATURE_TAG = 0x696E6974UL, /**< 'init' */ | |
483 | LE_ISOL_FEATURE_TAG = 0x69736F6CUL, /**< 'isol' */ | |
484 | LE_ITAL_FEATURE_TAG = 0x6974616CUL, /**< 'ital' */ | |
485 | LE_JALT_FEATURE_TAG = 0x6A616C74UL, /**< 'jalt' */ | |
486 | LE_JP78_FEATURE_TAG = 0x6A703738UL, /**< 'jp78' */ | |
487 | LE_JP83_FEATURE_TAG = 0x6A703833UL, /**< 'jp83' */ | |
488 | LE_JP90_FEATURE_TAG = 0x6A703930UL, /**< 'jp90' */ | |
489 | LE_KERN_FEATURE_TAG = 0x6B65726EUL, /**< 'kern' */ | |
490 | LE_LFBD_FEATURE_TAG = 0x6C666264UL, /**< 'lfbd' */ | |
491 | LE_LIGA_FEATURE_TAG = 0x6C696761UL, /**< 'liga' */ | |
492 | LE_LJMO_FEATURE_TAG = 0x6C6A6D6FUL, /**< 'ljmo' */ | |
493 | LE_LNUM_FEATURE_TAG = 0x6C6E756DUL, /**< 'lnum' */ | |
494 | LE_LOCL_FEATURE_TAG = 0x6C6F636CUL, /**< 'locl' */ | |
495 | LE_MARK_FEATURE_TAG = 0x6D61726BUL, /**< 'mark' */ | |
496 | LE_MED2_FEATURE_TAG = 0x6D656432UL, /**< 'med2' */ | |
497 | LE_MEDI_FEATURE_TAG = 0x6D656469UL, /**< 'medi' */ | |
498 | LE_MGRK_FEATURE_TAG = 0x6D67726BUL, /**< 'mgrk' */ | |
499 | LE_MKMK_FEATURE_TAG = 0x6D6B6D6BUL, /**< 'mkmk' */ | |
500 | LE_MSET_FEATURE_TAG = 0x6D736574UL, /**< 'mset' */ | |
501 | LE_NALT_FEATURE_TAG = 0x6E616C74UL, /**< 'nalt' */ | |
502 | LE_NLCK_FEATURE_TAG = 0x6E6C636BUL, /**< 'nlck' */ | |
503 | LE_NUKT_FEATURE_TAG = 0x6E756B74UL, /**< 'nukt' */ | |
504 | LE_NUMR_FEATURE_TAG = 0x6E756D72UL, /**< 'numr' */ | |
505 | LE_ONUM_FEATURE_TAG = 0x6F6E756DUL, /**< 'onum' */ | |
506 | LE_OPBD_FEATURE_TAG = 0x6F706264UL, /**< 'opbd' */ | |
507 | LE_ORDN_FEATURE_TAG = 0x6F72646EUL, /**< 'ordn' */ | |
508 | LE_ORNM_FEATURE_TAG = 0x6F726E6DUL, /**< 'ornm' */ | |
509 | LE_PALT_FEATURE_TAG = 0x70616C74UL, /**< 'palt' */ | |
510 | LE_PCAP_FEATURE_TAG = 0x70636170UL, /**< 'pcap' */ | |
511 | LE_PNUM_FEATURE_TAG = 0x706E756DUL, /**< 'pnum' */ | |
512 | LE_PREF_FEATURE_TAG = 0x70726566UL, /**< 'pref' */ | |
513 | LE_PRES_FEATURE_TAG = 0x70726573UL, /**< 'pres' */ | |
514 | LE_PSTF_FEATURE_TAG = 0x70737466UL, /**< 'pstf' */ | |
515 | LE_PSTS_FEATURE_TAG = 0x70737473UL, /**< 'psts' */ | |
516 | LE_PWID_FEATURE_TAG = 0x70776964UL, /**< 'pwid' */ | |
517 | LE_QWID_FEATURE_TAG = 0x71776964UL, /**< 'qwid' */ | |
518 | LE_RAND_FEATURE_TAG = 0x72616E64UL, /**< 'rand' */ | |
519 | LE_RLIG_FEATURE_TAG = 0x726C6967UL, /**< 'rlig' */ | |
520 | LE_RPHF_FEATURE_TAG = 0x72706866UL, /**< 'rphf' */ | |
51004dcb | 521 | LE_RKRF_FEATURE_TAG = 0x726B7266UL, /**< 'rkrf' */ |
73c04bcf A |
522 | LE_RTBD_FEATURE_TAG = 0x72746264UL, /**< 'rtbd' */ |
523 | LE_RTLA_FEATURE_TAG = 0x72746C61UL, /**< 'rtla' */ | |
524 | LE_RUBY_FEATURE_TAG = 0x72756279UL, /**< 'ruby' */ | |
525 | LE_SALT_FEATURE_TAG = 0x73616C74UL, /**< 'salt' */ | |
526 | LE_SINF_FEATURE_TAG = 0x73696E66UL, /**< 'sinf' */ | |
527 | LE_SIZE_FEATURE_TAG = 0x73697A65UL, /**< 'size' */ | |
528 | LE_SMCP_FEATURE_TAG = 0x736D6370UL, /**< 'smcp' */ | |
529 | LE_SMPL_FEATURE_TAG = 0x736D706CUL, /**< 'smpl' */ | |
530 | LE_SS01_FEATURE_TAG = 0x73733031UL, /**< 'ss01' */ | |
531 | LE_SS02_FEATURE_TAG = 0x73733032UL, /**< 'ss02' */ | |
532 | LE_SS03_FEATURE_TAG = 0x73733033UL, /**< 'ss03' */ | |
533 | LE_SS04_FEATURE_TAG = 0x73733034UL, /**< 'ss04' */ | |
534 | LE_SS05_FEATURE_TAG = 0x73733035UL, /**< 'ss05' */ | |
535 | LE_SS06_FEATURE_TAG = 0x73733036UL, /**< 'ss06' */ | |
536 | LE_SS07_FEATURE_TAG = 0x73733037UL, /**< 'ss07' */ | |
537 | LE_SS08_FEATURE_TAG = 0x73733038UL, /**< 'ss08' */ | |
538 | LE_SS09_FEATURE_TAG = 0x73733039UL, /**< 'ss09' */ | |
539 | LE_SS10_FEATURE_TAG = 0x73733130UL, /**< 'ss10' */ | |
540 | LE_SS11_FEATURE_TAG = 0x73733131UL, /**< 'ss11' */ | |
541 | LE_SS12_FEATURE_TAG = 0x73733132UL, /**< 'ss12' */ | |
542 | LE_SS13_FEATURE_TAG = 0x73733133UL, /**< 'ss13' */ | |
543 | LE_SS14_FEATURE_TAG = 0x73733134UL, /**< 'ss14' */ | |
544 | LE_SS15_FEATURE_TAG = 0x73733135UL, /**< 'ss15' */ | |
545 | LE_SS16_FEATURE_TAG = 0x73733136UL, /**< 'ss16' */ | |
546 | LE_SS17_FEATURE_TAG = 0x73733137UL, /**< 'ss17' */ | |
547 | LE_SS18_FEATURE_TAG = 0x73733138UL, /**< 'ss18' */ | |
548 | LE_SS19_FEATURE_TAG = 0x73733139UL, /**< 'ss19' */ | |
549 | LE_SS20_FEATURE_TAG = 0x73733230UL, /**< 'ss20' */ | |
550 | LE_SUBS_FEATURE_TAG = 0x73756273UL, /**< 'subs' */ | |
551 | LE_SUPS_FEATURE_TAG = 0x73757073UL, /**< 'sups' */ | |
552 | LE_SWSH_FEATURE_TAG = 0x73777368UL, /**< 'swsh' */ | |
553 | LE_TITL_FEATURE_TAG = 0x7469746CUL, /**< 'titl' */ | |
554 | LE_TJMO_FEATURE_TAG = 0x746A6D6FUL, /**< 'tjmo' */ | |
555 | LE_TNAM_FEATURE_TAG = 0x746E616DUL, /**< 'tnam' */ | |
556 | LE_TNUM_FEATURE_TAG = 0x746E756DUL, /**< 'tnum' */ | |
557 | LE_TRAD_FEATURE_TAG = 0x74726164UL, /**< 'trad' */ | |
558 | LE_TWID_FEATURE_TAG = 0x74776964UL, /**< 'twid' */ | |
559 | LE_UNIC_FEATURE_TAG = 0x756E6963UL, /**< 'unic' */ | |
560 | LE_VALT_FEATURE_TAG = 0x76616C74UL, /**< 'valt' */ | |
561 | LE_VATU_FEATURE_TAG = 0x76617475UL, /**< 'vatu' */ | |
562 | LE_VERT_FEATURE_TAG = 0x76657274UL, /**< 'vert' */ | |
563 | LE_VHAL_FEATURE_TAG = 0x7668616CUL, /**< 'vhal' */ | |
564 | LE_VJMO_FEATURE_TAG = 0x766A6D6FUL, /**< 'vjmo' */ | |
565 | LE_VKNA_FEATURE_TAG = 0x766B6E61UL, /**< 'vkna' */ | |
566 | LE_VKRN_FEATURE_TAG = 0x766B726EUL, /**< 'vkrn' */ | |
567 | LE_VPAL_FEATURE_TAG = 0x7670616CUL, /**< 'vpal' */ | |
568 | LE_VRT2_FEATURE_TAG = 0x76727432UL, /**< 'vrt2' */ | |
569 | LE_ZERO_FEATURE_TAG = 0x7A65726FUL /**< 'zero' */ | |
b75a7d8f A |
570 | }; |
571 | ||
51004dcb A |
572 | /** |
573 | * @internal | |
574 | */ | |
575 | enum LEFeatureENUMs { | |
576 | LE_Kerning_FEATURE_ENUM = 0, /**< Requests Kerning. Formerly LayoutEngine::kTypoFlagKern */ | |
577 | LE_Ligatures_FEATURE_ENUM = 1, /**< Requests Ligatures. Formerly LayoutEngine::kTypoFlagLiga */ | |
578 | LE_CLIG_FEATURE_ENUM, /**< Feature specific enum */ | |
579 | LE_DLIG_FEATURE_ENUM, /**< Feature specific enum */ | |
580 | LE_HLIG_FEATURE_ENUM, /**< Feature specific enum */ | |
581 | LE_LIGA_FEATURE_ENUM, /**< Feature specific enum */ | |
582 | LE_RLIG_FEATURE_ENUM, /**< Feature specific enum */ | |
583 | LE_SMCP_FEATURE_ENUM, /**< Feature specific enum */ | |
584 | LE_FRAC_FEATURE_ENUM, /**< Feature specific enum */ | |
585 | LE_AFRC_FEATURE_ENUM, /**< Feature specific enum */ | |
586 | LE_ZERO_FEATURE_ENUM, /**< Feature specific enum */ | |
587 | LE_SWSH_FEATURE_ENUM, /**< Feature specific enum */ | |
588 | LE_CSWH_FEATURE_ENUM, /**< Feature specific enum */ | |
589 | LE_SALT_FEATURE_ENUM, /**< Feature specific enum */ | |
590 | LE_NALT_FEATURE_ENUM, /**< Feature specific enum */ | |
591 | LE_RUBY_FEATURE_ENUM, /**< Feature specific enum */ | |
592 | LE_SS01_FEATURE_ENUM, /**< Feature specific enum */ | |
593 | LE_SS02_FEATURE_ENUM, /**< Feature specific enum */ | |
594 | LE_SS03_FEATURE_ENUM, /**< Feature specific enum */ | |
595 | LE_SS04_FEATURE_ENUM, /**< Feature specific enum */ | |
596 | LE_SS05_FEATURE_ENUM, /**< Feature specific enum */ | |
597 | LE_SS06_FEATURE_ENUM, /**< Feature specific enum */ | |
598 | LE_SS07_FEATURE_ENUM, /**< Feature specific enum */ | |
599 | ||
600 | LE_CHAR_FILTER_FEATURE_ENUM = 31, /**< Apply CharSubstitutionFilter */ | |
601 | LE_FEATURE_ENUM_MAX = LE_CHAR_FILTER_FEATURE_ENUM | |
602 | }; | |
603 | ||
604 | ||
605 | /** | |
606 | * Flags for typographic features. | |
607 | * @internal | |
608 | * @{ | |
609 | */ | |
610 | #define LE_Kerning_FEATURE_FLAG (1 << LE_Kerning_FEATURE_ENUM) | |
611 | #define LE_Ligatures_FEATURE_FLAG (1 << LE_Ligatures_FEATURE_ENUM) | |
612 | #define LE_CLIG_FEATURE_FLAG (1 << LE_CLIG_FEATURE_ENUM) | |
613 | #define LE_DLIG_FEATURE_FLAG (1 << LE_DLIG_FEATURE_ENUM) | |
614 | #define LE_HLIG_FEATURE_FLAG (1 << LE_HLIG_FEATURE_ENUM) | |
615 | #define LE_LIGA_FEATURE_FLAG (1 << LE_LIGA_FEATURE_ENUM) | |
616 | #define LE_RLIG_FEATURE_FLAG (1 << LE_RLIG_FEATURE_ENUM) | |
617 | #define LE_SMCP_FEATURE_FLAG (1 << LE_SMCP_FEATURE_ENUM) | |
618 | #define LE_FRAC_FEATURE_FLAG (1 << LE_FRAC_FEATURE_ENUM) | |
619 | #define LE_AFRC_FEATURE_FLAG (1 << LE_AFRC_FEATURE_ENUM) | |
620 | #define LE_ZERO_FEATURE_FLAG (1 << LE_ZERO_FEATURE_ENUM) | |
621 | #define LE_SWSH_FEATURE_FLAG (1 << LE_SWSH_FEATURE_ENUM) | |
622 | #define LE_CSWH_FEATURE_FLAG (1 << LE_CSWH_FEATURE_ENUM) | |
623 | #define LE_SALT_FEATURE_FLAG (1 << LE_SALT_FEATURE_ENUM) | |
624 | #define LE_NALT_FEATURE_FLAG (1 << LE_NALT_FEATURE_ENUM) | |
625 | #define LE_RUBY_FEATURE_FLAG (1 << LE_RUBY_FEATURE_ENUM) | |
626 | #define LE_SS01_FEATURE_FLAG (1 << LE_SS01_FEATURE_ENUM) | |
627 | #define LE_SS02_FEATURE_FLAG (1 << LE_SS02_FEATURE_ENUM) | |
628 | #define LE_SS03_FEATURE_FLAG (1 << LE_SS03_FEATURE_ENUM) | |
629 | #define LE_SS04_FEATURE_FLAG (1 << LE_SS04_FEATURE_ENUM) | |
630 | #define LE_SS05_FEATURE_FLAG (1 << LE_SS05_FEATURE_ENUM) | |
631 | #define LE_SS06_FEATURE_FLAG (1 << LE_SS06_FEATURE_ENUM) | |
632 | #define LE_SS07_FEATURE_FLAG (1 << LE_SS07_FEATURE_ENUM) | |
633 | ||
634 | #define LE_CHAR_FILTER_FEATURE_FLAG (1 << LE_CHAR_FILTER_FEATURE_ENUM) | |
635 | /** | |
636 | * @} | |
637 | */ | |
638 | ||
b75a7d8f A |
639 | /** |
640 | * Error codes returned by the LayoutEngine. | |
641 | * | |
642 | * @stable ICU 2.4 | |
643 | */ | |
644 | enum LEErrorCode { | |
645 | /* informational */ | |
73c04bcf | 646 | LE_NO_SUBFONT_WARNING = U_USING_DEFAULT_WARNING, /**< The font does not contain subfonts. */ |
b75a7d8f A |
647 | |
648 | /* success */ | |
73c04bcf | 649 | LE_NO_ERROR = U_ZERO_ERROR, /**< No error, no warning. */ |
b75a7d8f A |
650 | |
651 | /* failures */ | |
73c04bcf A |
652 | LE_ILLEGAL_ARGUMENT_ERROR = U_ILLEGAL_ARGUMENT_ERROR, /**< An illegal argument was detected. */ |
653 | LE_MEMORY_ALLOCATION_ERROR = U_MEMORY_ALLOCATION_ERROR, /**< Memory allocation error. */ | |
654 | LE_INDEX_OUT_OF_BOUNDS_ERROR = U_INDEX_OUTOFBOUNDS_ERROR, /**< Trying to access an index that is out of bounds. */ | |
655 | LE_NO_LAYOUT_ERROR = U_UNSUPPORTED_ERROR, /**< You must call layoutChars() first. */ | |
656 | LE_INTERNAL_ERROR = U_INTERNAL_PROGRAM_ERROR, /**< An internal error was encountered. */ | |
657 | LE_FONT_FILE_NOT_FOUND_ERROR = U_FILE_ACCESS_ERROR, /**< The requested font file cannot be opened. */ | |
658 | LE_MISSING_FONT_TABLE_ERROR = U_MISSING_RESOURCE_ERROR /**< The requested font table does not exist. */ | |
b75a7d8f A |
659 | }; |
660 | ||
4388f060 | 661 | #ifndef __cplusplus |
b75a7d8f A |
662 | /** |
663 | * Error codes returned by the LayoutEngine. | |
664 | * | |
665 | * @stable ICU 2.4 | |
666 | */ | |
667 | typedef enum LEErrorCode LEErrorCode; | |
668 | #endif | |
669 | ||
670 | /** | |
671 | * A convenience macro to test for the success of a LayoutEngine call. | |
672 | * | |
673 | * @stable ICU 2.4 | |
674 | */ | |
675 | #define LE_SUCCESS(code) (U_SUCCESS((UErrorCode)code)) | |
676 | ||
677 | /** | |
678 | * A convenience macro to test for the failure of a LayoutEngine call. | |
679 | * | |
680 | * @stable ICU 2.4 | |
681 | */ | |
682 | #define LE_FAILURE(code) (U_FAILURE((UErrorCode)code)) | |
683 | ||
b75a7d8f | 684 | #endif |