1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  * GNU Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public License
16  * along with gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19 
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 
25 module harfbuzz.c.types;
26 
27 public import gobject.c.types;
28 
29 public alias hb_language_t = void*;
30 
31 /**
32  * Data type for booleans.
33  */
34 public alias int hb_bool_t;
35 
36 /**
37  * Data type for holding Unicode codepoints. Also
38  * used to hold glyph IDs.
39  */
40 public alias uint hb_codepoint_t;
41 
42 /**
43  * Data type for holding color values. Colors are eight bits per
44  * channel RGB plus alpha transparency.
45  */
46 public alias uint hb_color_t;
47 
48 /**
49  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
50  *
51  * This method should retrieve the extents for a font, for horizontal-direction
52  * text segments. Extents must be returned in an #hb_glyph_extents output
53  * parameter.
54  */
55 public alias hb_font_get_font_extents_func_t hb_font_get_font_h_extents_func_t;
56 
57 /**
58  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
59  *
60  * This method should retrieve the extents for a font, for vertical-direction
61  * text segments. Extents must be returned in an #hb_glyph_extents output
62  * parameter.
63  */
64 public alias hb_font_get_font_extents_func_t hb_font_get_font_v_extents_func_t;
65 
66 /**
67  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
68  *
69  * This method should retrieve the advance for a specified glyph, in
70  * horizontal-direction text segments. Advances must be returned in
71  * an #hb_position_t output parameter.
72  */
73 public alias hb_font_get_glyph_advance_func_t hb_font_get_glyph_h_advance_func_t;
74 
75 /**
76  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
77  *
78  * This method should retrieve the advances for a sequence of glyphs, in
79  * horizontal-direction text segments.
80  */
81 public alias hb_font_get_glyph_advances_func_t hb_font_get_glyph_h_advances_func_t;
82 
83 /**
84  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
85  *
86  * This method should retrieve the kerning-adjustment value for a glyph-pair in
87  * the specified font, for horizontal text segments.
88  */
89 public alias hb_font_get_glyph_kerning_func_t hb_font_get_glyph_h_kerning_func_t;
90 
91 /**
92  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
93  *
94  * This method should retrieve the (X,Y) coordinates (in font units) of the
95  * origin for a glyph, for horizontal-direction text segments. Each
96  * coordinate must be returned in an #hb_position_t output parameter.
97  */
98 public alias hb_font_get_glyph_origin_func_t hb_font_get_glyph_h_origin_func_t;
99 
100 /**
101  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
102  *
103  * This method should retrieve the advance for a specified glyph, in
104  * vertical-direction text segments. Advances must be returned in
105  * an #hb_position_t output parameter.
106  */
107 public alias hb_font_get_glyph_advance_func_t hb_font_get_glyph_v_advance_func_t;
108 
109 /**
110  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
111  *
112  * This method should retrieve the advances for a sequence of glyphs, in
113  * vertical-direction text segments.
114  */
115 public alias hb_font_get_glyph_advances_func_t hb_font_get_glyph_v_advances_func_t;
116 
117 /**
118  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
119  *
120  * This method should retrieve the kerning-adjustment value for a glyph-pair in
121  * the specified font, for vertical text segments.
122  */
123 public alias hb_font_get_glyph_kerning_func_t hb_font_get_glyph_v_kerning_func_t;
124 
125 /**
126  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
127  *
128  * This method should retrieve the (X,Y) coordinates (in font units) of the
129  * origin for a glyph, for vertical-direction text segments. Each coordinate
130  * must be returned in an #hb_position_t output parameter.
131  */
132 public alias hb_font_get_glyph_origin_func_t hb_font_get_glyph_v_origin_func_t;
133 
134 /**
135  * Data type for bitmasks.
136  */
137 public alias uint hb_mask_t;
138 
139 /**
140  * An integral type representing an OpenType 'name' table name identifier.
141  * There are predefined name IDs, as well as name IDs return from other
142  * API.  These can be used to fetch name strings from a font face.
143  */
144 public alias uint hb_ot_name_id_t;
145 
146 /**
147  * Data type for holding a single coordinate value.
148  * Contour points and other multi-dimensional data are
149  * stored as tuples of #hb_position_t's.
150  */
151 public alias int hb_position_t;
152 
153 /**
154  * Data type for tag identifiers. Tags are four
155  * byte integers, each byte representing a character.
156  *
157  * Tags are used to identify tables, design-variation axes,
158  * scripts, languages, font features, and baselines with
159  * human-readable names.
160  */
161 public alias uint hb_tag_t;
162 
163 /**
164  * The selectors defined for specifying AAT feature settings.
165  *
166  * Since: 2.2.0
167  */
168 public enum hb_aat_layout_feature_selector_t
169 {
170 	/**
171 	 * Initial, unset feature selector
172 	 */
173 	INVALID = 65535,
174 	/**
175 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC
176 	 */
177 	ALL_TYPE_FEATURES_ON = 0,
178 	/**
179 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC
180 	 */
181 	ALL_TYPE_FEATURES_OFF = 1,
182 	/**
183 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
184 	 */
185 	REQUIRED_LIGATURES_ON = 0,
186 	/**
187 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
188 	 */
189 	REQUIRED_LIGATURES_OFF = 1,
190 	/**
191 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
192 	 */
193 	COMMON_LIGATURES_ON = 2,
194 	/**
195 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
196 	 */
197 	COMMON_LIGATURES_OFF = 3,
198 	/**
199 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
200 	 */
201 	RARE_LIGATURES_ON = 4,
202 	/**
203 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
204 	 */
205 	RARE_LIGATURES_OFF = 5,
206 	/**
207 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
208 	 */
209 	LOGOS_ON = 6,
210 	/**
211 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
212 	 */
213 	LOGOS_OFF = 7,
214 	/**
215 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
216 	 */
217 	REBUS_PICTURES_ON = 8,
218 	/**
219 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
220 	 */
221 	REBUS_PICTURES_OFF = 9,
222 	/**
223 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
224 	 */
225 	DIPHTHONG_LIGATURES_ON = 10,
226 	/**
227 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
228 	 */
229 	DIPHTHONG_LIGATURES_OFF = 11,
230 	/**
231 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
232 	 */
233 	SQUARED_LIGATURES_ON = 12,
234 	/**
235 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
236 	 */
237 	SQUARED_LIGATURES_OFF = 13,
238 	/**
239 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
240 	 */
241 	ABBREV_SQUARED_LIGATURES_ON = 14,
242 	/**
243 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
244 	 */
245 	ABBREV_SQUARED_LIGATURES_OFF = 15,
246 	/**
247 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
248 	 */
249 	SYMBOL_LIGATURES_ON = 16,
250 	/**
251 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
252 	 */
253 	SYMBOL_LIGATURES_OFF = 17,
254 	/**
255 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
256 	 */
257 	CONTEXTUAL_LIGATURES_ON = 18,
258 	/**
259 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
260 	 */
261 	CONTEXTUAL_LIGATURES_OFF = 19,
262 	/**
263 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
264 	 */
265 	HISTORICAL_LIGATURES_ON = 20,
266 	/**
267 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
268 	 */
269 	HISTORICAL_LIGATURES_OFF = 21,
270 	/**
271 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
272 	 */
273 	UNCONNECTED = 0,
274 	/**
275 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
276 	 */
277 	PARTIALLY_CONNECTED = 1,
278 	/**
279 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES
280 	 */
281 	CURSIVE = 2,
282 	/**
283 	 * Deprecated
284 	 */
285 	UPPER_AND_LOWER_CASE = 0,
286 	/**
287 	 * Deprecated
288 	 */
289 	ALL_CAPS = 1,
290 	/**
291 	 * Deprecated
292 	 */
293 	ALL_LOWER_CASE = 2,
294 	/**
295 	 * Deprecated
296 	 */
297 	SMALL_CAPS = 3,
298 	/**
299 	 * Deprecated
300 	 */
301 	INITIAL_CAPS = 4,
302 	/**
303 	 * Deprecated
304 	 */
305 	INITIAL_CAPS_AND_SMALL_CAPS = 5,
306 	/**
307 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION
308 	 */
309 	SUBSTITUTE_VERTICAL_FORMS_ON = 0,
310 	/**
311 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION
312 	 */
313 	SUBSTITUTE_VERTICAL_FORMS_OFF = 1,
314 	/**
315 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT
316 	 */
317 	LINGUISTIC_REARRANGEMENT_ON = 0,
318 	/**
319 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT
320 	 */
321 	LINGUISTIC_REARRANGEMENT_OFF = 1,
322 	/**
323 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
324 	 */
325 	MONOSPACED_NUMBERS = 0,
326 	/**
327 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
328 	 */
329 	PROPORTIONAL_NUMBERS = 1,
330 	/**
331 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
332 	 */
333 	THIRD_WIDTH_NUMBERS = 2,
334 	/**
335 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING
336 	 */
337 	QUARTER_WIDTH_NUMBERS = 3,
338 	/**
339 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
340 	 */
341 	WORD_INITIAL_SWASHES_ON = 0,
342 	/**
343 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
344 	 */
345 	WORD_INITIAL_SWASHES_OFF = 1,
346 	/**
347 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
348 	 */
349 	WORD_FINAL_SWASHES_ON = 2,
350 	/**
351 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
352 	 */
353 	WORD_FINAL_SWASHES_OFF = 3,
354 	/**
355 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
356 	 */
357 	LINE_INITIAL_SWASHES_ON = 4,
358 	/**
359 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
360 	 */
361 	LINE_INITIAL_SWASHES_OFF = 5,
362 	/**
363 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
364 	 */
365 	LINE_FINAL_SWASHES_ON = 6,
366 	/**
367 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
368 	 */
369 	LINE_FINAL_SWASHES_OFF = 7,
370 	/**
371 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
372 	 */
373 	NON_FINAL_SWASHES_ON = 8,
374 	/**
375 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE
376 	 */
377 	NON_FINAL_SWASHES_OFF = 9,
378 	/**
379 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
380 	 */
381 	SHOW_DIACRITICS = 0,
382 	/**
383 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
384 	 */
385 	HIDE_DIACRITICS = 1,
386 	/**
387 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE
388 	 */
389 	DECOMPOSE_DIACRITICS = 2,
390 	/**
391 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
392 	 */
393 	NORMAL_POSITION = 0,
394 	/**
395 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
396 	 */
397 	SUPERIORS = 1,
398 	/**
399 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
400 	 */
401 	INFERIORS = 2,
402 	/**
403 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
404 	 */
405 	ORDINALS = 3,
406 	/**
407 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION
408 	 */
409 	SCIENTIFIC_INFERIORS = 4,
410 	/**
411 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
412 	 */
413 	NO_FRACTIONS = 0,
414 	/**
415 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
416 	 */
417 	VERTICAL_FRACTIONS = 1,
418 	/**
419 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS
420 	 */
421 	DIAGONAL_FRACTIONS = 2,
422 	/**
423 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE
424 	 */
425 	PREVENT_OVERLAP_ON = 0,
426 	/**
427 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE
428 	 */
429 	PREVENT_OVERLAP_OFF = 1,
430 	/**
431 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
432 	 */
433 	HYPHENS_TO_EM_DASH_ON = 0,
434 	/**
435 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
436 	 */
437 	HYPHENS_TO_EM_DASH_OFF = 1,
438 	/**
439 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
440 	 */
441 	HYPHEN_TO_EN_DASH_ON = 2,
442 	/**
443 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
444 	 */
445 	HYPHEN_TO_EN_DASH_OFF = 3,
446 	/**
447 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
448 	 */
449 	SLASHED_ZERO_ON = 4,
450 	/**
451 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
452 	 */
453 	SLASHED_ZERO_OFF = 5,
454 	/**
455 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
456 	 */
457 	FORM_INTERROBANG_ON = 6,
458 	/**
459 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
460 	 */
461 	FORM_INTERROBANG_OFF = 7,
462 	/**
463 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
464 	 */
465 	SMART_QUOTES_ON = 8,
466 	/**
467 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
468 	 */
469 	SMART_QUOTES_OFF = 9,
470 	/**
471 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
472 	 */
473 	PERIODS_TO_ELLIPSIS_ON = 10,
474 	/**
475 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS
476 	 */
477 	PERIODS_TO_ELLIPSIS_OFF = 11,
478 	/**
479 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
480 	 */
481 	HYPHEN_TO_MINUS_ON = 0,
482 	/**
483 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
484 	 */
485 	HYPHEN_TO_MINUS_OFF = 1,
486 	/**
487 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
488 	 */
489 	ASTERISK_TO_MULTIPLY_ON = 2,
490 	/**
491 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
492 	 */
493 	ASTERISK_TO_MULTIPLY_OFF = 3,
494 	/**
495 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
496 	 */
497 	SLASH_TO_DIVIDE_ON = 4,
498 	/**
499 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
500 	 */
501 	SLASH_TO_DIVIDE_OFF = 5,
502 	/**
503 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
504 	 */
505 	INEQUALITY_LIGATURES_ON = 6,
506 	/**
507 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
508 	 */
509 	INEQUALITY_LIGATURES_OFF = 7,
510 	/**
511 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
512 	 */
513 	EXPONENTS_ON = 8,
514 	/**
515 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
516 	 */
517 	EXPONENTS_OFF = 9,
518 	/**
519 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
520 	 */
521 	MATHEMATICAL_GREEK_ON = 10,
522 	/**
523 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS
524 	 */
525 	MATHEMATICAL_GREEK_OFF = 11,
526 	/**
527 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
528 	 */
529 	NO_ORNAMENTS = 0,
530 	/**
531 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
532 	 */
533 	DINGBATS = 1,
534 	/**
535 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
536 	 */
537 	PI_CHARACTERS = 2,
538 	/**
539 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
540 	 */
541 	FLEURONS = 3,
542 	/**
543 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
544 	 */
545 	DECORATIVE_BORDERS = 4,
546 	/**
547 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
548 	 */
549 	INTERNATIONAL_SYMBOLS = 5,
550 	/**
551 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE
552 	 */
553 	MATH_SYMBOLS = 6,
554 	/**
555 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES
556 	 */
557 	NO_ALTERNATES = 0,
558 	/**
559 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
560 	 */
561 	DESIGN_LEVEL1 = 0,
562 	/**
563 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
564 	 */
565 	DESIGN_LEVEL2 = 1,
566 	/**
567 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
568 	 */
569 	DESIGN_LEVEL3 = 2,
570 	/**
571 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
572 	 */
573 	DESIGN_LEVEL4 = 3,
574 	/**
575 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE
576 	 */
577 	DESIGN_LEVEL5 = 4,
578 	/**
579 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
580 	 */
581 	NO_STYLE_OPTIONS = 0,
582 	/**
583 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
584 	 */
585 	DISPLAY_TEXT = 1,
586 	/**
587 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
588 	 */
589 	ENGRAVED_TEXT = 2,
590 	/**
591 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
592 	 */
593 	ILLUMINATED_CAPS = 3,
594 	/**
595 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
596 	 */
597 	TITLING_CAPS = 4,
598 	/**
599 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS
600 	 */
601 	TALL_CAPS = 5,
602 	/**
603 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
604 	 */
605 	TRADITIONAL_CHARACTERS = 0,
606 	/**
607 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
608 	 */
609 	SIMPLIFIED_CHARACTERS = 1,
610 	/**
611 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
612 	 */
613 	JIS1978_CHARACTERS = 2,
614 	/**
615 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
616 	 */
617 	JIS1983_CHARACTERS = 3,
618 	/**
619 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
620 	 */
621 	JIS1990_CHARACTERS = 4,
622 	/**
623 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
624 	 */
625 	TRADITIONAL_ALT_ONE = 5,
626 	/**
627 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
628 	 */
629 	TRADITIONAL_ALT_TWO = 6,
630 	/**
631 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
632 	 */
633 	TRADITIONAL_ALT_THREE = 7,
634 	/**
635 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
636 	 */
637 	TRADITIONAL_ALT_FOUR = 8,
638 	/**
639 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
640 	 */
641 	TRADITIONAL_ALT_FIVE = 9,
642 	/**
643 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
644 	 */
645 	EXPERT_CHARACTERS = 10,
646 	/**
647 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
648 	 */
649 	JIS2004_CHARACTERS = 11,
650 	/**
651 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
652 	 */
653 	HOJO_CHARACTERS = 12,
654 	/**
655 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
656 	 */
657 	NLCCHARACTERS = 13,
658 	/**
659 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE
660 	 */
661 	TRADITIONAL_NAMES_CHARACTERS = 14,
662 	/**
663 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE
664 	 */
665 	LOWER_CASE_NUMBERS = 0,
666 	/**
667 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE
668 	 */
669 	UPPER_CASE_NUMBERS = 1,
670 	/**
671 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
672 	 */
673 	PROPORTIONAL_TEXT = 0,
674 	/**
675 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
676 	 */
677 	MONOSPACED_TEXT = 1,
678 	/**
679 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
680 	 */
681 	HALF_WIDTH_TEXT = 2,
682 	/**
683 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
684 	 */
685 	THIRD_WIDTH_TEXT = 3,
686 	/**
687 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
688 	 */
689 	QUARTER_WIDTH_TEXT = 4,
690 	/**
691 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
692 	 */
693 	ALT_PROPORTIONAL_TEXT = 5,
694 	/**
695 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING
696 	 */
697 	ALT_HALF_WIDTH_TEXT = 6,
698 	/**
699 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
700 	 */
701 	NO_TRANSLITERATION = 0,
702 	/**
703 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
704 	 */
705 	HANJA_TO_HANGUL = 1,
706 	/**
707 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
708 	 */
709 	HIRAGANA_TO_KATAKANA = 2,
710 	/**
711 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
712 	 */
713 	KATAKANA_TO_HIRAGANA = 3,
714 	/**
715 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
716 	 */
717 	KANA_TO_ROMANIZATION = 4,
718 	/**
719 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
720 	 */
721 	ROMANIZATION_TO_HIRAGANA = 5,
722 	/**
723 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
724 	 */
725 	ROMANIZATION_TO_KATAKANA = 6,
726 	/**
727 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
728 	 */
729 	HANJA_TO_HANGUL_ALT_ONE = 7,
730 	/**
731 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
732 	 */
733 	HANJA_TO_HANGUL_ALT_TWO = 8,
734 	/**
735 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION
736 	 */
737 	HANJA_TO_HANGUL_ALT_THREE = 9,
738 	/**
739 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
740 	 */
741 	NO_ANNOTATION = 0,
742 	/**
743 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
744 	 */
745 	BOX_ANNOTATION = 1,
746 	/**
747 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
748 	 */
749 	ROUNDED_BOX_ANNOTATION = 2,
750 	/**
751 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
752 	 */
753 	CIRCLE_ANNOTATION = 3,
754 	/**
755 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
756 	 */
757 	INVERTED_CIRCLE_ANNOTATION = 4,
758 	/**
759 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
760 	 */
761 	PARENTHESIS_ANNOTATION = 5,
762 	/**
763 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
764 	 */
765 	PERIOD_ANNOTATION = 6,
766 	/**
767 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
768 	 */
769 	ROMAN_NUMERAL_ANNOTATION = 7,
770 	/**
771 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
772 	 */
773 	DIAMOND_ANNOTATION = 8,
774 	/**
775 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
776 	 */
777 	INVERTED_BOX_ANNOTATION = 9,
778 	/**
779 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE
780 	 */
781 	INVERTED_ROUNDED_BOX_ANNOTATION = 10,
782 	/**
783 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE
784 	 */
785 	FULL_WIDTH_KANA = 0,
786 	/**
787 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE
788 	 */
789 	PROPORTIONAL_KANA = 1,
790 	/**
791 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
792 	 */
793 	FULL_WIDTH_IDEOGRAPHS = 0,
794 	/**
795 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
796 	 */
797 	PROPORTIONAL_IDEOGRAPHS = 1,
798 	/**
799 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE
800 	 */
801 	HALF_WIDTH_IDEOGRAPHS = 2,
802 	/**
803 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
804 	 */
805 	CANONICAL_COMPOSITION_ON = 0,
806 	/**
807 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
808 	 */
809 	CANONICAL_COMPOSITION_OFF = 1,
810 	/**
811 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
812 	 */
813 	COMPATIBILITY_COMPOSITION_ON = 2,
814 	/**
815 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
816 	 */
817 	COMPATIBILITY_COMPOSITION_OFF = 3,
818 	/**
819 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
820 	 */
821 	TRANSCODING_COMPOSITION_ON = 4,
822 	/**
823 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE
824 	 */
825 	TRANSCODING_COMPOSITION_OFF = 5,
826 	/**
827 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF instead
828 	 */
829 	NO_RUBY_KANA = 0,
830 	/**
831 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON instead
832 	 */
833 	RUBY_KANA = 1,
834 	/**
835 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA
836 	 */
837 	RUBY_KANA_ON = 2,
838 	/**
839 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA
840 	 */
841 	RUBY_KANA_OFF = 3,
842 	/**
843 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
844 	 */
845 	NO_CJK_SYMBOL_ALTERNATIVES = 0,
846 	/**
847 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
848 	 */
849 	CJK_SYMBOL_ALT_ONE = 1,
850 	/**
851 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
852 	 */
853 	CJK_SYMBOL_ALT_TWO = 2,
854 	/**
855 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
856 	 */
857 	CJK_SYMBOL_ALT_THREE = 3,
858 	/**
859 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
860 	 */
861 	CJK_SYMBOL_ALT_FOUR = 4,
862 	/**
863 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE
864 	 */
865 	CJK_SYMBOL_ALT_FIVE = 5,
866 	/**
867 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
868 	 */
869 	NO_IDEOGRAPHIC_ALTERNATIVES = 0,
870 	/**
871 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
872 	 */
873 	IDEOGRAPHIC_ALT_ONE = 1,
874 	/**
875 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
876 	 */
877 	IDEOGRAPHIC_ALT_TWO = 2,
878 	/**
879 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
880 	 */
881 	IDEOGRAPHIC_ALT_THREE = 3,
882 	/**
883 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
884 	 */
885 	IDEOGRAPHIC_ALT_FOUR = 4,
886 	/**
887 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE
888 	 */
889 	IDEOGRAPHIC_ALT_FIVE = 5,
890 	/**
891 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE
892 	 */
893 	CJK_VERTICAL_ROMAN_CENTERED = 0,
894 	/**
895 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE
896 	 */
897 	CJK_VERTICAL_ROMAN_HBASELINE = 1,
898 	/**
899 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF instead
900 	 */
901 	NO_CJK_ITALIC_ROMAN = 0,
902 	/**
903 	 * Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON instead
904 	 */
905 	CJK_ITALIC_ROMAN = 1,
906 	/**
907 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN
908 	 */
909 	CJK_ITALIC_ROMAN_ON = 2,
910 	/**
911 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN
912 	 */
913 	CJK_ITALIC_ROMAN_OFF = 3,
914 	/**
915 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
916 	 */
917 	CASE_SENSITIVE_LAYOUT_ON = 0,
918 	/**
919 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
920 	 */
921 	CASE_SENSITIVE_LAYOUT_OFF = 1,
922 	/**
923 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
924 	 */
925 	CASE_SENSITIVE_SPACING_ON = 2,
926 	/**
927 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT
928 	 */
929 	CASE_SENSITIVE_SPACING_OFF = 3,
930 	/**
931 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
932 	 */
933 	ALTERNATE_HORIZ_KANA_ON = 0,
934 	/**
935 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
936 	 */
937 	ALTERNATE_HORIZ_KANA_OFF = 1,
938 	/**
939 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
940 	 */
941 	ALTERNATE_VERT_KANA_ON = 2,
942 	/**
943 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA
944 	 */
945 	ALTERNATE_VERT_KANA_OFF = 3,
946 	/**
947 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
948 	 */
949 	NO_STYLISTIC_ALTERNATES = 0,
950 	/**
951 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
952 	 */
953 	STYLISTIC_ALT_ONE_ON = 2,
954 	/**
955 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
956 	 */
957 	STYLISTIC_ALT_ONE_OFF = 3,
958 	/**
959 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
960 	 */
961 	STYLISTIC_ALT_TWO_ON = 4,
962 	/**
963 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
964 	 */
965 	STYLISTIC_ALT_TWO_OFF = 5,
966 	/**
967 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
968 	 */
969 	STYLISTIC_ALT_THREE_ON = 6,
970 	/**
971 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
972 	 */
973 	STYLISTIC_ALT_THREE_OFF = 7,
974 	/**
975 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
976 	 */
977 	STYLISTIC_ALT_FOUR_ON = 8,
978 	/**
979 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
980 	 */
981 	STYLISTIC_ALT_FOUR_OFF = 9,
982 	/**
983 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
984 	 */
985 	STYLISTIC_ALT_FIVE_ON = 10,
986 	/**
987 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
988 	 */
989 	STYLISTIC_ALT_FIVE_OFF = 11,
990 	/**
991 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
992 	 */
993 	STYLISTIC_ALT_SIX_ON = 12,
994 	/**
995 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
996 	 */
997 	STYLISTIC_ALT_SIX_OFF = 13,
998 	/**
999 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1000 	 */
1001 	STYLISTIC_ALT_SEVEN_ON = 14,
1002 	/**
1003 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1004 	 */
1005 	STYLISTIC_ALT_SEVEN_OFF = 15,
1006 	/**
1007 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1008 	 */
1009 	STYLISTIC_ALT_EIGHT_ON = 16,
1010 	/**
1011 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1012 	 */
1013 	STYLISTIC_ALT_EIGHT_OFF = 17,
1014 	/**
1015 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1016 	 */
1017 	STYLISTIC_ALT_NINE_ON = 18,
1018 	/**
1019 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1020 	 */
1021 	STYLISTIC_ALT_NINE_OFF = 19,
1022 	/**
1023 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1024 	 */
1025 	STYLISTIC_ALT_TEN_ON = 20,
1026 	/**
1027 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1028 	 */
1029 	STYLISTIC_ALT_TEN_OFF = 21,
1030 	/**
1031 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1032 	 */
1033 	STYLISTIC_ALT_ELEVEN_ON = 22,
1034 	/**
1035 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1036 	 */
1037 	STYLISTIC_ALT_ELEVEN_OFF = 23,
1038 	/**
1039 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1040 	 */
1041 	STYLISTIC_ALT_TWELVE_ON = 24,
1042 	/**
1043 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1044 	 */
1045 	STYLISTIC_ALT_TWELVE_OFF = 25,
1046 	/**
1047 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1048 	 */
1049 	STYLISTIC_ALT_THIRTEEN_ON = 26,
1050 	/**
1051 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1052 	 */
1053 	STYLISTIC_ALT_THIRTEEN_OFF = 27,
1054 	/**
1055 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1056 	 */
1057 	STYLISTIC_ALT_FOURTEEN_ON = 28,
1058 	/**
1059 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1060 	 */
1061 	STYLISTIC_ALT_FOURTEEN_OFF = 29,
1062 	/**
1063 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1064 	 */
1065 	STYLISTIC_ALT_FIFTEEN_ON = 30,
1066 	/**
1067 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1068 	 */
1069 	STYLISTIC_ALT_FIFTEEN_OFF = 31,
1070 	/**
1071 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1072 	 */
1073 	STYLISTIC_ALT_SIXTEEN_ON = 32,
1074 	/**
1075 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1076 	 */
1077 	STYLISTIC_ALT_SIXTEEN_OFF = 33,
1078 	/**
1079 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1080 	 */
1081 	STYLISTIC_ALT_SEVENTEEN_ON = 34,
1082 	/**
1083 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1084 	 */
1085 	STYLISTIC_ALT_SEVENTEEN_OFF = 35,
1086 	/**
1087 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1088 	 */
1089 	STYLISTIC_ALT_EIGHTEEN_ON = 36,
1090 	/**
1091 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1092 	 */
1093 	STYLISTIC_ALT_EIGHTEEN_OFF = 37,
1094 	/**
1095 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1096 	 */
1097 	STYLISTIC_ALT_NINETEEN_ON = 38,
1098 	/**
1099 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1100 	 */
1101 	STYLISTIC_ALT_NINETEEN_OFF = 39,
1102 	/**
1103 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1104 	 */
1105 	STYLISTIC_ALT_TWENTY_ON = 40,
1106 	/**
1107 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES
1108 	 */
1109 	STYLISTIC_ALT_TWENTY_OFF = 41,
1110 	/**
1111 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1112 	 */
1113 	CONTEXTUAL_ALTERNATES_ON = 0,
1114 	/**
1115 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1116 	 */
1117 	CONTEXTUAL_ALTERNATES_OFF = 1,
1118 	/**
1119 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1120 	 */
1121 	SWASH_ALTERNATES_ON = 2,
1122 	/**
1123 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1124 	 */
1125 	SWASH_ALTERNATES_OFF = 3,
1126 	/**
1127 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1128 	 */
1129 	CONTEXTUAL_SWASH_ALTERNATES_ON = 4,
1130 	/**
1131 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES
1132 	 */
1133 	CONTEXTUAL_SWASH_ALTERNATES_OFF = 5,
1134 	/**
1135 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1136 	 */
1137 	DEFAULT_LOWER_CASE = 0,
1138 	/**
1139 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1140 	 */
1141 	LOWER_CASE_SMALL_CAPS = 1,
1142 	/**
1143 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE
1144 	 */
1145 	LOWER_CASE_PETITE_CAPS = 2,
1146 	/**
1147 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1148 	 */
1149 	DEFAULT_UPPER_CASE = 0,
1150 	/**
1151 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1152 	 */
1153 	UPPER_CASE_SMALL_CAPS = 1,
1154 	/**
1155 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE
1156 	 */
1157 	UPPER_CASE_PETITE_CAPS = 2,
1158 	/**
1159 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1160 	 */
1161 	HALF_WIDTH_CJK_ROMAN = 0,
1162 	/**
1163 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1164 	 */
1165 	PROPORTIONAL_CJK_ROMAN = 1,
1166 	/**
1167 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1168 	 */
1169 	DEFAULT_CJK_ROMAN = 2,
1170 	/**
1171 	 * for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE
1172 	 */
1173 	FULL_WIDTH_CJK_ROMAN = 3,
1174 }
1175 alias hb_aat_layout_feature_selector_t aat_layout_feature_selector_t;
1176 
1177 /**
1178  * The possible feature types defined for AAT shaping, from Apple [Font Feature Registry](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html).
1179  *
1180  * Since: 2.2.0
1181  */
1182 public enum hb_aat_layout_feature_type_t
1183 {
1184 	/**
1185 	 * Initial, unset feature type
1186 	 */
1187 	INVALID = 65535,
1188 	/**
1189 	 * [All Typographic Features](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type0)
1190 	 */
1191 	ALL_TYPOGRAPHIC = 0,
1192 	/**
1193 	 * [Ligatures](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type1)
1194 	 */
1195 	LIGATURES = 1,
1196 	/**
1197 	 * [Cursive Connection](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type2)
1198 	 */
1199 	CURISVE_CONNECTION = 2,
1200 	/**
1201 	 * [Letter Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type3)
1202 	 */
1203 	LETTER_CASE = 3,
1204 	/**
1205 	 * [Vertical Substitution](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type4)
1206 	 */
1207 	VERTICAL_SUBSTITUTION = 4,
1208 	/**
1209 	 * [Linguistic Rearrangement](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type5)
1210 	 */
1211 	LINGUISTIC_REARRANGEMENT = 5,
1212 	/**
1213 	 * [Number Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type6)
1214 	 */
1215 	NUMBER_SPACING = 6,
1216 	/**
1217 	 * [Smart Swash](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type8)
1218 	 */
1219 	SMART_SWASH_TYPE = 8,
1220 	/**
1221 	 * [Diacritics](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type9)
1222 	 */
1223 	DIACRITICS_TYPE = 9,
1224 	/**
1225 	 * [Vertical Position](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type10)
1226 	 */
1227 	VERTICAL_POSITION = 10,
1228 	/**
1229 	 * [Fractions](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type11)
1230 	 */
1231 	FRACTIONS = 11,
1232 	/**
1233 	 * [Overlapping Characters](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type13)
1234 	 */
1235 	OVERLAPPING_CHARACTERS_TYPE = 13,
1236 	/**
1237 	 * [Typographic Extras](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type14)
1238 	 */
1239 	TYPOGRAPHIC_EXTRAS = 14,
1240 	/**
1241 	 * [Mathematical Extras](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type15)
1242 	 */
1243 	MATHEMATICAL_EXTRAS = 15,
1244 	/**
1245 	 * [Ornament Sets](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type16)
1246 	 */
1247 	ORNAMENT_SETS_TYPE = 16,
1248 	/**
1249 	 * [Character Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type17)
1250 	 */
1251 	CHARACTER_ALTERNATIVES = 17,
1252 	/**
1253 	 * [Design Complexity](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type18)
1254 	 */
1255 	DESIGN_COMPLEXITY_TYPE = 18,
1256 	/**
1257 	 * [Style Options](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type19)
1258 	 */
1259 	STYLE_OPTIONS = 19,
1260 	/**
1261 	 * [Character Shape](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type20)
1262 	 */
1263 	CHARACTER_SHAPE = 20,
1264 	/**
1265 	 * [Number Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type21)
1266 	 */
1267 	NUMBER_CASE = 21,
1268 	/**
1269 	 * [Text Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type22)
1270 	 */
1271 	TEXT_SPACING = 22,
1272 	/**
1273 	 * [Transliteration](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type23)
1274 	 */
1275 	TRANSLITERATION = 23,
1276 	/**
1277 	 * [Annotation](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type24)
1278 	 */
1279 	ANNOTATION_TYPE = 24,
1280 	/**
1281 	 * [Kana Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type25)
1282 	 */
1283 	KANA_SPACING_TYPE = 25,
1284 	/**
1285 	 * [Ideographic Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type26)
1286 	 */
1287 	IDEOGRAPHIC_SPACING_TYPE = 26,
1288 	/**
1289 	 * [Unicode Decomposition](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type27)
1290 	 */
1291 	UNICODE_DECOMPOSITION_TYPE = 27,
1292 	/**
1293 	 * [Ruby Kana](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type28)
1294 	 */
1295 	RUBY_KANA = 28,
1296 	/**
1297 	 * [CJK Symbol Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type29)
1298 	 */
1299 	CJK_SYMBOL_ALTERNATIVES_TYPE = 29,
1300 	/**
1301 	 * [Ideographic Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type30)
1302 	 */
1303 	IDEOGRAPHIC_ALTERNATIVES_TYPE = 30,
1304 	/**
1305 	 * [CJK Vertical Roman Placement](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type31)
1306 	 */
1307 	CJK_VERTICAL_ROMAN_PLACEMENT_TYPE = 31,
1308 	/**
1309 	 * [Italic CJK Roman](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type32)
1310 	 */
1311 	ITALIC_CJK_ROMAN = 32,
1312 	/**
1313 	 * [Case Sensitive Layout](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type33)
1314 	 */
1315 	CASE_SENSITIVE_LAYOUT = 33,
1316 	/**
1317 	 * [Alternate Kana](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type34)
1318 	 */
1319 	ALTERNATE_KANA = 34,
1320 	/**
1321 	 * [Stylistic Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type35)
1322 	 */
1323 	STYLISTIC_ALTERNATIVES = 35,
1324 	/**
1325 	 * [Contextual Alternatives](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type36)
1326 	 */
1327 	CONTEXTUAL_ALTERNATIVES = 36,
1328 	/**
1329 	 * [Lower Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type37)
1330 	 */
1331 	LOWER_CASE = 37,
1332 	/**
1333 	 * [Upper Case](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type38)
1334 	 */
1335 	UPPER_CASE = 38,
1336 	/**
1337 	 * [Language Tag](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type39)
1338 	 */
1339 	LANGUAGE_TAG_TYPE = 39,
1340 	/**
1341 	 * [CJK Roman Spacing](https://developer.apple.com/fonts/TrueType-Reference-Manual/RM09/AppendixF.html#Type103)
1342 	 */
1343 	CJK_ROMAN_SPACING_TYPE = 103,
1344 }
1345 alias hb_aat_layout_feature_type_t aat_layout_feature_type_t;
1346 
1347 /**
1348  * Data type for holding HarfBuzz's clustering behavior options. The cluster level
1349  * dictates one aspect of how HarfBuzz will treat non-base characters
1350  * during shaping.
1351  *
1352  * In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES, non-base
1353  * characters are merged into the cluster of the base character that precedes them.
1354  *
1355  * In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS, non-base characters are initially
1356  * assigned their own cluster values, which are not merged into preceding base
1357  * clusters. This allows HarfBuzz to perform additional operations like reorder
1358  * sequences of adjacent marks.
1359  *
1360  * @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES is the default, because it maintains
1361  * backward compatibility with older versions of HarfBuzz. New client programs that
1362  * do not need to maintain such backward compatibility are recommended to use
1363  * @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS instead of the default.
1364  *
1365  * Since: 0.9.42
1366  */
1367 public enum hb_buffer_cluster_level_t
1368 {
1369 	/**
1370 	 * Return cluster values grouped by graphemes into
1371 	 * monotone order.
1372 	 */
1373 	MONOTONE_GRAPHEMES = 0,
1374 	/**
1375 	 * Return cluster values grouped into monotone order.
1376 	 */
1377 	MONOTONE_CHARACTERS = 1,
1378 	/**
1379 	 * Don't group cluster values.
1380 	 */
1381 	CHARACTERS = 2,
1382 	/**
1383 	 * Default cluster level,
1384 	 * equal to @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES.
1385 	 */
1386 	DEFAULT = 0,
1387 }
1388 alias hb_buffer_cluster_level_t buffer_cluster_level_t;
1389 
1390 /**
1391  * The type of #hb_buffer_t contents.
1392  */
1393 public enum hb_buffer_content_type_t
1394 {
1395 	/**
1396 	 * Initial value for new buffer.
1397 	 */
1398 	INVALID = 0,
1399 	/**
1400 	 * The buffer contains input characters (before shaping).
1401 	 */
1402 	UNICODE = 1,
1403 	/**
1404 	 * The buffer contains output glyphs (after shaping).
1405 	 */
1406 	GLYPHS = 2,
1407 }
1408 alias hb_buffer_content_type_t buffer_content_type_t;
1409 
1410 /**
1411  * Flags from comparing two #hb_buffer_t's.
1412  *
1413  * Buffer with different #hb_buffer_content_type_t cannot be meaningfully
1414  * compared in any further detail.
1415  *
1416  * For buffers with differing length, the per-glyph comparison is not
1417  * attempted, though we do still scan reference buffer for dotted circle and
1418  * `.notdef` glyphs.
1419  *
1420  * If the buffers have the same length, we compare them glyph-by-glyph and
1421  * report which aspect(s) of the glyph info/position are different.
1422  *
1423  * Since: 1.5.0
1424  */
1425 public enum hb_buffer_diff_flags_t
1426 {
1427 	/**
1428 	 * equal buffers.
1429 	 */
1430 	EQUAL = 0,
1431 	/**
1432 	 * buffers with different
1433 	 * #hb_buffer_content_type_t.
1434 	 */
1435 	CONTENT_TYPE_MISMATCH = 1,
1436 	/**
1437 	 * buffers with differing length.
1438 	 */
1439 	LENGTH_MISMATCH = 2,
1440 	/**
1441 	 * `.notdef` glyph is present in the
1442 	 * reference buffer.
1443 	 */
1444 	NOTDEF_PRESENT = 4,
1445 	/**
1446 	 * dotted circle glyph is present
1447 	 * in the reference buffer.
1448 	 */
1449 	DOTTED_CIRCLE_PRESENT = 8,
1450 	/**
1451 	 * difference in #hb_glyph_info_t.codepoint
1452 	 */
1453 	CODEPOINT_MISMATCH = 16,
1454 	/**
1455 	 * difference in #hb_glyph_info_t.cluster
1456 	 */
1457 	CLUSTER_MISMATCH = 32,
1458 	/**
1459 	 * difference in #hb_glyph_flags_t.
1460 	 */
1461 	GLYPH_FLAGS_MISMATCH = 64,
1462 	/**
1463 	 * difference in #hb_glyph_position_t.
1464 	 */
1465 	POSITION_MISMATCH = 128,
1466 }
1467 alias hb_buffer_diff_flags_t buffer_diff_flags_t;
1468 
1469 /**
1470  * Flags for #hb_buffer_t.
1471  *
1472  * Since: 0.9.20
1473  */
1474 public enum hb_buffer_flags_t
1475 {
1476 	/**
1477 	 * the default buffer flag.
1478 	 */
1479 	DEFAULT = 0,
1480 	/**
1481 	 * flag indicating that special handling of the beginning
1482 	 * of text paragraph can be applied to this buffer. Should usually
1483 	 * be set, unless you are passing to the buffer only part
1484 	 * of the text without the full context.
1485 	 */
1486 	BOT = 1,
1487 	/**
1488 	 * flag indicating that special handling of the end of text
1489 	 * paragraph can be applied to this buffer, similar to
1490 	 * @HB_BUFFER_FLAG_BOT.
1491 	 */
1492 	EOT = 2,
1493 	/**
1494 	 * flag indication that character with Default_Ignorable
1495 	 * Unicode property should use the corresponding glyph
1496 	 * from the font, instead of hiding them (done by
1497 	 * replacing them with the space glyph and zeroing the
1498 	 * advance width.)  This flag takes precedence over
1499 	 * @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES.
1500 	 */
1501 	PRESERVE_DEFAULT_IGNORABLES = 4,
1502 	/**
1503 	 * flag indication that character with Default_Ignorable
1504 	 * Unicode property should be removed from glyph string
1505 	 * instead of hiding them (done by replacing them with the
1506 	 * space glyph and zeroing the advance width.)
1507 	 * @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES takes
1508 	 * precedence over this flag. Since: 1.8.0
1509 	 */
1510 	REMOVE_DEFAULT_IGNORABLES = 8,
1511 	/**
1512 	 * flag indicating that a dotted circle should
1513 	 * not be inserted in the rendering of incorrect
1514 	 * character sequences (such at <0905 093E>). Since: 2.4
1515 	 */
1516 	DO_NOT_INSERT_DOTTED_CIRCLE = 16,
1517 }
1518 alias hb_buffer_flags_t buffer_flags_t;
1519 
1520 /**
1521  * Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().
1522  *
1523  * Since: 0.9.20
1524  */
1525 public enum hb_buffer_serialize_flags_t
1526 {
1527 	/**
1528 	 * serialize glyph names, clusters and positions.
1529 	 */
1530 	DEFAULT = 0,
1531 	/**
1532 	 * do not serialize glyph cluster.
1533 	 */
1534 	NO_CLUSTERS = 1,
1535 	/**
1536 	 * do not serialize glyph position information.
1537 	 */
1538 	NO_POSITIONS = 2,
1539 	/**
1540 	 * do no serialize glyph name.
1541 	 */
1542 	NO_GLYPH_NAMES = 4,
1543 	/**
1544 	 * serialize glyph extents.
1545 	 */
1546 	GLYPH_EXTENTS = 8,
1547 	/**
1548 	 * serialize glyph flags. Since: 1.5.0
1549 	 */
1550 	GLYPH_FLAGS = 16,
1551 	/**
1552 	 * do not serialize glyph advances,
1553 	 * glyph offsets will reflect absolute glyph positions. Since: 1.8.0
1554 	 */
1555 	NO_ADVANCES = 32,
1556 }
1557 alias hb_buffer_serialize_flags_t buffer_serialize_flags_t;
1558 
1559 /**
1560  * The buffer serialization and de-serialization format used in
1561  * hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs().
1562  *
1563  * Since: 0.9.2
1564  */
1565 public enum hb_buffer_serialize_format_t
1566 {
1567 	/**
1568 	 * a human-readable, plain text format.
1569 	 */
1570 	TEXT = 1413830740,
1571 	/**
1572 	 * a machine-readable JSON format.
1573 	 */
1574 	JSON = 1246973774,
1575 	/**
1576 	 * invalid format.
1577 	 */
1578 	INVALID = 0,
1579 }
1580 alias hb_buffer_serialize_format_t buffer_serialize_format_t;
1581 
1582 /**
1583  * The direction of a text segment or buffer.
1584  *
1585  * A segment can also be tested for horizontal or vertical
1586  * orientation (irrespective of specific direction) with
1587  * HB_DIRECTION_IS_HORIZONTAL() or HB_DIRECTION_IS_VERTICAL().
1588  */
1589 public enum hb_direction_t
1590 {
1591 	/**
1592 	 * Initial, unset direction.
1593 	 */
1594 	INVALID = 0,
1595 	/**
1596 	 * Text is set horizontally from left to right.
1597 	 */
1598 	LTR = 4,
1599 	/**
1600 	 * Text is set horizontally from right to left.
1601 	 */
1602 	RTL = 5,
1603 	/**
1604 	 * Text is set vertically from top to bottom.
1605 	 */
1606 	TTB = 6,
1607 	/**
1608 	 * Text is set vertically from bottom to top.
1609 	 */
1610 	BTT = 7,
1611 }
1612 alias hb_direction_t direction_t;
1613 
1614 /**
1615  * Flags for #hb_glyph_info_t.
1616  *
1617  * Since: 1.5.0
1618  */
1619 public enum hb_glyph_flags_t
1620 {
1621 	/**
1622 	 * Indicates that if input text is broken at the
1623 	 * beginning of the cluster this glyph is part of,
1624 	 * then both sides need to be re-shaped, as the
1625 	 * result might be different.  On the flip side,
1626 	 * it means that when this flag is not present,
1627 	 * then it's safe to break the glyph-run at the
1628 	 * beginning of this cluster, and the two sides
1629 	 * represent the exact same result one would get
1630 	 * if breaking input text at the beginning of
1631 	 * this cluster and shaping the two sides
1632 	 * separately.  This can be used to optimize
1633 	 * paragraph layout, by avoiding re-shaping
1634 	 * of each line after line-breaking, or limiting
1635 	 * the reshaping to a small piece around the
1636 	 * breaking point only.
1637 	 */
1638 	UNSAFE_TO_BREAK = 1,
1639 	/**
1640 	 * All the currently defined flags.
1641 	 */
1642 	DEFINED = 1,
1643 }
1644 alias hb_glyph_flags_t glyph_flags_t;
1645 
1646 /**
1647  * Data type holding the memory modes available to
1648  * client programs.
1649  *
1650  * Regarding these various memory-modes:
1651  *
1652  * - In no case shall the HarfBuzz client modify memory
1653  * that is passed to HarfBuzz in a blob.  If there is
1654  * any such possibility, @HB_MEMORY_MODE_DUPLICATE should be used
1655  * such that HarfBuzz makes a copy immediately,
1656  *
1657  * - Use @HB_MEMORY_MODE_READONLY otherwise, unless you really really
1658  * really know what you are doing,
1659  *
1660  * - @HB_MEMORY_MODE_WRITABLE is appropriate if you really made a
1661  * copy of data solely for the purpose of passing to
1662  * HarfBuzz and doing that just once (no reuse!),
1663  *
1664  * - If the font is mmap()ed, it's okay to use
1665  * @HB_MEMORY_READONLY_MAY_MAKE_WRITABLE, however, using that mode
1666  * correctly is very tricky.  Use @HB_MEMORY_MODE_READONLY instead.
1667  */
1668 public enum hb_memory_mode_t
1669 {
1670 	/**
1671 	 * HarfBuzz immediately makes a copy of the data.
1672 	 */
1673 	DUPLICATE = 0,
1674 	/**
1675 	 * HarfBuzz client will never modify the data,
1676 	 * and HarfBuzz will never modify the data.
1677 	 */
1678 	READONLY = 1,
1679 	/**
1680 	 * HarfBuzz client made a copy of the data solely
1681 	 * for HarfBuzz, so HarfBuzz may modify the data.
1682 	 */
1683 	WRITABLE = 2,
1684 	/**
1685 	 * See above
1686 	 */
1687 	READONLY_MAY_MAKE_WRITABLE = 3,
1688 }
1689 alias hb_memory_mode_t memory_mode_t;
1690 
1691 /**
1692  * Flags that describe the properties of color palette.
1693  *
1694  * Since: 2.1.0
1695  */
1696 public enum hb_ot_color_palette_flags_t
1697 {
1698 	/**
1699 	 * Default indicating that there is nothing special
1700 	 * to note about a color palette.
1701 	 */
1702 	DEFAULT = 0,
1703 	/**
1704 	 * Flag indicating that the color
1705 	 * palette is appropriate to use when displaying the font on a light background such as white.
1706 	 */
1707 	USABLE_WITH_LIGHT_BACKGROUND = 1,
1708 	/**
1709 	 * Flag indicating that the color
1710 	 * palette is appropriate to use when displaying the font on a dark background such as black.
1711 	 */
1712 	USABLE_WITH_DARK_BACKGROUND = 2,
1713 }
1714 alias hb_ot_color_palette_flags_t ot_color_palette_flags_t;
1715 
1716 /**
1717  * Baseline tags from [Baseline Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/baselinetags) registry.
1718  *
1719  * Since: 2.6.0
1720  */
1721 public enum hb_ot_layout_baseline_tag_t
1722 {
1723 	/**
1724 	 * The baseline used by alphabetic scripts such as Latin, Cyrillic and Greek.
1725 	 * In vertical writing mode, the alphabetic baseline for characters rotated 90 degrees clockwise.
1726 	 * (This would not apply to alphabetic characters that remain upright in vertical writing mode, since these
1727 	 * characters are not rotated.)
1728 	 */
1729 	ROMAN = 1919905134,
1730 	/**
1731 	 * The hanging baseline. In horizontal direction, this is the horizontal
1732 	 * line from which syllables seem, to hang in Tibetan and other similar scripts. In vertical writing mode,
1733 	 * for Tibetan (or some other similar script) characters rotated 90 degrees clockwise.
1734 	 */
1735 	HANGING = 1751215719,
1736 	/**
1737 	 * Ideographic character face bottom or left edge,
1738 	 * if the direction is horizontal or vertical, respectively.
1739 	 */
1740 	IDEO_FACE_BOTTOM_OR_LEFT = 1768121954,
1741 	/**
1742 	 * Ideographic character face top or right edge,
1743 	 * if the direction is horizontal or vertical, respectively.
1744 	 */
1745 	IDEO_FACE_TOP_OR_RIGHT = 1768121972,
1746 	/**
1747 	 * Ideographic em-box bottom or left edge,
1748 	 * if the direction is horizontal or vertical, respectively.
1749 	 */
1750 	IDEO_EMBOX_BOTTOM_OR_LEFT = 1768187247,
1751 	/**
1752 	 * Ideographic em-box top or right edge baseline,
1753 	 * if the direction is horizontal or vertical, respectively.
1754 	 */
1755 	IDEO_EMBOX_TOP_OR_RIGHT = 1768191088,
1756 	/**
1757 	 * The baseline about which mathematical characters are centered.
1758 	 * In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.
1759 	 */
1760 	MATH = 1835103336,
1761 }
1762 alias hb_ot_layout_baseline_tag_t ot_layout_baseline_tag_t;
1763 
1764 /**
1765  * The GDEF classes defined for glyphs.
1766  */
1767 public enum hb_ot_layout_glyph_class_t
1768 {
1769 	/**
1770 	 * Glyphs not matching the other classifications
1771 	 */
1772 	UNCLASSIFIED = 0,
1773 	/**
1774 	 * Spacing, single characters, capable of accepting marks
1775 	 */
1776 	BASE_GLYPH = 1,
1777 	/**
1778 	 * Glyphs that represent ligation of multiple characters
1779 	 */
1780 	LIGATURE = 2,
1781 	/**
1782 	 * Non-spacing, combining glyphs that represent marks
1783 	 */
1784 	MARK = 3,
1785 	/**
1786 	 * Spacing glyphs that represent part of a single character
1787 	 */
1788 	COMPONENT = 4,
1789 }
1790 alias hb_ot_layout_glyph_class_t ot_layout_glyph_class_t;
1791 
1792 /**
1793  * The 'MATH' table constants, refer to
1794  * [OpenType documentation](https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathconstants-table)
1795  * For more explanations.
1796  *
1797  * Since: 1.3.3
1798  */
1799 public enum hb_ot_math_constant_t
1800 {
1801 	/**
1802 	 * scriptPercentScaleDown
1803 	 */
1804 	SCRIPT_PERCENT_SCALE_DOWN = 0,
1805 	/**
1806 	 * scriptScriptPercentScaleDown
1807 	 */
1808 	SCRIPT_SCRIPT_PERCENT_SCALE_DOWN = 1,
1809 	/**
1810 	 * delimitedSubFormulaMinHeight
1811 	 */
1812 	DELIMITED_SUB_FORMULA_MIN_HEIGHT = 2,
1813 	/**
1814 	 * displayOperatorMinHeight
1815 	 */
1816 	DISPLAY_OPERATOR_MIN_HEIGHT = 3,
1817 	/**
1818 	 * mathLeading
1819 	 */
1820 	MATH_LEADING = 4,
1821 	/**
1822 	 * axisHeight
1823 	 */
1824 	AXIS_HEIGHT = 5,
1825 	/**
1826 	 * accentBaseHeight
1827 	 */
1828 	ACCENT_BASE_HEIGHT = 6,
1829 	/**
1830 	 * flattenedAccentBaseHeight
1831 	 */
1832 	FLATTENED_ACCENT_BASE_HEIGHT = 7,
1833 	/**
1834 	 * subscriptShiftDown
1835 	 */
1836 	SUBSCRIPT_SHIFT_DOWN = 8,
1837 	/**
1838 	 * subscriptTopMax
1839 	 */
1840 	SUBSCRIPT_TOP_MAX = 9,
1841 	/**
1842 	 * subscriptBaselineDropMin
1843 	 */
1844 	SUBSCRIPT_BASELINE_DROP_MIN = 10,
1845 	/**
1846 	 * superscriptShiftUp
1847 	 */
1848 	SUPERSCRIPT_SHIFT_UP = 11,
1849 	/**
1850 	 * superscriptShiftUpCramped
1851 	 */
1852 	SUPERSCRIPT_SHIFT_UP_CRAMPED = 12,
1853 	/**
1854 	 * superscriptBottomMin
1855 	 */
1856 	SUPERSCRIPT_BOTTOM_MIN = 13,
1857 	/**
1858 	 * superscriptBaselineDropMax
1859 	 */
1860 	SUPERSCRIPT_BASELINE_DROP_MAX = 14,
1861 	/**
1862 	 * subSuperscriptGapMin
1863 	 */
1864 	SUB_SUPERSCRIPT_GAP_MIN = 15,
1865 	/**
1866 	 * superscriptBottomMaxWithSubscript
1867 	 */
1868 	SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT = 16,
1869 	/**
1870 	 * spaceAfterScript
1871 	 */
1872 	SPACE_AFTER_SCRIPT = 17,
1873 	/**
1874 	 * upperLimitGapMin
1875 	 */
1876 	UPPER_LIMIT_GAP_MIN = 18,
1877 	/**
1878 	 * upperLimitBaselineRiseMin
1879 	 */
1880 	UPPER_LIMIT_BASELINE_RISE_MIN = 19,
1881 	/**
1882 	 * lowerLimitGapMin
1883 	 */
1884 	LOWER_LIMIT_GAP_MIN = 20,
1885 	/**
1886 	 * lowerLimitBaselineDropMin
1887 	 */
1888 	LOWER_LIMIT_BASELINE_DROP_MIN = 21,
1889 	/**
1890 	 * stackTopShiftUp
1891 	 */
1892 	STACK_TOP_SHIFT_UP = 22,
1893 	/**
1894 	 * stackTopDisplayStyleShiftUp
1895 	 */
1896 	STACK_TOP_DISPLAY_STYLE_SHIFT_UP = 23,
1897 	/**
1898 	 * stackBottomShiftDown
1899 	 */
1900 	STACK_BOTTOM_SHIFT_DOWN = 24,
1901 	/**
1902 	 * stackBottomDisplayStyleShiftDown
1903 	 */
1904 	STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN = 25,
1905 	/**
1906 	 * stackGapMin
1907 	 */
1908 	STACK_GAP_MIN = 26,
1909 	/**
1910 	 * stackDisplayStyleGapMin
1911 	 */
1912 	STACK_DISPLAY_STYLE_GAP_MIN = 27,
1913 	/**
1914 	 * stretchStackTopShiftUp
1915 	 */
1916 	STRETCH_STACK_TOP_SHIFT_UP = 28,
1917 	/**
1918 	 * stretchStackBottomShiftDown
1919 	 */
1920 	STRETCH_STACK_BOTTOM_SHIFT_DOWN = 29,
1921 	/**
1922 	 * stretchStackGapAboveMin
1923 	 */
1924 	STRETCH_STACK_GAP_ABOVE_MIN = 30,
1925 	/**
1926 	 * stretchStackGapBelowMin
1927 	 */
1928 	STRETCH_STACK_GAP_BELOW_MIN = 31,
1929 	/**
1930 	 * fractionNumeratorShiftUp
1931 	 */
1932 	FRACTION_NUMERATOR_SHIFT_UP = 32,
1933 	/**
1934 	 * fractionNumeratorDisplayStyleShiftUp
1935 	 */
1936 	FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP = 33,
1937 	/**
1938 	 * fractionDenominatorShiftDown
1939 	 */
1940 	FRACTION_DENOMINATOR_SHIFT_DOWN = 34,
1941 	/**
1942 	 * fractionDenominatorDisplayStyleShiftDown
1943 	 */
1944 	FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN = 35,
1945 	/**
1946 	 * fractionNumeratorGapMin
1947 	 */
1948 	FRACTION_NUMERATOR_GAP_MIN = 36,
1949 	/**
1950 	 * fractionNumDisplayStyleGapMin
1951 	 */
1952 	FRACTION_NUM_DISPLAY_STYLE_GAP_MIN = 37,
1953 	/**
1954 	 * fractionRuleThickness
1955 	 */
1956 	FRACTION_RULE_THICKNESS = 38,
1957 	/**
1958 	 * fractionDenominatorGapMin
1959 	 */
1960 	FRACTION_DENOMINATOR_GAP_MIN = 39,
1961 	/**
1962 	 * fractionDenomDisplayStyleGapMin
1963 	 */
1964 	FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN = 40,
1965 	/**
1966 	 * skewedFractionHorizontalGap
1967 	 */
1968 	SKEWED_FRACTION_HORIZONTAL_GAP = 41,
1969 	/**
1970 	 * skewedFractionVerticalGap
1971 	 */
1972 	SKEWED_FRACTION_VERTICAL_GAP = 42,
1973 	/**
1974 	 * overbarVerticalGap
1975 	 */
1976 	OVERBAR_VERTICAL_GAP = 43,
1977 	/**
1978 	 * overbarRuleThickness
1979 	 */
1980 	OVERBAR_RULE_THICKNESS = 44,
1981 	/**
1982 	 * overbarExtraAscender
1983 	 */
1984 	OVERBAR_EXTRA_ASCENDER = 45,
1985 	/**
1986 	 * underbarVerticalGap
1987 	 */
1988 	UNDERBAR_VERTICAL_GAP = 46,
1989 	/**
1990 	 * underbarRuleThickness
1991 	 */
1992 	UNDERBAR_RULE_THICKNESS = 47,
1993 	/**
1994 	 * underbarExtraDescender
1995 	 */
1996 	UNDERBAR_EXTRA_DESCENDER = 48,
1997 	/**
1998 	 * radicalVerticalGap
1999 	 */
2000 	RADICAL_VERTICAL_GAP = 49,
2001 	/**
2002 	 * radicalDisplayStyleVerticalGap
2003 	 */
2004 	RADICAL_DISPLAY_STYLE_VERTICAL_GAP = 50,
2005 	/**
2006 	 * radicalRuleThickness
2007 	 */
2008 	RADICAL_RULE_THICKNESS = 51,
2009 	/**
2010 	 * radicalExtraAscender
2011 	 */
2012 	RADICAL_EXTRA_ASCENDER = 52,
2013 	/**
2014 	 * radicalKernBeforeDegree
2015 	 */
2016 	RADICAL_KERN_BEFORE_DEGREE = 53,
2017 	/**
2018 	 * radicalKernAfterDegree
2019 	 */
2020 	RADICAL_KERN_AFTER_DEGREE = 54,
2021 	/**
2022 	 * radicalDegreeBottomRaisePercent
2023 	 */
2024 	RADICAL_DEGREE_BOTTOM_RAISE_PERCENT = 55,
2025 }
2026 alias hb_ot_math_constant_t ot_math_constant_t;
2027 
2028 /**
2029  * Flags for math glyph parts.
2030  *
2031  * Since: 1.3.3
2032  */
2033 public enum hb_ot_math_glyph_part_flags_t
2034 {
2035 	/**
2036 	 * This is an extender glyph part that
2037 	 * can be repeated to reach the desired length.
2038 	 */
2039 	EXTENDER = 1,
2040 }
2041 alias hb_ot_math_glyph_part_flags_t ot_math_glyph_part_flags_t;
2042 
2043 /**
2044  * The math kerning-table types defined for the four corners
2045  * of a glyph.
2046  *
2047  * Since: 1.3.3
2048  */
2049 public enum hb_ot_math_kern_t
2050 {
2051 	/**
2052 	 * The top right corner of the glyph.
2053 	 */
2054 	TOP_RIGHT = 0,
2055 	/**
2056 	 * The top left corner of the glyph.
2057 	 */
2058 	TOP_LEFT = 1,
2059 	/**
2060 	 * The bottom right corner of the glyph.
2061 	 */
2062 	BOTTOM_RIGHT = 2,
2063 	/**
2064 	 * The bottom left corner of the glyph.
2065 	 */
2066 	BOTTOM_LEFT = 3,
2067 }
2068 alias hb_ot_math_kern_t ot_math_kern_t;
2069 
2070 /**
2071  * Known metadata tags from https://docs.microsoft.com/en-us/typography/opentype/spec/meta
2072  *
2073  * Since: 2.6.0
2074  */
2075 public enum hb_ot_meta_tag_t
2076 {
2077 	/**
2078 	 * Design languages. Text, using only
2079 	 * Basic Latin (ASCII) characters. Indicates languages and/or scripts
2080 	 * for the user audiences that the font was primarily designed for.
2081 	 */
2082 	DESIGN_LANGUAGES = 1684827751,
2083 	/**
2084 	 * Supported languages. Text, using
2085 	 * only Basic Latin (ASCII) characters. Indicates languages and/or scripts
2086 	 * that the font is declared to be capable of supporting.
2087 	 */
2088 	SUPPORTED_LANGUAGES = 1936485991,
2089 }
2090 alias hb_ot_meta_tag_t ot_meta_tag_t;
2091 
2092 /**
2093  * Metric tags corresponding to [MVAR Value
2094  * Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags)
2095  *
2096  * Since: 2.6.0
2097  */
2098 public enum hb_ot_metrics_tag_t
2099 {
2100 	/**
2101 	 * horizontal ascender.
2102 	 */
2103 	HORIZONTAL_ASCENDER = 1751216995,
2104 	/**
2105 	 * horizontal descender.
2106 	 */
2107 	HORIZONTAL_DESCENDER = 1751413603,
2108 	/**
2109 	 * horizontal line gap.
2110 	 */
2111 	HORIZONTAL_LINE_GAP = 1751934832,
2112 	/**
2113 	 * horizontal clipping ascent.
2114 	 */
2115 	HORIZONTAL_CLIPPING_ASCENT = 1751346273,
2116 	/**
2117 	 * horizontal clipping descent.
2118 	 */
2119 	HORIZONTAL_CLIPPING_DESCENT = 1751346276,
2120 	/**
2121 	 * vertical ascender.
2122 	 */
2123 	VERTICAL_ASCENDER = 1986098019,
2124 	/**
2125 	 * vertical descender.
2126 	 */
2127 	VERTICAL_DESCENDER = 1986294627,
2128 	/**
2129 	 * vertical line gap.
2130 	 */
2131 	VERTICAL_LINE_GAP = 1986815856,
2132 	/**
2133 	 * horizontal caret rise.
2134 	 */
2135 	HORIZONTAL_CARET_RISE = 1751347827,
2136 	/**
2137 	 * horizontal caret run.
2138 	 */
2139 	HORIZONTAL_CARET_RUN = 1751347822,
2140 	/**
2141 	 * horizontal caret offset.
2142 	 */
2143 	HORIZONTAL_CARET_OFFSET = 1751347046,
2144 	/**
2145 	 * vertical caret rise.
2146 	 */
2147 	VERTICAL_CARET_RISE = 1986228851,
2148 	/**
2149 	 * vertical caret run.
2150 	 */
2151 	VERTICAL_CARET_RUN = 1986228846,
2152 	/**
2153 	 * vertical caret offset.
2154 	 */
2155 	VERTICAL_CARET_OFFSET = 1986228070,
2156 	/**
2157 	 * x height.
2158 	 */
2159 	X_HEIGHT = 2020108148,
2160 	/**
2161 	 * cap height.
2162 	 */
2163 	CAP_HEIGHT = 1668311156,
2164 	/**
2165 	 * subscript em x size.
2166 	 */
2167 	SUBSCRIPT_EM_X_SIZE = 1935833203,
2168 	/**
2169 	 * subscript em y size.
2170 	 */
2171 	SUBSCRIPT_EM_Y_SIZE = 1935833459,
2172 	/**
2173 	 * subscript em x offset.
2174 	 */
2175 	SUBSCRIPT_EM_X_OFFSET = 1935833199,
2176 	/**
2177 	 * subscript em y offset.
2178 	 */
2179 	SUBSCRIPT_EM_Y_OFFSET = 1935833455,
2180 	/**
2181 	 * superscript em x size.
2182 	 */
2183 	SUPERSCRIPT_EM_X_SIZE = 1936750707,
2184 	/**
2185 	 * superscript em y size.
2186 	 */
2187 	SUPERSCRIPT_EM_Y_SIZE = 1936750963,
2188 	/**
2189 	 * superscript em x offset.
2190 	 */
2191 	SUPERSCRIPT_EM_X_OFFSET = 1936750703,
2192 	/**
2193 	 * superscript em y offset.
2194 	 */
2195 	SUPERSCRIPT_EM_Y_OFFSET = 1936750959,
2196 	/**
2197 	 * strikeout size.
2198 	 */
2199 	STRIKEOUT_SIZE = 1937011315,
2200 	/**
2201 	 * strikeout offset.
2202 	 */
2203 	STRIKEOUT_OFFSET = 1937011311,
2204 	/**
2205 	 * underline size.
2206 	 */
2207 	UNDERLINE_SIZE = 1970168947,
2208 	/**
2209 	 * underline offset.
2210 	 */
2211 	UNDERLINE_OFFSET = 1970168943,
2212 }
2213 alias hb_ot_metrics_tag_t ot_metrics_tag_t;
2214 
2215 /**
2216  * Flags for #hb_ot_var_axis_info_t.
2217  *
2218  * Since: 2.2.0
2219  */
2220 public enum hb_ot_var_axis_flags_t
2221 {
2222 	/**
2223 	 * The axis should not be exposed directly in user interfaces.
2224 	 */
2225 	HIDDEN = 1,
2226 }
2227 alias hb_ot_var_axis_flags_t ot_var_axis_flags_t;
2228 
2229 /**
2230  * Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
2231  * to the four-letter values defined by [ISO 15924](https://unicode.org/iso15924/).
2232  *
2233  * See also the Script (sc) property of the Unicode Character Database.
2234  */
2235 public enum hb_script_t
2236 {
2237 	/**
2238 	 * `Zyyy`
2239 	 */
2240 	COMMON = 1517910393,
2241 	/**
2242 	 * `Zinh`
2243 	 */
2244 	INHERITED = 1516858984,
2245 	/**
2246 	 * `Zzzz`
2247 	 */
2248 	UNKNOWN = 1517976186,
2249 	/**
2250 	 * `Arab`
2251 	 */
2252 	ARABIC = 1098015074,
2253 	/**
2254 	 * `Armn`
2255 	 */
2256 	ARMENIAN = 1098018158,
2257 	/**
2258 	 * `Beng`
2259 	 */
2260 	BENGALI = 1113943655,
2261 	/**
2262 	 * `Cyrl`
2263 	 */
2264 	CYRILLIC = 1132032620,
2265 	/**
2266 	 * `Deva`
2267 	 */
2268 	DEVANAGARI = 1147500129,
2269 	/**
2270 	 * `Geor`
2271 	 */
2272 	GEORGIAN = 1197830002,
2273 	/**
2274 	 * `Grek`
2275 	 */
2276 	GREEK = 1198679403,
2277 	/**
2278 	 * `Gujr`
2279 	 */
2280 	GUJARATI = 1198877298,
2281 	/**
2282 	 * `Guru`
2283 	 */
2284 	GURMUKHI = 1198879349,
2285 	/**
2286 	 * `Hang`
2287 	 */
2288 	HANGUL = 1214344807,
2289 	/**
2290 	 * `Hani`
2291 	 */
2292 	HAN = 1214344809,
2293 	/**
2294 	 * `Hebr`
2295 	 */
2296 	HEBREW = 1214603890,
2297 	/**
2298 	 * `Hira`
2299 	 */
2300 	HIRAGANA = 1214870113,
2301 	/**
2302 	 * `Knda`
2303 	 */
2304 	KANNADA = 1265525857,
2305 	/**
2306 	 * `Kana`
2307 	 */
2308 	KATAKANA = 1264676449,
2309 	/**
2310 	 * `Laoo`
2311 	 */
2312 	LAO = 1281453935,
2313 	/**
2314 	 * `Latn`
2315 	 */
2316 	LATIN = 1281455214,
2317 	/**
2318 	 * `Mlym`
2319 	 */
2320 	MALAYALAM = 1298954605,
2321 	/**
2322 	 * `Orya`
2323 	 */
2324 	ORIYA = 1332902241,
2325 	/**
2326 	 * `Taml`
2327 	 */
2328 	TAMIL = 1415671148,
2329 	/**
2330 	 * `Telu`
2331 	 */
2332 	TELUGU = 1415933045,
2333 	/**
2334 	 * `Thai`
2335 	 */
2336 	THAI = 1416126825,
2337 	/**
2338 	 * `Tibt`
2339 	 */
2340 	TIBETAN = 1416192628,
2341 	/**
2342 	 * `Bopo`
2343 	 */
2344 	BOPOMOFO = 1114599535,
2345 	/**
2346 	 * `Brai`
2347 	 */
2348 	BRAILLE = 1114792297,
2349 	/**
2350 	 * `Cans`
2351 	 */
2352 	CANADIAN_SYLLABICS = 1130458739,
2353 	/**
2354 	 * `Cher`
2355 	 */
2356 	CHEROKEE = 1130915186,
2357 	/**
2358 	 * `Ethi`
2359 	 */
2360 	ETHIOPIC = 1165256809,
2361 	/**
2362 	 * `Khmr`
2363 	 */
2364 	KHMER = 1265134962,
2365 	/**
2366 	 * `Mong`
2367 	 */
2368 	MONGOLIAN = 1299148391,
2369 	/**
2370 	 * `Mymr`
2371 	 */
2372 	MYANMAR = 1299803506,
2373 	/**
2374 	 * `Ogam`
2375 	 */
2376 	OGHAM = 1332175213,
2377 	/**
2378 	 * `Runr`
2379 	 */
2380 	RUNIC = 1383427698,
2381 	/**
2382 	 * `Sinh`
2383 	 */
2384 	SINHALA = 1399418472,
2385 	/**
2386 	 * `Syrc`
2387 	 */
2388 	SYRIAC = 1400468067,
2389 	/**
2390 	 * `Thaa`
2391 	 */
2392 	THAANA = 1416126817,
2393 	/**
2394 	 * `Yiii`
2395 	 */
2396 	YI = 1500080489,
2397 	/**
2398 	 * `Dsrt`
2399 	 */
2400 	DESERET = 1148416628,
2401 	/**
2402 	 * `Goth`
2403 	 */
2404 	GOTHIC = 1198486632,
2405 	/**
2406 	 * `Ital`
2407 	 */
2408 	OLD_ITALIC = 1232363884,
2409 	/**
2410 	 * `Buhd`
2411 	 */
2412 	BUHID = 1114990692,
2413 	/**
2414 	 * `Hano`
2415 	 */
2416 	HANUNOO = 1214344815,
2417 	/**
2418 	 * `Tglg`
2419 	 */
2420 	TAGALOG = 1416064103,
2421 	/**
2422 	 * `Tagb`
2423 	 */
2424 	TAGBANWA = 1415669602,
2425 	/**
2426 	 * `Cprt`
2427 	 */
2428 	CYPRIOT = 1131442804,
2429 	/**
2430 	 * `Limb`
2431 	 */
2432 	LIMBU = 1281977698,
2433 	/**
2434 	 * `Linb`
2435 	 */
2436 	LINEAR_B = 1281977954,
2437 	/**
2438 	 * `Osma`
2439 	 */
2440 	OSMANYA = 1332964705,
2441 	/**
2442 	 * `Shaw`
2443 	 */
2444 	SHAVIAN = 1399349623,
2445 	/**
2446 	 * `Tale`
2447 	 */
2448 	TAI_LE = 1415670885,
2449 	/**
2450 	 * `Ugar`
2451 	 */
2452 	UGARITIC = 1432838514,
2453 	/**
2454 	 * `Bugi`
2455 	 */
2456 	BUGINESE = 1114990441,
2457 	/**
2458 	 * `Copt`
2459 	 */
2460 	COPTIC = 1131376756,
2461 	/**
2462 	 * `Glag`
2463 	 */
2464 	GLAGOLITIC = 1198285159,
2465 	/**
2466 	 * `Khar`
2467 	 */
2468 	KHAROSHTHI = 1265131890,
2469 	/**
2470 	 * `Talu`
2471 	 */
2472 	NEW_TAI_LUE = 1415670901,
2473 	/**
2474 	 * `Xpeo`
2475 	 */
2476 	OLD_PERSIAN = 1483761007,
2477 	/**
2478 	 * `Sylo`
2479 	 */
2480 	SYLOTI_NAGRI = 1400466543,
2481 	/**
2482 	 * `Tfng`
2483 	 */
2484 	TIFINAGH = 1415999079,
2485 	/**
2486 	 * `Bali`
2487 	 */
2488 	BALINESE = 1113681001,
2489 	/**
2490 	 * `Xsux`
2491 	 */
2492 	CUNEIFORM = 1483961720,
2493 	/**
2494 	 * `Nkoo`
2495 	 */
2496 	NKO = 1315663727,
2497 	/**
2498 	 * `Phag`
2499 	 */
2500 	PHAGS_PA = 1349017959,
2501 	/**
2502 	 * `Phnx`
2503 	 */
2504 	PHOENICIAN = 1349021304,
2505 	/**
2506 	 * `Cari`
2507 	 */
2508 	CARIAN = 1130459753,
2509 	/**
2510 	 * `Cham`
2511 	 */
2512 	CHAM = 1130914157,
2513 	/**
2514 	 * `Kali`
2515 	 */
2516 	KAYAH_LI = 1264675945,
2517 	/**
2518 	 * `Lepc`
2519 	 */
2520 	LEPCHA = 1281716323,
2521 	/**
2522 	 * `Lyci`
2523 	 */
2524 	LYCIAN = 1283023721,
2525 	/**
2526 	 * `Lydi`
2527 	 */
2528 	LYDIAN = 1283023977,
2529 	/**
2530 	 * `Olck`
2531 	 */
2532 	OL_CHIKI = 1332503403,
2533 	/**
2534 	 * `Rjng`
2535 	 */
2536 	REJANG = 1382706791,
2537 	/**
2538 	 * `Saur`
2539 	 */
2540 	SAURASHTRA = 1398895986,
2541 	/**
2542 	 * `Sund`
2543 	 */
2544 	SUNDANESE = 1400204900,
2545 	/**
2546 	 * `Vaii`
2547 	 */
2548 	VAI = 1449224553,
2549 	/**
2550 	 * `Avst`
2551 	 */
2552 	AVESTAN = 1098281844,
2553 	/**
2554 	 * `Bamu`
2555 	 */
2556 	BAMUM = 1113681269,
2557 	/**
2558 	 * `Egyp`
2559 	 */
2560 	EGYPTIAN_HIEROGLYPHS = 1164409200,
2561 	/**
2562 	 * `Armi`
2563 	 */
2564 	IMPERIAL_ARAMAIC = 1098018153,
2565 	/**
2566 	 * `Phli`
2567 	 */
2568 	INSCRIPTIONAL_PAHLAVI = 1349020777,
2569 	/**
2570 	 * `Prti`
2571 	 */
2572 	INSCRIPTIONAL_PARTHIAN = 1349678185,
2573 	/**
2574 	 * `Java`
2575 	 */
2576 	JAVANESE = 1247901281,
2577 	/**
2578 	 * `Kthi`
2579 	 */
2580 	KAITHI = 1265920105,
2581 	/**
2582 	 * `Lisu`
2583 	 */
2584 	LISU = 1281979253,
2585 	/**
2586 	 * `Mtei`
2587 	 */
2588 	MEETEI_MAYEK = 1299473769,
2589 	/**
2590 	 * `Sarb`
2591 	 */
2592 	OLD_SOUTH_ARABIAN = 1398895202,
2593 	/**
2594 	 * `Orkh`
2595 	 */
2596 	OLD_TURKIC = 1332898664,
2597 	/**
2598 	 * `Samr`
2599 	 */
2600 	SAMARITAN = 1398893938,
2601 	/**
2602 	 * `Lana`
2603 	 */
2604 	TAI_THAM = 1281453665,
2605 	/**
2606 	 * `Tavt`
2607 	 */
2608 	TAI_VIET = 1415673460,
2609 	/**
2610 	 * `Batk`
2611 	 */
2612 	BATAK = 1113683051,
2613 	/**
2614 	 * `Brah`
2615 	 */
2616 	BRAHMI = 1114792296,
2617 	/**
2618 	 * `Mand`
2619 	 */
2620 	MANDAIC = 1298230884,
2621 	/**
2622 	 * `Cakm`
2623 	 */
2624 	CHAKMA = 1130457965,
2625 	/**
2626 	 * `Merc`
2627 	 */
2628 	MEROITIC_CURSIVE = 1298494051,
2629 	/**
2630 	 * `Mero`
2631 	 */
2632 	MEROITIC_HIEROGLYPHS = 1298494063,
2633 	/**
2634 	 * `Plrd`
2635 	 */
2636 	MIAO = 1349284452,
2637 	/**
2638 	 * `Shrd`
2639 	 */
2640 	SHARADA = 1399353956,
2641 	/**
2642 	 * `Sora`
2643 	 */
2644 	SORA_SOMPENG = 1399812705,
2645 	/**
2646 	 * `Takr`
2647 	 */
2648 	TAKRI = 1415670642,
2649 	/**
2650 	 * `Bass`, Since: 0.9.30
2651 	 */
2652 	BASSA_VAH = 1113682803,
2653 	/**
2654 	 * `Aghb`, Since: 0.9.30
2655 	 */
2656 	CAUCASIAN_ALBANIAN = 1097295970,
2657 	/**
2658 	 * `Dupl`, Since: 0.9.30
2659 	 */
2660 	DUPLOYAN = 1148547180,
2661 	/**
2662 	 * `Elba`, Since: 0.9.30
2663 	 */
2664 	ELBASAN = 1164730977,
2665 	/**
2666 	 * `Gran`, Since: 0.9.30
2667 	 */
2668 	GRANTHA = 1198678382,
2669 	/**
2670 	 * `Khoj`, Since: 0.9.30
2671 	 */
2672 	KHOJKI = 1265135466,
2673 	/**
2674 	 * `Sind`, Since: 0.9.30
2675 	 */
2676 	KHUDAWADI = 1399418468,
2677 	/**
2678 	 * `Lina`, Since: 0.9.30
2679 	 */
2680 	LINEAR_A = 1281977953,
2681 	/**
2682 	 * `Mahj`, Since: 0.9.30
2683 	 */
2684 	MAHAJANI = 1298229354,
2685 	/**
2686 	 * `Mani`, Since: 0.9.30
2687 	 */
2688 	MANICHAEAN = 1298230889,
2689 	/**
2690 	 * `Mend`, Since: 0.9.30
2691 	 */
2692 	MENDE_KIKAKUI = 1298493028,
2693 	/**
2694 	 * `Modi`, Since: 0.9.30
2695 	 */
2696 	MODI = 1299145833,
2697 	/**
2698 	 * `Mroo`, Since: 0.9.30
2699 	 */
2700 	MRO = 1299345263,
2701 	/**
2702 	 * `Nbat`, Since: 0.9.30
2703 	 */
2704 	NABATAEAN = 1315070324,
2705 	/**
2706 	 * `Narb`, Since: 0.9.30
2707 	 */
2708 	OLD_NORTH_ARABIAN = 1315009122,
2709 	/**
2710 	 * `Perm`, Since: 0.9.30
2711 	 */
2712 	OLD_PERMIC = 1348825709,
2713 	/**
2714 	 * `Hmng`, Since: 0.9.30
2715 	 */
2716 	PAHAWH_HMONG = 1215131239,
2717 	/**
2718 	 * `Palm`, Since: 0.9.30
2719 	 */
2720 	PALMYRENE = 1348562029,
2721 	/**
2722 	 * `Pauc`, Since: 0.9.30
2723 	 */
2724 	PAU_CIN_HAU = 1348564323,
2725 	/**
2726 	 * `Phlp`, Since: 0.9.30
2727 	 */
2728 	PSALTER_PAHLAVI = 1349020784,
2729 	/**
2730 	 * `Sidd`, Since: 0.9.30
2731 	 */
2732 	SIDDHAM = 1399415908,
2733 	/**
2734 	 * `Tirh`, Since: 0.9.30
2735 	 */
2736 	TIRHUTA = 1416196712,
2737 	/**
2738 	 * `Wara`, Since: 0.9.30
2739 	 */
2740 	WARANG_CITI = 1466004065,
2741 	/**
2742 	 * `Ahom`, Since: 0.9.30
2743 	 */
2744 	AHOM = 1097363309,
2745 	/**
2746 	 * `Hluw`, Since: 0.9.30
2747 	 */
2748 	ANATOLIAN_HIEROGLYPHS = 1215067511,
2749 	/**
2750 	 * `Hatr`, Since: 0.9.30
2751 	 */
2752 	HATRAN = 1214346354,
2753 	/**
2754 	 * `Mult`, Since: 0.9.30
2755 	 */
2756 	MULTANI = 1299541108,
2757 	/**
2758 	 * `Hung`, Since: 0.9.30
2759 	 */
2760 	OLD_HUNGARIAN = 1215655527,
2761 	/**
2762 	 * `Sgnw`, Since: 0.9.30
2763 	 */
2764 	SIGNWRITING = 1399287415,
2765 	/**
2766 	 * `Adlm`, Since: 1.3.0
2767 	 */
2768 	ADLAM = 1097100397,
2769 	/**
2770 	 * `Bhks`, Since: 1.3.0
2771 	 */
2772 	BHAIKSUKI = 1114139507,
2773 	/**
2774 	 * `Marc`, Since: 1.3.0
2775 	 */
2776 	MARCHEN = 1298231907,
2777 	/**
2778 	 * `Osge`, Since: 1.3.0
2779 	 */
2780 	OSAGE = 1332963173,
2781 	/**
2782 	 * `Tang`, Since: 1.3.0
2783 	 */
2784 	TANGUT = 1415671399,
2785 	/**
2786 	 * `Newa`, Since: 1.3.0
2787 	 */
2788 	NEWA = 1315272545,
2789 	/**
2790 	 * `Gonm`, Since: 1.6.0
2791 	 */
2792 	MASARAM_GONDI = 1198485101,
2793 	/**
2794 	 * `Nshu`, Since: 1.6.0
2795 	 */
2796 	NUSHU = 1316186229,
2797 	/**
2798 	 * `Soyo`, Since: 1.6.0
2799 	 */
2800 	SOYOMBO = 1399814511,
2801 	/**
2802 	 * `Zanb`, Since: 1.6.0
2803 	 */
2804 	ZANABAZAR_SQUARE = 1516334690,
2805 	/**
2806 	 * `Dogr`, Since: 1.8.0
2807 	 */
2808 	DOGRA = 1148151666,
2809 	/**
2810 	 * `Gong`, Since: 1.8.0
2811 	 */
2812 	GUNJALA_GONDI = 1198485095,
2813 	/**
2814 	 * `Rohg`, Since: 1.8.0
2815 	 */
2816 	HANIFI_ROHINGYA = 1383032935,
2817 	/**
2818 	 * `Maka`, Since: 1.8.0
2819 	 */
2820 	MAKASAR = 1298230113,
2821 	/**
2822 	 * `Medf`, Since: 1.8.0
2823 	 */
2824 	MEDEFAIDRIN = 1298490470,
2825 	/**
2826 	 * `Sogo`, Since: 1.8.0
2827 	 */
2828 	OLD_SOGDIAN = 1399809903,
2829 	/**
2830 	 * `Sogd`, Since: 1.8.0
2831 	 */
2832 	SOGDIAN = 1399809892,
2833 	/**
2834 	 * `Elym`, Since: 2.4.0
2835 	 */
2836 	ELYMAIC = 1164736877,
2837 	/**
2838 	 * `Nand`, Since: 2.4.0
2839 	 */
2840 	NANDINAGARI = 1315008100,
2841 	/**
2842 	 * `Hmnp`, Since: 2.4.0
2843 	 */
2844 	NYIAKENG_PUACHUE_HMONG = 1215131248,
2845 	/**
2846 	 * `Wcho`, Since: 2.4.0
2847 	 */
2848 	WANCHO = 1466132591,
2849 	/**
2850 	 * `Chrs`, Since: 2.6.7
2851 	 */
2852 	CHORASMIAN = 1130918515,
2853 	/**
2854 	 * `Diak`, Since: 2.6.7
2855 	 */
2856 	DIVES_AKURU = 1147756907,
2857 	/**
2858 	 * `Kits`, Since: 2.6.7
2859 	 */
2860 	KHITAN_SMALL_SCRIPT = 1265202291,
2861 	/**
2862 	 * `Yezi`, Since: 2.6.7
2863 	 */
2864 	YEZIDI = 1499822697,
2865 	/**
2866 	 * No script set
2867 	 */
2868 	INVALID = 0,
2869 }
2870 alias hb_script_t script_t;
2871 
2872 /**
2873  * Data type for the Canonical_Combining_Class (ccc) property
2874  * from the Unicode Character Database.
2875  *
2876  * <note>Note: newer versions of Unicode may add new values.
2877  * Client programs should be ready to handle any value in the 0..254 range
2878  * being returned from hb_unicode_combining_class().</note>
2879  */
2880 public enum hb_unicode_combining_class_t
2881 {
2882 	/**
2883 	 * Spacing and enclosing marks; also many vowel and consonant signs, even if nonspacing
2884 	 */
2885 	NOT_REORDERED = 0,
2886 	/**
2887 	 * Marks which overlay a base letter or symbol
2888 	 */
2889 	OVERLAY = 1,
2890 	/**
2891 	 * Diacritic nukta marks in Brahmi-derived scripts
2892 	 */
2893 	NUKTA = 7,
2894 	/**
2895 	 * Hiragana/Katakana voicing marks
2896 	 */
2897 	KANA_VOICING = 8,
2898 	/**
2899 	 * Viramas
2900 	 */
2901 	VIRAMA = 9,
2902 	/**
2903 	 * [Hebrew]
2904 	 */
2905 	CCC10 = 10,
2906 	/**
2907 	 * [Hebrew]
2908 	 */
2909 	CCC11 = 11,
2910 	/**
2911 	 * [Hebrew]
2912 	 */
2913 	CCC12 = 12,
2914 	/**
2915 	 * [Hebrew]
2916 	 */
2917 	CCC13 = 13,
2918 	/**
2919 	 * [Hebrew]
2920 	 */
2921 	CCC14 = 14,
2922 	/**
2923 	 * [Hebrew]
2924 	 */
2925 	CCC15 = 15,
2926 	/**
2927 	 * [Hebrew]
2928 	 */
2929 	CCC16 = 16,
2930 	/**
2931 	 * [Hebrew]
2932 	 */
2933 	CCC17 = 17,
2934 	/**
2935 	 * [Hebrew]
2936 	 */
2937 	CCC18 = 18,
2938 	/**
2939 	 * [Hebrew]
2940 	 */
2941 	CCC19 = 19,
2942 	/**
2943 	 * [Hebrew]
2944 	 */
2945 	CCC20 = 20,
2946 	/**
2947 	 * [Hebrew]
2948 	 */
2949 	CCC21 = 21,
2950 	/**
2951 	 * [Hebrew]
2952 	 */
2953 	CCC22 = 22,
2954 	/**
2955 	 * [Hebrew]
2956 	 */
2957 	CCC23 = 23,
2958 	/**
2959 	 * [Hebrew]
2960 	 */
2961 	CCC24 = 24,
2962 	/**
2963 	 * [Hebrew]
2964 	 */
2965 	CCC25 = 25,
2966 	/**
2967 	 * [Hebrew]
2968 	 */
2969 	CCC26 = 26,
2970 	/**
2971 	 * [Arabic]
2972 	 */
2973 	CCC27 = 27,
2974 	/**
2975 	 * [Arabic]
2976 	 */
2977 	CCC28 = 28,
2978 	/**
2979 	 * [Arabic]
2980 	 */
2981 	CCC29 = 29,
2982 	/**
2983 	 * [Arabic]
2984 	 */
2985 	CCC30 = 30,
2986 	/**
2987 	 * [Arabic]
2988 	 */
2989 	CCC31 = 31,
2990 	/**
2991 	 * [Arabic]
2992 	 */
2993 	CCC32 = 32,
2994 	/**
2995 	 * [Arabic]
2996 	 */
2997 	CCC33 = 33,
2998 	/**
2999 	 * [Arabic]
3000 	 */
3001 	CCC34 = 34,
3002 	/**
3003 	 * [Arabic]
3004 	 */
3005 	CCC35 = 35,
3006 	/**
3007 	 * [Syriac]
3008 	 */
3009 	CCC36 = 36,
3010 	/**
3011 	 * [Telugu]
3012 	 */
3013 	CCC84 = 84,
3014 	/**
3015 	 * [Telugu]
3016 	 */
3017 	CCC91 = 91,
3018 	/**
3019 	 * [Thai]
3020 	 */
3021 	CCC103 = 103,
3022 	/**
3023 	 * [Thai]
3024 	 */
3025 	CCC107 = 107,
3026 	/**
3027 	 * [Lao]
3028 	 */
3029 	CCC118 = 118,
3030 	/**
3031 	 * [Lao]
3032 	 */
3033 	CCC122 = 122,
3034 	/**
3035 	 * [Tibetan]
3036 	 */
3037 	CCC129 = 129,
3038 	/**
3039 	 * [Tibetan]
3040 	 */
3041 	CCC130 = 130,
3042 	/**
3043 	 * [Tibetan]
3044 	 */
3045 	CCC133 = 132,
3046 	/**
3047 	 * Marks attached at the bottom left
3048 	 */
3049 	ATTACHED_BELOW_LEFT = 200,
3050 	/**
3051 	 * Marks attached directly below
3052 	 */
3053 	ATTACHED_BELOW = 202,
3054 	/**
3055 	 * Marks attached directly above
3056 	 */
3057 	ATTACHED_ABOVE = 214,
3058 	/**
3059 	 * Marks attached at the top right
3060 	 */
3061 	ATTACHED_ABOVE_RIGHT = 216,
3062 	/**
3063 	 * Distinct marks at the bottom left
3064 	 */
3065 	BELOW_LEFT = 218,
3066 	/**
3067 	 * Distinct marks directly below
3068 	 */
3069 	BELOW = 220,
3070 	/**
3071 	 * Distinct marks at the bottom right
3072 	 */
3073 	BELOW_RIGHT = 222,
3074 	/**
3075 	 * Distinct marks to the left
3076 	 */
3077 	LEFT = 224,
3078 	/**
3079 	 * Distinct marks to the right
3080 	 */
3081 	RIGHT = 226,
3082 	/**
3083 	 * Distinct marks at the top left
3084 	 */
3085 	ABOVE_LEFT = 228,
3086 	/**
3087 	 * Distinct marks directly above
3088 	 */
3089 	ABOVE = 230,
3090 	/**
3091 	 * Distinct marks at the top right
3092 	 */
3093 	ABOVE_RIGHT = 232,
3094 	/**
3095 	 * Distinct marks subtending two bases
3096 	 */
3097 	DOUBLE_BELOW = 233,
3098 	/**
3099 	 * Distinct marks extending above two bases
3100 	 */
3101 	DOUBLE_ABOVE = 234,
3102 	/**
3103 	 * Greek iota subscript only
3104 	 */
3105 	IOTA_SUBSCRIPT = 240,
3106 	/**
3107 	 * Invalid combining class
3108 	 */
3109 	INVALID = 255,
3110 }
3111 alias hb_unicode_combining_class_t unicode_combining_class_t;
3112 
3113 /**
3114  * Data type for the "General_Category" (gc) property from
3115  * the Unicode Character Database.
3116  */
3117 public enum hb_unicode_general_category_t
3118 {
3119 	/**
3120 	 * [Cc]
3121 	 */
3122 	CONTROL = 0,
3123 	/**
3124 	 * [Cf]
3125 	 */
3126 	FORMAT = 1,
3127 	/**
3128 	 * [Cn]
3129 	 */
3130 	UNASSIGNED = 2,
3131 	/**
3132 	 * [Co]
3133 	 */
3134 	PRIVATE_USE = 3,
3135 	/**
3136 	 * [Cs]
3137 	 */
3138 	SURROGATE = 4,
3139 	/**
3140 	 * [Ll]
3141 	 */
3142 	LOWERCASE_LETTER = 5,
3143 	/**
3144 	 * [Lm]
3145 	 */
3146 	MODIFIER_LETTER = 6,
3147 	/**
3148 	 * [Lo]
3149 	 */
3150 	OTHER_LETTER = 7,
3151 	/**
3152 	 * [Lt]
3153 	 */
3154 	TITLECASE_LETTER = 8,
3155 	/**
3156 	 * [Lu]
3157 	 */
3158 	UPPERCASE_LETTER = 9,
3159 	/**
3160 	 * [Mc]
3161 	 */
3162 	SPACING_MARK = 10,
3163 	/**
3164 	 * [Me]
3165 	 */
3166 	ENCLOSING_MARK = 11,
3167 	/**
3168 	 * [Mn]
3169 	 */
3170 	NON_SPACING_MARK = 12,
3171 	/**
3172 	 * [Nd]
3173 	 */
3174 	DECIMAL_NUMBER = 13,
3175 	/**
3176 	 * [Nl]
3177 	 */
3178 	LETTER_NUMBER = 14,
3179 	/**
3180 	 * [No]
3181 	 */
3182 	OTHER_NUMBER = 15,
3183 	/**
3184 	 * [Pc]
3185 	 */
3186 	CONNECT_PUNCTUATION = 16,
3187 	/**
3188 	 * [Pd]
3189 	 */
3190 	DASH_PUNCTUATION = 17,
3191 	/**
3192 	 * [Pe]
3193 	 */
3194 	CLOSE_PUNCTUATION = 18,
3195 	/**
3196 	 * [Pf]
3197 	 */
3198 	FINAL_PUNCTUATION = 19,
3199 	/**
3200 	 * [Pi]
3201 	 */
3202 	INITIAL_PUNCTUATION = 20,
3203 	/**
3204 	 * [Po]
3205 	 */
3206 	OTHER_PUNCTUATION = 21,
3207 	/**
3208 	 * [Ps]
3209 	 */
3210 	OPEN_PUNCTUATION = 22,
3211 	/**
3212 	 * [Sc]
3213 	 */
3214 	CURRENCY_SYMBOL = 23,
3215 	/**
3216 	 * [Sk]
3217 	 */
3218 	MODIFIER_SYMBOL = 24,
3219 	/**
3220 	 * [Sm]
3221 	 */
3222 	MATH_SYMBOL = 25,
3223 	/**
3224 	 * [So]
3225 	 */
3226 	OTHER_SYMBOL = 26,
3227 	/**
3228 	 * [Zl]
3229 	 */
3230 	LINE_SEPARATOR = 27,
3231 	/**
3232 	 * [Zp]
3233 	 */
3234 	PARAGRAPH_SEPARATOR = 28,
3235 	/**
3236 	 * [Zs]
3237 	 */
3238 	SPACE_SEPARATOR = 29,
3239 }
3240 alias hb_unicode_general_category_t unicode_general_category_t;
3241 
3242 /**
3243  * Structure representing a setting for an #hb_aat_layout_feature_type_t.
3244  */
3245 struct hb_aat_layout_feature_selector_info_t
3246 {
3247 	/**
3248 	 * The selector's name identifier
3249 	 */
3250 	hb_ot_name_id_t nameId;
3251 	/**
3252 	 * The value to turn the selector on
3253 	 */
3254 	hb_aat_layout_feature_selector_t enable;
3255 	/**
3256 	 * The value to turn the selector off
3257 	 */
3258 	hb_aat_layout_feature_selector_t disable;
3259 	uint reserved;
3260 }
3261 
3262 /**
3263  * Data type for blobs. A blob wraps a chunk of binary
3264  * data and facilitates its lifecycle management between
3265  * a client program and HarfBuzz.
3266  */
3267 struct hb_blob_t;
3268 
3269 /**
3270  * The main structure holding the input text and its properties before shaping,
3271  * and output glyphs and their information after shaping.
3272  */
3273 struct hb_buffer_t;
3274 
3275 /**
3276  * Data type for holding font faces.
3277  */
3278 struct hb_face_t;
3279 
3280 struct hb_feature_t
3281 {
3282 	/**
3283 	 * The #hb_tag_t tag of the feature
3284 	 */
3285 	hb_tag_t tag;
3286 	/**
3287 	 * The value of the feature. 0 disables the feature, non-zero (usually
3288 	 * 1) enables the feature.  For features implemented as lookup type 3 (like
3289 	 * 'salt') the @value is a one based index into the alternates.
3290 	 */
3291 	uint value;
3292 	/**
3293 	 * the cluster to start applying this feature setting (inclusive).
3294 	 */
3295 	uint start;
3296 	/**
3297 	 * the cluster to end applying this feature setting (exclusive).
3298 	 */
3299 	uint end;
3300 }
3301 
3302 /**
3303  * Font-wide extent values, measured in font units.
3304  *
3305  * Note that typically @ascender is positive and @descender
3306  * negative, in coordinate systems that grow up.
3307  */
3308 struct hb_font_extents_t
3309 {
3310 	/**
3311 	 * The height of typographic ascenders.
3312 	 */
3313 	hb_position_t ascender;
3314 	/**
3315 	 * The depth of typographic descenders.
3316 	 */
3317 	hb_position_t descender;
3318 	/**
3319 	 * The suggested line-spacing gap.
3320 	 */
3321 	hb_position_t lineGap;
3322 	hb_position_t reserved9;
3323 	hb_position_t reserved8;
3324 	hb_position_t reserved7;
3325 	hb_position_t reserved6;
3326 	hb_position_t reserved5;
3327 	hb_position_t reserved4;
3328 	hb_position_t reserved3;
3329 	hb_position_t reserved2;
3330 	hb_position_t reserved1;
3331 }
3332 
3333 /**
3334  * Data type containing a set of virtual methods used for
3335  * working on #hb_font_t font objects.
3336  *
3337  * HarfBuzz provides a lightweight default function for each of
3338  * the methods in #hb_font_funcs_t. Client programs can implement
3339  * their own replacements for the individual font functions, as
3340  * needed, and replace the default by calling the setter for a
3341  * method.
3342  */
3343 struct hb_font_funcs_t;
3344 
3345 /**
3346  * Data type for holding fonts.
3347  */
3348 struct hb_font_t;
3349 
3350 /**
3351  * Glyph extent values, measured in font units.
3352  *
3353  * Note that @height is negative, in coordinate systems that grow up.
3354  */
3355 struct hb_glyph_extents_t
3356 {
3357 	/**
3358 	 * Distance from the x-origin to the left extremum of the glyph.
3359 	 */
3360 	hb_position_t xBearing;
3361 	/**
3362 	 * Distance from the top extremum of the glyph to the y-origin.
3363 	 */
3364 	hb_position_t yBearing;
3365 	/**
3366 	 * Distance from the left extremum of the glyph to the right extremum.
3367 	 */
3368 	hb_position_t width;
3369 	/**
3370 	 * Distance from the top extremum of the glyph to the bottom extremum.
3371 	 */
3372 	hb_position_t height;
3373 }
3374 
3375 /**
3376  * The #hb_glyph_info_t is the structure that holds information about the
3377  * glyphs and their relation to input text.
3378  */
3379 struct hb_glyph_info_t
3380 {
3381 	/**
3382 	 * either a Unicode code point (before shaping) or a glyph index
3383 	 * (after shaping).
3384 	 */
3385 	hb_codepoint_t codepoint;
3386 	hb_mask_t mask;
3387 	/**
3388 	 * the index of the character in the original text that corresponds
3389 	 * to this #hb_glyph_info_t, or whatever the client passes to
3390 	 * hb_buffer_add(). More than one #hb_glyph_info_t can have the same
3391 	 * @cluster value, if they resulted from the same character (e.g. one
3392 	 * to many glyph substitution), and when more than one character gets
3393 	 * merged in the same glyph (e.g. many to one glyph substitution) the
3394 	 * #hb_glyph_info_t will have the smallest cluster value of them.
3395 	 * By default some characters are merged into the same cluster
3396 	 * (e.g. combining marks have the same cluster as their bases)
3397 	 * even if they are separate glyphs, hb_buffer_set_cluster_level()
3398 	 * allow selecting more fine-grained cluster handling.
3399 	 */
3400 	uint cluster;
3401 	hb_var_int_t var1;
3402 	hb_var_int_t var2;
3403 }
3404 
3405 /**
3406  * The #hb_glyph_position_t is the structure that holds the positions of the
3407  * glyph in both horizontal and vertical directions. All positions in
3408  * #hb_glyph_position_t are relative to the current point.
3409  */
3410 struct hb_glyph_position_t
3411 {
3412 	/**
3413 	 * how much the line advances after drawing this glyph when setting
3414 	 * text in horizontal direction.
3415 	 */
3416 	hb_position_t xAdvance;
3417 	/**
3418 	 * how much the line advances after drawing this glyph when setting
3419 	 * text in vertical direction.
3420 	 */
3421 	hb_position_t yAdvance;
3422 	/**
3423 	 * how much the glyph moves on the X-axis before drawing it, this
3424 	 * should not affect how much the line advances.
3425 	 */
3426 	hb_position_t xOffset;
3427 	/**
3428 	 * how much the glyph moves on the Y-axis before drawing it, this
3429 	 * should not affect how much the line advances.
3430 	 */
3431 	hb_position_t yOffset;
3432 	hb_var_int_t var;
3433 }
3434 
3435 /**
3436  * Data type for holding integer-to-integer hash maps.
3437  */
3438 struct hb_map_t;
3439 
3440 /**
3441  * Pairs of glyph and color index.
3442  *
3443  * Since: 2.1.0
3444  */
3445 struct hb_ot_color_layer_t
3446 {
3447 	/**
3448 	 * the glyph ID of the layer
3449 	 */
3450 	hb_codepoint_t glyph;
3451 	/**
3452 	 * the palette color index of the layer
3453 	 */
3454 	uint colorIndex;
3455 }
3456 
3457 /**
3458  * Data type to hold information for a "part" component of a math-variant glyph.
3459  * Large variants for stretchable math glyphs (such as parentheses) can be constructed
3460  * on the fly from parts.
3461  *
3462  * Since: 1.3.3
3463  */
3464 struct hb_ot_math_glyph_part_t
3465 {
3466 	/**
3467 	 * The glyph index of the variant part
3468 	 */
3469 	hb_codepoint_t glyph;
3470 	/**
3471 	 * The length of the connector on the starting side of the variant part
3472 	 */
3473 	hb_position_t startConnectorLength;
3474 	/**
3475 	 * The length of the connector on the ending side of the variant part
3476 	 */
3477 	hb_position_t endConnectorLength;
3478 	/**
3479 	 * The total advance of the part
3480 	 */
3481 	hb_position_t fullAdvance;
3482 	/**
3483 	 * #hb_ot_math_glyph_part_flags_t flags for the part
3484 	 */
3485 	hb_ot_math_glyph_part_flags_t flags;
3486 }
3487 
3488 /**
3489  * Data type to hold math-variant information for a glyph.
3490  *
3491  * Since: 1.3.3
3492  */
3493 struct hb_ot_math_glyph_variant_t
3494 {
3495 	/**
3496 	 * The glyph index of the variant
3497 	 */
3498 	hb_codepoint_t glyph;
3499 	/**
3500 	 * The advance width of the variant
3501 	 */
3502 	hb_position_t advance;
3503 }
3504 
3505 /**
3506  * Structure representing a name ID in a particular language.
3507  *
3508  * Since: 2.1.0
3509  */
3510 struct hb_ot_name_entry_t
3511 {
3512 	/**
3513 	 * name ID
3514 	 */
3515 	hb_ot_name_id_t nameId;
3516 	hb_var_int_t var;
3517 	/**
3518 	 * language
3519 	 */
3520 	hb_language_t language;
3521 }
3522 
3523 /**
3524  * Data type for holding variation-axis values.
3525  *
3526  * The minimum, default, and maximum values are in un-normalized, user scales.
3527  *
3528  * <note>Note: at present, the only flag defined for @flags is
3529  * #HB_OT_VAR_AXIS_FLAG_HIDDEN.</note>
3530  *
3531  * Since: 2.2.0
3532  */
3533 struct hb_ot_var_axis_info_t
3534 {
3535 	/**
3536 	 * Index of the axis in the variation-axis array
3537 	 */
3538 	uint axisIndex;
3539 	/**
3540 	 * The #hb_tag_t tag identifying the design variation of the axis
3541 	 */
3542 	hb_tag_t tag;
3543 	/**
3544 	 * The `name` table Name ID that provides display names for the axis
3545 	 */
3546 	hb_ot_name_id_t nameId;
3547 	/**
3548 	 * The #hb_ot_var_axis_flags_t flags for the axis
3549 	 */
3550 	hb_ot_var_axis_flags_t flags;
3551 	/**
3552 	 * The mininum value on the variation axis that the font covers
3553 	 */
3554 	float minValue;
3555 	/**
3556 	 * The position on the variation axis corresponding to the font's defaults
3557 	 */
3558 	float defaultValue;
3559 	/**
3560 	 * The maximum value on the variation axis that the font covers
3561 	 */
3562 	float maxValue;
3563 	uint reserved;
3564 }
3565 
3566 /**
3567  * Use #hb_ot_var_axis_info_t instead.
3568  *
3569  * Since: 1.4.2
3570  */
3571 struct hb_ot_var_axis_t
3572 {
3573 	/**
3574 	 * axis tag
3575 	 */
3576 	hb_tag_t tag;
3577 	/**
3578 	 * axis name identifier
3579 	 */
3580 	hb_ot_name_id_t nameId;
3581 	/**
3582 	 * minimum value of the axis
3583 	 */
3584 	float minValue;
3585 	/**
3586 	 * default value of the axis
3587 	 */
3588 	float defaultValue;
3589 	/**
3590 	 * maximum value of the axis
3591 	 */
3592 	float maxValue;
3593 }
3594 
3595 /**
3596  * The structure that holds various text properties of an #hb_buffer_t. Can be
3597  * set and retrieved using hb_buffer_set_segment_properties() and
3598  * hb_buffer_get_segment_properties(), respectively.
3599  */
3600 struct hb_segment_properties_t
3601 {
3602 	/**
3603 	 * the #hb_direction_t of the buffer, see hb_buffer_set_direction().
3604 	 */
3605 	hb_direction_t direction;
3606 	/**
3607 	 * the #hb_script_t of the buffer, see hb_buffer_set_script().
3608 	 */
3609 	hb_script_t script;
3610 	/**
3611 	 * the #hb_language_t of the buffer, see hb_buffer_set_language().
3612 	 */
3613 	hb_language_t language;
3614 	void* reserved1;
3615 	void* reserved2;
3616 }
3617 
3618 /**
3619  * Data type for holding a set of integers. #hb_set_t's are
3620  * used to gather and contain glyph IDs, Unicode code
3621  * points, and various other collections of discrete
3622  * values.
3623  */
3624 struct hb_set_t;
3625 
3626 /**
3627  * Data type for holding a shaping plan.
3628  *
3629  * Shape plans contain information about how HarfBuzz will shape a
3630  * particular text segment, based on the segment's properties and the
3631  * capabilities in the font face in use.
3632  *
3633  * Shape plans can be queried about how shaping will perform, given a set
3634  * of specific input parameters (script, language, direction, features,
3635  * etc.).
3636  */
3637 struct hb_shape_plan_t;
3638 
3639 /**
3640  * Data type containing a set of virtual methods used for
3641  * accessing various Unicode character properties.
3642  *
3643  * HarfBuzz provides a default function for each of the
3644  * methods in #hb_unicode_funcs_t. Client programs can implement
3645  * their own replacements for the individual Unicode functions, as
3646  * needed, and replace the default by calling the setter for a
3647  * method.
3648  */
3649 struct hb_unicode_funcs_t;
3650 
3651 /**
3652  * Data structure for holding user-data keys.
3653  */
3654 struct hb_user_data_key_t
3655 {
3656 	char unused;
3657 }
3658 
3659 struct hb_var_int_t
3660 {
3661 	union
3662 	{
3663 		uint u32;
3664 		int i32;
3665 		ushort[2] u16;
3666 		short[2] i16;
3667 		ubyte[4] u8;
3668 		byte[4] i8;
3669 	}
3670 }
3671 
3672 struct hb_variation_t
3673 {
3674 	/**
3675 	 * The #hb_tag_t tag of the variation-axis name
3676 	 */
3677 	hb_tag_t tag;
3678 	/**
3679 	 * The value of the variation axis
3680 	 */
3681 	float value;
3682 }
3683 
3684 /**
3685  * A callback method for #hb_buffer_t. The method gets called with the
3686  * #hb_buffer_t it was set on, the #hb_font_t the buffer is shaped with and a
3687  * message describing what step of the shaping process will be performed.
3688  * Returning %false from this method will skip this shaping step and move to
3689  * the next one.
3690  *
3691  * Params:
3692  *     buffer = An #hb_buffer_t to work upon
3693  *     font = The #hb_font_t the @buffer is shaped with
3694  *     message = %NULL-terminated message passed to the function
3695  *     userData = User data pointer passed by the caller
3696  *
3697  * Returns: %true to perform the shaping step, %false to skip it.
3698  *
3699  * Since: 1.1.3
3700  */
3701 public alias extern(C) hb_bool_t function(hb_buffer_t* buffer, hb_font_t* font, const(char)* message, void* userData) hb_buffer_message_func_t;
3702 
3703 /**
3704  * A virtual method for destroy user-data callbacks.
3705  *
3706  * Params:
3707  *     userData = the data to be destroyed
3708  */
3709 public alias extern(C) void function(void* userData) hb_destroy_func_t;
3710 
3711 /**
3712  * This method should retrieve the extents for a font.
3713  *
3714  * Params:
3715  *     font = #hb_font_t to work upon
3716  *     fontData = @font user data pointer
3717  *     extents = The font extents retrieved
3718  *     userData = User data pointer passed by the caller
3719  */
3720 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_font_extents_t* extents, void* userData) hb_font_get_font_extents_func_t;
3721 
3722 /**
3723  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3724  *
3725  * This method should retrieve the advance for a specified glyph. The
3726  * method must return an #hb_position_t.
3727  *
3728  * Params:
3729  *     font = #hb_font_t to work upon
3730  *     fontData = @font user data pointer
3731  *     glyph = The glyph ID to query
3732  *     userData = User data pointer passed by the caller
3733  *
3734  * Returns: The advance of @glyph within @font
3735  */
3736 public alias extern(C) hb_position_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, void* userData) hb_font_get_glyph_advance_func_t;
3737 
3738 /**
3739  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3740  *
3741  * This method should retrieve the advances for a sequence of glyphs.
3742  *
3743  * Params:
3744  *     font = #hb_font_t to work upon
3745  *     fontData = @font user data pointer
3746  *     count = The number of glyph IDs in the sequence queried
3747  *     firstGlyph = The first glyph ID to query
3748  *     glyphStride = The stride between successive glyph IDs
3749  *     firstAdvance = The first advance retrieved
3750  *     advanceStride = The stride between successive advances
3751  *     userData = User data pointer passed by the caller
3752  */
3753 public alias extern(C) void function(hb_font_t* font, void* fontData, uint count, hb_codepoint_t* firstGlyph, uint glyphStride, hb_position_t* firstAdvance, uint advanceStride, void* userData) hb_font_get_glyph_advances_func_t;
3754 
3755 /**
3756  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3757  *
3758  * This method should retrieve the (X,Y) coordinates (in font units) for a
3759  * specified contour point in a glyph. Each coordinate must be returned as
3760  * an #hb_position_t output parameter.
3761  *
3762  * Params:
3763  *     font = #hb_font_t to work upon
3764  *     fontData = @font user data pointer
3765  *     glyph = The glyph ID to query
3766  *     pointIndex = The contour-point index to query
3767  *     x = The X value retrieved for the contour point
3768  *     y = The Y value retrieved for the contour point
3769  *     userData = User data pointer passed by the caller
3770  *
3771  * Returns: %true if data found, %false otherwise
3772  */
3773 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, uint pointIndex, hb_position_t* x, hb_position_t* y, void* userData) hb_font_get_glyph_contour_point_func_t;
3774 
3775 /**
3776  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3777  *
3778  * This method should retrieve the extents for a specified glyph. Extents must be
3779  * returned in an #hb_glyph_extents output parameter.
3780  *
3781  * Params:
3782  *     font = #hb_font_t to work upon
3783  *     fontData = @font user data pointer
3784  *     glyph = The glyph ID to query
3785  *     extents = The #hb_glyph_extents_t retrieved
3786  *     userData = User data pointer passed by the caller
3787  *
3788  * Returns: %true if data found, %false otherwise
3789  */
3790 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, hb_glyph_extents_t* extents, void* userData) hb_font_get_glyph_extents_func_t;
3791 
3792 /**
3793  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3794  *
3795  * This method should retrieve the glyph ID that corresponds to a glyph-name
3796  * string.
3797  *
3798  * Params:
3799  *     font = #hb_font_t to work upon
3800  *     fontData = @font user data pointer
3801  *     name = The name string to query
3802  *     len = The length of the name queried
3803  *     glyph = The glyph ID retrieved
3804  *     userData = User data pointer passed by the caller
3805  *
3806  * Returns: %true if data found, %false otherwise
3807  */
3808 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, char* name, int len, hb_codepoint_t* glyph, void* userData) hb_font_get_glyph_from_name_func_t;
3809 
3810 /**
3811  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3812  *
3813  * This method should retrieve the glyph ID for a specified Unicode code point
3814  * font, with an optional variation selector.
3815  *
3816  * Params:
3817  *     font = #hb_font_t to work upon
3818  *     fontData = @font user data pointer
3819  *     unicode = The Unicode code point to query
3820  *     variationSelector = The  variation-selector code point to query
3821  *     glyph = The glyph ID retrieved
3822  *     userData = User data pointer passed by the caller
3823  *
3824  * Returns: %true if data found, %false otherwise
3825  */
3826 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t variationSelector, hb_codepoint_t* glyph, void* userData) hb_font_get_glyph_func_t;
3827 
3828 /**
3829  * This method should retrieve the kerning-adjustment value for a glyph-pair in
3830  * the specified font, for horizontal text segments.
3831  *
3832  * Params:
3833  *     font = #hb_font_t to work upon
3834  *     fontData = @font user data pointer
3835  *     firstGlyph = The glyph ID of the first glyph in the glyph pair
3836  *     secondGlyph = The glyph ID of the second glyph in the glyph pair
3837  *     userData = User data pointer passed by the caller
3838  */
3839 public alias extern(C) hb_position_t function(hb_font_t* font, void* fontData, hb_codepoint_t firstGlyph, hb_codepoint_t secondGlyph, void* userData) hb_font_get_glyph_kerning_func_t;
3840 
3841 /**
3842  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3843  *
3844  * This method should retrieve the glyph name that corresponds to a
3845  * glyph ID. The name should be returned in a string output parameter.
3846  *
3847  * Params:
3848  *     font = #hb_font_t to work upon
3849  *     fontData = @font user data pointer
3850  *     glyph = The glyph ID to query
3851  *     name = Name string retrieved for the glyph ID
3852  *     size = Length of the glyph-name string retrieved
3853  *     userData = User data pointer passed by the caller
3854  *
3855  * Returns: %true if data found, %false otherwise
3856  */
3857 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, char* name, uint size, void* userData) hb_font_get_glyph_name_func_t;
3858 
3859 /**
3860  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3861  *
3862  * This method should retrieve the (X,Y) coordinates (in font units) of the
3863  * origin for a glyph. Each coordinate must be returned in an #hb_position_t
3864  * output parameter.
3865  *
3866  * Params:
3867  *     font = #hb_font_t to work upon
3868  *     fontData = @font user data pointer
3869  *     glyph = The glyph ID to query
3870  *     x = The X coordinate of the origin
3871  *     y = The Y coordinate of the origin
3872  *     userData = User data pointer passed by the caller
3873  *
3874  * Returns: %true if data found, %false otherwise
3875  */
3876 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t glyph, hb_position_t* x, hb_position_t* y, void* userData) hb_font_get_glyph_origin_func_t;
3877 
3878 /**
3879  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3880  *
3881  * This method should retrieve the nominal glyph ID for a specified Unicode code
3882  * point. Glyph IDs must be returned in a #hb_codepoint_t output parameter.
3883  *
3884  * Params:
3885  *     font = #hb_font_t to work upon
3886  *     fontData = @font user data pointer
3887  *     unicode = The Unicode code point to query
3888  *     glyph = The glyph ID retrieved
3889  *     userData = User data pointer passed by the caller
3890  *
3891  * Returns: %true if data found, %false otherwise
3892  */
3893 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t* glyph, void* userData) hb_font_get_nominal_glyph_func_t;
3894 
3895 /**
3896  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3897  *
3898  * This method should retrieve the nominal glyph IDs for a sequence of
3899  * Unicode code points. Glyph IDs must be returned in a #hb_codepoint_t
3900  * output parameter.
3901  *
3902  * Params:
3903  *     font = #hb_font_t to work upon
3904  *     fontData = @font user data pointer
3905  *     count = number of code points to query
3906  *     firstUnicode = The first Unicode code point to query
3907  *     unicodeStride = The stride between successive code points
3908  *     firstGlyph = The first glyph ID retrieved
3909  *     glyphStride = The stride between successive glyph IDs
3910  *     userData = User data pointer passed by the caller
3911  *
3912  * Returns: the number of code points processed
3913  */
3914 public alias extern(C) uint function(hb_font_t* font, void* fontData, uint count, hb_codepoint_t* firstUnicode, uint unicodeStride, hb_codepoint_t* firstGlyph, uint glyphStride, void* userData) hb_font_get_nominal_glyphs_func_t;
3915 
3916 /**
3917  * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
3918  *
3919  * This method should retrieve the glyph ID for a specified Unicode code point
3920  * followed by a specified Variation Selector code point. Glyph IDs must be
3921  * returned in a #hb_codepoint_t output parameter.
3922  *
3923  * Params:
3924  *     font = #hb_font_t to work upon
3925  *     fontData = @font user data pointer
3926  *     unicode = The Unicode code point to query
3927  *     variationSelector = The  variation-selector code point to query
3928  *     glyph = The glyph ID retrieved
3929  *     userData = User data pointer passed by the caller
3930  *
3931  * Returns: %true if data found, %false otherwise
3932  */
3933 public alias extern(C) hb_bool_t function(hb_font_t* font, void* fontData, hb_codepoint_t unicode, hb_codepoint_t variationSelector, hb_codepoint_t* glyph, void* userData) hb_font_get_variation_glyph_func_t;
3934 
3935 /**
3936  * Callback function for hb_face_create_for_tables().
3937  *
3938  * Params:
3939  *     face = an #hb_face_t to reference table for
3940  *     tag = the tag of the table to reference
3941  *     userData = User data pointer passed by the caller
3942  *
3943  * Returns: A pointer to the @tag table within @face
3944  *
3945  * Since: 0.9.2
3946  */
3947 public alias extern(C) hb_blob_t* function(hb_face_t* face, hb_tag_t tag, void* userData) hb_reference_table_func_t;
3948 
3949 /**
3950  * A virtual method for the #hb_unicode_funcs_t structure.
3951  *
3952  * This method should retrieve the Canonical Combining Class (ccc)
3953  * property for a specified Unicode code point.
3954  *
3955  * Params:
3956  *     ufuncs = A Unicode-functions structure
3957  *     unicode = The code point to query
3958  *     userData = User data pointer passed by the caller
3959  *
3960  * Returns: The #hb_unicode_combining_class_t of @unicode
3961  */
3962 public alias extern(C) hb_unicode_combining_class_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_combining_class_func_t;
3963 
3964 /**
3965  * A virtual method for the #hb_unicode_funcs_t structure.
3966  *
3967  * This method should compose a sequence of two input Unicode code
3968  * points by canonical equivalence, returning the composed code
3969  * point in a #hb_codepoint_t output parameter (if successful).
3970  * The method must return an #hb_bool_t indicating the success
3971  * of the composition.
3972  *
3973  * Params:
3974  *     ufuncs = A Unicode-functions structure
3975  *     a = The first code point to compose
3976  *     b = The second code point to compose
3977  *     ab = The composed code point
3978  *     userData = user data pointer passed by the caller
3979  *
3980  * Returns: %true is @a,@b composed, %false otherwise
3981  */
3982 public alias extern(C) hb_bool_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t* ab, void* userData) hb_unicode_compose_func_t;
3983 
3984 /**
3985  * Fully decompose @u to its Unicode compatibility decomposition. The codepoints of the decomposition will be written to @decomposed.
3986  * The complete length of the decomposition will be returned.
3987  *
3988  * If @u has no compatibility decomposition, zero should be returned.
3989  *
3990  * The Unicode standard guarantees that a buffer of length #HB_UNICODE_MAX_DECOMPOSITION_LEN codepoints will always be sufficient for any
3991  * compatibility decomposition plus an terminating value of 0.  Consequently, @decompose must be allocated by the caller to be at least this length.  Implementations
3992  * of this function type must ensure that they do not write past the provided array.
3993  *
3994  * Params:
3995  *     ufuncs = a Unicode function structure
3996  *     u = codepoint to decompose
3997  *     decomposed = address of codepoint array (of length #HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into
3998  *     userData = user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()
3999  *
4000  * Returns: number of codepoints in the full compatibility decomposition of @u, or 0 if no decomposition available.
4001  */
4002 public alias extern(C) uint function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t u, hb_codepoint_t* decomposed, void* userData) hb_unicode_decompose_compatibility_func_t;
4003 
4004 /**
4005  * A virtual method for the #hb_unicode_funcs_t structure.
4006  *
4007  * This method should decompose an input Unicode code point,
4008  * returning the two decomposed code points in #hb_codepoint_t
4009  * output parameters (if successful). The method must return an
4010  * #hb_bool_t indicating the success of the composition.
4011  *
4012  * Params:
4013  *     ufuncs = A Unicode-functions structure
4014  *     ab = The code point to decompose
4015  *     a = The first decomposed code point
4016  *     b = The second decomposed code point
4017  *     userData = user data pointer passed by the caller
4018  *
4019  * Returns: %true if @ab decomposed, %false otherwise
4020  */
4021 public alias extern(C) hb_bool_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t ab, hb_codepoint_t* a, hb_codepoint_t* b, void* userData) hb_unicode_decompose_func_t;
4022 
4023 /**
4024  * A virtual method for the #hb_unicode_funcs_t structure.
4025  *
4026  * Params:
4027  *     ufuncs = A Unicode-functions structure
4028  *     unicode = The code point to query
4029  *     userData = User data pointer passed by the caller
4030  */
4031 public alias extern(C) uint function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_eastasian_width_func_t;
4032 
4033 /**
4034  * A virtual method for the #hb_unicode_funcs_t structure.
4035  *
4036  * This method should retrieve the General Category property for
4037  * a specified Unicode code point.
4038  *
4039  * Params:
4040  *     ufuncs = A Unicode-functions structure
4041  *     unicode = The code point to query
4042  *     userData = User data pointer passed by the caller
4043  *
4044  * Returns: The #hb_unicode_general_category_t of @unicode
4045  */
4046 public alias extern(C) hb_unicode_general_category_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_general_category_func_t;
4047 
4048 /**
4049  * A virtual method for the #hb_unicode_funcs_t structure.
4050  *
4051  * This method should retrieve the Bi-Directional Mirroring Glyph
4052  * code point for a specified Unicode code point.
4053  *
4054  * <note>Note: If a code point does not have a specified
4055  * Bi-Directional Mirroring Glyph defined, the method should
4056  * return the original code point.</note>
4057  *
4058  * Params:
4059  *     ufuncs = A Unicode-functions structure
4060  *     unicode = The code point to query
4061  *     userData = User data pointer passed by the caller
4062  *
4063  * Returns: The #hb_codepoint_t of the Mirroring Glyph for @unicode
4064  */
4065 public alias extern(C) hb_codepoint_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_mirroring_func_t;
4066 
4067 /**
4068  * A virtual method for the #hb_unicode_funcs_t structure.
4069  *
4070  * This method should retrieve the Script property for a
4071  * specified Unicode code point.
4072  *
4073  * Params:
4074  *     ufuncs = A Unicode-functions structure
4075  *     unicode = The code point to query
4076  *     userData = User data pointer passed by the caller
4077  *
4078  * Returns: The #hb_script_t of @unicode
4079  */
4080 public alias extern(C) hb_script_t function(hb_unicode_funcs_t* ufuncs, hb_codepoint_t unicode, void* userData) hb_unicode_script_func_t;
4081 
4082 /**
4083  * Used when getting or setting AAT feature selectors. Indicates that
4084  * there is no selector index corresponding to the selector of interest.
4085  */
4086 enum AAT_LAYOUT_NO_SELECTOR_INDEX = 65535;
4087 alias HB_AAT_LAYOUT_NO_SELECTOR_INDEX = AAT_LAYOUT_NO_SELECTOR_INDEX;
4088 
4089 /**
4090  * The default code point for replacing invalid characters in a given encoding.
4091  * Set to U+FFFD REPLACEMENT CHARACTER.
4092  */
4093 enum BUFFER_REPLACEMENT_CODEPOINT_DEFAULT = 65533;
4094 alias HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT = BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
4095 
4096 /**
4097  * Special setting for #hb_feature_t.start to apply the feature from the start
4098  * of the buffer.
4099  */
4100 enum FEATURE_GLOBAL_START = 0;
4101 alias HB_FEATURE_GLOBAL_START = FEATURE_GLOBAL_START;
4102 
4103 /**
4104  * An unset #hb_language_t.
4105  */
4106 enum LANGUAGE_INVALID = 0;
4107 alias HB_LANGUAGE_INVALID = LANGUAGE_INVALID;
4108 
4109 /**
4110  * Unset #hb_map_t value.
4111  */
4112 enum MAP_VALUE_INVALID = 4294967295;
4113 alias HB_MAP_VALUE_INVALID = MAP_VALUE_INVALID;
4114 
4115 /**
4116  * Special value for language index indicating default or unsupported language.
4117  */
4118 enum OT_LAYOUT_DEFAULT_LANGUAGE_INDEX = 65535;
4119 alias HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX = OT_LAYOUT_DEFAULT_LANGUAGE_INDEX;
4120 
4121 /**
4122  * Special value for feature index indicating unsupported feature.
4123  */
4124 enum OT_LAYOUT_NO_FEATURE_INDEX = 65535;
4125 alias HB_OT_LAYOUT_NO_FEATURE_INDEX = OT_LAYOUT_NO_FEATURE_INDEX;
4126 
4127 /**
4128  * Special value for script index indicating unsupported script.
4129  */
4130 enum OT_LAYOUT_NO_SCRIPT_INDEX = 65535;
4131 alias HB_OT_LAYOUT_NO_SCRIPT_INDEX = OT_LAYOUT_NO_SCRIPT_INDEX;
4132 
4133 /**
4134  * Special value for variations index indicating unsupported variation.
4135  */
4136 enum OT_LAYOUT_NO_VARIATIONS_INDEX = 4294967295;
4137 alias HB_OT_LAYOUT_NO_VARIATIONS_INDEX = OT_LAYOUT_NO_VARIATIONS_INDEX;
4138 
4139 /**
4140  * Maximum number of OpenType tags that can correspond to a give #hb_language_t.
4141  */
4142 enum OT_MAX_TAGS_PER_LANGUAGE = 3;
4143 alias HB_OT_MAX_TAGS_PER_LANGUAGE = OT_MAX_TAGS_PER_LANGUAGE;
4144 
4145 /**
4146  * Maximum number of OpenType tags that can correspond to a give #hb_script_t.
4147  */
4148 enum OT_MAX_TAGS_PER_SCRIPT = 3;
4149 alias HB_OT_MAX_TAGS_PER_SCRIPT = OT_MAX_TAGS_PER_SCRIPT;
4150 
4151 /**
4152  * Do not use.
4153  */
4154 enum OT_VAR_NO_AXIS_INDEX = 4294967295;
4155 alias HB_OT_VAR_NO_AXIS_INDEX = OT_VAR_NO_AXIS_INDEX;
4156 
4157 /**
4158  * Unset #hb_set_t value.
4159  */
4160 enum SET_VALUE_INVALID = 4294967295;
4161 alias HB_SET_VALUE_INVALID = SET_VALUE_INVALID;
4162 
4163 /**
4164  * Maximum valid Unicode code point.
4165  */
4166 enum UNICODE_MAX = 1114111;
4167 alias HB_UNICODE_MAX = UNICODE_MAX;
4168 
4169 /**
4170  * See Unicode 6.1 for details on the maximum decomposition length.
4171  */
4172 enum UNICODE_MAX_DECOMPOSITION_LEN = 19;
4173 alias HB_UNICODE_MAX_DECOMPOSITION_LEN = UNICODE_MAX_DECOMPOSITION_LEN;
4174 
4175 enum VERSION_MAJOR = 2;
4176 alias HB_VERSION_MAJOR = VERSION_MAJOR;
4177 
4178 enum VERSION_MICRO = 1;
4179 alias HB_VERSION_MICRO = VERSION_MICRO;
4180 
4181 enum VERSION_MINOR = 8;
4182 alias HB_VERSION_MINOR = VERSION_MINOR;
4183 
4184 enum VERSION_STRING = "2.8.1";
4185 alias HB_VERSION_STRING = VERSION_STRING;