harfbuzz_sys/
bindings.rs

1/* automatically generated by rust-bindgen 0.66.1 */
2
3#[doc = " hb_bool_t:\n\n Data type for booleans.\n"]
4pub type hb_bool_t = ::core::ffi::c_int;
5#[doc = " hb_codepoint_t:\n\n Data type for holding Unicode codepoints. Also\n used to hold glyph IDs.\n"]
6pub type hb_codepoint_t = u32;
7#[doc = " hb_position_t:\n\n Data type for holding a single coordinate value.\n Contour points and other multi-dimensional data are\n stored as tuples of #hb_position_t's.\n"]
8pub type hb_position_t = i32;
9#[doc = " hb_mask_t:\n\n Data type for bitmasks.\n"]
10pub type hb_mask_t = u32;
11#[repr(C)]
12#[derive(Copy, Clone)]
13pub union _hb_var_int_t {
14    pub u32: u32,
15    pub i32: i32,
16    pub u16: [u16; 2usize],
17    pub i16: [i16; 2usize],
18    pub u8: [u8; 4usize],
19    pub i8: [i8; 4usize],
20}
21#[test]
22fn bindgen_test_layout__hb_var_int_t() {
23    const UNINIT: ::core::mem::MaybeUninit<_hb_var_int_t> = ::core::mem::MaybeUninit::uninit();
24    let ptr = UNINIT.as_ptr();
25    assert_eq!(
26        ::core::mem::size_of::<_hb_var_int_t>(),
27        4usize,
28        concat!("Size of: ", stringify!(_hb_var_int_t))
29    );
30    assert_eq!(
31        ::core::mem::align_of::<_hb_var_int_t>(),
32        4usize,
33        concat!("Alignment of ", stringify!(_hb_var_int_t))
34    );
35    assert_eq!(
36        unsafe { ::core::ptr::addr_of!((*ptr).u32) as usize - ptr as usize },
37        0usize,
38        concat!(
39            "Offset of field: ",
40            stringify!(_hb_var_int_t),
41            "::",
42            stringify!(u32)
43        )
44    );
45    assert_eq!(
46        unsafe { ::core::ptr::addr_of!((*ptr).i32) as usize - ptr as usize },
47        0usize,
48        concat!(
49            "Offset of field: ",
50            stringify!(_hb_var_int_t),
51            "::",
52            stringify!(i32)
53        )
54    );
55    assert_eq!(
56        unsafe { ::core::ptr::addr_of!((*ptr).u16) as usize - ptr as usize },
57        0usize,
58        concat!(
59            "Offset of field: ",
60            stringify!(_hb_var_int_t),
61            "::",
62            stringify!(u16)
63        )
64    );
65    assert_eq!(
66        unsafe { ::core::ptr::addr_of!((*ptr).i16) as usize - ptr as usize },
67        0usize,
68        concat!(
69            "Offset of field: ",
70            stringify!(_hb_var_int_t),
71            "::",
72            stringify!(i16)
73        )
74    );
75    assert_eq!(
76        unsafe { ::core::ptr::addr_of!((*ptr).u8) as usize - ptr as usize },
77        0usize,
78        concat!(
79            "Offset of field: ",
80            stringify!(_hb_var_int_t),
81            "::",
82            stringify!(u8)
83        )
84    );
85    assert_eq!(
86        unsafe { ::core::ptr::addr_of!((*ptr).i8) as usize - ptr as usize },
87        0usize,
88        concat!(
89            "Offset of field: ",
90            stringify!(_hb_var_int_t),
91            "::",
92            stringify!(i8)
93        )
94    );
95}
96pub type hb_var_int_t = _hb_var_int_t;
97#[doc = " hb_tag_t:\n\n Data type for tag identifiers. Tags are four\n byte integers, each byte representing a character.\n\n Tags are used to identify tables, design-variation axes,\n scripts, languages, font features, and baselines with\n human-readable names.\n"]
98pub type hb_tag_t = u32;
99extern "C" {
100    pub fn hb_tag_from_string(
101        str_: *const ::core::ffi::c_char,
102        len: ::core::ffi::c_int,
103    ) -> hb_tag_t;
104}
105extern "C" {
106    pub fn hb_tag_to_string(tag: hb_tag_t, buf: *mut ::core::ffi::c_char);
107}
108pub const HB_DIRECTION_INVALID: hb_direction_t = 0;
109pub const HB_DIRECTION_LTR: hb_direction_t = 4;
110pub const HB_DIRECTION_RTL: hb_direction_t = 5;
111pub const HB_DIRECTION_TTB: hb_direction_t = 6;
112pub const HB_DIRECTION_BTT: hb_direction_t = 7;
113#[doc = " hb_direction_t:\n @HB_DIRECTION_INVALID: Initial, unset direction.\n @HB_DIRECTION_LTR: Text is set horizontally from left to right.\n @HB_DIRECTION_RTL: Text is set horizontally from right to left.\n @HB_DIRECTION_TTB: Text is set vertically from top to bottom.\n @HB_DIRECTION_BTT: Text is set vertically from bottom to top.\n\n The direction of a text segment or buffer.\n\n A segment can also be tested for horizontal or vertical\n orientation (irrespective of specific direction) with\n HB_DIRECTION_IS_HORIZONTAL() or HB_DIRECTION_IS_VERTICAL().\n"]
114pub type hb_direction_t = ::core::ffi::c_uint;
115extern "C" {
116    pub fn hb_direction_from_string(
117        str_: *const ::core::ffi::c_char,
118        len: ::core::ffi::c_int,
119    ) -> hb_direction_t;
120}
121extern "C" {
122    pub fn hb_direction_to_string(direction: hb_direction_t) -> *const ::core::ffi::c_char;
123}
124#[repr(C)]
125#[derive(Debug, Copy, Clone)]
126pub struct hb_language_impl_t {
127    _unused: [u8; 0],
128}
129pub type hb_language_t = *const hb_language_impl_t;
130extern "C" {
131    pub fn hb_language_from_string(
132        str_: *const ::core::ffi::c_char,
133        len: ::core::ffi::c_int,
134    ) -> hb_language_t;
135}
136extern "C" {
137    pub fn hb_language_to_string(language: hb_language_t) -> *const ::core::ffi::c_char;
138}
139extern "C" {
140    pub fn hb_language_get_default() -> hb_language_t;
141}
142pub const HB_SCRIPT_COMMON: hb_script_t = 1517910393;
143pub const HB_SCRIPT_INHERITED: hb_script_t = 1516858984;
144pub const HB_SCRIPT_UNKNOWN: hb_script_t = 1517976186;
145pub const HB_SCRIPT_ARABIC: hb_script_t = 1098015074;
146pub const HB_SCRIPT_ARMENIAN: hb_script_t = 1098018158;
147pub const HB_SCRIPT_BENGALI: hb_script_t = 1113943655;
148pub const HB_SCRIPT_CYRILLIC: hb_script_t = 1132032620;
149pub const HB_SCRIPT_DEVANAGARI: hb_script_t = 1147500129;
150pub const HB_SCRIPT_GEORGIAN: hb_script_t = 1197830002;
151pub const HB_SCRIPT_GREEK: hb_script_t = 1198679403;
152pub const HB_SCRIPT_GUJARATI: hb_script_t = 1198877298;
153pub const HB_SCRIPT_GURMUKHI: hb_script_t = 1198879349;
154pub const HB_SCRIPT_HANGUL: hb_script_t = 1214344807;
155pub const HB_SCRIPT_HAN: hb_script_t = 1214344809;
156pub const HB_SCRIPT_HEBREW: hb_script_t = 1214603890;
157pub const HB_SCRIPT_HIRAGANA: hb_script_t = 1214870113;
158pub const HB_SCRIPT_KANNADA: hb_script_t = 1265525857;
159pub const HB_SCRIPT_KATAKANA: hb_script_t = 1264676449;
160pub const HB_SCRIPT_LAO: hb_script_t = 1281453935;
161pub const HB_SCRIPT_LATIN: hb_script_t = 1281455214;
162pub const HB_SCRIPT_MALAYALAM: hb_script_t = 1298954605;
163pub const HB_SCRIPT_ORIYA: hb_script_t = 1332902241;
164pub const HB_SCRIPT_TAMIL: hb_script_t = 1415671148;
165pub const HB_SCRIPT_TELUGU: hb_script_t = 1415933045;
166pub const HB_SCRIPT_THAI: hb_script_t = 1416126825;
167pub const HB_SCRIPT_TIBETAN: hb_script_t = 1416192628;
168pub const HB_SCRIPT_BOPOMOFO: hb_script_t = 1114599535;
169pub const HB_SCRIPT_BRAILLE: hb_script_t = 1114792297;
170pub const HB_SCRIPT_CANADIAN_SYLLABICS: hb_script_t = 1130458739;
171pub const HB_SCRIPT_CHEROKEE: hb_script_t = 1130915186;
172pub const HB_SCRIPT_ETHIOPIC: hb_script_t = 1165256809;
173pub const HB_SCRIPT_KHMER: hb_script_t = 1265134962;
174pub const HB_SCRIPT_MONGOLIAN: hb_script_t = 1299148391;
175pub const HB_SCRIPT_MYANMAR: hb_script_t = 1299803506;
176pub const HB_SCRIPT_OGHAM: hb_script_t = 1332175213;
177pub const HB_SCRIPT_RUNIC: hb_script_t = 1383427698;
178pub const HB_SCRIPT_SINHALA: hb_script_t = 1399418472;
179pub const HB_SCRIPT_SYRIAC: hb_script_t = 1400468067;
180pub const HB_SCRIPT_THAANA: hb_script_t = 1416126817;
181pub const HB_SCRIPT_YI: hb_script_t = 1500080489;
182pub const HB_SCRIPT_DESERET: hb_script_t = 1148416628;
183pub const HB_SCRIPT_GOTHIC: hb_script_t = 1198486632;
184pub const HB_SCRIPT_OLD_ITALIC: hb_script_t = 1232363884;
185pub const HB_SCRIPT_BUHID: hb_script_t = 1114990692;
186pub const HB_SCRIPT_HANUNOO: hb_script_t = 1214344815;
187pub const HB_SCRIPT_TAGALOG: hb_script_t = 1416064103;
188pub const HB_SCRIPT_TAGBANWA: hb_script_t = 1415669602;
189pub const HB_SCRIPT_CYPRIOT: hb_script_t = 1131442804;
190pub const HB_SCRIPT_LIMBU: hb_script_t = 1281977698;
191pub const HB_SCRIPT_LINEAR_B: hb_script_t = 1281977954;
192pub const HB_SCRIPT_OSMANYA: hb_script_t = 1332964705;
193pub const HB_SCRIPT_SHAVIAN: hb_script_t = 1399349623;
194pub const HB_SCRIPT_TAI_LE: hb_script_t = 1415670885;
195pub const HB_SCRIPT_UGARITIC: hb_script_t = 1432838514;
196pub const HB_SCRIPT_BUGINESE: hb_script_t = 1114990441;
197pub const HB_SCRIPT_COPTIC: hb_script_t = 1131376756;
198pub const HB_SCRIPT_GLAGOLITIC: hb_script_t = 1198285159;
199pub const HB_SCRIPT_KHAROSHTHI: hb_script_t = 1265131890;
200pub const HB_SCRIPT_NEW_TAI_LUE: hb_script_t = 1415670901;
201pub const HB_SCRIPT_OLD_PERSIAN: hb_script_t = 1483761007;
202pub const HB_SCRIPT_SYLOTI_NAGRI: hb_script_t = 1400466543;
203pub const HB_SCRIPT_TIFINAGH: hb_script_t = 1415999079;
204pub const HB_SCRIPT_BALINESE: hb_script_t = 1113681001;
205pub const HB_SCRIPT_CUNEIFORM: hb_script_t = 1483961720;
206pub const HB_SCRIPT_NKO: hb_script_t = 1315663727;
207pub const HB_SCRIPT_PHAGS_PA: hb_script_t = 1349017959;
208pub const HB_SCRIPT_PHOENICIAN: hb_script_t = 1349021304;
209pub const HB_SCRIPT_CARIAN: hb_script_t = 1130459753;
210pub const HB_SCRIPT_CHAM: hb_script_t = 1130914157;
211pub const HB_SCRIPT_KAYAH_LI: hb_script_t = 1264675945;
212pub const HB_SCRIPT_LEPCHA: hb_script_t = 1281716323;
213pub const HB_SCRIPT_LYCIAN: hb_script_t = 1283023721;
214pub const HB_SCRIPT_LYDIAN: hb_script_t = 1283023977;
215pub const HB_SCRIPT_OL_CHIKI: hb_script_t = 1332503403;
216pub const HB_SCRIPT_REJANG: hb_script_t = 1382706791;
217pub const HB_SCRIPT_SAURASHTRA: hb_script_t = 1398895986;
218pub const HB_SCRIPT_SUNDANESE: hb_script_t = 1400204900;
219pub const HB_SCRIPT_VAI: hb_script_t = 1449224553;
220pub const HB_SCRIPT_AVESTAN: hb_script_t = 1098281844;
221pub const HB_SCRIPT_BAMUM: hb_script_t = 1113681269;
222pub const HB_SCRIPT_EGYPTIAN_HIEROGLYPHS: hb_script_t = 1164409200;
223pub const HB_SCRIPT_IMPERIAL_ARAMAIC: hb_script_t = 1098018153;
224pub const HB_SCRIPT_INSCRIPTIONAL_PAHLAVI: hb_script_t = 1349020777;
225pub const HB_SCRIPT_INSCRIPTIONAL_PARTHIAN: hb_script_t = 1349678185;
226pub const HB_SCRIPT_JAVANESE: hb_script_t = 1247901281;
227pub const HB_SCRIPT_KAITHI: hb_script_t = 1265920105;
228pub const HB_SCRIPT_LISU: hb_script_t = 1281979253;
229pub const HB_SCRIPT_MEETEI_MAYEK: hb_script_t = 1299473769;
230pub const HB_SCRIPT_OLD_SOUTH_ARABIAN: hb_script_t = 1398895202;
231pub const HB_SCRIPT_OLD_TURKIC: hb_script_t = 1332898664;
232pub const HB_SCRIPT_SAMARITAN: hb_script_t = 1398893938;
233pub const HB_SCRIPT_TAI_THAM: hb_script_t = 1281453665;
234pub const HB_SCRIPT_TAI_VIET: hb_script_t = 1415673460;
235pub const HB_SCRIPT_BATAK: hb_script_t = 1113683051;
236pub const HB_SCRIPT_BRAHMI: hb_script_t = 1114792296;
237pub const HB_SCRIPT_MANDAIC: hb_script_t = 1298230884;
238pub const HB_SCRIPT_CHAKMA: hb_script_t = 1130457965;
239pub const HB_SCRIPT_MEROITIC_CURSIVE: hb_script_t = 1298494051;
240pub const HB_SCRIPT_MEROITIC_HIEROGLYPHS: hb_script_t = 1298494063;
241pub const HB_SCRIPT_MIAO: hb_script_t = 1349284452;
242pub const HB_SCRIPT_SHARADA: hb_script_t = 1399353956;
243pub const HB_SCRIPT_SORA_SOMPENG: hb_script_t = 1399812705;
244pub const HB_SCRIPT_TAKRI: hb_script_t = 1415670642;
245pub const HB_SCRIPT_BASSA_VAH: hb_script_t = 1113682803;
246pub const HB_SCRIPT_CAUCASIAN_ALBANIAN: hb_script_t = 1097295970;
247pub const HB_SCRIPT_DUPLOYAN: hb_script_t = 1148547180;
248pub const HB_SCRIPT_ELBASAN: hb_script_t = 1164730977;
249pub const HB_SCRIPT_GRANTHA: hb_script_t = 1198678382;
250pub const HB_SCRIPT_KHOJKI: hb_script_t = 1265135466;
251pub const HB_SCRIPT_KHUDAWADI: hb_script_t = 1399418468;
252pub const HB_SCRIPT_LINEAR_A: hb_script_t = 1281977953;
253pub const HB_SCRIPT_MAHAJANI: hb_script_t = 1298229354;
254pub const HB_SCRIPT_MANICHAEAN: hb_script_t = 1298230889;
255pub const HB_SCRIPT_MENDE_KIKAKUI: hb_script_t = 1298493028;
256pub const HB_SCRIPT_MODI: hb_script_t = 1299145833;
257pub const HB_SCRIPT_MRO: hb_script_t = 1299345263;
258pub const HB_SCRIPT_NABATAEAN: hb_script_t = 1315070324;
259pub const HB_SCRIPT_OLD_NORTH_ARABIAN: hb_script_t = 1315009122;
260pub const HB_SCRIPT_OLD_PERMIC: hb_script_t = 1348825709;
261pub const HB_SCRIPT_PAHAWH_HMONG: hb_script_t = 1215131239;
262pub const HB_SCRIPT_PALMYRENE: hb_script_t = 1348562029;
263pub const HB_SCRIPT_PAU_CIN_HAU: hb_script_t = 1348564323;
264pub const HB_SCRIPT_PSALTER_PAHLAVI: hb_script_t = 1349020784;
265pub const HB_SCRIPT_SIDDHAM: hb_script_t = 1399415908;
266pub const HB_SCRIPT_TIRHUTA: hb_script_t = 1416196712;
267pub const HB_SCRIPT_WARANG_CITI: hb_script_t = 1466004065;
268pub const HB_SCRIPT_AHOM: hb_script_t = 1097363309;
269pub const HB_SCRIPT_ANATOLIAN_HIEROGLYPHS: hb_script_t = 1215067511;
270pub const HB_SCRIPT_HATRAN: hb_script_t = 1214346354;
271pub const HB_SCRIPT_MULTANI: hb_script_t = 1299541108;
272pub const HB_SCRIPT_OLD_HUNGARIAN: hb_script_t = 1215655527;
273pub const HB_SCRIPT_SIGNWRITING: hb_script_t = 1399287415;
274pub const HB_SCRIPT_ADLAM: hb_script_t = 1097100397;
275pub const HB_SCRIPT_BHAIKSUKI: hb_script_t = 1114139507;
276pub const HB_SCRIPT_MARCHEN: hb_script_t = 1298231907;
277pub const HB_SCRIPT_OSAGE: hb_script_t = 1332963173;
278pub const HB_SCRIPT_TANGUT: hb_script_t = 1415671399;
279pub const HB_SCRIPT_NEWA: hb_script_t = 1315272545;
280pub const HB_SCRIPT_MASARAM_GONDI: hb_script_t = 1198485101;
281pub const HB_SCRIPT_NUSHU: hb_script_t = 1316186229;
282pub const HB_SCRIPT_SOYOMBO: hb_script_t = 1399814511;
283pub const HB_SCRIPT_ZANABAZAR_SQUARE: hb_script_t = 1516334690;
284pub const HB_SCRIPT_DOGRA: hb_script_t = 1148151666;
285pub const HB_SCRIPT_GUNJALA_GONDI: hb_script_t = 1198485095;
286pub const HB_SCRIPT_HANIFI_ROHINGYA: hb_script_t = 1383032935;
287pub const HB_SCRIPT_MAKASAR: hb_script_t = 1298230113;
288pub const HB_SCRIPT_MEDEFAIDRIN: hb_script_t = 1298490470;
289pub const HB_SCRIPT_OLD_SOGDIAN: hb_script_t = 1399809903;
290pub const HB_SCRIPT_SOGDIAN: hb_script_t = 1399809892;
291pub const HB_SCRIPT_ELYMAIC: hb_script_t = 1164736877;
292pub const HB_SCRIPT_NANDINAGARI: hb_script_t = 1315008100;
293pub const HB_SCRIPT_NYIAKENG_PUACHUE_HMONG: hb_script_t = 1215131248;
294pub const HB_SCRIPT_WANCHO: hb_script_t = 1466132591;
295pub const HB_SCRIPT_CHORASMIAN: hb_script_t = 1130918515;
296pub const HB_SCRIPT_DIVES_AKURU: hb_script_t = 1147756907;
297pub const HB_SCRIPT_KHITAN_SMALL_SCRIPT: hb_script_t = 1265202291;
298pub const HB_SCRIPT_YEZIDI: hb_script_t = 1499822697;
299pub const HB_SCRIPT_INVALID: hb_script_t = 0;
300pub const _HB_SCRIPT_MAX_VALUE: hb_script_t = 2147483647;
301pub const _HB_SCRIPT_MAX_VALUE_SIGNED: hb_script_t = 2147483647;
302#[doc = " hb_script_t:\n @HB_SCRIPT_COMMON: HB_TAG ('Z','y','y','y')\n @HB_SCRIPT_INHERITED: HB_TAG ('Z','i','n','h')\n @HB_SCRIPT_UNKNOWN: HB_TAG ('Z','z','z','z')\n @HB_SCRIPT_ARABIC\n @HB_SCRIPT_ARMENIAN\n @HB_SCRIPT_BENGALI\n @HB_SCRIPT_CYRILLIC\n @HB_SCRIPT_DEVANAGARI\n @HB_SCRIPT_GEORGIAN\n @HB_SCRIPT_GREEK\n @HB_SCRIPT_GUJARATI\n @HB_SCRIPT_GURMUKHI\n @HB_SCRIPT_HANGUL\n @HB_SCRIPT_HAN\n @HB_SCRIPT_HEBREW\n @HB_SCRIPT_HIRAGANA\n @HB_SCRIPT_KANNADA\n @HB_SCRIPT_KATAKANA\n @HB_SCRIPT_LAO\n @HB_SCRIPT_LATIN\n @HB_SCRIPT_MALAYALAM\n @HB_SCRIPT_ORIYA\n @HB_SCRIPT_TAMIL\n @HB_SCRIPT_TELUGU\n @HB_SCRIPT_THAI\n @HB_SCRIPT_TIBETAN\n @HB_SCRIPT_BOPOMOFO\n @HB_SCRIPT_BRAILLE\n @HB_SCRIPT_CANADIAN_SYLLABICS\n @HB_SCRIPT_CHEROKEE\n @HB_SCRIPT_ETHIOPIC\n @HB_SCRIPT_KHMER\n @HB_SCRIPT_MONGOLIAN\n @HB_SCRIPT_MYANMAR\n @HB_SCRIPT_OGHAM\n @HB_SCRIPT_RUNIC\n @HB_SCRIPT_SINHALA\n @HB_SCRIPT_SYRIAC\n @HB_SCRIPT_THAANA\n @HB_SCRIPT_YI\n @HB_SCRIPT_DESERET\n @HB_SCRIPT_GOTHIC\n @HB_SCRIPT_OLD_ITALIC\n @HB_SCRIPT_BUHID\n @HB_SCRIPT_HANUNOO\n @HB_SCRIPT_TAGALOG\n @HB_SCRIPT_TAGBANWA\n @HB_SCRIPT_CYPRIOT\n @HB_SCRIPT_LIMBU\n @HB_SCRIPT_LINEAR_B\n @HB_SCRIPT_OSMANYA\n @HB_SCRIPT_SHAVIAN\n @HB_SCRIPT_TAI_LE\n @HB_SCRIPT_UGARITIC\n @HB_SCRIPT_BUGINESE\n @HB_SCRIPT_COPTIC\n @HB_SCRIPT_GLAGOLITIC\n @HB_SCRIPT_KHAROSHTHI\n @HB_SCRIPT_NEW_TAI_LUE\n @HB_SCRIPT_OLD_PERSIAN\n @HB_SCRIPT_SYLOTI_NAGRI\n @HB_SCRIPT_TIFINAGH\n @HB_SCRIPT_BALINESE\n @HB_SCRIPT_CUNEIFORM\n @HB_SCRIPT_NKO\n @HB_SCRIPT_PHAGS_PA\n @HB_SCRIPT_PHOENICIAN\n @HB_SCRIPT_CARIAN\n @HB_SCRIPT_CHAM\n @HB_SCRIPT_KAYAH_LI\n @HB_SCRIPT_LEPCHA\n @HB_SCRIPT_LYCIAN\n @HB_SCRIPT_LYDIAN\n @HB_SCRIPT_OL_CHIKI\n @HB_SCRIPT_REJANG\n @HB_SCRIPT_SAURASHTRA\n @HB_SCRIPT_SUNDANESE\n @HB_SCRIPT_VAI\n @HB_SCRIPT_AVESTAN\n @HB_SCRIPT_BAMUM\n @HB_SCRIPT_EGYPTIAN_HIEROGLYPHS\n @HB_SCRIPT_IMPERIAL_ARAMAIC\n @HB_SCRIPT_INSCRIPTIONAL_PAHLAVI\n @HB_SCRIPT_INSCRIPTIONAL_PARTHIAN\n @HB_SCRIPT_JAVANESE\n @HB_SCRIPT_KAITHI\n @HB_SCRIPT_LISU\n @HB_SCRIPT_MEETEI_MAYEK\n @HB_SCRIPT_OLD_SOUTH_ARABIAN\n @HB_SCRIPT_OLD_TURKIC\n @HB_SCRIPT_SAMARITAN\n @HB_SCRIPT_TAI_THAM\n @HB_SCRIPT_TAI_VIET\n @HB_SCRIPT_BATAK\n @HB_SCRIPT_BRAHMI\n @HB_SCRIPT_MANDAIC\n @HB_SCRIPT_CHAKMA\n @HB_SCRIPT_MEROITIC_CURSIVE\n @HB_SCRIPT_MEROITIC_HIEROGLYPHS\n @HB_SCRIPT_MIAO\n @HB_SCRIPT_SHARADA\n @HB_SCRIPT_SORA_SOMPENG\n @HB_SCRIPT_TAKRI\n @HB_SCRIPT_BASSA_VAH\n @HB_SCRIPT_CAUCASIAN_ALBANIAN\n @HB_SCRIPT_DUPLOYAN\n @HB_SCRIPT_ELBASAN\n @HB_SCRIPT_GRANTHA\n @HB_SCRIPT_KHOJKI\n @HB_SCRIPT_KHUDAWADI\n @HB_SCRIPT_LINEAR_A\n @HB_SCRIPT_MAHAJANI\n @HB_SCRIPT_MANICHAEAN\n @HB_SCRIPT_MENDE_KIKAKUI\n @HB_SCRIPT_MODI\n @HB_SCRIPT_MRO\n @HB_SCRIPT_NABATAEAN\n @HB_SCRIPT_OLD_NORTH_ARABIAN\n @HB_SCRIPT_OLD_PERMIC\n @HB_SCRIPT_PAHAWH_HMONG\n @HB_SCRIPT_PALMYRENE\n @HB_SCRIPT_PAU_CIN_HAU\n @HB_SCRIPT_PSALTER_PAHLAVI\n @HB_SCRIPT_SIDDHAM\n @HB_SCRIPT_TIRHUTA\n @HB_SCRIPT_WARANG_CITI\n @HB_SCRIPT_AHOM\n @HB_SCRIPT_ANATOLIAN_HIEROGLYPHS\n @HB_SCRIPT_HATRAN\n @HB_SCRIPT_MULTANI\n @HB_SCRIPT_OLD_HUNGARIAN\n @HB_SCRIPT_SIGNWRITING\n @HB_SCRIPT_ADLAM\n @HB_SCRIPT_BHAIKSUKI\n @HB_SCRIPT_MARCHEN\n @HB_SCRIPT_OSAGE\n @HB_SCRIPT_TANGUT\n @HB_SCRIPT_NEWA\n @HB_SCRIPT_MASARAM_GONDI\n @HB_SCRIPT_NUSHU\n @HB_SCRIPT_SOYOMBO\n @HB_SCRIPT_ZANABAZAR_SQUARE\n @HB_SCRIPT_DOGRA\n @HB_SCRIPT_GUNJALA_GONDI\n @HB_SCRIPT_HANIFI_ROHINGYA\n @HB_SCRIPT_MAKASAR\n @HB_SCRIPT_MEDEFAIDRIN\n @HB_SCRIPT_OLD_SOGDIAN\n @HB_SCRIPT_SOGDIAN\n @HB_SCRIPT_ELYMAIC\n @HB_SCRIPT_NANDINAGARI\n @HB_SCRIPT_NYIAKENG_PUACHUE_HMONG\n @HB_SCRIPT_WANCHO\n @HB_SCRIPT_INVALID: #HB_TAG_NONE\n\n Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding\n to the four-letter values defined by [ISO 15924](https://unicode.org/iso15924/).\n\n See also the Script (sc) property of the Unicode Character Database.\n"]
303pub type hb_script_t = ::core::ffi::c_uint;
304extern "C" {
305    pub fn hb_script_from_iso15924_tag(tag: hb_tag_t) -> hb_script_t;
306}
307extern "C" {
308    pub fn hb_script_from_string(
309        str_: *const ::core::ffi::c_char,
310        len: ::core::ffi::c_int,
311    ) -> hb_script_t;
312}
313extern "C" {
314    pub fn hb_script_to_iso15924_tag(script: hb_script_t) -> hb_tag_t;
315}
316extern "C" {
317    pub fn hb_script_get_horizontal_direction(script: hb_script_t) -> hb_direction_t;
318}
319#[doc = " hb_user_data_key_t:\n\n Data structure for holding user-data keys.\n"]
320#[repr(C)]
321#[derive(Debug, Copy, Clone)]
322pub struct hb_user_data_key_t {
323    pub unused: ::core::ffi::c_char,
324}
325#[test]
326fn bindgen_test_layout_hb_user_data_key_t() {
327    const UNINIT: ::core::mem::MaybeUninit<hb_user_data_key_t> = ::core::mem::MaybeUninit::uninit();
328    let ptr = UNINIT.as_ptr();
329    assert_eq!(
330        ::core::mem::size_of::<hb_user_data_key_t>(),
331        1usize,
332        concat!("Size of: ", stringify!(hb_user_data_key_t))
333    );
334    assert_eq!(
335        ::core::mem::align_of::<hb_user_data_key_t>(),
336        1usize,
337        concat!("Alignment of ", stringify!(hb_user_data_key_t))
338    );
339    assert_eq!(
340        unsafe { ::core::ptr::addr_of!((*ptr).unused) as usize - ptr as usize },
341        0usize,
342        concat!(
343            "Offset of field: ",
344            stringify!(hb_user_data_key_t),
345            "::",
346            stringify!(unused)
347        )
348    );
349}
350pub type hb_destroy_func_t =
351    ::core::option::Option<unsafe extern "C" fn(user_data: *mut ::core::ffi::c_void)>;
352#[doc = " hb_feature_t:\n @tag: The #hb_tag_t tag of the feature\n @value: The value of the feature. 0 disables the feature, non-zero (usually\n 1) enables the feature.  For features implemented as lookup type 3 (like\n 'salt') the @value is a one based index into the alternates.\n @start: the cluster to start applying this feature setting (inclusive).\n @end: the cluster to end applying this feature setting (exclusive).\n\n The #hb_feature_t is the structure that holds information about requested\n feature application. The feature will be applied with the given value to all\n glyphs which are in clusters between @start (inclusive) and @end (exclusive).\n Setting start to @HB_FEATURE_GLOBAL_START and end to @HB_FEATURE_GLOBAL_END\n specifies that the feature always applies to the entire buffer."]
353#[repr(C)]
354#[derive(Debug, Copy, Clone)]
355pub struct hb_feature_t {
356    pub tag: hb_tag_t,
357    pub value: u32,
358    pub start: ::core::ffi::c_uint,
359    pub end: ::core::ffi::c_uint,
360}
361#[test]
362fn bindgen_test_layout_hb_feature_t() {
363    const UNINIT: ::core::mem::MaybeUninit<hb_feature_t> = ::core::mem::MaybeUninit::uninit();
364    let ptr = UNINIT.as_ptr();
365    assert_eq!(
366        ::core::mem::size_of::<hb_feature_t>(),
367        16usize,
368        concat!("Size of: ", stringify!(hb_feature_t))
369    );
370    assert_eq!(
371        ::core::mem::align_of::<hb_feature_t>(),
372        4usize,
373        concat!("Alignment of ", stringify!(hb_feature_t))
374    );
375    assert_eq!(
376        unsafe { ::core::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
377        0usize,
378        concat!(
379            "Offset of field: ",
380            stringify!(hb_feature_t),
381            "::",
382            stringify!(tag)
383        )
384    );
385    assert_eq!(
386        unsafe { ::core::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
387        4usize,
388        concat!(
389            "Offset of field: ",
390            stringify!(hb_feature_t),
391            "::",
392            stringify!(value)
393        )
394    );
395    assert_eq!(
396        unsafe { ::core::ptr::addr_of!((*ptr).start) as usize - ptr as usize },
397        8usize,
398        concat!(
399            "Offset of field: ",
400            stringify!(hb_feature_t),
401            "::",
402            stringify!(start)
403        )
404    );
405    assert_eq!(
406        unsafe { ::core::ptr::addr_of!((*ptr).end) as usize - ptr as usize },
407        12usize,
408        concat!(
409            "Offset of field: ",
410            stringify!(hb_feature_t),
411            "::",
412            stringify!(end)
413        )
414    );
415}
416extern "C" {
417    pub fn hb_feature_from_string(
418        str_: *const ::core::ffi::c_char,
419        len: ::core::ffi::c_int,
420        feature: *mut hb_feature_t,
421    ) -> hb_bool_t;
422}
423extern "C" {
424    pub fn hb_feature_to_string(
425        feature: *mut hb_feature_t,
426        buf: *mut ::core::ffi::c_char,
427        size: ::core::ffi::c_uint,
428    );
429}
430#[doc = " hb_variation_t:\n @tag: The #hb_tag_t tag of the variation-axis name\n @value: The value of the variation axis\n\n Data type for holding variation data. Registered OpenType\n variation-axis tags are listed at\n https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg\n\n Since: 1.4.2"]
431#[repr(C)]
432#[derive(Debug, Copy, Clone)]
433pub struct hb_variation_t {
434    pub tag: hb_tag_t,
435    pub value: ::core::ffi::c_float,
436}
437#[test]
438fn bindgen_test_layout_hb_variation_t() {
439    const UNINIT: ::core::mem::MaybeUninit<hb_variation_t> = ::core::mem::MaybeUninit::uninit();
440    let ptr = UNINIT.as_ptr();
441    assert_eq!(
442        ::core::mem::size_of::<hb_variation_t>(),
443        8usize,
444        concat!("Size of: ", stringify!(hb_variation_t))
445    );
446    assert_eq!(
447        ::core::mem::align_of::<hb_variation_t>(),
448        4usize,
449        concat!("Alignment of ", stringify!(hb_variation_t))
450    );
451    assert_eq!(
452        unsafe { ::core::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
453        0usize,
454        concat!(
455            "Offset of field: ",
456            stringify!(hb_variation_t),
457            "::",
458            stringify!(tag)
459        )
460    );
461    assert_eq!(
462        unsafe { ::core::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
463        4usize,
464        concat!(
465            "Offset of field: ",
466            stringify!(hb_variation_t),
467            "::",
468            stringify!(value)
469        )
470    );
471}
472extern "C" {
473    pub fn hb_variation_from_string(
474        str_: *const ::core::ffi::c_char,
475        len: ::core::ffi::c_int,
476        variation: *mut hb_variation_t,
477    ) -> hb_bool_t;
478}
479extern "C" {
480    pub fn hb_variation_to_string(
481        variation: *mut hb_variation_t,
482        buf: *mut ::core::ffi::c_char,
483        size: ::core::ffi::c_uint,
484    );
485}
486#[doc = " hb_color_t:\n\n Data type for holding color values. Colors are eight bits per\n channel RGB plus alpha transparency.\n\n Since: 2.1.0"]
487pub type hb_color_t = u32;
488extern "C" {
489    pub fn hb_color_get_alpha(color: hb_color_t) -> u8;
490}
491extern "C" {
492    pub fn hb_color_get_red(color: hb_color_t) -> u8;
493}
494extern "C" {
495    pub fn hb_color_get_green(color: hb_color_t) -> u8;
496}
497extern "C" {
498    pub fn hb_color_get_blue(color: hb_color_t) -> u8;
499}
500pub const HB_MEMORY_MODE_DUPLICATE: hb_memory_mode_t = 0;
501pub const HB_MEMORY_MODE_READONLY: hb_memory_mode_t = 1;
502pub const HB_MEMORY_MODE_WRITABLE: hb_memory_mode_t = 2;
503pub const HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE: hb_memory_mode_t = 3;
504#[doc = " hb_memory_mode_t:\n @HB_MEMORY_MODE_DUPLICATE\n @HB_MEMORY_MODE_READONLY\n @HB_MEMORY_MODE_WRITABLE\n @HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE\n\n Data type holding the memory modes available to\n client programs.\n\n Regarding these various memory-modes:\n\n - In no case shall the HarfBuzz client modify memory\n   that is passed to HarfBuzz in a blob.  If there is\n   any such possibility, @HB_MEMORY_MODE_DUPLICATE should be used\n   such that HarfBuzz makes a copy immediately,\n\n - Use @HB_MEMORY_MODE_READONLY otherwise, unless you really really\n   really know what you are doing,\n\n - @HB_MEMORY_MODE_WRITABLE is appropriate if you really made a\n   copy of data solely for the purpose of passing to\n   HarfBuzz and doing that just once (no reuse!),\n\n - If the font is mmap()ed, it's okay to use\n   @HB_MEMORY_READONLY_MAY_MAKE_WRITABLE, however, using that mode\n   correctly is very tricky.  Use @HB_MEMORY_MODE_READONLY instead."]
505pub type hb_memory_mode_t = ::core::ffi::c_uint;
506#[repr(C)]
507#[derive(Debug, Copy, Clone)]
508pub struct hb_blob_t {
509    _unused: [u8; 0],
510}
511extern "C" {
512    pub fn hb_blob_create(
513        data: *const ::core::ffi::c_char,
514        length: ::core::ffi::c_uint,
515        mode: hb_memory_mode_t,
516        user_data: *mut ::core::ffi::c_void,
517        destroy: hb_destroy_func_t,
518    ) -> *mut hb_blob_t;
519}
520extern "C" {
521    pub fn hb_blob_create_from_file(file_name: *const ::core::ffi::c_char) -> *mut hb_blob_t;
522}
523extern "C" {
524    pub fn hb_blob_create_sub_blob(
525        parent: *mut hb_blob_t,
526        offset: ::core::ffi::c_uint,
527        length: ::core::ffi::c_uint,
528    ) -> *mut hb_blob_t;
529}
530extern "C" {
531    pub fn hb_blob_copy_writable_or_fail(blob: *mut hb_blob_t) -> *mut hb_blob_t;
532}
533extern "C" {
534    pub fn hb_blob_get_empty() -> *mut hb_blob_t;
535}
536extern "C" {
537    pub fn hb_blob_reference(blob: *mut hb_blob_t) -> *mut hb_blob_t;
538}
539extern "C" {
540    pub fn hb_blob_destroy(blob: *mut hb_blob_t);
541}
542extern "C" {
543    pub fn hb_blob_set_user_data(
544        blob: *mut hb_blob_t,
545        key: *mut hb_user_data_key_t,
546        data: *mut ::core::ffi::c_void,
547        destroy: hb_destroy_func_t,
548        replace: hb_bool_t,
549    ) -> hb_bool_t;
550}
551extern "C" {
552    pub fn hb_blob_get_user_data(
553        blob: *mut hb_blob_t,
554        key: *mut hb_user_data_key_t,
555    ) -> *mut ::core::ffi::c_void;
556}
557extern "C" {
558    pub fn hb_blob_make_immutable(blob: *mut hb_blob_t);
559}
560extern "C" {
561    pub fn hb_blob_is_immutable(blob: *mut hb_blob_t) -> hb_bool_t;
562}
563extern "C" {
564    pub fn hb_blob_get_length(blob: *mut hb_blob_t) -> ::core::ffi::c_uint;
565}
566extern "C" {
567    pub fn hb_blob_get_data(
568        blob: *mut hb_blob_t,
569        length: *mut ::core::ffi::c_uint,
570    ) -> *const ::core::ffi::c_char;
571}
572extern "C" {
573    pub fn hb_blob_get_data_writable(
574        blob: *mut hb_blob_t,
575        length: *mut ::core::ffi::c_uint,
576    ) -> *mut ::core::ffi::c_char;
577}
578pub const HB_UNICODE_GENERAL_CATEGORY_CONTROL: hb_unicode_general_category_t = 0;
579pub const HB_UNICODE_GENERAL_CATEGORY_FORMAT: hb_unicode_general_category_t = 1;
580pub const HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED: hb_unicode_general_category_t = 2;
581pub const HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE: hb_unicode_general_category_t = 3;
582pub const HB_UNICODE_GENERAL_CATEGORY_SURROGATE: hb_unicode_general_category_t = 4;
583pub const HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER: hb_unicode_general_category_t = 5;
584pub const HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER: hb_unicode_general_category_t = 6;
585pub const HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER: hb_unicode_general_category_t = 7;
586pub const HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER: hb_unicode_general_category_t = 8;
587pub const HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER: hb_unicode_general_category_t = 9;
588pub const HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK: hb_unicode_general_category_t = 10;
589pub const HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK: hb_unicode_general_category_t = 11;
590pub const HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK: hb_unicode_general_category_t = 12;
591pub const HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER: hb_unicode_general_category_t = 13;
592pub const HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER: hb_unicode_general_category_t = 14;
593pub const HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER: hb_unicode_general_category_t = 15;
594pub const HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION: hb_unicode_general_category_t = 16;
595pub const HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION: hb_unicode_general_category_t = 17;
596pub const HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION: hb_unicode_general_category_t = 18;
597pub const HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION: hb_unicode_general_category_t = 19;
598pub const HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION: hb_unicode_general_category_t = 20;
599pub const HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION: hb_unicode_general_category_t = 21;
600pub const HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION: hb_unicode_general_category_t = 22;
601pub const HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL: hb_unicode_general_category_t = 23;
602pub const HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL: hb_unicode_general_category_t = 24;
603pub const HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL: hb_unicode_general_category_t = 25;
604pub const HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL: hb_unicode_general_category_t = 26;
605pub const HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR: hb_unicode_general_category_t = 27;
606pub const HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR: hb_unicode_general_category_t = 28;
607pub const HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR: hb_unicode_general_category_t = 29;
608#[doc = " hb_unicode_general_category_t:\n @HB_UNICODE_GENERAL_CATEGORY_CONTROL:              [Cc]\n @HB_UNICODE_GENERAL_CATEGORY_FORMAT:\t\t      [Cf]\n @HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED:\t      [Cn]\n @HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE:\t      [Co]\n @HB_UNICODE_GENERAL_CATEGORY_SURROGATE:\t      [Cs]\n @HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER:     [Ll]\n @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER:      [Lm]\n @HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER:\t      [Lo]\n @HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER:     [Lt]\n @HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER:     [Lu]\n @HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK:\t      [Mc]\n @HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK:\t      [Me]\n @HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK:     [Mn]\n @HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER:\t      [Nd]\n @HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER:\t      [Nl]\n @HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER:\t      [No]\n @HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION:  [Pc]\n @HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION:     [Pd]\n @HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION:    [Pe]\n @HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION:    [Pf]\n @HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION:  [Pi]\n @HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION:    [Po]\n @HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION:     [Ps]\n @HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL:      [Sc]\n @HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL:      [Sk]\n @HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL:\t      [Sm]\n @HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL:\t      [So]\n @HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR:\t      [Zl]\n @HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR:  [Zp]\n @HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR:      [Zs]\n\n Data type for the \"General_Category\" (gc) property from\n the Unicode Character Database."]
609pub type hb_unicode_general_category_t = ::core::ffi::c_uint;
610pub const HB_UNICODE_COMBINING_CLASS_NOT_REORDERED: hb_unicode_combining_class_t = 0;
611pub const HB_UNICODE_COMBINING_CLASS_OVERLAY: hb_unicode_combining_class_t = 1;
612pub const HB_UNICODE_COMBINING_CLASS_NUKTA: hb_unicode_combining_class_t = 7;
613pub const HB_UNICODE_COMBINING_CLASS_KANA_VOICING: hb_unicode_combining_class_t = 8;
614pub const HB_UNICODE_COMBINING_CLASS_VIRAMA: hb_unicode_combining_class_t = 9;
615pub const HB_UNICODE_COMBINING_CLASS_CCC10: hb_unicode_combining_class_t = 10;
616pub const HB_UNICODE_COMBINING_CLASS_CCC11: hb_unicode_combining_class_t = 11;
617pub const HB_UNICODE_COMBINING_CLASS_CCC12: hb_unicode_combining_class_t = 12;
618pub const HB_UNICODE_COMBINING_CLASS_CCC13: hb_unicode_combining_class_t = 13;
619pub const HB_UNICODE_COMBINING_CLASS_CCC14: hb_unicode_combining_class_t = 14;
620pub const HB_UNICODE_COMBINING_CLASS_CCC15: hb_unicode_combining_class_t = 15;
621pub const HB_UNICODE_COMBINING_CLASS_CCC16: hb_unicode_combining_class_t = 16;
622pub const HB_UNICODE_COMBINING_CLASS_CCC17: hb_unicode_combining_class_t = 17;
623pub const HB_UNICODE_COMBINING_CLASS_CCC18: hb_unicode_combining_class_t = 18;
624pub const HB_UNICODE_COMBINING_CLASS_CCC19: hb_unicode_combining_class_t = 19;
625pub const HB_UNICODE_COMBINING_CLASS_CCC20: hb_unicode_combining_class_t = 20;
626pub const HB_UNICODE_COMBINING_CLASS_CCC21: hb_unicode_combining_class_t = 21;
627pub const HB_UNICODE_COMBINING_CLASS_CCC22: hb_unicode_combining_class_t = 22;
628pub const HB_UNICODE_COMBINING_CLASS_CCC23: hb_unicode_combining_class_t = 23;
629pub const HB_UNICODE_COMBINING_CLASS_CCC24: hb_unicode_combining_class_t = 24;
630pub const HB_UNICODE_COMBINING_CLASS_CCC25: hb_unicode_combining_class_t = 25;
631pub const HB_UNICODE_COMBINING_CLASS_CCC26: hb_unicode_combining_class_t = 26;
632pub const HB_UNICODE_COMBINING_CLASS_CCC27: hb_unicode_combining_class_t = 27;
633pub const HB_UNICODE_COMBINING_CLASS_CCC28: hb_unicode_combining_class_t = 28;
634pub const HB_UNICODE_COMBINING_CLASS_CCC29: hb_unicode_combining_class_t = 29;
635pub const HB_UNICODE_COMBINING_CLASS_CCC30: hb_unicode_combining_class_t = 30;
636pub const HB_UNICODE_COMBINING_CLASS_CCC31: hb_unicode_combining_class_t = 31;
637pub const HB_UNICODE_COMBINING_CLASS_CCC32: hb_unicode_combining_class_t = 32;
638pub const HB_UNICODE_COMBINING_CLASS_CCC33: hb_unicode_combining_class_t = 33;
639pub const HB_UNICODE_COMBINING_CLASS_CCC34: hb_unicode_combining_class_t = 34;
640pub const HB_UNICODE_COMBINING_CLASS_CCC35: hb_unicode_combining_class_t = 35;
641pub const HB_UNICODE_COMBINING_CLASS_CCC36: hb_unicode_combining_class_t = 36;
642pub const HB_UNICODE_COMBINING_CLASS_CCC84: hb_unicode_combining_class_t = 84;
643pub const HB_UNICODE_COMBINING_CLASS_CCC91: hb_unicode_combining_class_t = 91;
644pub const HB_UNICODE_COMBINING_CLASS_CCC103: hb_unicode_combining_class_t = 103;
645pub const HB_UNICODE_COMBINING_CLASS_CCC107: hb_unicode_combining_class_t = 107;
646pub const HB_UNICODE_COMBINING_CLASS_CCC118: hb_unicode_combining_class_t = 118;
647pub const HB_UNICODE_COMBINING_CLASS_CCC122: hb_unicode_combining_class_t = 122;
648pub const HB_UNICODE_COMBINING_CLASS_CCC129: hb_unicode_combining_class_t = 129;
649pub const HB_UNICODE_COMBINING_CLASS_CCC130: hb_unicode_combining_class_t = 130;
650pub const HB_UNICODE_COMBINING_CLASS_CCC133: hb_unicode_combining_class_t = 132;
651pub const HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: hb_unicode_combining_class_t = 200;
652pub const HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: hb_unicode_combining_class_t = 202;
653pub const HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: hb_unicode_combining_class_t = 214;
654pub const HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: hb_unicode_combining_class_t = 216;
655pub const HB_UNICODE_COMBINING_CLASS_BELOW_LEFT: hb_unicode_combining_class_t = 218;
656pub const HB_UNICODE_COMBINING_CLASS_BELOW: hb_unicode_combining_class_t = 220;
657pub const HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT: hb_unicode_combining_class_t = 222;
658pub const HB_UNICODE_COMBINING_CLASS_LEFT: hb_unicode_combining_class_t = 224;
659pub const HB_UNICODE_COMBINING_CLASS_RIGHT: hb_unicode_combining_class_t = 226;
660pub const HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT: hb_unicode_combining_class_t = 228;
661pub const HB_UNICODE_COMBINING_CLASS_ABOVE: hb_unicode_combining_class_t = 230;
662pub const HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT: hb_unicode_combining_class_t = 232;
663pub const HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW: hb_unicode_combining_class_t = 233;
664pub const HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE: hb_unicode_combining_class_t = 234;
665pub const HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT: hb_unicode_combining_class_t = 240;
666pub const HB_UNICODE_COMBINING_CLASS_INVALID: hb_unicode_combining_class_t = 255;
667#[doc = " hb_unicode_combining_class_t:\n @HB_UNICODE_COMBINING_CLASS_NOT_REORDERED: Spacing and enclosing marks; also many vowel and consonant signs, even if nonspacing\n @HB_UNICODE_COMBINING_CLASS_OVERLAY: Marks which overlay a base letter or symbol\n @HB_UNICODE_COMBINING_CLASS_NUKTA: Diacritic nukta marks in Brahmi-derived scripts\n @HB_UNICODE_COMBINING_CLASS_KANA_VOICING: Hiragana/Katakana voicing marks\n @HB_UNICODE_COMBINING_CLASS_VIRAMA: Viramas\n @HB_UNICODE_COMBINING_CLASS_CCC10: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC11: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC12: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC13: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC14: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC15: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC16: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC17: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC18: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC19: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC20: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC21: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC22: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC23: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC24: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC25: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC26: [Hebrew]\n @HB_UNICODE_COMBINING_CLASS_CCC27: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC28: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC29: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC30: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC31: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC32: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC33: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC34: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC35: [Arabic]\n @HB_UNICODE_COMBINING_CLASS_CCC36: [Syriac]\n @HB_UNICODE_COMBINING_CLASS_CCC84: [Telugu]\n @HB_UNICODE_COMBINING_CLASS_CCC91: [Telugu]\n @HB_UNICODE_COMBINING_CLASS_CCC103: [Thai]\n @HB_UNICODE_COMBINING_CLASS_CCC107: [Thai]\n @HB_UNICODE_COMBINING_CLASS_CCC118: [Lao]\n @HB_UNICODE_COMBINING_CLASS_CCC122: [Lao]\n @HB_UNICODE_COMBINING_CLASS_CCC129: [Tibetan]\n @HB_UNICODE_COMBINING_CLASS_CCC130: [Tibetan]\n @HB_UNICODE_COMBINING_CLASS_CCC133: [Tibetan]\n @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT: Marks attached at the bottom left\n @HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW: Marks attached directly below\n @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE: Marks attached directly above\n @HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT: Marks attached at the top right\n @HB_UNICODE_COMBINING_CLASS_BELOW_LEFT: Distinct marks at the bottom left\n @HB_UNICODE_COMBINING_CLASS_BELOW: Distinct marks directly below\n @HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT: Distinct marks at the bottom right\n @HB_UNICODE_COMBINING_CLASS_LEFT: Distinct marks to the left\n @HB_UNICODE_COMBINING_CLASS_RIGHT: Distinct marks to the right\n @HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT: Distinct marks at the top left\n @HB_UNICODE_COMBINING_CLASS_ABOVE: Distinct marks directly above\n @HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT: Distinct marks at the top right\n @HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW: Distinct marks subtending two bases\n @HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE: Distinct marks extending above two bases\n @HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT: Greek iota subscript only\n @HB_UNICODE_COMBINING_CLASS_INVALID: Invalid combining class\n\n Data type for the Canonical_Combining_Class (ccc) property\n from the Unicode Character Database.\n\n <note>Note: newer versions of Unicode may add new values.\n Client programs should be ready to handle any value in the 0..254 range\n being returned from hb_unicode_combining_class().</note>\n"]
668pub type hb_unicode_combining_class_t = ::core::ffi::c_uint;
669#[repr(C)]
670#[derive(Debug, Copy, Clone)]
671pub struct hb_unicode_funcs_t {
672    _unused: [u8; 0],
673}
674extern "C" {
675    pub fn hb_unicode_funcs_get_default() -> *mut hb_unicode_funcs_t;
676}
677extern "C" {
678    pub fn hb_unicode_funcs_create(parent: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
679}
680extern "C" {
681    pub fn hb_unicode_funcs_get_empty() -> *mut hb_unicode_funcs_t;
682}
683extern "C" {
684    pub fn hb_unicode_funcs_reference(ufuncs: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
685}
686extern "C" {
687    pub fn hb_unicode_funcs_destroy(ufuncs: *mut hb_unicode_funcs_t);
688}
689extern "C" {
690    pub fn hb_unicode_funcs_set_user_data(
691        ufuncs: *mut hb_unicode_funcs_t,
692        key: *mut hb_user_data_key_t,
693        data: *mut ::core::ffi::c_void,
694        destroy: hb_destroy_func_t,
695        replace: hb_bool_t,
696    ) -> hb_bool_t;
697}
698extern "C" {
699    pub fn hb_unicode_funcs_get_user_data(
700        ufuncs: *mut hb_unicode_funcs_t,
701        key: *mut hb_user_data_key_t,
702    ) -> *mut ::core::ffi::c_void;
703}
704extern "C" {
705    pub fn hb_unicode_funcs_make_immutable(ufuncs: *mut hb_unicode_funcs_t);
706}
707extern "C" {
708    pub fn hb_unicode_funcs_is_immutable(ufuncs: *mut hb_unicode_funcs_t) -> hb_bool_t;
709}
710extern "C" {
711    pub fn hb_unicode_funcs_get_parent(ufuncs: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
712}
713#[doc = " hb_unicode_combining_class_func_t:\n @ufuncs: A Unicode-functions structure\n @unicode: The code point to query\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should retrieve the Canonical Combining Class (ccc)\n property for a specified Unicode code point.\n\n Return value: The #hb_unicode_combining_class_t of @unicode\n"]
714pub type hb_unicode_combining_class_func_t = ::core::option::Option<
715    unsafe extern "C" fn(
716        ufuncs: *mut hb_unicode_funcs_t,
717        unicode: hb_codepoint_t,
718        user_data: *mut ::core::ffi::c_void,
719    ) -> hb_unicode_combining_class_t,
720>;
721#[doc = " hb_unicode_general_category_func_t:\n @ufuncs: A Unicode-functions structure\n @unicode: The code point to query\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should retrieve the General Category property for\n a specified Unicode code point.\n\n Return value: The #hb_unicode_general_category_t of @unicode\n"]
722pub type hb_unicode_general_category_func_t = ::core::option::Option<
723    unsafe extern "C" fn(
724        ufuncs: *mut hb_unicode_funcs_t,
725        unicode: hb_codepoint_t,
726        user_data: *mut ::core::ffi::c_void,
727    ) -> hb_unicode_general_category_t,
728>;
729#[doc = " hb_unicode_mirroring_func_t:\n @ufuncs: A Unicode-functions structure\n @unicode: The code point to query\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should retrieve the Bi-Directional Mirroring Glyph\n code point for a specified Unicode code point.\n\n <note>Note: If a code point does not have a specified\n Bi-Directional Mirroring Glyph defined, the method should\n return the original code point.</note>\n\n Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode\n"]
730pub type hb_unicode_mirroring_func_t = ::core::option::Option<
731    unsafe extern "C" fn(
732        ufuncs: *mut hb_unicode_funcs_t,
733        unicode: hb_codepoint_t,
734        user_data: *mut ::core::ffi::c_void,
735    ) -> hb_codepoint_t,
736>;
737#[doc = " hb_unicode_script_func_t:\n @ufuncs: A Unicode-functions structure\n @unicode: The code point to query\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should retrieve the Script property for a\n specified Unicode code point.\n\n Return value: The #hb_script_t of @unicode\n"]
738pub type hb_unicode_script_func_t = ::core::option::Option<
739    unsafe extern "C" fn(
740        ufuncs: *mut hb_unicode_funcs_t,
741        unicode: hb_codepoint_t,
742        user_data: *mut ::core::ffi::c_void,
743    ) -> hb_script_t,
744>;
745#[doc = " hb_unicode_compose_func_t:\n @ufuncs: A Unicode-functions structure\n @a: The first code point to compose\n @b: The second code point to compose\n @ab: (out): The composed code point\n @user_data: user data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should compose a sequence of two input Unicode code\n points by canonical equivalence, returning the composed code\n point in a #hb_codepoint_t output parameter (if successful).\n The method must return an #hb_bool_t indicating the success\n of the composition.\n\n Return value: True is @a,@b composed, false otherwise\n"]
746pub type hb_unicode_compose_func_t = ::core::option::Option<
747    unsafe extern "C" fn(
748        ufuncs: *mut hb_unicode_funcs_t,
749        a: hb_codepoint_t,
750        b: hb_codepoint_t,
751        ab: *mut hb_codepoint_t,
752        user_data: *mut ::core::ffi::c_void,
753    ) -> hb_bool_t,
754>;
755#[doc = " hb_unicode_decompose_func_t:\n @ufuncs: A Unicode-functions structure\n @ab: The code point to decompose\n @a: (out): The first decomposed code point\n @b: (out): The second decomposed code point\n @user_data: user data pointer passed by the caller\n\n A virtual method for the #hb_unicode_funcs_t structure.\n\n This method should decompose an input Unicode code point,\n returning the two decomposed code points in #hb_codepoint_t\n output parameters (if successful). The method must return an\n #hb_bool_t indicating the success of the composition.\n\n Return value: True if @ab decomposed, false otherwise\n"]
756pub type hb_unicode_decompose_func_t = ::core::option::Option<
757    unsafe extern "C" fn(
758        ufuncs: *mut hb_unicode_funcs_t,
759        ab: hb_codepoint_t,
760        a: *mut hb_codepoint_t,
761        b: *mut hb_codepoint_t,
762        user_data: *mut ::core::ffi::c_void,
763    ) -> hb_bool_t,
764>;
765extern "C" {
766    #[doc = " hb_unicode_funcs_set_combining_class_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_combining_class_func_t.\n\n Since: 0.9.2"]
767    pub fn hb_unicode_funcs_set_combining_class_func(
768        ufuncs: *mut hb_unicode_funcs_t,
769        func: hb_unicode_combining_class_func_t,
770        user_data: *mut ::core::ffi::c_void,
771        destroy: hb_destroy_func_t,
772    );
773}
774extern "C" {
775    #[doc = " hb_unicode_funcs_set_general_category_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_general_category_func_t.\n\n Since: 0.9.2"]
776    pub fn hb_unicode_funcs_set_general_category_func(
777        ufuncs: *mut hb_unicode_funcs_t,
778        func: hb_unicode_general_category_func_t,
779        user_data: *mut ::core::ffi::c_void,
780        destroy: hb_destroy_func_t,
781    );
782}
783extern "C" {
784    #[doc = " hb_unicode_funcs_set_mirroring_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_mirroring_func_t.\n\n Since: 0.9.2"]
785    pub fn hb_unicode_funcs_set_mirroring_func(
786        ufuncs: *mut hb_unicode_funcs_t,
787        func: hb_unicode_mirroring_func_t,
788        user_data: *mut ::core::ffi::c_void,
789        destroy: hb_destroy_func_t,
790    );
791}
792extern "C" {
793    #[doc = " hb_unicode_funcs_set_script_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_script_func_t.\n\n Since: 0.9.2"]
794    pub fn hb_unicode_funcs_set_script_func(
795        ufuncs: *mut hb_unicode_funcs_t,
796        func: hb_unicode_script_func_t,
797        user_data: *mut ::core::ffi::c_void,
798        destroy: hb_destroy_func_t,
799    );
800}
801extern "C" {
802    #[doc = " hb_unicode_funcs_set_compose_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_compose_func_t.\n\n Since: 0.9.2"]
803    pub fn hb_unicode_funcs_set_compose_func(
804        ufuncs: *mut hb_unicode_funcs_t,
805        func: hb_unicode_compose_func_t,
806        user_data: *mut ::core::ffi::c_void,
807        destroy: hb_destroy_func_t,
808    );
809}
810extern "C" {
811    #[doc = " hb_unicode_funcs_set_decompose_func:\n @ufuncs: A Unicode-functions structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_decompose_func_t.\n\n Since: 0.9.2"]
812    pub fn hb_unicode_funcs_set_decompose_func(
813        ufuncs: *mut hb_unicode_funcs_t,
814        func: hb_unicode_decompose_func_t,
815        user_data: *mut ::core::ffi::c_void,
816        destroy: hb_destroy_func_t,
817    );
818}
819extern "C" {
820    #[doc = " hb_unicode_combining_class:\n @ufuncs: The Unicode-functions structure\n @unicode: The code point to query\n\n Retrieves the Canonical Combining Class (ccc) property\n of code point @unicode.\n\n Return value: The #hb_unicode_combining_class_t of @unicode\n\n Since: 0.9.2"]
821    pub fn hb_unicode_combining_class(
822        ufuncs: *mut hb_unicode_funcs_t,
823        unicode: hb_codepoint_t,
824    ) -> hb_unicode_combining_class_t;
825}
826extern "C" {
827    #[doc = " hb_unicode_general_category:\n @ufuncs: The Unicode-functions structure\n @unicode: The code point to query\n\n Retrieves the General Category (gc) property\n of code point @unicode.\n\n Return value: The #hb_unicode_general_category_t of @unicode\n\n Since: 0.9.2"]
828    pub fn hb_unicode_general_category(
829        ufuncs: *mut hb_unicode_funcs_t,
830        unicode: hb_codepoint_t,
831    ) -> hb_unicode_general_category_t;
832}
833extern "C" {
834    #[doc = " hb_unicode_mirroring:\n @ufuncs: The Unicode-functions structure\n @unicode: The code point to query\n\n Retrieves the Bi-directional Mirroring Glyph code\n point defined for code point @unicode.\n\n Return value: The #hb_codepoint_t of the Mirroring Glyph for @unicode\n\n Since: 0.9.2"]
835    pub fn hb_unicode_mirroring(
836        ufuncs: *mut hb_unicode_funcs_t,
837        unicode: hb_codepoint_t,
838    ) -> hb_codepoint_t;
839}
840extern "C" {
841    #[doc = " hb_unicode_script:\n @ufuncs: The Unicode-functions structure\n @unicode: The code point to query\n\n Retrieves the #hb_script_t script to which code\n point @unicode belongs.\n\n Return value: The #hb_script_t of @unicode\n\n Since: 0.9.2"]
842    pub fn hb_unicode_script(
843        ufuncs: *mut hb_unicode_funcs_t,
844        unicode: hb_codepoint_t,
845    ) -> hb_script_t;
846}
847extern "C" {
848    #[doc = " hb_unicode_compose:\n @ufuncs: The Unicode-functions structure\n @a: The first code point to compose\n @b: The second code point to compose\n @ab: (out): The composed code point\n\n Composes the code point sequence @a,@b by canonical equivalence into\n code point @ab.\n\n Return value: True is @a,@b composed, false otherwise\n\n Since: 0.9.2"]
849    pub fn hb_unicode_compose(
850        ufuncs: *mut hb_unicode_funcs_t,
851        a: hb_codepoint_t,
852        b: hb_codepoint_t,
853        ab: *mut hb_codepoint_t,
854    ) -> hb_bool_t;
855}
856extern "C" {
857    #[doc = " hb_unicode_decompose:\n @ufuncs: The Unicode-functions structure\n @ab: The code point to decompose\n @a: (out): The first decomposed code point\n @b: (out): The second decomposed code point\n\n Decomposes code point @ab by canonical equivalence, into code points\n @a and @b.\n\n Return value: True if @ab decomposed, false otherwise\n\n Since: 0.9.2"]
858    pub fn hb_unicode_decompose(
859        ufuncs: *mut hb_unicode_funcs_t,
860        ab: hb_codepoint_t,
861        a: *mut hb_codepoint_t,
862        b: *mut hb_codepoint_t,
863    ) -> hb_bool_t;
864}
865#[repr(C)]
866#[derive(Debug, Copy, Clone)]
867pub struct hb_set_t {
868    _unused: [u8; 0],
869}
870extern "C" {
871    pub fn hb_set_create() -> *mut hb_set_t;
872}
873extern "C" {
874    pub fn hb_set_get_empty() -> *mut hb_set_t;
875}
876extern "C" {
877    pub fn hb_set_reference(set: *mut hb_set_t) -> *mut hb_set_t;
878}
879extern "C" {
880    pub fn hb_set_destroy(set: *mut hb_set_t);
881}
882extern "C" {
883    pub fn hb_set_set_user_data(
884        set: *mut hb_set_t,
885        key: *mut hb_user_data_key_t,
886        data: *mut ::core::ffi::c_void,
887        destroy: hb_destroy_func_t,
888        replace: hb_bool_t,
889    ) -> hb_bool_t;
890}
891extern "C" {
892    pub fn hb_set_get_user_data(
893        set: *mut hb_set_t,
894        key: *mut hb_user_data_key_t,
895    ) -> *mut ::core::ffi::c_void;
896}
897extern "C" {
898    pub fn hb_set_allocation_successful(set: *const hb_set_t) -> hb_bool_t;
899}
900extern "C" {
901    pub fn hb_set_clear(set: *mut hb_set_t);
902}
903extern "C" {
904    pub fn hb_set_is_empty(set: *const hb_set_t) -> hb_bool_t;
905}
906extern "C" {
907    pub fn hb_set_has(set: *const hb_set_t, codepoint: hb_codepoint_t) -> hb_bool_t;
908}
909extern "C" {
910    pub fn hb_set_add(set: *mut hb_set_t, codepoint: hb_codepoint_t);
911}
912extern "C" {
913    pub fn hb_set_add_range(set: *mut hb_set_t, first: hb_codepoint_t, last: hb_codepoint_t);
914}
915extern "C" {
916    pub fn hb_set_del(set: *mut hb_set_t, codepoint: hb_codepoint_t);
917}
918extern "C" {
919    pub fn hb_set_del_range(set: *mut hb_set_t, first: hb_codepoint_t, last: hb_codepoint_t);
920}
921extern "C" {
922    pub fn hb_set_is_equal(set: *const hb_set_t, other: *const hb_set_t) -> hb_bool_t;
923}
924extern "C" {
925    pub fn hb_set_is_subset(set: *const hb_set_t, larger_set: *const hb_set_t) -> hb_bool_t;
926}
927extern "C" {
928    pub fn hb_set_set(set: *mut hb_set_t, other: *const hb_set_t);
929}
930extern "C" {
931    pub fn hb_set_union(set: *mut hb_set_t, other: *const hb_set_t);
932}
933extern "C" {
934    pub fn hb_set_intersect(set: *mut hb_set_t, other: *const hb_set_t);
935}
936extern "C" {
937    pub fn hb_set_subtract(set: *mut hb_set_t, other: *const hb_set_t);
938}
939extern "C" {
940    pub fn hb_set_symmetric_difference(set: *mut hb_set_t, other: *const hb_set_t);
941}
942extern "C" {
943    pub fn hb_set_get_population(set: *const hb_set_t) -> ::core::ffi::c_uint;
944}
945extern "C" {
946    pub fn hb_set_get_min(set: *const hb_set_t) -> hb_codepoint_t;
947}
948extern "C" {
949    pub fn hb_set_get_max(set: *const hb_set_t) -> hb_codepoint_t;
950}
951extern "C" {
952    pub fn hb_set_next(set: *const hb_set_t, codepoint: *mut hb_codepoint_t) -> hb_bool_t;
953}
954extern "C" {
955    pub fn hb_set_previous(set: *const hb_set_t, codepoint: *mut hb_codepoint_t) -> hb_bool_t;
956}
957extern "C" {
958    pub fn hb_set_next_range(
959        set: *const hb_set_t,
960        first: *mut hb_codepoint_t,
961        last: *mut hb_codepoint_t,
962    ) -> hb_bool_t;
963}
964extern "C" {
965    pub fn hb_set_previous_range(
966        set: *const hb_set_t,
967        first: *mut hb_codepoint_t,
968        last: *mut hb_codepoint_t,
969    ) -> hb_bool_t;
970}
971extern "C" {
972    pub fn hb_face_count(blob: *mut hb_blob_t) -> ::core::ffi::c_uint;
973}
974#[repr(C)]
975#[derive(Debug, Copy, Clone)]
976pub struct hb_face_t {
977    _unused: [u8; 0],
978}
979extern "C" {
980    pub fn hb_face_create(blob: *mut hb_blob_t, index: ::core::ffi::c_uint) -> *mut hb_face_t;
981}
982pub type hb_reference_table_func_t = ::core::option::Option<
983    unsafe extern "C" fn(
984        face: *mut hb_face_t,
985        tag: hb_tag_t,
986        user_data: *mut ::core::ffi::c_void,
987    ) -> *mut hb_blob_t,
988>;
989extern "C" {
990    pub fn hb_face_create_for_tables(
991        reference_table_func: hb_reference_table_func_t,
992        user_data: *mut ::core::ffi::c_void,
993        destroy: hb_destroy_func_t,
994    ) -> *mut hb_face_t;
995}
996extern "C" {
997    pub fn hb_face_get_empty() -> *mut hb_face_t;
998}
999extern "C" {
1000    pub fn hb_face_reference(face: *mut hb_face_t) -> *mut hb_face_t;
1001}
1002extern "C" {
1003    pub fn hb_face_destroy(face: *mut hb_face_t);
1004}
1005extern "C" {
1006    pub fn hb_face_set_user_data(
1007        face: *mut hb_face_t,
1008        key: *mut hb_user_data_key_t,
1009        data: *mut ::core::ffi::c_void,
1010        destroy: hb_destroy_func_t,
1011        replace: hb_bool_t,
1012    ) -> hb_bool_t;
1013}
1014extern "C" {
1015    pub fn hb_face_get_user_data(
1016        face: *const hb_face_t,
1017        key: *mut hb_user_data_key_t,
1018    ) -> *mut ::core::ffi::c_void;
1019}
1020extern "C" {
1021    pub fn hb_face_make_immutable(face: *mut hb_face_t);
1022}
1023extern "C" {
1024    pub fn hb_face_is_immutable(face: *const hb_face_t) -> hb_bool_t;
1025}
1026extern "C" {
1027    pub fn hb_face_reference_table(face: *const hb_face_t, tag: hb_tag_t) -> *mut hb_blob_t;
1028}
1029extern "C" {
1030    pub fn hb_face_reference_blob(face: *mut hb_face_t) -> *mut hb_blob_t;
1031}
1032extern "C" {
1033    pub fn hb_face_set_index(face: *mut hb_face_t, index: ::core::ffi::c_uint);
1034}
1035extern "C" {
1036    pub fn hb_face_get_index(face: *const hb_face_t) -> ::core::ffi::c_uint;
1037}
1038extern "C" {
1039    pub fn hb_face_set_upem(face: *mut hb_face_t, upem: ::core::ffi::c_uint);
1040}
1041extern "C" {
1042    pub fn hb_face_get_upem(face: *const hb_face_t) -> ::core::ffi::c_uint;
1043}
1044extern "C" {
1045    pub fn hb_face_set_glyph_count(face: *mut hb_face_t, glyph_count: ::core::ffi::c_uint);
1046}
1047extern "C" {
1048    pub fn hb_face_get_glyph_count(face: *const hb_face_t) -> ::core::ffi::c_uint;
1049}
1050extern "C" {
1051    pub fn hb_face_get_table_tags(
1052        face: *const hb_face_t,
1053        start_offset: ::core::ffi::c_uint,
1054        table_count: *mut ::core::ffi::c_uint,
1055        table_tags: *mut hb_tag_t,
1056    ) -> ::core::ffi::c_uint;
1057}
1058extern "C" {
1059    pub fn hb_face_collect_unicodes(face: *mut hb_face_t, out: *mut hb_set_t);
1060}
1061extern "C" {
1062    pub fn hb_face_collect_variation_selectors(face: *mut hb_face_t, out: *mut hb_set_t);
1063}
1064extern "C" {
1065    pub fn hb_face_collect_variation_unicodes(
1066        face: *mut hb_face_t,
1067        variation_selector: hb_codepoint_t,
1068        out: *mut hb_set_t,
1069    );
1070}
1071extern "C" {
1072    pub fn hb_face_builder_create() -> *mut hb_face_t;
1073}
1074extern "C" {
1075    pub fn hb_face_builder_add_table(
1076        face: *mut hb_face_t,
1077        tag: hb_tag_t,
1078        blob: *mut hb_blob_t,
1079    ) -> hb_bool_t;
1080}
1081#[repr(C)]
1082#[derive(Debug, Copy, Clone)]
1083pub struct hb_font_t {
1084    _unused: [u8; 0],
1085}
1086#[repr(C)]
1087#[derive(Debug, Copy, Clone)]
1088pub struct hb_font_funcs_t {
1089    _unused: [u8; 0],
1090}
1091extern "C" {
1092    pub fn hb_font_funcs_create() -> *mut hb_font_funcs_t;
1093}
1094extern "C" {
1095    pub fn hb_font_funcs_get_empty() -> *mut hb_font_funcs_t;
1096}
1097extern "C" {
1098    pub fn hb_font_funcs_reference(ffuncs: *mut hb_font_funcs_t) -> *mut hb_font_funcs_t;
1099}
1100extern "C" {
1101    pub fn hb_font_funcs_destroy(ffuncs: *mut hb_font_funcs_t);
1102}
1103extern "C" {
1104    pub fn hb_font_funcs_set_user_data(
1105        ffuncs: *mut hb_font_funcs_t,
1106        key: *mut hb_user_data_key_t,
1107        data: *mut ::core::ffi::c_void,
1108        destroy: hb_destroy_func_t,
1109        replace: hb_bool_t,
1110    ) -> hb_bool_t;
1111}
1112extern "C" {
1113    pub fn hb_font_funcs_get_user_data(
1114        ffuncs: *mut hb_font_funcs_t,
1115        key: *mut hb_user_data_key_t,
1116    ) -> *mut ::core::ffi::c_void;
1117}
1118extern "C" {
1119    pub fn hb_font_funcs_make_immutable(ffuncs: *mut hb_font_funcs_t);
1120}
1121extern "C" {
1122    pub fn hb_font_funcs_is_immutable(ffuncs: *mut hb_font_funcs_t) -> hb_bool_t;
1123}
1124#[doc = " hb_font_extents_t:\n @ascender: The height of typographic ascenders.\n @descender: The depth of typographic descenders.\n @line_gap: The suggested line-spacing gap.\n\n Font-wide extent values, measured in font units.\n\n Note that typically @ascender is positive and @descender\n negative, in coordinate systems that grow up."]
1125#[repr(C)]
1126#[derive(Debug, Copy, Clone)]
1127pub struct hb_font_extents_t {
1128    pub ascender: hb_position_t,
1129    pub descender: hb_position_t,
1130    pub line_gap: hb_position_t,
1131    pub reserved9: hb_position_t,
1132    pub reserved8: hb_position_t,
1133    pub reserved7: hb_position_t,
1134    pub reserved6: hb_position_t,
1135    pub reserved5: hb_position_t,
1136    pub reserved4: hb_position_t,
1137    pub reserved3: hb_position_t,
1138    pub reserved2: hb_position_t,
1139    pub reserved1: hb_position_t,
1140}
1141#[test]
1142fn bindgen_test_layout_hb_font_extents_t() {
1143    const UNINIT: ::core::mem::MaybeUninit<hb_font_extents_t> = ::core::mem::MaybeUninit::uninit();
1144    let ptr = UNINIT.as_ptr();
1145    assert_eq!(
1146        ::core::mem::size_of::<hb_font_extents_t>(),
1147        48usize,
1148        concat!("Size of: ", stringify!(hb_font_extents_t))
1149    );
1150    assert_eq!(
1151        ::core::mem::align_of::<hb_font_extents_t>(),
1152        4usize,
1153        concat!("Alignment of ", stringify!(hb_font_extents_t))
1154    );
1155    assert_eq!(
1156        unsafe { ::core::ptr::addr_of!((*ptr).ascender) as usize - ptr as usize },
1157        0usize,
1158        concat!(
1159            "Offset of field: ",
1160            stringify!(hb_font_extents_t),
1161            "::",
1162            stringify!(ascender)
1163        )
1164    );
1165    assert_eq!(
1166        unsafe { ::core::ptr::addr_of!((*ptr).descender) as usize - ptr as usize },
1167        4usize,
1168        concat!(
1169            "Offset of field: ",
1170            stringify!(hb_font_extents_t),
1171            "::",
1172            stringify!(descender)
1173        )
1174    );
1175    assert_eq!(
1176        unsafe { ::core::ptr::addr_of!((*ptr).line_gap) as usize - ptr as usize },
1177        8usize,
1178        concat!(
1179            "Offset of field: ",
1180            stringify!(hb_font_extents_t),
1181            "::",
1182            stringify!(line_gap)
1183        )
1184    );
1185    assert_eq!(
1186        unsafe { ::core::ptr::addr_of!((*ptr).reserved9) as usize - ptr as usize },
1187        12usize,
1188        concat!(
1189            "Offset of field: ",
1190            stringify!(hb_font_extents_t),
1191            "::",
1192            stringify!(reserved9)
1193        )
1194    );
1195    assert_eq!(
1196        unsafe { ::core::ptr::addr_of!((*ptr).reserved8) as usize - ptr as usize },
1197        16usize,
1198        concat!(
1199            "Offset of field: ",
1200            stringify!(hb_font_extents_t),
1201            "::",
1202            stringify!(reserved8)
1203        )
1204    );
1205    assert_eq!(
1206        unsafe { ::core::ptr::addr_of!((*ptr).reserved7) as usize - ptr as usize },
1207        20usize,
1208        concat!(
1209            "Offset of field: ",
1210            stringify!(hb_font_extents_t),
1211            "::",
1212            stringify!(reserved7)
1213        )
1214    );
1215    assert_eq!(
1216        unsafe { ::core::ptr::addr_of!((*ptr).reserved6) as usize - ptr as usize },
1217        24usize,
1218        concat!(
1219            "Offset of field: ",
1220            stringify!(hb_font_extents_t),
1221            "::",
1222            stringify!(reserved6)
1223        )
1224    );
1225    assert_eq!(
1226        unsafe { ::core::ptr::addr_of!((*ptr).reserved5) as usize - ptr as usize },
1227        28usize,
1228        concat!(
1229            "Offset of field: ",
1230            stringify!(hb_font_extents_t),
1231            "::",
1232            stringify!(reserved5)
1233        )
1234    );
1235    assert_eq!(
1236        unsafe { ::core::ptr::addr_of!((*ptr).reserved4) as usize - ptr as usize },
1237        32usize,
1238        concat!(
1239            "Offset of field: ",
1240            stringify!(hb_font_extents_t),
1241            "::",
1242            stringify!(reserved4)
1243        )
1244    );
1245    assert_eq!(
1246        unsafe { ::core::ptr::addr_of!((*ptr).reserved3) as usize - ptr as usize },
1247        36usize,
1248        concat!(
1249            "Offset of field: ",
1250            stringify!(hb_font_extents_t),
1251            "::",
1252            stringify!(reserved3)
1253        )
1254    );
1255    assert_eq!(
1256        unsafe { ::core::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
1257        40usize,
1258        concat!(
1259            "Offset of field: ",
1260            stringify!(hb_font_extents_t),
1261            "::",
1262            stringify!(reserved2)
1263        )
1264    );
1265    assert_eq!(
1266        unsafe { ::core::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
1267        44usize,
1268        concat!(
1269            "Offset of field: ",
1270            stringify!(hb_font_extents_t),
1271            "::",
1272            stringify!(reserved1)
1273        )
1274    );
1275}
1276#[doc = " hb_glyph_extents_t:\n @x_bearing: Distance from the x-origin to the left extremum of the glyph.\n @y_bearing: Distance from the top extremum of the glyph to the y-origin.\n @width: Distance from the left extremum of the glyph to the right extremum.\n @height: Distance from the top extremum of the glyph to the bottom extremum.\n\n Glyph extent values, measured in font units.\n\n Note that @height is negative, in coordinate systems that grow up."]
1277#[repr(C)]
1278#[derive(Debug, Copy, Clone)]
1279pub struct hb_glyph_extents_t {
1280    pub x_bearing: hb_position_t,
1281    pub y_bearing: hb_position_t,
1282    pub width: hb_position_t,
1283    pub height: hb_position_t,
1284}
1285#[test]
1286fn bindgen_test_layout_hb_glyph_extents_t() {
1287    const UNINIT: ::core::mem::MaybeUninit<hb_glyph_extents_t> = ::core::mem::MaybeUninit::uninit();
1288    let ptr = UNINIT.as_ptr();
1289    assert_eq!(
1290        ::core::mem::size_of::<hb_glyph_extents_t>(),
1291        16usize,
1292        concat!("Size of: ", stringify!(hb_glyph_extents_t))
1293    );
1294    assert_eq!(
1295        ::core::mem::align_of::<hb_glyph_extents_t>(),
1296        4usize,
1297        concat!("Alignment of ", stringify!(hb_glyph_extents_t))
1298    );
1299    assert_eq!(
1300        unsafe { ::core::ptr::addr_of!((*ptr).x_bearing) as usize - ptr as usize },
1301        0usize,
1302        concat!(
1303            "Offset of field: ",
1304            stringify!(hb_glyph_extents_t),
1305            "::",
1306            stringify!(x_bearing)
1307        )
1308    );
1309    assert_eq!(
1310        unsafe { ::core::ptr::addr_of!((*ptr).y_bearing) as usize - ptr as usize },
1311        4usize,
1312        concat!(
1313            "Offset of field: ",
1314            stringify!(hb_glyph_extents_t),
1315            "::",
1316            stringify!(y_bearing)
1317        )
1318    );
1319    assert_eq!(
1320        unsafe { ::core::ptr::addr_of!((*ptr).width) as usize - ptr as usize },
1321        8usize,
1322        concat!(
1323            "Offset of field: ",
1324            stringify!(hb_glyph_extents_t),
1325            "::",
1326            stringify!(width)
1327        )
1328    );
1329    assert_eq!(
1330        unsafe { ::core::ptr::addr_of!((*ptr).height) as usize - ptr as usize },
1331        12usize,
1332        concat!(
1333            "Offset of field: ",
1334            stringify!(hb_glyph_extents_t),
1335            "::",
1336            stringify!(height)
1337        )
1338    );
1339}
1340pub type hb_font_get_font_extents_func_t = ::core::option::Option<
1341    unsafe extern "C" fn(
1342        font: *mut hb_font_t,
1343        font_data: *mut ::core::ffi::c_void,
1344        extents: *mut hb_font_extents_t,
1345        user_data: *mut ::core::ffi::c_void,
1346    ) -> hb_bool_t,
1347>;
1348#[doc = " hb_font_get_font_h_extents_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the extents for a font, in horizontal-direction\n text segments. Extents must be returned in an #hb_glyph_extents output\n parameter.\n"]
1349pub type hb_font_get_font_h_extents_func_t = hb_font_get_font_extents_func_t;
1350#[doc = " hb_font_get_font_v_extents_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the extents for a font, in vertical-direction\n text segments. Extents must be returned in an #hb_glyph_extents output\n parameter.\n"]
1351pub type hb_font_get_font_v_extents_func_t = hb_font_get_font_extents_func_t;
1352#[doc = " hb_font_get_nominal_glyph_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the nominal glyph ID for a specified Unicode code\n point. Glyph IDs must be returned in a #hb_codepoint_t output parameter.\n"]
1353pub type hb_font_get_nominal_glyph_func_t = ::core::option::Option<
1354    unsafe extern "C" fn(
1355        font: *mut hb_font_t,
1356        font_data: *mut ::core::ffi::c_void,
1357        unicode: hb_codepoint_t,
1358        glyph: *mut hb_codepoint_t,
1359        user_data: *mut ::core::ffi::c_void,
1360    ) -> hb_bool_t,
1361>;
1362#[doc = " hb_font_get_variation_glyph_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the glyph ID for a specified Unicode code point\n followed by a specified Variation Selector code point. Glyph IDs must be\n returned in a #hb_codepoint_t output parameter.\n"]
1363pub type hb_font_get_variation_glyph_func_t = ::core::option::Option<
1364    unsafe extern "C" fn(
1365        font: *mut hb_font_t,
1366        font_data: *mut ::core::ffi::c_void,
1367        unicode: hb_codepoint_t,
1368        variation_selector: hb_codepoint_t,
1369        glyph: *mut hb_codepoint_t,
1370        user_data: *mut ::core::ffi::c_void,
1371    ) -> hb_bool_t,
1372>;
1373#[doc = " hb_font_get_nominal_glyphs_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the nominal glyph IDs for a sequence of\n Unicode code points. Glyph IDs must be returned in a #hb_codepoint_t\n output parameter.\n"]
1374pub type hb_font_get_nominal_glyphs_func_t = ::core::option::Option<
1375    unsafe extern "C" fn(
1376        font: *mut hb_font_t,
1377        font_data: *mut ::core::ffi::c_void,
1378        count: ::core::ffi::c_uint,
1379        first_unicode: *const hb_codepoint_t,
1380        unicode_stride: ::core::ffi::c_uint,
1381        first_glyph: *mut hb_codepoint_t,
1382        glyph_stride: ::core::ffi::c_uint,
1383        user_data: *mut ::core::ffi::c_void,
1384    ) -> ::core::ffi::c_uint,
1385>;
1386#[doc = " hb_font_get_glyph_advance_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advance for a specified glyph. The\n method must return an #hb_position_t.\n"]
1387pub type hb_font_get_glyph_advance_func_t = ::core::option::Option<
1388    unsafe extern "C" fn(
1389        font: *mut hb_font_t,
1390        font_data: *mut ::core::ffi::c_void,
1391        glyph: hb_codepoint_t,
1392        user_data: *mut ::core::ffi::c_void,
1393    ) -> hb_position_t,
1394>;
1395#[doc = " hb_font_get_glyph_h_advance_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advance for a specified glyph, in\n horizontal-direction text segments. Advances must be returned in\n an #hb_position_t output parameter.\n"]
1396pub type hb_font_get_glyph_h_advance_func_t = hb_font_get_glyph_advance_func_t;
1397#[doc = " hb_font_get_glyph_v_advance_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advance for a specified glyph, in\n vertical-direction text segments. Advances must be returned in\n an #hb_position_t output parameter.\n"]
1398pub type hb_font_get_glyph_v_advance_func_t = hb_font_get_glyph_advance_func_t;
1399#[doc = " hb_font_get_glyph_advances_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advances for a sequence of glyphs.\n"]
1400pub type hb_font_get_glyph_advances_func_t = ::core::option::Option<
1401    unsafe extern "C" fn(
1402        font: *mut hb_font_t,
1403        font_data: *mut ::core::ffi::c_void,
1404        count: ::core::ffi::c_uint,
1405        first_glyph: *const hb_codepoint_t,
1406        glyph_stride: ::core::ffi::c_uint,
1407        first_advance: *mut hb_position_t,
1408        advance_stride: ::core::ffi::c_uint,
1409        user_data: *mut ::core::ffi::c_void,
1410    ),
1411>;
1412#[doc = " hb_font_get_glyph_h_advances_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advances for a sequence of glyphs, in\n horizontal-direction text segments.\n"]
1413pub type hb_font_get_glyph_h_advances_func_t = hb_font_get_glyph_advances_func_t;
1414#[doc = " hb_font_get_glyph_v_advances_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the advances for a sequence of glyphs, in\n vertical-direction text segments.\n"]
1415pub type hb_font_get_glyph_v_advances_func_t = hb_font_get_glyph_advances_func_t;
1416#[doc = " hb_font_get_glyph_origin_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the (X,Y) coordinates (in font units) of the\n origin for a glyph. Each coordinate must be returned in an #hb_position_t\n output parameter.\n"]
1417pub type hb_font_get_glyph_origin_func_t = ::core::option::Option<
1418    unsafe extern "C" fn(
1419        font: *mut hb_font_t,
1420        font_data: *mut ::core::ffi::c_void,
1421        glyph: hb_codepoint_t,
1422        x: *mut hb_position_t,
1423        y: *mut hb_position_t,
1424        user_data: *mut ::core::ffi::c_void,
1425    ) -> hb_bool_t,
1426>;
1427#[doc = " hb_font_get_glyph_h_origin_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the (X,Y) coordinates (in font units) of the\n origin for a glyph, in horizontal-direction text segments. Each\n coordinate must be returned in an #hb_position_t output parameter.\n"]
1428pub type hb_font_get_glyph_h_origin_func_t = hb_font_get_glyph_origin_func_t;
1429#[doc = " hb_font_get_glyph_v_origin_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the (X,Y) coordinates (in font units) of the\n origin for a glyph, in vertical-direction text segments. Each coordinate\n must be returned in an #hb_position_t output parameter.\n"]
1430pub type hb_font_get_glyph_v_origin_func_t = hb_font_get_glyph_origin_func_t;
1431pub type hb_font_get_glyph_kerning_func_t = ::core::option::Option<
1432    unsafe extern "C" fn(
1433        font: *mut hb_font_t,
1434        font_data: *mut ::core::ffi::c_void,
1435        first_glyph: hb_codepoint_t,
1436        second_glyph: hb_codepoint_t,
1437        user_data: *mut ::core::ffi::c_void,
1438    ) -> hb_position_t,
1439>;
1440pub type hb_font_get_glyph_h_kerning_func_t = hb_font_get_glyph_kerning_func_t;
1441#[doc = " hb_font_get_glyph_extents_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the extents for a specified glyph. Extents must be\n returned in an #hb_glyph_extents output parameter.\n"]
1442pub type hb_font_get_glyph_extents_func_t = ::core::option::Option<
1443    unsafe extern "C" fn(
1444        font: *mut hb_font_t,
1445        font_data: *mut ::core::ffi::c_void,
1446        glyph: hb_codepoint_t,
1447        extents: *mut hb_glyph_extents_t,
1448        user_data: *mut ::core::ffi::c_void,
1449    ) -> hb_bool_t,
1450>;
1451#[doc = " hb_font_get_glyph_contour_point_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the (X,Y) coordinates (in font units) for a\n specified contour point in a glyph. Each coordinate must be returned as\n an #hb_position_t output parameter.\n"]
1452pub type hb_font_get_glyph_contour_point_func_t = ::core::option::Option<
1453    unsafe extern "C" fn(
1454        font: *mut hb_font_t,
1455        font_data: *mut ::core::ffi::c_void,
1456        glyph: hb_codepoint_t,
1457        point_index: ::core::ffi::c_uint,
1458        x: *mut hb_position_t,
1459        y: *mut hb_position_t,
1460        user_data: *mut ::core::ffi::c_void,
1461    ) -> hb_bool_t,
1462>;
1463#[doc = " hb_font_get_glyph_name_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the glyph name that corresponds to a\n glyph ID. The name should be returned in a string output parameter.\n"]
1464pub type hb_font_get_glyph_name_func_t = ::core::option::Option<
1465    unsafe extern "C" fn(
1466        font: *mut hb_font_t,
1467        font_data: *mut ::core::ffi::c_void,
1468        glyph: hb_codepoint_t,
1469        name: *mut ::core::ffi::c_char,
1470        size: ::core::ffi::c_uint,
1471        user_data: *mut ::core::ffi::c_void,
1472    ) -> hb_bool_t,
1473>;
1474#[doc = " hb_font_get_glyph_from_name_func_t:\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n This method should retrieve the glyph ID that corresponds to a glyph-name\n string.\n"]
1475pub type hb_font_get_glyph_from_name_func_t = ::core::option::Option<
1476    unsafe extern "C" fn(
1477        font: *mut hb_font_t,
1478        font_data: *mut ::core::ffi::c_void,
1479        name: *const ::core::ffi::c_char,
1480        len: ::core::ffi::c_int,
1481        glyph: *mut hb_codepoint_t,
1482        user_data: *mut ::core::ffi::c_void,
1483    ) -> hb_bool_t,
1484>;
1485extern "C" {
1486    #[doc = " hb_font_funcs_set_font_h_extents_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_font_h_extents_func_t.\n\n Since: 1.1.2"]
1487    pub fn hb_font_funcs_set_font_h_extents_func(
1488        ffuncs: *mut hb_font_funcs_t,
1489        func: hb_font_get_font_h_extents_func_t,
1490        user_data: *mut ::core::ffi::c_void,
1491        destroy: hb_destroy_func_t,
1492    );
1493}
1494extern "C" {
1495    #[doc = " hb_font_funcs_set_font_v_extents_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_font_v_extents_func_t.\n\n Since: 1.1.2"]
1496    pub fn hb_font_funcs_set_font_v_extents_func(
1497        ffuncs: *mut hb_font_funcs_t,
1498        func: hb_font_get_font_v_extents_func_t,
1499        user_data: *mut ::core::ffi::c_void,
1500        destroy: hb_destroy_func_t,
1501    );
1502}
1503extern "C" {
1504    #[doc = " hb_font_funcs_set_nominal_glyph_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_nominal_glyph_func_t.\n\n Since: 1.2.3"]
1505    pub fn hb_font_funcs_set_nominal_glyph_func(
1506        ffuncs: *mut hb_font_funcs_t,
1507        func: hb_font_get_nominal_glyph_func_t,
1508        user_data: *mut ::core::ffi::c_void,
1509        destroy: hb_destroy_func_t,
1510    );
1511}
1512extern "C" {
1513    #[doc = " hb_font_funcs_set_nominal_glyphs_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_nominal_glyphs_func_t.\n\n Since: 2.0.0"]
1514    pub fn hb_font_funcs_set_nominal_glyphs_func(
1515        ffuncs: *mut hb_font_funcs_t,
1516        func: hb_font_get_nominal_glyphs_func_t,
1517        user_data: *mut ::core::ffi::c_void,
1518        destroy: hb_destroy_func_t,
1519    );
1520}
1521extern "C" {
1522    #[doc = " hb_font_funcs_set_variation_glyph_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_variation_glyph_func_t.\n\n Since: 1.2.3"]
1523    pub fn hb_font_funcs_set_variation_glyph_func(
1524        ffuncs: *mut hb_font_funcs_t,
1525        func: hb_font_get_variation_glyph_func_t,
1526        user_data: *mut ::core::ffi::c_void,
1527        destroy: hb_destroy_func_t,
1528    );
1529}
1530extern "C" {
1531    #[doc = " hb_font_funcs_set_glyph_h_advance_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_h_advance_func_t.\n\n Since: 0.9.2"]
1532    pub fn hb_font_funcs_set_glyph_h_advance_func(
1533        ffuncs: *mut hb_font_funcs_t,
1534        func: hb_font_get_glyph_h_advance_func_t,
1535        user_data: *mut ::core::ffi::c_void,
1536        destroy: hb_destroy_func_t,
1537    );
1538}
1539extern "C" {
1540    #[doc = " hb_font_funcs_set_glyph_v_advance_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_v_advance_func_t.\n\n Since: 0.9.2"]
1541    pub fn hb_font_funcs_set_glyph_v_advance_func(
1542        ffuncs: *mut hb_font_funcs_t,
1543        func: hb_font_get_glyph_v_advance_func_t,
1544        user_data: *mut ::core::ffi::c_void,
1545        destroy: hb_destroy_func_t,
1546    );
1547}
1548extern "C" {
1549    #[doc = " hb_font_funcs_set_glyph_h_advances_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_h_advances_func_t.\n\n Since: 1.8.6"]
1550    pub fn hb_font_funcs_set_glyph_h_advances_func(
1551        ffuncs: *mut hb_font_funcs_t,
1552        func: hb_font_get_glyph_h_advances_func_t,
1553        user_data: *mut ::core::ffi::c_void,
1554        destroy: hb_destroy_func_t,
1555    );
1556}
1557extern "C" {
1558    #[doc = " hb_font_funcs_set_glyph_v_advances_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_v_advances_func_t.\n\n Since: 1.8.6"]
1559    pub fn hb_font_funcs_set_glyph_v_advances_func(
1560        ffuncs: *mut hb_font_funcs_t,
1561        func: hb_font_get_glyph_v_advances_func_t,
1562        user_data: *mut ::core::ffi::c_void,
1563        destroy: hb_destroy_func_t,
1564    );
1565}
1566extern "C" {
1567    #[doc = " hb_font_funcs_set_glyph_h_origin_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_h_origin_func_t.\n\n Since: 0.9.2"]
1568    pub fn hb_font_funcs_set_glyph_h_origin_func(
1569        ffuncs: *mut hb_font_funcs_t,
1570        func: hb_font_get_glyph_h_origin_func_t,
1571        user_data: *mut ::core::ffi::c_void,
1572        destroy: hb_destroy_func_t,
1573    );
1574}
1575extern "C" {
1576    #[doc = " hb_font_funcs_set_glyph_v_origin_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_v_origin_func_t.\n\n Since: 0.9.2"]
1577    pub fn hb_font_funcs_set_glyph_v_origin_func(
1578        ffuncs: *mut hb_font_funcs_t,
1579        func: hb_font_get_glyph_v_origin_func_t,
1580        user_data: *mut ::core::ffi::c_void,
1581        destroy: hb_destroy_func_t,
1582    );
1583}
1584extern "C" {
1585    #[doc = " hb_font_funcs_set_glyph_h_kerning_func:\n @ffuncs: font functions.\n @func: (closure user_data) (destroy destroy) (scope notified):\n @user_data:\n @destroy:\n\n\n\n Since: 0.9.2"]
1586    pub fn hb_font_funcs_set_glyph_h_kerning_func(
1587        ffuncs: *mut hb_font_funcs_t,
1588        func: hb_font_get_glyph_h_kerning_func_t,
1589        user_data: *mut ::core::ffi::c_void,
1590        destroy: hb_destroy_func_t,
1591    );
1592}
1593extern "C" {
1594    #[doc = " hb_font_funcs_set_glyph_extents_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_extents_func_t.\n\n Since: 0.9.2"]
1595    pub fn hb_font_funcs_set_glyph_extents_func(
1596        ffuncs: *mut hb_font_funcs_t,
1597        func: hb_font_get_glyph_extents_func_t,
1598        user_data: *mut ::core::ffi::c_void,
1599        destroy: hb_destroy_func_t,
1600    );
1601}
1602extern "C" {
1603    #[doc = " hb_font_funcs_set_glyph_contour_point_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_contour_point_func_t.\n\n Since: 0.9.2"]
1604    pub fn hb_font_funcs_set_glyph_contour_point_func(
1605        ffuncs: *mut hb_font_funcs_t,
1606        func: hb_font_get_glyph_contour_point_func_t,
1607        user_data: *mut ::core::ffi::c_void,
1608        destroy: hb_destroy_func_t,
1609    );
1610}
1611extern "C" {
1612    #[doc = " hb_font_funcs_set_glyph_name_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_name_func_t.\n\n Since: 0.9.2"]
1613    pub fn hb_font_funcs_set_glyph_name_func(
1614        ffuncs: *mut hb_font_funcs_t,
1615        func: hb_font_get_glyph_name_func_t,
1616        user_data: *mut ::core::ffi::c_void,
1617        destroy: hb_destroy_func_t,
1618    );
1619}
1620extern "C" {
1621    #[doc = " hb_font_funcs_set_glyph_from_name_func:\n @ffuncs: A font-function structure\n @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign\n @user_data: Data to pass to @func\n @destroy: (optional): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_from_name_func_t.\n\n Since: 0.9.2"]
1622    pub fn hb_font_funcs_set_glyph_from_name_func(
1623        ffuncs: *mut hb_font_funcs_t,
1624        func: hb_font_get_glyph_from_name_func_t,
1625        user_data: *mut ::core::ffi::c_void,
1626        destroy: hb_destroy_func_t,
1627    );
1628}
1629extern "C" {
1630    pub fn hb_font_get_h_extents(
1631        font: *mut hb_font_t,
1632        extents: *mut hb_font_extents_t,
1633    ) -> hb_bool_t;
1634}
1635extern "C" {
1636    pub fn hb_font_get_v_extents(
1637        font: *mut hb_font_t,
1638        extents: *mut hb_font_extents_t,
1639    ) -> hb_bool_t;
1640}
1641extern "C" {
1642    pub fn hb_font_get_nominal_glyph(
1643        font: *mut hb_font_t,
1644        unicode: hb_codepoint_t,
1645        glyph: *mut hb_codepoint_t,
1646    ) -> hb_bool_t;
1647}
1648extern "C" {
1649    pub fn hb_font_get_variation_glyph(
1650        font: *mut hb_font_t,
1651        unicode: hb_codepoint_t,
1652        variation_selector: hb_codepoint_t,
1653        glyph: *mut hb_codepoint_t,
1654    ) -> hb_bool_t;
1655}
1656extern "C" {
1657    pub fn hb_font_get_nominal_glyphs(
1658        font: *mut hb_font_t,
1659        count: ::core::ffi::c_uint,
1660        first_unicode: *const hb_codepoint_t,
1661        unicode_stride: ::core::ffi::c_uint,
1662        first_glyph: *mut hb_codepoint_t,
1663        glyph_stride: ::core::ffi::c_uint,
1664    ) -> ::core::ffi::c_uint;
1665}
1666extern "C" {
1667    pub fn hb_font_get_glyph_h_advance(
1668        font: *mut hb_font_t,
1669        glyph: hb_codepoint_t,
1670    ) -> hb_position_t;
1671}
1672extern "C" {
1673    pub fn hb_font_get_glyph_v_advance(
1674        font: *mut hb_font_t,
1675        glyph: hb_codepoint_t,
1676    ) -> hb_position_t;
1677}
1678extern "C" {
1679    pub fn hb_font_get_glyph_h_advances(
1680        font: *mut hb_font_t,
1681        count: ::core::ffi::c_uint,
1682        first_glyph: *const hb_codepoint_t,
1683        glyph_stride: ::core::ffi::c_uint,
1684        first_advance: *mut hb_position_t,
1685        advance_stride: ::core::ffi::c_uint,
1686    );
1687}
1688extern "C" {
1689    pub fn hb_font_get_glyph_v_advances(
1690        font: *mut hb_font_t,
1691        count: ::core::ffi::c_uint,
1692        first_glyph: *const hb_codepoint_t,
1693        glyph_stride: ::core::ffi::c_uint,
1694        first_advance: *mut hb_position_t,
1695        advance_stride: ::core::ffi::c_uint,
1696    );
1697}
1698extern "C" {
1699    pub fn hb_font_get_glyph_h_origin(
1700        font: *mut hb_font_t,
1701        glyph: hb_codepoint_t,
1702        x: *mut hb_position_t,
1703        y: *mut hb_position_t,
1704    ) -> hb_bool_t;
1705}
1706extern "C" {
1707    pub fn hb_font_get_glyph_v_origin(
1708        font: *mut hb_font_t,
1709        glyph: hb_codepoint_t,
1710        x: *mut hb_position_t,
1711        y: *mut hb_position_t,
1712    ) -> hb_bool_t;
1713}
1714extern "C" {
1715    pub fn hb_font_get_glyph_h_kerning(
1716        font: *mut hb_font_t,
1717        left_glyph: hb_codepoint_t,
1718        right_glyph: hb_codepoint_t,
1719    ) -> hb_position_t;
1720}
1721extern "C" {
1722    pub fn hb_font_get_glyph_extents(
1723        font: *mut hb_font_t,
1724        glyph: hb_codepoint_t,
1725        extents: *mut hb_glyph_extents_t,
1726    ) -> hb_bool_t;
1727}
1728extern "C" {
1729    pub fn hb_font_get_glyph_contour_point(
1730        font: *mut hb_font_t,
1731        glyph: hb_codepoint_t,
1732        point_index: ::core::ffi::c_uint,
1733        x: *mut hb_position_t,
1734        y: *mut hb_position_t,
1735    ) -> hb_bool_t;
1736}
1737extern "C" {
1738    pub fn hb_font_get_glyph_name(
1739        font: *mut hb_font_t,
1740        glyph: hb_codepoint_t,
1741        name: *mut ::core::ffi::c_char,
1742        size: ::core::ffi::c_uint,
1743    ) -> hb_bool_t;
1744}
1745extern "C" {
1746    pub fn hb_font_get_glyph_from_name(
1747        font: *mut hb_font_t,
1748        name: *const ::core::ffi::c_char,
1749        len: ::core::ffi::c_int,
1750        glyph: *mut hb_codepoint_t,
1751    ) -> hb_bool_t;
1752}
1753extern "C" {
1754    pub fn hb_font_get_glyph(
1755        font: *mut hb_font_t,
1756        unicode: hb_codepoint_t,
1757        variation_selector: hb_codepoint_t,
1758        glyph: *mut hb_codepoint_t,
1759    ) -> hb_bool_t;
1760}
1761extern "C" {
1762    pub fn hb_font_get_extents_for_direction(
1763        font: *mut hb_font_t,
1764        direction: hb_direction_t,
1765        extents: *mut hb_font_extents_t,
1766    );
1767}
1768extern "C" {
1769    pub fn hb_font_get_glyph_advance_for_direction(
1770        font: *mut hb_font_t,
1771        glyph: hb_codepoint_t,
1772        direction: hb_direction_t,
1773        x: *mut hb_position_t,
1774        y: *mut hb_position_t,
1775    );
1776}
1777extern "C" {
1778    pub fn hb_font_get_glyph_advances_for_direction(
1779        font: *mut hb_font_t,
1780        direction: hb_direction_t,
1781        count: ::core::ffi::c_uint,
1782        first_glyph: *const hb_codepoint_t,
1783        glyph_stride: ::core::ffi::c_uint,
1784        first_advance: *mut hb_position_t,
1785        advance_stride: ::core::ffi::c_uint,
1786    );
1787}
1788extern "C" {
1789    pub fn hb_font_get_glyph_origin_for_direction(
1790        font: *mut hb_font_t,
1791        glyph: hb_codepoint_t,
1792        direction: hb_direction_t,
1793        x: *mut hb_position_t,
1794        y: *mut hb_position_t,
1795    );
1796}
1797extern "C" {
1798    pub fn hb_font_add_glyph_origin_for_direction(
1799        font: *mut hb_font_t,
1800        glyph: hb_codepoint_t,
1801        direction: hb_direction_t,
1802        x: *mut hb_position_t,
1803        y: *mut hb_position_t,
1804    );
1805}
1806extern "C" {
1807    pub fn hb_font_subtract_glyph_origin_for_direction(
1808        font: *mut hb_font_t,
1809        glyph: hb_codepoint_t,
1810        direction: hb_direction_t,
1811        x: *mut hb_position_t,
1812        y: *mut hb_position_t,
1813    );
1814}
1815extern "C" {
1816    pub fn hb_font_get_glyph_kerning_for_direction(
1817        font: *mut hb_font_t,
1818        first_glyph: hb_codepoint_t,
1819        second_glyph: hb_codepoint_t,
1820        direction: hb_direction_t,
1821        x: *mut hb_position_t,
1822        y: *mut hb_position_t,
1823    );
1824}
1825extern "C" {
1826    pub fn hb_font_get_glyph_extents_for_origin(
1827        font: *mut hb_font_t,
1828        glyph: hb_codepoint_t,
1829        direction: hb_direction_t,
1830        extents: *mut hb_glyph_extents_t,
1831    ) -> hb_bool_t;
1832}
1833extern "C" {
1834    pub fn hb_font_get_glyph_contour_point_for_origin(
1835        font: *mut hb_font_t,
1836        glyph: hb_codepoint_t,
1837        point_index: ::core::ffi::c_uint,
1838        direction: hb_direction_t,
1839        x: *mut hb_position_t,
1840        y: *mut hb_position_t,
1841    ) -> hb_bool_t;
1842}
1843extern "C" {
1844    pub fn hb_font_glyph_to_string(
1845        font: *mut hb_font_t,
1846        glyph: hb_codepoint_t,
1847        s: *mut ::core::ffi::c_char,
1848        size: ::core::ffi::c_uint,
1849    );
1850}
1851extern "C" {
1852    pub fn hb_font_glyph_from_string(
1853        font: *mut hb_font_t,
1854        s: *const ::core::ffi::c_char,
1855        len: ::core::ffi::c_int,
1856        glyph: *mut hb_codepoint_t,
1857    ) -> hb_bool_t;
1858}
1859extern "C" {
1860    pub fn hb_font_create(face: *mut hb_face_t) -> *mut hb_font_t;
1861}
1862extern "C" {
1863    pub fn hb_font_create_sub_font(parent: *mut hb_font_t) -> *mut hb_font_t;
1864}
1865extern "C" {
1866    pub fn hb_font_get_empty() -> *mut hb_font_t;
1867}
1868extern "C" {
1869    pub fn hb_font_reference(font: *mut hb_font_t) -> *mut hb_font_t;
1870}
1871extern "C" {
1872    pub fn hb_font_destroy(font: *mut hb_font_t);
1873}
1874extern "C" {
1875    pub fn hb_font_set_user_data(
1876        font: *mut hb_font_t,
1877        key: *mut hb_user_data_key_t,
1878        data: *mut ::core::ffi::c_void,
1879        destroy: hb_destroy_func_t,
1880        replace: hb_bool_t,
1881    ) -> hb_bool_t;
1882}
1883extern "C" {
1884    pub fn hb_font_get_user_data(
1885        font: *mut hb_font_t,
1886        key: *mut hb_user_data_key_t,
1887    ) -> *mut ::core::ffi::c_void;
1888}
1889extern "C" {
1890    pub fn hb_font_make_immutable(font: *mut hb_font_t);
1891}
1892extern "C" {
1893    pub fn hb_font_is_immutable(font: *mut hb_font_t) -> hb_bool_t;
1894}
1895extern "C" {
1896    pub fn hb_font_set_parent(font: *mut hb_font_t, parent: *mut hb_font_t);
1897}
1898extern "C" {
1899    pub fn hb_font_get_parent(font: *mut hb_font_t) -> *mut hb_font_t;
1900}
1901extern "C" {
1902    pub fn hb_font_set_face(font: *mut hb_font_t, face: *mut hb_face_t);
1903}
1904extern "C" {
1905    pub fn hb_font_get_face(font: *mut hb_font_t) -> *mut hb_face_t;
1906}
1907extern "C" {
1908    pub fn hb_font_set_funcs(
1909        font: *mut hb_font_t,
1910        klass: *mut hb_font_funcs_t,
1911        font_data: *mut ::core::ffi::c_void,
1912        destroy: hb_destroy_func_t,
1913    );
1914}
1915extern "C" {
1916    pub fn hb_font_set_funcs_data(
1917        font: *mut hb_font_t,
1918        font_data: *mut ::core::ffi::c_void,
1919        destroy: hb_destroy_func_t,
1920    );
1921}
1922extern "C" {
1923    pub fn hb_font_set_scale(
1924        font: *mut hb_font_t,
1925        x_scale: ::core::ffi::c_int,
1926        y_scale: ::core::ffi::c_int,
1927    );
1928}
1929extern "C" {
1930    pub fn hb_font_get_scale(
1931        font: *mut hb_font_t,
1932        x_scale: *mut ::core::ffi::c_int,
1933        y_scale: *mut ::core::ffi::c_int,
1934    );
1935}
1936extern "C" {
1937    pub fn hb_font_set_ppem(
1938        font: *mut hb_font_t,
1939        x_ppem: ::core::ffi::c_uint,
1940        y_ppem: ::core::ffi::c_uint,
1941    );
1942}
1943extern "C" {
1944    pub fn hb_font_get_ppem(
1945        font: *mut hb_font_t,
1946        x_ppem: *mut ::core::ffi::c_uint,
1947        y_ppem: *mut ::core::ffi::c_uint,
1948    );
1949}
1950extern "C" {
1951    pub fn hb_font_set_ptem(font: *mut hb_font_t, ptem: ::core::ffi::c_float);
1952}
1953extern "C" {
1954    pub fn hb_font_get_ptem(font: *mut hb_font_t) -> ::core::ffi::c_float;
1955}
1956extern "C" {
1957    pub fn hb_font_set_variations(
1958        font: *mut hb_font_t,
1959        variations: *const hb_variation_t,
1960        variations_length: ::core::ffi::c_uint,
1961    );
1962}
1963extern "C" {
1964    pub fn hb_font_set_var_coords_design(
1965        font: *mut hb_font_t,
1966        coords: *const ::core::ffi::c_float,
1967        coords_length: ::core::ffi::c_uint,
1968    );
1969}
1970extern "C" {
1971    pub fn hb_font_set_var_coords_normalized(
1972        font: *mut hb_font_t,
1973        coords: *const ::core::ffi::c_int,
1974        coords_length: ::core::ffi::c_uint,
1975    );
1976}
1977extern "C" {
1978    pub fn hb_font_get_var_coords_normalized(
1979        font: *mut hb_font_t,
1980        length: *mut ::core::ffi::c_uint,
1981    ) -> *const ::core::ffi::c_int;
1982}
1983extern "C" {
1984    pub fn hb_font_set_var_named_instance(
1985        font: *mut hb_font_t,
1986        instance_index: ::core::ffi::c_uint,
1987    );
1988}
1989#[doc = " hb_glyph_info_t:\n @codepoint: either a Unicode code point (before shaping) or a glyph index\n             (after shaping).\n @cluster: the index of the character in the original text that corresponds\n           to this #hb_glyph_info_t, or whatever the client passes to\n           hb_buffer_add(). More than one #hb_glyph_info_t can have the same\n           @cluster value, if they resulted from the same character (e.g. one\n           to many glyph substitution), and when more than one character gets\n           merged in the same glyph (e.g. many to one glyph substitution) the\n           #hb_glyph_info_t will have the smallest cluster value of them.\n           By default some characters are merged into the same cluster\n           (e.g. combining marks have the same cluster as their bases)\n           even if they are separate glyphs, hb_buffer_set_cluster_level()\n           allow selecting more fine-grained cluster handling.\n\n The #hb_glyph_info_t is the structure that holds information about the\n glyphs and their relation to input text."]
1990#[repr(C)]
1991#[derive(Copy, Clone)]
1992pub struct hb_glyph_info_t {
1993    pub codepoint: hb_codepoint_t,
1994    pub mask: hb_mask_t,
1995    pub cluster: u32,
1996    pub var1: hb_var_int_t,
1997    pub var2: hb_var_int_t,
1998}
1999#[test]
2000fn bindgen_test_layout_hb_glyph_info_t() {
2001    const UNINIT: ::core::mem::MaybeUninit<hb_glyph_info_t> = ::core::mem::MaybeUninit::uninit();
2002    let ptr = UNINIT.as_ptr();
2003    assert_eq!(
2004        ::core::mem::size_of::<hb_glyph_info_t>(),
2005        20usize,
2006        concat!("Size of: ", stringify!(hb_glyph_info_t))
2007    );
2008    assert_eq!(
2009        ::core::mem::align_of::<hb_glyph_info_t>(),
2010        4usize,
2011        concat!("Alignment of ", stringify!(hb_glyph_info_t))
2012    );
2013    assert_eq!(
2014        unsafe { ::core::ptr::addr_of!((*ptr).codepoint) as usize - ptr as usize },
2015        0usize,
2016        concat!(
2017            "Offset of field: ",
2018            stringify!(hb_glyph_info_t),
2019            "::",
2020            stringify!(codepoint)
2021        )
2022    );
2023    assert_eq!(
2024        unsafe { ::core::ptr::addr_of!((*ptr).mask) as usize - ptr as usize },
2025        4usize,
2026        concat!(
2027            "Offset of field: ",
2028            stringify!(hb_glyph_info_t),
2029            "::",
2030            stringify!(mask)
2031        )
2032    );
2033    assert_eq!(
2034        unsafe { ::core::ptr::addr_of!((*ptr).cluster) as usize - ptr as usize },
2035        8usize,
2036        concat!(
2037            "Offset of field: ",
2038            stringify!(hb_glyph_info_t),
2039            "::",
2040            stringify!(cluster)
2041        )
2042    );
2043    assert_eq!(
2044        unsafe { ::core::ptr::addr_of!((*ptr).var1) as usize - ptr as usize },
2045        12usize,
2046        concat!(
2047            "Offset of field: ",
2048            stringify!(hb_glyph_info_t),
2049            "::",
2050            stringify!(var1)
2051        )
2052    );
2053    assert_eq!(
2054        unsafe { ::core::ptr::addr_of!((*ptr).var2) as usize - ptr as usize },
2055        16usize,
2056        concat!(
2057            "Offset of field: ",
2058            stringify!(hb_glyph_info_t),
2059            "::",
2060            stringify!(var2)
2061        )
2062    );
2063}
2064pub const HB_GLYPH_FLAG_UNSAFE_TO_BREAK: hb_glyph_flags_t = 1;
2065pub const HB_GLYPH_FLAG_DEFINED: hb_glyph_flags_t = 1;
2066#[doc = " hb_glyph_flags_t:\n @HB_GLYPH_FLAG_UNSAFE_TO_BREAK: Indicates that if input text is broken at the\n \t\t\t\t   beginning of the cluster this glyph is part of,\n \t\t\t\t   then both sides need to be re-shaped, as the\n \t\t\t\t   result might be different.  On the flip side,\n \t\t\t\t   it means that when this flag is not present,\n \t\t\t\t   then it's safe to break the glyph-run at the\n \t\t\t\t   beginning of this cluster, and the two sides\n \t\t\t\t   represent the exact same result one would get\n \t\t\t\t   if breaking input text at the beginning of\n \t\t\t\t   this cluster and shaping the two sides\n \t\t\t\t   separately.  This can be used to optimize\n \t\t\t\t   paragraph layout, by avoiding re-shaping\n \t\t\t\t   of each line after line-breaking, or limiting\n \t\t\t\t   the reshaping to a small piece around the\n \t\t\t\t   breaking point only.\n @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.\n\n Since: 1.5.0"]
2067pub type hb_glyph_flags_t = ::core::ffi::c_uint;
2068extern "C" {
2069    pub fn hb_glyph_info_get_glyph_flags(info: *const hb_glyph_info_t) -> hb_glyph_flags_t;
2070}
2071#[doc = " hb_glyph_position_t:\n @x_advance: how much the line advances after drawing this glyph when setting\n             text in horizontal direction.\n @y_advance: how much the line advances after drawing this glyph when setting\n             text in vertical direction.\n @x_offset: how much the glyph moves on the X-axis before drawing it, this\n            should not affect how much the line advances.\n @y_offset: how much the glyph moves on the Y-axis before drawing it, this\n            should not affect how much the line advances.\n\n The #hb_glyph_position_t is the structure that holds the positions of the\n glyph in both horizontal and vertical directions. All positions in\n #hb_glyph_position_t are relative to the current point.\n"]
2072#[repr(C)]
2073#[derive(Copy, Clone)]
2074pub struct hb_glyph_position_t {
2075    pub x_advance: hb_position_t,
2076    pub y_advance: hb_position_t,
2077    pub x_offset: hb_position_t,
2078    pub y_offset: hb_position_t,
2079    pub var: hb_var_int_t,
2080}
2081#[test]
2082fn bindgen_test_layout_hb_glyph_position_t() {
2083    const UNINIT: ::core::mem::MaybeUninit<hb_glyph_position_t> =
2084        ::core::mem::MaybeUninit::uninit();
2085    let ptr = UNINIT.as_ptr();
2086    assert_eq!(
2087        ::core::mem::size_of::<hb_glyph_position_t>(),
2088        20usize,
2089        concat!("Size of: ", stringify!(hb_glyph_position_t))
2090    );
2091    assert_eq!(
2092        ::core::mem::align_of::<hb_glyph_position_t>(),
2093        4usize,
2094        concat!("Alignment of ", stringify!(hb_glyph_position_t))
2095    );
2096    assert_eq!(
2097        unsafe { ::core::ptr::addr_of!((*ptr).x_advance) as usize - ptr as usize },
2098        0usize,
2099        concat!(
2100            "Offset of field: ",
2101            stringify!(hb_glyph_position_t),
2102            "::",
2103            stringify!(x_advance)
2104        )
2105    );
2106    assert_eq!(
2107        unsafe { ::core::ptr::addr_of!((*ptr).y_advance) as usize - ptr as usize },
2108        4usize,
2109        concat!(
2110            "Offset of field: ",
2111            stringify!(hb_glyph_position_t),
2112            "::",
2113            stringify!(y_advance)
2114        )
2115    );
2116    assert_eq!(
2117        unsafe { ::core::ptr::addr_of!((*ptr).x_offset) as usize - ptr as usize },
2118        8usize,
2119        concat!(
2120            "Offset of field: ",
2121            stringify!(hb_glyph_position_t),
2122            "::",
2123            stringify!(x_offset)
2124        )
2125    );
2126    assert_eq!(
2127        unsafe { ::core::ptr::addr_of!((*ptr).y_offset) as usize - ptr as usize },
2128        12usize,
2129        concat!(
2130            "Offset of field: ",
2131            stringify!(hb_glyph_position_t),
2132            "::",
2133            stringify!(y_offset)
2134        )
2135    );
2136    assert_eq!(
2137        unsafe { ::core::ptr::addr_of!((*ptr).var) as usize - ptr as usize },
2138        16usize,
2139        concat!(
2140            "Offset of field: ",
2141            stringify!(hb_glyph_position_t),
2142            "::",
2143            stringify!(var)
2144        )
2145    );
2146}
2147#[doc = " hb_segment_properties_t:\n @direction: the #hb_direction_t of the buffer, see hb_buffer_set_direction().\n @script: the #hb_script_t of the buffer, see hb_buffer_set_script().\n @language: the #hb_language_t of the buffer, see hb_buffer_set_language().\n\n The structure that holds various text properties of an #hb_buffer_t. Can be\n set and retrieved using hb_buffer_set_segment_properties() and\n hb_buffer_get_segment_properties(), respectively."]
2148#[repr(C)]
2149#[derive(Debug, Copy, Clone)]
2150pub struct hb_segment_properties_t {
2151    pub direction: hb_direction_t,
2152    pub script: hb_script_t,
2153    pub language: hb_language_t,
2154    pub reserved1: *mut ::core::ffi::c_void,
2155    pub reserved2: *mut ::core::ffi::c_void,
2156}
2157#[test]
2158fn bindgen_test_layout_hb_segment_properties_t() {
2159    const UNINIT: ::core::mem::MaybeUninit<hb_segment_properties_t> =
2160        ::core::mem::MaybeUninit::uninit();
2161    let ptr = UNINIT.as_ptr();
2162    assert_eq!(
2163        ::core::mem::size_of::<hb_segment_properties_t>(),
2164        32usize,
2165        concat!("Size of: ", stringify!(hb_segment_properties_t))
2166    );
2167    assert_eq!(
2168        ::core::mem::align_of::<hb_segment_properties_t>(),
2169        8usize,
2170        concat!("Alignment of ", stringify!(hb_segment_properties_t))
2171    );
2172    assert_eq!(
2173        unsafe { ::core::ptr::addr_of!((*ptr).direction) as usize - ptr as usize },
2174        0usize,
2175        concat!(
2176            "Offset of field: ",
2177            stringify!(hb_segment_properties_t),
2178            "::",
2179            stringify!(direction)
2180        )
2181    );
2182    assert_eq!(
2183        unsafe { ::core::ptr::addr_of!((*ptr).script) as usize - ptr as usize },
2184        4usize,
2185        concat!(
2186            "Offset of field: ",
2187            stringify!(hb_segment_properties_t),
2188            "::",
2189            stringify!(script)
2190        )
2191    );
2192    assert_eq!(
2193        unsafe { ::core::ptr::addr_of!((*ptr).language) as usize - ptr as usize },
2194        8usize,
2195        concat!(
2196            "Offset of field: ",
2197            stringify!(hb_segment_properties_t),
2198            "::",
2199            stringify!(language)
2200        )
2201    );
2202    assert_eq!(
2203        unsafe { ::core::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
2204        16usize,
2205        concat!(
2206            "Offset of field: ",
2207            stringify!(hb_segment_properties_t),
2208            "::",
2209            stringify!(reserved1)
2210        )
2211    );
2212    assert_eq!(
2213        unsafe { ::core::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
2214        24usize,
2215        concat!(
2216            "Offset of field: ",
2217            stringify!(hb_segment_properties_t),
2218            "::",
2219            stringify!(reserved2)
2220        )
2221    );
2222}
2223extern "C" {
2224    pub fn hb_segment_properties_equal(
2225        a: *const hb_segment_properties_t,
2226        b: *const hb_segment_properties_t,
2227    ) -> hb_bool_t;
2228}
2229extern "C" {
2230    pub fn hb_segment_properties_hash(p: *const hb_segment_properties_t) -> ::core::ffi::c_uint;
2231}
2232#[repr(C)]
2233#[derive(Debug, Copy, Clone)]
2234pub struct hb_buffer_t {
2235    _unused: [u8; 0],
2236}
2237extern "C" {
2238    pub fn hb_buffer_create() -> *mut hb_buffer_t;
2239}
2240extern "C" {
2241    pub fn hb_buffer_get_empty() -> *mut hb_buffer_t;
2242}
2243extern "C" {
2244    pub fn hb_buffer_reference(buffer: *mut hb_buffer_t) -> *mut hb_buffer_t;
2245}
2246extern "C" {
2247    pub fn hb_buffer_destroy(buffer: *mut hb_buffer_t);
2248}
2249extern "C" {
2250    pub fn hb_buffer_set_user_data(
2251        buffer: *mut hb_buffer_t,
2252        key: *mut hb_user_data_key_t,
2253        data: *mut ::core::ffi::c_void,
2254        destroy: hb_destroy_func_t,
2255        replace: hb_bool_t,
2256    ) -> hb_bool_t;
2257}
2258extern "C" {
2259    pub fn hb_buffer_get_user_data(
2260        buffer: *mut hb_buffer_t,
2261        key: *mut hb_user_data_key_t,
2262    ) -> *mut ::core::ffi::c_void;
2263}
2264pub const HB_BUFFER_CONTENT_TYPE_INVALID: hb_buffer_content_type_t = 0;
2265pub const HB_BUFFER_CONTENT_TYPE_UNICODE: hb_buffer_content_type_t = 1;
2266pub const HB_BUFFER_CONTENT_TYPE_GLYPHS: hb_buffer_content_type_t = 2;
2267#[doc = " hb_buffer_content_type_t:\n @HB_BUFFER_CONTENT_TYPE_INVALID: Initial value for new buffer.\n @HB_BUFFER_CONTENT_TYPE_UNICODE: The buffer contains input characters (before shaping).\n @HB_BUFFER_CONTENT_TYPE_GLYPHS: The buffer contains output glyphs (after shaping)."]
2268pub type hb_buffer_content_type_t = ::core::ffi::c_uint;
2269extern "C" {
2270    pub fn hb_buffer_set_content_type(
2271        buffer: *mut hb_buffer_t,
2272        content_type: hb_buffer_content_type_t,
2273    );
2274}
2275extern "C" {
2276    pub fn hb_buffer_get_content_type(buffer: *mut hb_buffer_t) -> hb_buffer_content_type_t;
2277}
2278extern "C" {
2279    pub fn hb_buffer_set_unicode_funcs(
2280        buffer: *mut hb_buffer_t,
2281        unicode_funcs: *mut hb_unicode_funcs_t,
2282    );
2283}
2284extern "C" {
2285    pub fn hb_buffer_get_unicode_funcs(buffer: *mut hb_buffer_t) -> *mut hb_unicode_funcs_t;
2286}
2287extern "C" {
2288    pub fn hb_buffer_set_direction(buffer: *mut hb_buffer_t, direction: hb_direction_t);
2289}
2290extern "C" {
2291    pub fn hb_buffer_get_direction(buffer: *mut hb_buffer_t) -> hb_direction_t;
2292}
2293extern "C" {
2294    pub fn hb_buffer_set_script(buffer: *mut hb_buffer_t, script: hb_script_t);
2295}
2296extern "C" {
2297    pub fn hb_buffer_get_script(buffer: *mut hb_buffer_t) -> hb_script_t;
2298}
2299extern "C" {
2300    pub fn hb_buffer_set_language(buffer: *mut hb_buffer_t, language: hb_language_t);
2301}
2302extern "C" {
2303    pub fn hb_buffer_get_language(buffer: *mut hb_buffer_t) -> hb_language_t;
2304}
2305extern "C" {
2306    pub fn hb_buffer_set_segment_properties(
2307        buffer: *mut hb_buffer_t,
2308        props: *const hb_segment_properties_t,
2309    );
2310}
2311extern "C" {
2312    pub fn hb_buffer_get_segment_properties(
2313        buffer: *mut hb_buffer_t,
2314        props: *mut hb_segment_properties_t,
2315    );
2316}
2317extern "C" {
2318    pub fn hb_buffer_guess_segment_properties(buffer: *mut hb_buffer_t);
2319}
2320pub const HB_BUFFER_FLAG_DEFAULT: hb_buffer_flags_t = 0;
2321pub const HB_BUFFER_FLAG_BOT: hb_buffer_flags_t = 1;
2322pub const HB_BUFFER_FLAG_EOT: hb_buffer_flags_t = 2;
2323pub const HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES: hb_buffer_flags_t = 4;
2324pub const HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES: hb_buffer_flags_t = 8;
2325pub const HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE: hb_buffer_flags_t = 16;
2326#[doc = " hb_buffer_flags_t:\n @HB_BUFFER_FLAG_DEFAULT: the default buffer flag.\n @HB_BUFFER_FLAG_BOT: flag indicating that special handling of the beginning\n                      of text paragraph can be applied to this buffer. Should usually\n                      be set, unless you are passing to the buffer only part\n                      of the text without the full context.\n @HB_BUFFER_FLAG_EOT: flag indicating that special handling of the end of text\n                      paragraph can be applied to this buffer, similar to\n                      @HB_BUFFER_FLAG_BOT.\n @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES:\n                      flag indication that character with Default_Ignorable\n                      Unicode property should use the corresponding glyph\n                      from the font, instead of hiding them (done by\n                      replacing them with the space glyph and zeroing the\n                      advance width.)  This flag takes precedence over\n                      @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES.\n @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES:\n                      flag indication that character with Default_Ignorable\n                      Unicode property should be removed from glyph string\n                      instead of hiding them (done by replacing them with the\n                      space glyph and zeroing the advance width.)\n                      @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES takes\n                      precedence over this flag. Since: 1.8.0\n @HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE:\n                      flag indicating that a dotted circle should\n                      not be inserted in the rendering of incorrect\n                      character sequences (such at <0905 093E>). Since: 2.4\n\n Since: 0.9.20"]
2327pub type hb_buffer_flags_t = ::core::ffi::c_uint;
2328extern "C" {
2329    pub fn hb_buffer_set_flags(buffer: *mut hb_buffer_t, flags: hb_buffer_flags_t);
2330}
2331extern "C" {
2332    pub fn hb_buffer_get_flags(buffer: *mut hb_buffer_t) -> hb_buffer_flags_t;
2333}
2334pub const HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES: hb_buffer_cluster_level_t = 0;
2335pub const HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS: hb_buffer_cluster_level_t = 1;
2336pub const HB_BUFFER_CLUSTER_LEVEL_CHARACTERS: hb_buffer_cluster_level_t = 2;
2337pub const HB_BUFFER_CLUSTER_LEVEL_DEFAULT: hb_buffer_cluster_level_t = 0;
2338#[doc = " hb_buffer_cluster_level_t:\n @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES: Return cluster values grouped by graphemes into\n   monotone order.\n @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS: Return cluster values grouped into monotone order.\n @HB_BUFFER_CLUSTER_LEVEL_CHARACTERS: Don't group cluster values.\n @HB_BUFFER_CLUSTER_LEVEL_DEFAULT: Default cluster level,\n   equal to @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES.\n\n Data type for holding HarfBuzz's clustering behavior options. The cluster level\n dictates one aspect of how HarfBuzz will treat non-base characters\n during shaping.\n\n In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES, non-base\n characters are merged into the cluster of the base character that precedes them.\n\n In @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS, non-base characters are initially\n assigned their own cluster values, which are not merged into preceding base\n clusters. This allows HarfBuzz to perform additional operations like reorder\n sequences of adjacent marks.\n\n @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES is the default, because it maintains\n backward compatibility with older versions of HarfBuzz. New client programs that\n do not need to maintain such backward compatibility are recommended to use\n @HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS instead of the default.\n\n Since: 0.9.42"]
2339pub type hb_buffer_cluster_level_t = ::core::ffi::c_uint;
2340extern "C" {
2341    pub fn hb_buffer_set_cluster_level(
2342        buffer: *mut hb_buffer_t,
2343        cluster_level: hb_buffer_cluster_level_t,
2344    );
2345}
2346extern "C" {
2347    pub fn hb_buffer_get_cluster_level(buffer: *mut hb_buffer_t) -> hb_buffer_cluster_level_t;
2348}
2349extern "C" {
2350    pub fn hb_buffer_set_replacement_codepoint(
2351        buffer: *mut hb_buffer_t,
2352        replacement: hb_codepoint_t,
2353    );
2354}
2355extern "C" {
2356    pub fn hb_buffer_get_replacement_codepoint(buffer: *mut hb_buffer_t) -> hb_codepoint_t;
2357}
2358extern "C" {
2359    pub fn hb_buffer_set_invisible_glyph(buffer: *mut hb_buffer_t, invisible: hb_codepoint_t);
2360}
2361extern "C" {
2362    pub fn hb_buffer_get_invisible_glyph(buffer: *mut hb_buffer_t) -> hb_codepoint_t;
2363}
2364extern "C" {
2365    pub fn hb_buffer_reset(buffer: *mut hb_buffer_t);
2366}
2367extern "C" {
2368    pub fn hb_buffer_clear_contents(buffer: *mut hb_buffer_t);
2369}
2370extern "C" {
2371    pub fn hb_buffer_pre_allocate(buffer: *mut hb_buffer_t, size: ::core::ffi::c_uint)
2372        -> hb_bool_t;
2373}
2374extern "C" {
2375    pub fn hb_buffer_allocation_successful(buffer: *mut hb_buffer_t) -> hb_bool_t;
2376}
2377extern "C" {
2378    pub fn hb_buffer_reverse(buffer: *mut hb_buffer_t);
2379}
2380extern "C" {
2381    pub fn hb_buffer_reverse_range(
2382        buffer: *mut hb_buffer_t,
2383        start: ::core::ffi::c_uint,
2384        end: ::core::ffi::c_uint,
2385    );
2386}
2387extern "C" {
2388    pub fn hb_buffer_reverse_clusters(buffer: *mut hb_buffer_t);
2389}
2390extern "C" {
2391    pub fn hb_buffer_add(
2392        buffer: *mut hb_buffer_t,
2393        codepoint: hb_codepoint_t,
2394        cluster: ::core::ffi::c_uint,
2395    );
2396}
2397extern "C" {
2398    pub fn hb_buffer_add_utf8(
2399        buffer: *mut hb_buffer_t,
2400        text: *const ::core::ffi::c_char,
2401        text_length: ::core::ffi::c_int,
2402        item_offset: ::core::ffi::c_uint,
2403        item_length: ::core::ffi::c_int,
2404    );
2405}
2406extern "C" {
2407    pub fn hb_buffer_add_utf16(
2408        buffer: *mut hb_buffer_t,
2409        text: *const u16,
2410        text_length: ::core::ffi::c_int,
2411        item_offset: ::core::ffi::c_uint,
2412        item_length: ::core::ffi::c_int,
2413    );
2414}
2415extern "C" {
2416    pub fn hb_buffer_add_utf32(
2417        buffer: *mut hb_buffer_t,
2418        text: *const u32,
2419        text_length: ::core::ffi::c_int,
2420        item_offset: ::core::ffi::c_uint,
2421        item_length: ::core::ffi::c_int,
2422    );
2423}
2424extern "C" {
2425    pub fn hb_buffer_add_latin1(
2426        buffer: *mut hb_buffer_t,
2427        text: *const u8,
2428        text_length: ::core::ffi::c_int,
2429        item_offset: ::core::ffi::c_uint,
2430        item_length: ::core::ffi::c_int,
2431    );
2432}
2433extern "C" {
2434    pub fn hb_buffer_add_codepoints(
2435        buffer: *mut hb_buffer_t,
2436        text: *const hb_codepoint_t,
2437        text_length: ::core::ffi::c_int,
2438        item_offset: ::core::ffi::c_uint,
2439        item_length: ::core::ffi::c_int,
2440    );
2441}
2442extern "C" {
2443    pub fn hb_buffer_append(
2444        buffer: *mut hb_buffer_t,
2445        source: *mut hb_buffer_t,
2446        start: ::core::ffi::c_uint,
2447        end: ::core::ffi::c_uint,
2448    );
2449}
2450extern "C" {
2451    pub fn hb_buffer_set_length(buffer: *mut hb_buffer_t, length: ::core::ffi::c_uint)
2452        -> hb_bool_t;
2453}
2454extern "C" {
2455    pub fn hb_buffer_get_length(buffer: *mut hb_buffer_t) -> ::core::ffi::c_uint;
2456}
2457extern "C" {
2458    pub fn hb_buffer_get_glyph_infos(
2459        buffer: *mut hb_buffer_t,
2460        length: *mut ::core::ffi::c_uint,
2461    ) -> *mut hb_glyph_info_t;
2462}
2463extern "C" {
2464    pub fn hb_buffer_get_glyph_positions(
2465        buffer: *mut hb_buffer_t,
2466        length: *mut ::core::ffi::c_uint,
2467    ) -> *mut hb_glyph_position_t;
2468}
2469extern "C" {
2470    pub fn hb_buffer_has_positions(buffer: *mut hb_buffer_t) -> hb_bool_t;
2471}
2472extern "C" {
2473    pub fn hb_buffer_normalize_glyphs(buffer: *mut hb_buffer_t);
2474}
2475pub const HB_BUFFER_SERIALIZE_FLAG_DEFAULT: hb_buffer_serialize_flags_t = 0;
2476pub const HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS: hb_buffer_serialize_flags_t = 1;
2477pub const HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS: hb_buffer_serialize_flags_t = 2;
2478pub const HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES: hb_buffer_serialize_flags_t = 4;
2479pub const HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS: hb_buffer_serialize_flags_t = 8;
2480pub const HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS: hb_buffer_serialize_flags_t = 16;
2481pub const HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES: hb_buffer_serialize_flags_t = 32;
2482#[doc = " hb_buffer_serialize_flags_t:\n @HB_BUFFER_SERIALIZE_FLAG_DEFAULT: serialize glyph names, clusters and positions.\n @HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS: do not serialize glyph cluster.\n @HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS: do not serialize glyph position information.\n @HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES: do no serialize glyph name.\n @HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS: serialize glyph extents.\n @HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS: serialize glyph flags. Since: 1.5.0\n @HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES: do not serialize glyph advances,\n  glyph offsets will reflect absolute glyph positions. Since: 1.8.0\n\n Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().\n\n Since: 0.9.20"]
2483pub type hb_buffer_serialize_flags_t = ::core::ffi::c_uint;
2484pub const HB_BUFFER_SERIALIZE_FORMAT_TEXT: hb_buffer_serialize_format_t = 1413830740;
2485pub const HB_BUFFER_SERIALIZE_FORMAT_JSON: hb_buffer_serialize_format_t = 1246973774;
2486pub const HB_BUFFER_SERIALIZE_FORMAT_INVALID: hb_buffer_serialize_format_t = 0;
2487#[doc = " hb_buffer_serialize_format_t:\n @HB_BUFFER_SERIALIZE_FORMAT_TEXT: a human-readable, plain text format.\n @HB_BUFFER_SERIALIZE_FORMAT_JSON: a machine-readable JSON format.\n @HB_BUFFER_SERIALIZE_FORMAT_INVALID: invalid format.\n\n The buffer serialization and de-serialization format used in\n hb_buffer_serialize_glyphs() and hb_buffer_deserialize_glyphs().\n\n Since: 0.9.2"]
2488pub type hb_buffer_serialize_format_t = ::core::ffi::c_uint;
2489extern "C" {
2490    pub fn hb_buffer_serialize_format_from_string(
2491        str_: *const ::core::ffi::c_char,
2492        len: ::core::ffi::c_int,
2493    ) -> hb_buffer_serialize_format_t;
2494}
2495extern "C" {
2496    pub fn hb_buffer_serialize_format_to_string(
2497        format: hb_buffer_serialize_format_t,
2498    ) -> *const ::core::ffi::c_char;
2499}
2500extern "C" {
2501    pub fn hb_buffer_serialize_list_formats() -> *mut *const ::core::ffi::c_char;
2502}
2503extern "C" {
2504    pub fn hb_buffer_serialize_glyphs(
2505        buffer: *mut hb_buffer_t,
2506        start: ::core::ffi::c_uint,
2507        end: ::core::ffi::c_uint,
2508        buf: *mut ::core::ffi::c_char,
2509        buf_size: ::core::ffi::c_uint,
2510        buf_consumed: *mut ::core::ffi::c_uint,
2511        font: *mut hb_font_t,
2512        format: hb_buffer_serialize_format_t,
2513        flags: hb_buffer_serialize_flags_t,
2514    ) -> ::core::ffi::c_uint;
2515}
2516extern "C" {
2517    pub fn hb_buffer_serialize_unicode(
2518        buffer: *mut hb_buffer_t,
2519        start: ::core::ffi::c_uint,
2520        end: ::core::ffi::c_uint,
2521        buf: *mut ::core::ffi::c_char,
2522        buf_size: ::core::ffi::c_uint,
2523        buf_consumed: *mut ::core::ffi::c_uint,
2524        format: hb_buffer_serialize_format_t,
2525        flags: hb_buffer_serialize_flags_t,
2526    ) -> ::core::ffi::c_uint;
2527}
2528extern "C" {
2529    pub fn hb_buffer_serialize(
2530        buffer: *mut hb_buffer_t,
2531        start: ::core::ffi::c_uint,
2532        end: ::core::ffi::c_uint,
2533        buf: *mut ::core::ffi::c_char,
2534        buf_size: ::core::ffi::c_uint,
2535        buf_consumed: *mut ::core::ffi::c_uint,
2536        font: *mut hb_font_t,
2537        format: hb_buffer_serialize_format_t,
2538        flags: hb_buffer_serialize_flags_t,
2539    ) -> ::core::ffi::c_uint;
2540}
2541extern "C" {
2542    pub fn hb_buffer_deserialize_glyphs(
2543        buffer: *mut hb_buffer_t,
2544        buf: *const ::core::ffi::c_char,
2545        buf_len: ::core::ffi::c_int,
2546        end_ptr: *mut *const ::core::ffi::c_char,
2547        font: *mut hb_font_t,
2548        format: hb_buffer_serialize_format_t,
2549    ) -> hb_bool_t;
2550}
2551extern "C" {
2552    pub fn hb_buffer_deserialize_unicode(
2553        buffer: *mut hb_buffer_t,
2554        buf: *const ::core::ffi::c_char,
2555        buf_len: ::core::ffi::c_int,
2556        end_ptr: *mut *const ::core::ffi::c_char,
2557        format: hb_buffer_serialize_format_t,
2558    ) -> hb_bool_t;
2559}
2560pub const HB_BUFFER_DIFF_FLAG_EQUAL: hb_buffer_diff_flags_t = 0;
2561pub const HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH: hb_buffer_diff_flags_t = 1;
2562pub const HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH: hb_buffer_diff_flags_t = 2;
2563pub const HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT: hb_buffer_diff_flags_t = 4;
2564pub const HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT: hb_buffer_diff_flags_t = 8;
2565pub const HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH: hb_buffer_diff_flags_t = 16;
2566pub const HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH: hb_buffer_diff_flags_t = 32;
2567pub const HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH: hb_buffer_diff_flags_t = 64;
2568pub const HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH: hb_buffer_diff_flags_t = 128;
2569pub type hb_buffer_diff_flags_t = ::core::ffi::c_uint;
2570extern "C" {
2571    pub fn hb_buffer_diff(
2572        buffer: *mut hb_buffer_t,
2573        reference: *mut hb_buffer_t,
2574        dottedcircle_glyph: hb_codepoint_t,
2575        position_fuzz: ::core::ffi::c_uint,
2576    ) -> hb_buffer_diff_flags_t;
2577}
2578pub type hb_buffer_message_func_t = ::core::option::Option<
2579    unsafe extern "C" fn(
2580        buffer: *mut hb_buffer_t,
2581        font: *mut hb_font_t,
2582        message: *const ::core::ffi::c_char,
2583        user_data: *mut ::core::ffi::c_void,
2584    ) -> hb_bool_t,
2585>;
2586extern "C" {
2587    pub fn hb_buffer_set_message_func(
2588        buffer: *mut hb_buffer_t,
2589        func: hb_buffer_message_func_t,
2590        user_data: *mut ::core::ffi::c_void,
2591        destroy: hb_destroy_func_t,
2592    );
2593}
2594pub type hb_font_get_glyph_func_t = ::core::option::Option<
2595    unsafe extern "C" fn(
2596        font: *mut hb_font_t,
2597        font_data: *mut ::core::ffi::c_void,
2598        unicode: hb_codepoint_t,
2599        variation_selector: hb_codepoint_t,
2600        glyph: *mut hb_codepoint_t,
2601        user_data: *mut ::core::ffi::c_void,
2602    ) -> hb_bool_t,
2603>;
2604extern "C" {
2605    pub fn hb_font_funcs_set_glyph_func(
2606        ffuncs: *mut hb_font_funcs_t,
2607        func: hb_font_get_glyph_func_t,
2608        user_data: *mut ::core::ffi::c_void,
2609        destroy: hb_destroy_func_t,
2610    );
2611}
2612extern "C" {
2613    pub fn hb_set_invert(set: *mut hb_set_t);
2614}
2615#[doc = " hb_unicode_eastasian_width_func_t:\n\n Deprecated: 2.0.0"]
2616pub type hb_unicode_eastasian_width_func_t = ::core::option::Option<
2617    unsafe extern "C" fn(
2618        ufuncs: *mut hb_unicode_funcs_t,
2619        unicode: hb_codepoint_t,
2620        user_data: *mut ::core::ffi::c_void,
2621    ) -> ::core::ffi::c_uint,
2622>;
2623extern "C" {
2624    #[doc = " hb_unicode_funcs_set_eastasian_width_func:\n @ufuncs: a Unicode function structure\n @func: (closure user_data) (destroy destroy) (scope notified):\n @user_data:\n @destroy:\n\n\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
2625    pub fn hb_unicode_funcs_set_eastasian_width_func(
2626        ufuncs: *mut hb_unicode_funcs_t,
2627        func: hb_unicode_eastasian_width_func_t,
2628        user_data: *mut ::core::ffi::c_void,
2629        destroy: hb_destroy_func_t,
2630    );
2631}
2632extern "C" {
2633    #[doc = " hb_unicode_eastasian_width:\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
2634    pub fn hb_unicode_eastasian_width(
2635        ufuncs: *mut hb_unicode_funcs_t,
2636        unicode: hb_codepoint_t,
2637    ) -> ::core::ffi::c_uint;
2638}
2639#[doc = " hb_unicode_decompose_compatibility_func_t:\n @ufuncs: a Unicode function structure\n @u: codepoint to decompose\n @decomposed: address of codepoint array (of length %HB_UNICODE_MAX_DECOMPOSITION_LEN) to write decomposition into\n @user_data: user data pointer as passed to hb_unicode_funcs_set_decompose_compatibility_func()\n\n Fully decompose @u to its Unicode compatibility decomposition. The codepoints of the decomposition will be written to @decomposed.\n The complete length of the decomposition will be returned.\n\n If @u has no compatibility decomposition, zero should be returned.\n\n The Unicode standard guarantees that a buffer of length %HB_UNICODE_MAX_DECOMPOSITION_LEN codepoints will always be sufficient for any\n compatibility decomposition plus an terminating value of 0.  Consequently, @decompose must be allocated by the caller to be at least this length.  Implementations\n of this function type must ensure that they do not write past the provided array.\n\n Return value: number of codepoints in the full compatibility decomposition of @u, or 0 if no decomposition available.\n\n Deprecated: 2.0.0"]
2640pub type hb_unicode_decompose_compatibility_func_t = ::core::option::Option<
2641    unsafe extern "C" fn(
2642        ufuncs: *mut hb_unicode_funcs_t,
2643        u: hb_codepoint_t,
2644        decomposed: *mut hb_codepoint_t,
2645        user_data: *mut ::core::ffi::c_void,
2646    ) -> ::core::ffi::c_uint,
2647>;
2648extern "C" {
2649    #[doc = " hb_unicode_funcs_set_decompose_compatibility_func:\n @ufuncs: a Unicode function structure\n @func: (closure user_data) (destroy destroy) (scope notified):\n @user_data:\n @destroy:\n\n\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
2650    pub fn hb_unicode_funcs_set_decompose_compatibility_func(
2651        ufuncs: *mut hb_unicode_funcs_t,
2652        func: hb_unicode_decompose_compatibility_func_t,
2653        user_data: *mut ::core::ffi::c_void,
2654        destroy: hb_destroy_func_t,
2655    );
2656}
2657extern "C" {
2658    pub fn hb_unicode_decompose_compatibility(
2659        ufuncs: *mut hb_unicode_funcs_t,
2660        u: hb_codepoint_t,
2661        decomposed: *mut hb_codepoint_t,
2662    ) -> ::core::ffi::c_uint;
2663}
2664pub type hb_font_get_glyph_v_kerning_func_t = hb_font_get_glyph_kerning_func_t;
2665extern "C" {
2666    #[doc = " hb_font_funcs_set_glyph_v_kerning_func:\n @ffuncs: font functions.\n @func: (closure user_data) (destroy destroy) (scope notified):\n @user_data:\n @destroy:\n\n\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
2667    pub fn hb_font_funcs_set_glyph_v_kerning_func(
2668        ffuncs: *mut hb_font_funcs_t,
2669        func: hb_font_get_glyph_v_kerning_func_t,
2670        user_data: *mut ::core::ffi::c_void,
2671        destroy: hb_destroy_func_t,
2672    );
2673}
2674extern "C" {
2675    pub fn hb_font_get_glyph_v_kerning(
2676        font: *mut hb_font_t,
2677        top_glyph: hb_codepoint_t,
2678        bottom_glyph: hb_codepoint_t,
2679    ) -> hb_position_t;
2680}
2681#[repr(C)]
2682#[derive(Debug, Copy, Clone)]
2683pub struct hb_map_t {
2684    _unused: [u8; 0],
2685}
2686extern "C" {
2687    pub fn hb_map_create() -> *mut hb_map_t;
2688}
2689extern "C" {
2690    pub fn hb_map_get_empty() -> *mut hb_map_t;
2691}
2692extern "C" {
2693    pub fn hb_map_reference(map: *mut hb_map_t) -> *mut hb_map_t;
2694}
2695extern "C" {
2696    pub fn hb_map_destroy(map: *mut hb_map_t);
2697}
2698extern "C" {
2699    pub fn hb_map_set_user_data(
2700        map: *mut hb_map_t,
2701        key: *mut hb_user_data_key_t,
2702        data: *mut ::core::ffi::c_void,
2703        destroy: hb_destroy_func_t,
2704        replace: hb_bool_t,
2705    ) -> hb_bool_t;
2706}
2707extern "C" {
2708    pub fn hb_map_get_user_data(
2709        map: *mut hb_map_t,
2710        key: *mut hb_user_data_key_t,
2711    ) -> *mut ::core::ffi::c_void;
2712}
2713extern "C" {
2714    pub fn hb_map_allocation_successful(map: *const hb_map_t) -> hb_bool_t;
2715}
2716extern "C" {
2717    pub fn hb_map_clear(map: *mut hb_map_t);
2718}
2719extern "C" {
2720    pub fn hb_map_is_empty(map: *const hb_map_t) -> hb_bool_t;
2721}
2722extern "C" {
2723    pub fn hb_map_get_population(map: *const hb_map_t) -> ::core::ffi::c_uint;
2724}
2725extern "C" {
2726    pub fn hb_map_set(map: *mut hb_map_t, key: hb_codepoint_t, value: hb_codepoint_t);
2727}
2728extern "C" {
2729    pub fn hb_map_get(map: *const hb_map_t, key: hb_codepoint_t) -> hb_codepoint_t;
2730}
2731extern "C" {
2732    pub fn hb_map_del(map: *mut hb_map_t, key: hb_codepoint_t);
2733}
2734extern "C" {
2735    pub fn hb_map_has(map: *const hb_map_t, key: hb_codepoint_t) -> hb_bool_t;
2736}
2737extern "C" {
2738    pub fn hb_shape(
2739        font: *mut hb_font_t,
2740        buffer: *mut hb_buffer_t,
2741        features: *const hb_feature_t,
2742        num_features: ::core::ffi::c_uint,
2743    );
2744}
2745extern "C" {
2746    pub fn hb_shape_full(
2747        font: *mut hb_font_t,
2748        buffer: *mut hb_buffer_t,
2749        features: *const hb_feature_t,
2750        num_features: ::core::ffi::c_uint,
2751        shaper_list: *const *const ::core::ffi::c_char,
2752    ) -> hb_bool_t;
2753}
2754extern "C" {
2755    pub fn hb_shape_list_shapers() -> *mut *const ::core::ffi::c_char;
2756}
2757#[repr(C)]
2758#[derive(Debug, Copy, Clone)]
2759pub struct hb_shape_plan_t {
2760    _unused: [u8; 0],
2761}
2762extern "C" {
2763    pub fn hb_shape_plan_create(
2764        face: *mut hb_face_t,
2765        props: *const hb_segment_properties_t,
2766        user_features: *const hb_feature_t,
2767        num_user_features: ::core::ffi::c_uint,
2768        shaper_list: *const *const ::core::ffi::c_char,
2769    ) -> *mut hb_shape_plan_t;
2770}
2771extern "C" {
2772    pub fn hb_shape_plan_create_cached(
2773        face: *mut hb_face_t,
2774        props: *const hb_segment_properties_t,
2775        user_features: *const hb_feature_t,
2776        num_user_features: ::core::ffi::c_uint,
2777        shaper_list: *const *const ::core::ffi::c_char,
2778    ) -> *mut hb_shape_plan_t;
2779}
2780extern "C" {
2781    pub fn hb_shape_plan_create2(
2782        face: *mut hb_face_t,
2783        props: *const hb_segment_properties_t,
2784        user_features: *const hb_feature_t,
2785        num_user_features: ::core::ffi::c_uint,
2786        coords: *const ::core::ffi::c_int,
2787        num_coords: ::core::ffi::c_uint,
2788        shaper_list: *const *const ::core::ffi::c_char,
2789    ) -> *mut hb_shape_plan_t;
2790}
2791extern "C" {
2792    pub fn hb_shape_plan_create_cached2(
2793        face: *mut hb_face_t,
2794        props: *const hb_segment_properties_t,
2795        user_features: *const hb_feature_t,
2796        num_user_features: ::core::ffi::c_uint,
2797        coords: *const ::core::ffi::c_int,
2798        num_coords: ::core::ffi::c_uint,
2799        shaper_list: *const *const ::core::ffi::c_char,
2800    ) -> *mut hb_shape_plan_t;
2801}
2802extern "C" {
2803    pub fn hb_shape_plan_get_empty() -> *mut hb_shape_plan_t;
2804}
2805extern "C" {
2806    pub fn hb_shape_plan_reference(shape_plan: *mut hb_shape_plan_t) -> *mut hb_shape_plan_t;
2807}
2808extern "C" {
2809    pub fn hb_shape_plan_destroy(shape_plan: *mut hb_shape_plan_t);
2810}
2811extern "C" {
2812    pub fn hb_shape_plan_set_user_data(
2813        shape_plan: *mut hb_shape_plan_t,
2814        key: *mut hb_user_data_key_t,
2815        data: *mut ::core::ffi::c_void,
2816        destroy: hb_destroy_func_t,
2817        replace: hb_bool_t,
2818    ) -> hb_bool_t;
2819}
2820extern "C" {
2821    pub fn hb_shape_plan_get_user_data(
2822        shape_plan: *mut hb_shape_plan_t,
2823        key: *mut hb_user_data_key_t,
2824    ) -> *mut ::core::ffi::c_void;
2825}
2826extern "C" {
2827    pub fn hb_shape_plan_execute(
2828        shape_plan: *mut hb_shape_plan_t,
2829        font: *mut hb_font_t,
2830        buffer: *mut hb_buffer_t,
2831        features: *const hb_feature_t,
2832        num_features: ::core::ffi::c_uint,
2833    ) -> hb_bool_t;
2834}
2835extern "C" {
2836    pub fn hb_shape_plan_get_shaper(shape_plan: *mut hb_shape_plan_t)
2837        -> *const ::core::ffi::c_char;
2838}
2839extern "C" {
2840    pub fn hb_version(
2841        major: *mut ::core::ffi::c_uint,
2842        minor: *mut ::core::ffi::c_uint,
2843        micro: *mut ::core::ffi::c_uint,
2844    );
2845}
2846extern "C" {
2847    pub fn hb_version_string() -> *const ::core::ffi::c_char;
2848}
2849extern "C" {
2850    pub fn hb_version_atleast(
2851        major: ::core::ffi::c_uint,
2852        minor: ::core::ffi::c_uint,
2853        micro: ::core::ffi::c_uint,
2854    ) -> hb_bool_t;
2855}
2856pub type hb_ot_name_id_t = ::core::ffi::c_uint;
2857#[doc = " hb_ot_name_entry_t:\n @name_id: name ID\n @language: language\n\n Structure representing a name ID in a particular language.\n\n Since: 2.1.0"]
2858#[repr(C)]
2859#[derive(Copy, Clone)]
2860pub struct hb_ot_name_entry_t {
2861    pub name_id: hb_ot_name_id_t,
2862    pub var: hb_var_int_t,
2863    pub language: hb_language_t,
2864}
2865#[test]
2866fn bindgen_test_layout_hb_ot_name_entry_t() {
2867    const UNINIT: ::core::mem::MaybeUninit<hb_ot_name_entry_t> = ::core::mem::MaybeUninit::uninit();
2868    let ptr = UNINIT.as_ptr();
2869    assert_eq!(
2870        ::core::mem::size_of::<hb_ot_name_entry_t>(),
2871        16usize,
2872        concat!("Size of: ", stringify!(hb_ot_name_entry_t))
2873    );
2874    assert_eq!(
2875        ::core::mem::align_of::<hb_ot_name_entry_t>(),
2876        8usize,
2877        concat!("Alignment of ", stringify!(hb_ot_name_entry_t))
2878    );
2879    assert_eq!(
2880        unsafe { ::core::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
2881        0usize,
2882        concat!(
2883            "Offset of field: ",
2884            stringify!(hb_ot_name_entry_t),
2885            "::",
2886            stringify!(name_id)
2887        )
2888    );
2889    assert_eq!(
2890        unsafe { ::core::ptr::addr_of!((*ptr).var) as usize - ptr as usize },
2891        4usize,
2892        concat!(
2893            "Offset of field: ",
2894            stringify!(hb_ot_name_entry_t),
2895            "::",
2896            stringify!(var)
2897        )
2898    );
2899    assert_eq!(
2900        unsafe { ::core::ptr::addr_of!((*ptr).language) as usize - ptr as usize },
2901        8usize,
2902        concat!(
2903            "Offset of field: ",
2904            stringify!(hb_ot_name_entry_t),
2905            "::",
2906            stringify!(language)
2907        )
2908    );
2909}
2910extern "C" {
2911    pub fn hb_ot_name_list_names(
2912        face: *mut hb_face_t,
2913        num_entries: *mut ::core::ffi::c_uint,
2914    ) -> *const hb_ot_name_entry_t;
2915}
2916extern "C" {
2917    pub fn hb_ot_name_get_utf8(
2918        face: *mut hb_face_t,
2919        name_id: hb_ot_name_id_t,
2920        language: hb_language_t,
2921        text_size: *mut ::core::ffi::c_uint,
2922        text: *mut ::core::ffi::c_char,
2923    ) -> ::core::ffi::c_uint;
2924}
2925extern "C" {
2926    pub fn hb_ot_name_get_utf16(
2927        face: *mut hb_face_t,
2928        name_id: hb_ot_name_id_t,
2929        language: hb_language_t,
2930        text_size: *mut ::core::ffi::c_uint,
2931        text: *mut u16,
2932    ) -> ::core::ffi::c_uint;
2933}
2934extern "C" {
2935    pub fn hb_ot_name_get_utf32(
2936        face: *mut hb_face_t,
2937        name_id: hb_ot_name_id_t,
2938        language: hb_language_t,
2939        text_size: *mut ::core::ffi::c_uint,
2940        text: *mut u32,
2941    ) -> ::core::ffi::c_uint;
2942}
2943extern "C" {
2944    pub fn hb_ot_color_has_palettes(face: *mut hb_face_t) -> hb_bool_t;
2945}
2946extern "C" {
2947    pub fn hb_ot_color_palette_get_count(face: *mut hb_face_t) -> ::core::ffi::c_uint;
2948}
2949extern "C" {
2950    pub fn hb_ot_color_palette_get_name_id(
2951        face: *mut hb_face_t,
2952        palette_index: ::core::ffi::c_uint,
2953    ) -> hb_ot_name_id_t;
2954}
2955extern "C" {
2956    pub fn hb_ot_color_palette_color_get_name_id(
2957        face: *mut hb_face_t,
2958        color_index: ::core::ffi::c_uint,
2959    ) -> hb_ot_name_id_t;
2960}
2961pub const HB_OT_COLOR_PALETTE_FLAG_DEFAULT: hb_ot_color_palette_flags_t = 0;
2962pub const HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND: hb_ot_color_palette_flags_t = 1;
2963pub const HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND: hb_ot_color_palette_flags_t = 2;
2964#[doc = " hb_ot_color_palette_flags_t:\n @HB_OT_COLOR_PALETTE_FLAG_DEFAULT: Default indicating that there is nothing special\n   to note about a color palette.\n @HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND: Flag indicating that the color\n   palette is appropriate to use when displaying the font on a light background such as white.\n @HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND: Flag indicating that the color\n   palette is appropriate to use when displaying the font on a dark background such as black.\n\n Since: 2.1.0"]
2965pub type hb_ot_color_palette_flags_t = ::core::ffi::c_uint;
2966extern "C" {
2967    pub fn hb_ot_color_palette_get_flags(
2968        face: *mut hb_face_t,
2969        palette_index: ::core::ffi::c_uint,
2970    ) -> hb_ot_color_palette_flags_t;
2971}
2972extern "C" {
2973    pub fn hb_ot_color_palette_get_colors(
2974        face: *mut hb_face_t,
2975        palette_index: ::core::ffi::c_uint,
2976        start_offset: ::core::ffi::c_uint,
2977        color_count: *mut ::core::ffi::c_uint,
2978        colors: *mut hb_color_t,
2979    ) -> ::core::ffi::c_uint;
2980}
2981extern "C" {
2982    pub fn hb_ot_color_has_layers(face: *mut hb_face_t) -> hb_bool_t;
2983}
2984#[doc = " hb_ot_color_layer_t:\n\n Pairs of glyph and color index.\n\n Since: 2.1.0"]
2985#[repr(C)]
2986#[derive(Debug, Copy, Clone)]
2987pub struct hb_ot_color_layer_t {
2988    pub glyph: hb_codepoint_t,
2989    pub color_index: ::core::ffi::c_uint,
2990}
2991#[test]
2992fn bindgen_test_layout_hb_ot_color_layer_t() {
2993    const UNINIT: ::core::mem::MaybeUninit<hb_ot_color_layer_t> =
2994        ::core::mem::MaybeUninit::uninit();
2995    let ptr = UNINIT.as_ptr();
2996    assert_eq!(
2997        ::core::mem::size_of::<hb_ot_color_layer_t>(),
2998        8usize,
2999        concat!("Size of: ", stringify!(hb_ot_color_layer_t))
3000    );
3001    assert_eq!(
3002        ::core::mem::align_of::<hb_ot_color_layer_t>(),
3003        4usize,
3004        concat!("Alignment of ", stringify!(hb_ot_color_layer_t))
3005    );
3006    assert_eq!(
3007        unsafe { ::core::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
3008        0usize,
3009        concat!(
3010            "Offset of field: ",
3011            stringify!(hb_ot_color_layer_t),
3012            "::",
3013            stringify!(glyph)
3014        )
3015    );
3016    assert_eq!(
3017        unsafe { ::core::ptr::addr_of!((*ptr).color_index) as usize - ptr as usize },
3018        4usize,
3019        concat!(
3020            "Offset of field: ",
3021            stringify!(hb_ot_color_layer_t),
3022            "::",
3023            stringify!(color_index)
3024        )
3025    );
3026}
3027extern "C" {
3028    pub fn hb_ot_color_glyph_get_layers(
3029        face: *mut hb_face_t,
3030        glyph: hb_codepoint_t,
3031        start_offset: ::core::ffi::c_uint,
3032        layer_count: *mut ::core::ffi::c_uint,
3033        layers: *mut hb_ot_color_layer_t,
3034    ) -> ::core::ffi::c_uint;
3035}
3036extern "C" {
3037    pub fn hb_ot_color_has_svg(face: *mut hb_face_t) -> hb_bool_t;
3038}
3039extern "C" {
3040    pub fn hb_ot_color_glyph_reference_svg(
3041        face: *mut hb_face_t,
3042        glyph: hb_codepoint_t,
3043    ) -> *mut hb_blob_t;
3044}
3045extern "C" {
3046    pub fn hb_ot_color_has_png(face: *mut hb_face_t) -> hb_bool_t;
3047}
3048extern "C" {
3049    pub fn hb_ot_color_glyph_reference_png(
3050        font: *mut hb_font_t,
3051        glyph: hb_codepoint_t,
3052    ) -> *mut hb_blob_t;
3053}
3054extern "C" {
3055    pub fn hb_ot_layout_table_choose_script(
3056        face: *mut hb_face_t,
3057        table_tag: hb_tag_t,
3058        script_tags: *const hb_tag_t,
3059        script_index: *mut ::core::ffi::c_uint,
3060        chosen_script: *mut hb_tag_t,
3061    ) -> hb_bool_t;
3062}
3063extern "C" {
3064    pub fn hb_ot_layout_script_find_language(
3065        face: *mut hb_face_t,
3066        table_tag: hb_tag_t,
3067        script_index: ::core::ffi::c_uint,
3068        language_tag: hb_tag_t,
3069        language_index: *mut ::core::ffi::c_uint,
3070    ) -> hb_bool_t;
3071}
3072extern "C" {
3073    pub fn hb_ot_tags_from_script(
3074        script: hb_script_t,
3075        script_tag_1: *mut hb_tag_t,
3076        script_tag_2: *mut hb_tag_t,
3077    );
3078}
3079extern "C" {
3080    pub fn hb_ot_tag_from_language(language: hb_language_t) -> hb_tag_t;
3081}
3082#[doc = " hb_ot_var_axis_t:\n\n Since: 1.4.2\n Deprecated: 2.2.0"]
3083#[repr(C)]
3084#[derive(Debug, Copy, Clone)]
3085pub struct hb_ot_var_axis_t {
3086    pub tag: hb_tag_t,
3087    pub name_id: hb_ot_name_id_t,
3088    pub min_value: ::core::ffi::c_float,
3089    pub default_value: ::core::ffi::c_float,
3090    pub max_value: ::core::ffi::c_float,
3091}
3092#[test]
3093fn bindgen_test_layout_hb_ot_var_axis_t() {
3094    const UNINIT: ::core::mem::MaybeUninit<hb_ot_var_axis_t> = ::core::mem::MaybeUninit::uninit();
3095    let ptr = UNINIT.as_ptr();
3096    assert_eq!(
3097        ::core::mem::size_of::<hb_ot_var_axis_t>(),
3098        20usize,
3099        concat!("Size of: ", stringify!(hb_ot_var_axis_t))
3100    );
3101    assert_eq!(
3102        ::core::mem::align_of::<hb_ot_var_axis_t>(),
3103        4usize,
3104        concat!("Alignment of ", stringify!(hb_ot_var_axis_t))
3105    );
3106    assert_eq!(
3107        unsafe { ::core::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
3108        0usize,
3109        concat!(
3110            "Offset of field: ",
3111            stringify!(hb_ot_var_axis_t),
3112            "::",
3113            stringify!(tag)
3114        )
3115    );
3116    assert_eq!(
3117        unsafe { ::core::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
3118        4usize,
3119        concat!(
3120            "Offset of field: ",
3121            stringify!(hb_ot_var_axis_t),
3122            "::",
3123            stringify!(name_id)
3124        )
3125    );
3126    assert_eq!(
3127        unsafe { ::core::ptr::addr_of!((*ptr).min_value) as usize - ptr as usize },
3128        8usize,
3129        concat!(
3130            "Offset of field: ",
3131            stringify!(hb_ot_var_axis_t),
3132            "::",
3133            stringify!(min_value)
3134        )
3135    );
3136    assert_eq!(
3137        unsafe { ::core::ptr::addr_of!((*ptr).default_value) as usize - ptr as usize },
3138        12usize,
3139        concat!(
3140            "Offset of field: ",
3141            stringify!(hb_ot_var_axis_t),
3142            "::",
3143            stringify!(default_value)
3144        )
3145    );
3146    assert_eq!(
3147        unsafe { ::core::ptr::addr_of!((*ptr).max_value) as usize - ptr as usize },
3148        16usize,
3149        concat!(
3150            "Offset of field: ",
3151            stringify!(hb_ot_var_axis_t),
3152            "::",
3153            stringify!(max_value)
3154        )
3155    );
3156}
3157extern "C" {
3158    pub fn hb_ot_var_get_axes(
3159        face: *mut hb_face_t,
3160        start_offset: ::core::ffi::c_uint,
3161        axes_count: *mut ::core::ffi::c_uint,
3162        axes_array: *mut hb_ot_var_axis_t,
3163    ) -> ::core::ffi::c_uint;
3164}
3165extern "C" {
3166    pub fn hb_ot_var_find_axis(
3167        face: *mut hb_face_t,
3168        axis_tag: hb_tag_t,
3169        axis_index: *mut ::core::ffi::c_uint,
3170        axis_info: *mut hb_ot_var_axis_t,
3171    ) -> hb_bool_t;
3172}
3173extern "C" {
3174    pub fn hb_ot_font_set_funcs(font: *mut hb_font_t);
3175}
3176extern "C" {
3177    pub fn hb_ot_tags_from_script_and_language(
3178        script: hb_script_t,
3179        language: hb_language_t,
3180        script_count: *mut ::core::ffi::c_uint,
3181        script_tags: *mut hb_tag_t,
3182        language_count: *mut ::core::ffi::c_uint,
3183        language_tags: *mut hb_tag_t,
3184    );
3185}
3186extern "C" {
3187    pub fn hb_ot_tag_to_script(tag: hb_tag_t) -> hb_script_t;
3188}
3189extern "C" {
3190    pub fn hb_ot_tag_to_language(tag: hb_tag_t) -> hb_language_t;
3191}
3192extern "C" {
3193    pub fn hb_ot_tags_to_script_and_language(
3194        script_tag: hb_tag_t,
3195        language_tag: hb_tag_t,
3196        script: *mut hb_script_t,
3197        language: *mut hb_language_t,
3198    );
3199}
3200extern "C" {
3201    pub fn hb_ot_layout_has_glyph_classes(face: *mut hb_face_t) -> hb_bool_t;
3202}
3203pub const HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED: hb_ot_layout_glyph_class_t = 0;
3204pub const HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH: hb_ot_layout_glyph_class_t = 1;
3205pub const HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE: hb_ot_layout_glyph_class_t = 2;
3206pub const HB_OT_LAYOUT_GLYPH_CLASS_MARK: hb_ot_layout_glyph_class_t = 3;
3207pub const HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT: hb_ot_layout_glyph_class_t = 4;
3208#[doc = " hb_ot_layout_glyph_class_t:\n @HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED: Glyphs not matching the other classifications\n @HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH: Spacing, single characters, capable of accepting marks\n @HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE: Glyphs that represent ligation of multiple characters\n @HB_OT_LAYOUT_GLYPH_CLASS_MARK: Non-spacing, combining glyphs that represent marks\n @HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT: Spacing glyphs that represent part of a single character\n\n The GDEF classes defined for glyphs.\n"]
3209pub type hb_ot_layout_glyph_class_t = ::core::ffi::c_uint;
3210extern "C" {
3211    pub fn hb_ot_layout_get_glyph_class(
3212        face: *mut hb_face_t,
3213        glyph: hb_codepoint_t,
3214    ) -> hb_ot_layout_glyph_class_t;
3215}
3216extern "C" {
3217    pub fn hb_ot_layout_get_glyphs_in_class(
3218        face: *mut hb_face_t,
3219        klass: hb_ot_layout_glyph_class_t,
3220        glyphs: *mut hb_set_t,
3221    );
3222}
3223extern "C" {
3224    pub fn hb_ot_layout_get_attach_points(
3225        face: *mut hb_face_t,
3226        glyph: hb_codepoint_t,
3227        start_offset: ::core::ffi::c_uint,
3228        point_count: *mut ::core::ffi::c_uint,
3229        point_array: *mut ::core::ffi::c_uint,
3230    ) -> ::core::ffi::c_uint;
3231}
3232extern "C" {
3233    pub fn hb_ot_layout_get_ligature_carets(
3234        font: *mut hb_font_t,
3235        direction: hb_direction_t,
3236        glyph: hb_codepoint_t,
3237        start_offset: ::core::ffi::c_uint,
3238        caret_count: *mut ::core::ffi::c_uint,
3239        caret_array: *mut hb_position_t,
3240    ) -> ::core::ffi::c_uint;
3241}
3242extern "C" {
3243    pub fn hb_ot_layout_table_get_script_tags(
3244        face: *mut hb_face_t,
3245        table_tag: hb_tag_t,
3246        start_offset: ::core::ffi::c_uint,
3247        script_count: *mut ::core::ffi::c_uint,
3248        script_tags: *mut hb_tag_t,
3249    ) -> ::core::ffi::c_uint;
3250}
3251extern "C" {
3252    pub fn hb_ot_layout_table_find_script(
3253        face: *mut hb_face_t,
3254        table_tag: hb_tag_t,
3255        script_tag: hb_tag_t,
3256        script_index: *mut ::core::ffi::c_uint,
3257    ) -> hb_bool_t;
3258}
3259extern "C" {
3260    pub fn hb_ot_layout_table_select_script(
3261        face: *mut hb_face_t,
3262        table_tag: hb_tag_t,
3263        script_count: ::core::ffi::c_uint,
3264        script_tags: *const hb_tag_t,
3265        script_index: *mut ::core::ffi::c_uint,
3266        chosen_script: *mut hb_tag_t,
3267    ) -> hb_bool_t;
3268}
3269extern "C" {
3270    pub fn hb_ot_layout_table_get_feature_tags(
3271        face: *mut hb_face_t,
3272        table_tag: hb_tag_t,
3273        start_offset: ::core::ffi::c_uint,
3274        feature_count: *mut ::core::ffi::c_uint,
3275        feature_tags: *mut hb_tag_t,
3276    ) -> ::core::ffi::c_uint;
3277}
3278extern "C" {
3279    pub fn hb_ot_layout_script_get_language_tags(
3280        face: *mut hb_face_t,
3281        table_tag: hb_tag_t,
3282        script_index: ::core::ffi::c_uint,
3283        start_offset: ::core::ffi::c_uint,
3284        language_count: *mut ::core::ffi::c_uint,
3285        language_tags: *mut hb_tag_t,
3286    ) -> ::core::ffi::c_uint;
3287}
3288extern "C" {
3289    pub fn hb_ot_layout_script_select_language(
3290        face: *mut hb_face_t,
3291        table_tag: hb_tag_t,
3292        script_index: ::core::ffi::c_uint,
3293        language_count: ::core::ffi::c_uint,
3294        language_tags: *const hb_tag_t,
3295        language_index: *mut ::core::ffi::c_uint,
3296    ) -> hb_bool_t;
3297}
3298extern "C" {
3299    pub fn hb_ot_layout_language_get_required_feature_index(
3300        face: *mut hb_face_t,
3301        table_tag: hb_tag_t,
3302        script_index: ::core::ffi::c_uint,
3303        language_index: ::core::ffi::c_uint,
3304        feature_index: *mut ::core::ffi::c_uint,
3305    ) -> hb_bool_t;
3306}
3307extern "C" {
3308    pub fn hb_ot_layout_language_get_required_feature(
3309        face: *mut hb_face_t,
3310        table_tag: hb_tag_t,
3311        script_index: ::core::ffi::c_uint,
3312        language_index: ::core::ffi::c_uint,
3313        feature_index: *mut ::core::ffi::c_uint,
3314        feature_tag: *mut hb_tag_t,
3315    ) -> hb_bool_t;
3316}
3317extern "C" {
3318    pub fn hb_ot_layout_language_get_feature_indexes(
3319        face: *mut hb_face_t,
3320        table_tag: hb_tag_t,
3321        script_index: ::core::ffi::c_uint,
3322        language_index: ::core::ffi::c_uint,
3323        start_offset: ::core::ffi::c_uint,
3324        feature_count: *mut ::core::ffi::c_uint,
3325        feature_indexes: *mut ::core::ffi::c_uint,
3326    ) -> ::core::ffi::c_uint;
3327}
3328extern "C" {
3329    pub fn hb_ot_layout_language_get_feature_tags(
3330        face: *mut hb_face_t,
3331        table_tag: hb_tag_t,
3332        script_index: ::core::ffi::c_uint,
3333        language_index: ::core::ffi::c_uint,
3334        start_offset: ::core::ffi::c_uint,
3335        feature_count: *mut ::core::ffi::c_uint,
3336        feature_tags: *mut hb_tag_t,
3337    ) -> ::core::ffi::c_uint;
3338}
3339extern "C" {
3340    pub fn hb_ot_layout_language_find_feature(
3341        face: *mut hb_face_t,
3342        table_tag: hb_tag_t,
3343        script_index: ::core::ffi::c_uint,
3344        language_index: ::core::ffi::c_uint,
3345        feature_tag: hb_tag_t,
3346        feature_index: *mut ::core::ffi::c_uint,
3347    ) -> hb_bool_t;
3348}
3349extern "C" {
3350    pub fn hb_ot_layout_feature_get_lookups(
3351        face: *mut hb_face_t,
3352        table_tag: hb_tag_t,
3353        feature_index: ::core::ffi::c_uint,
3354        start_offset: ::core::ffi::c_uint,
3355        lookup_count: *mut ::core::ffi::c_uint,
3356        lookup_indexes: *mut ::core::ffi::c_uint,
3357    ) -> ::core::ffi::c_uint;
3358}
3359extern "C" {
3360    pub fn hb_ot_layout_table_get_lookup_count(
3361        face: *mut hb_face_t,
3362        table_tag: hb_tag_t,
3363    ) -> ::core::ffi::c_uint;
3364}
3365extern "C" {
3366    pub fn hb_ot_layout_collect_features(
3367        face: *mut hb_face_t,
3368        table_tag: hb_tag_t,
3369        scripts: *const hb_tag_t,
3370        languages: *const hb_tag_t,
3371        features: *const hb_tag_t,
3372        feature_indexes: *mut hb_set_t,
3373    );
3374}
3375extern "C" {
3376    pub fn hb_ot_layout_collect_lookups(
3377        face: *mut hb_face_t,
3378        table_tag: hb_tag_t,
3379        scripts: *const hb_tag_t,
3380        languages: *const hb_tag_t,
3381        features: *const hb_tag_t,
3382        lookup_indexes: *mut hb_set_t,
3383    );
3384}
3385extern "C" {
3386    pub fn hb_ot_layout_lookup_collect_glyphs(
3387        face: *mut hb_face_t,
3388        table_tag: hb_tag_t,
3389        lookup_index: ::core::ffi::c_uint,
3390        glyphs_before: *mut hb_set_t,
3391        glyphs_input: *mut hb_set_t,
3392        glyphs_after: *mut hb_set_t,
3393        glyphs_output: *mut hb_set_t,
3394    );
3395}
3396extern "C" {
3397    pub fn hb_ot_layout_table_find_feature_variations(
3398        face: *mut hb_face_t,
3399        table_tag: hb_tag_t,
3400        coords: *const ::core::ffi::c_int,
3401        num_coords: ::core::ffi::c_uint,
3402        variations_index: *mut ::core::ffi::c_uint,
3403    ) -> hb_bool_t;
3404}
3405extern "C" {
3406    pub fn hb_ot_layout_feature_with_variations_get_lookups(
3407        face: *mut hb_face_t,
3408        table_tag: hb_tag_t,
3409        feature_index: ::core::ffi::c_uint,
3410        variations_index: ::core::ffi::c_uint,
3411        start_offset: ::core::ffi::c_uint,
3412        lookup_count: *mut ::core::ffi::c_uint,
3413        lookup_indexes: *mut ::core::ffi::c_uint,
3414    ) -> ::core::ffi::c_uint;
3415}
3416extern "C" {
3417    pub fn hb_ot_layout_has_substitution(face: *mut hb_face_t) -> hb_bool_t;
3418}
3419extern "C" {
3420    pub fn hb_ot_layout_lookup_get_glyph_alternates(
3421        face: *mut hb_face_t,
3422        lookup_index: ::core::ffi::c_uint,
3423        glyph: hb_codepoint_t,
3424        start_offset: ::core::ffi::c_uint,
3425        alternate_count: *mut ::core::ffi::c_uint,
3426        alternate_glyphs: *mut hb_codepoint_t,
3427    ) -> ::core::ffi::c_uint;
3428}
3429extern "C" {
3430    pub fn hb_ot_layout_lookup_would_substitute(
3431        face: *mut hb_face_t,
3432        lookup_index: ::core::ffi::c_uint,
3433        glyphs: *const hb_codepoint_t,
3434        glyphs_length: ::core::ffi::c_uint,
3435        zero_context: hb_bool_t,
3436    ) -> hb_bool_t;
3437}
3438extern "C" {
3439    pub fn hb_ot_layout_lookup_substitute_closure(
3440        face: *mut hb_face_t,
3441        lookup_index: ::core::ffi::c_uint,
3442        glyphs: *mut hb_set_t,
3443    );
3444}
3445extern "C" {
3446    pub fn hb_ot_layout_lookups_substitute_closure(
3447        face: *mut hb_face_t,
3448        lookups: *const hb_set_t,
3449        glyphs: *mut hb_set_t,
3450    );
3451}
3452extern "C" {
3453    pub fn hb_ot_layout_has_positioning(face: *mut hb_face_t) -> hb_bool_t;
3454}
3455extern "C" {
3456    pub fn hb_ot_layout_get_size_params(
3457        face: *mut hb_face_t,
3458        design_size: *mut ::core::ffi::c_uint,
3459        subfamily_id: *mut ::core::ffi::c_uint,
3460        subfamily_name_id: *mut hb_ot_name_id_t,
3461        range_start: *mut ::core::ffi::c_uint,
3462        range_end: *mut ::core::ffi::c_uint,
3463    ) -> hb_bool_t;
3464}
3465extern "C" {
3466    pub fn hb_ot_layout_feature_get_name_ids(
3467        face: *mut hb_face_t,
3468        table_tag: hb_tag_t,
3469        feature_index: ::core::ffi::c_uint,
3470        label_id: *mut hb_ot_name_id_t,
3471        tooltip_id: *mut hb_ot_name_id_t,
3472        sample_id: *mut hb_ot_name_id_t,
3473        num_named_parameters: *mut ::core::ffi::c_uint,
3474        first_param_id: *mut hb_ot_name_id_t,
3475    ) -> hb_bool_t;
3476}
3477extern "C" {
3478    pub fn hb_ot_layout_feature_get_characters(
3479        face: *mut hb_face_t,
3480        table_tag: hb_tag_t,
3481        feature_index: ::core::ffi::c_uint,
3482        start_offset: ::core::ffi::c_uint,
3483        char_count: *mut ::core::ffi::c_uint,
3484        characters: *mut hb_codepoint_t,
3485    ) -> ::core::ffi::c_uint;
3486}
3487pub const HB_OT_LAYOUT_BASELINE_TAG_ROMAN: hb_ot_layout_baseline_tag_t = 1919905134;
3488pub const HB_OT_LAYOUT_BASELINE_TAG_HANGING: hb_ot_layout_baseline_tag_t = 1751215719;
3489pub const HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT: hb_ot_layout_baseline_tag_t =
3490    1768121954;
3491pub const HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: hb_ot_layout_baseline_tag_t =
3492    1768121972;
3493pub const HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: hb_ot_layout_baseline_tag_t =
3494    1768187247;
3495pub const HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: hb_ot_layout_baseline_tag_t =
3496    1768191088;
3497pub const HB_OT_LAYOUT_BASELINE_TAG_MATH: hb_ot_layout_baseline_tag_t = 1835103336;
3498pub const _HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE: hb_ot_layout_baseline_tag_t = 2147483647;
3499#[doc = " hb_ot_layout_baseline_tag_t:\n @HB_OT_LAYOUT_BASELINE_TAG_ROMAN: The baseline used by alphabetic scripts such as Latin, Cyrillic and Greek.\n In vertical writing mode, the alphabetic baseline for characters rotated 90 degrees clockwise.\n (This would not apply to alphabetic characters that remain upright in vertical writing mode, since these\n characters are not rotated.)\n @HB_OT_LAYOUT_BASELINE_TAG_HANGING: The hanging baseline. In horizontal direction, this is the horizontal\n line from which syllables seem, to hang in Tibetan and other similar scripts. In vertical writing mode,\n for Tibetan (or some other similar script) characters rotated 90 degrees clockwise.\n @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT: Ideographic character face bottom or left edge,\n if the direction is horizontal or vertical, respectively.\n @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: Ideographic character face top or right edge,\n if the direction is horizontal or vertical, respectively.\n @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: Ideographic em-box bottom or left edge,\n if the direction is horizontal or vertical, respectively.\n @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: Ideographic em-box top or right edge baseline,\n if the direction is horizontal or vertical, respectively.\n @HB_OT_LAYOUT_BASELINE_TAG_MATH: The baseline about which mathematical characters are centered.\n In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.\n\n Baseline tags from https://docs.microsoft.com/en-us/typography/opentype/spec/baselinetags\n\n Since: 2.6.0"]
3500pub type hb_ot_layout_baseline_tag_t = ::core::ffi::c_uint;
3501extern "C" {
3502    pub fn hb_ot_layout_get_baseline(
3503        font: *mut hb_font_t,
3504        baseline_tag: hb_ot_layout_baseline_tag_t,
3505        direction: hb_direction_t,
3506        script_tag: hb_tag_t,
3507        language_tag: hb_tag_t,
3508        coord: *mut hb_position_t,
3509    ) -> hb_bool_t;
3510}
3511pub const HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN: hb_ot_math_constant_t = 0;
3512pub const HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN: hb_ot_math_constant_t = 1;
3513pub const HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT: hb_ot_math_constant_t = 2;
3514pub const HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT: hb_ot_math_constant_t = 3;
3515pub const HB_OT_MATH_CONSTANT_MATH_LEADING: hb_ot_math_constant_t = 4;
3516pub const HB_OT_MATH_CONSTANT_AXIS_HEIGHT: hb_ot_math_constant_t = 5;
3517pub const HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT: hb_ot_math_constant_t = 6;
3518pub const HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT: hb_ot_math_constant_t = 7;
3519pub const HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN: hb_ot_math_constant_t = 8;
3520pub const HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX: hb_ot_math_constant_t = 9;
3521pub const HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN: hb_ot_math_constant_t = 10;
3522pub const HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP: hb_ot_math_constant_t = 11;
3523pub const HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED: hb_ot_math_constant_t = 12;
3524pub const HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN: hb_ot_math_constant_t = 13;
3525pub const HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX: hb_ot_math_constant_t = 14;
3526pub const HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN: hb_ot_math_constant_t = 15;
3527pub const HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT: hb_ot_math_constant_t = 16;
3528pub const HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT: hb_ot_math_constant_t = 17;
3529pub const HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN: hb_ot_math_constant_t = 18;
3530pub const HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN: hb_ot_math_constant_t = 19;
3531pub const HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN: hb_ot_math_constant_t = 20;
3532pub const HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN: hb_ot_math_constant_t = 21;
3533pub const HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP: hb_ot_math_constant_t = 22;
3534pub const HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP: hb_ot_math_constant_t = 23;
3535pub const HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN: hb_ot_math_constant_t = 24;
3536pub const HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN: hb_ot_math_constant_t = 25;
3537pub const HB_OT_MATH_CONSTANT_STACK_GAP_MIN: hb_ot_math_constant_t = 26;
3538pub const HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN: hb_ot_math_constant_t = 27;
3539pub const HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP: hb_ot_math_constant_t = 28;
3540pub const HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN: hb_ot_math_constant_t = 29;
3541pub const HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN: hb_ot_math_constant_t = 30;
3542pub const HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN: hb_ot_math_constant_t = 31;
3543pub const HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP: hb_ot_math_constant_t = 32;
3544pub const HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP: hb_ot_math_constant_t = 33;
3545pub const HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN: hb_ot_math_constant_t = 34;
3546pub const HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN: hb_ot_math_constant_t =
3547    35;
3548pub const HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN: hb_ot_math_constant_t = 36;
3549pub const HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN: hb_ot_math_constant_t = 37;
3550pub const HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS: hb_ot_math_constant_t = 38;
3551pub const HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN: hb_ot_math_constant_t = 39;
3552pub const HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN: hb_ot_math_constant_t = 40;
3553pub const HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP: hb_ot_math_constant_t = 41;
3554pub const HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP: hb_ot_math_constant_t = 42;
3555pub const HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP: hb_ot_math_constant_t = 43;
3556pub const HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS: hb_ot_math_constant_t = 44;
3557pub const HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER: hb_ot_math_constant_t = 45;
3558pub const HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP: hb_ot_math_constant_t = 46;
3559pub const HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS: hb_ot_math_constant_t = 47;
3560pub const HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER: hb_ot_math_constant_t = 48;
3561pub const HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP: hb_ot_math_constant_t = 49;
3562pub const HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP: hb_ot_math_constant_t = 50;
3563pub const HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS: hb_ot_math_constant_t = 51;
3564pub const HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER: hb_ot_math_constant_t = 52;
3565pub const HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE: hb_ot_math_constant_t = 53;
3566pub const HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE: hb_ot_math_constant_t = 54;
3567pub const HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT: hb_ot_math_constant_t = 55;
3568#[doc = " hb_ot_math_constant_t:\n\n The 'MATH' table constants specified at\n https://docs.microsoft.com/en-us/typography/opentype/spec/math\n\n Since: 1.3.3"]
3569pub type hb_ot_math_constant_t = ::core::ffi::c_uint;
3570pub const HB_OT_MATH_KERN_TOP_RIGHT: hb_ot_math_kern_t = 0;
3571pub const HB_OT_MATH_KERN_TOP_LEFT: hb_ot_math_kern_t = 1;
3572pub const HB_OT_MATH_KERN_BOTTOM_RIGHT: hb_ot_math_kern_t = 2;
3573pub const HB_OT_MATH_KERN_BOTTOM_LEFT: hb_ot_math_kern_t = 3;
3574#[doc = " hb_ot_math_kern_t:\n\n The math kerning-table types defined for the four corners\n of a glyph.\n\n Since: 1.3.3"]
3575pub type hb_ot_math_kern_t = ::core::ffi::c_uint;
3576#[doc = " hb_ot_math_glyph_variant_t:\n @glyph: The glyph index of the variant\n @advance: The advance width of the variant\n\n Data type to hold math-variant information for a glyph.\n\n Since: 1.3.3"]
3577#[repr(C)]
3578#[derive(Debug, Copy, Clone)]
3579pub struct hb_ot_math_glyph_variant_t {
3580    pub glyph: hb_codepoint_t,
3581    pub advance: hb_position_t,
3582}
3583#[test]
3584fn bindgen_test_layout_hb_ot_math_glyph_variant_t() {
3585    const UNINIT: ::core::mem::MaybeUninit<hb_ot_math_glyph_variant_t> =
3586        ::core::mem::MaybeUninit::uninit();
3587    let ptr = UNINIT.as_ptr();
3588    assert_eq!(
3589        ::core::mem::size_of::<hb_ot_math_glyph_variant_t>(),
3590        8usize,
3591        concat!("Size of: ", stringify!(hb_ot_math_glyph_variant_t))
3592    );
3593    assert_eq!(
3594        ::core::mem::align_of::<hb_ot_math_glyph_variant_t>(),
3595        4usize,
3596        concat!("Alignment of ", stringify!(hb_ot_math_glyph_variant_t))
3597    );
3598    assert_eq!(
3599        unsafe { ::core::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
3600        0usize,
3601        concat!(
3602            "Offset of field: ",
3603            stringify!(hb_ot_math_glyph_variant_t),
3604            "::",
3605            stringify!(glyph)
3606        )
3607    );
3608    assert_eq!(
3609        unsafe { ::core::ptr::addr_of!((*ptr).advance) as usize - ptr as usize },
3610        4usize,
3611        concat!(
3612            "Offset of field: ",
3613            stringify!(hb_ot_math_glyph_variant_t),
3614            "::",
3615            stringify!(advance)
3616        )
3617    );
3618}
3619pub const HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER: hb_ot_math_glyph_part_flags_t = 1;
3620#[doc = " hb_ot_math_glyph_part_flags_t:\n\n Flags for math glyph parts.\n\n Since: 1.3.3"]
3621pub type hb_ot_math_glyph_part_flags_t = ::core::ffi::c_uint;
3622#[doc = " hb_ot_math_glyph_part_t:\n @glyph: The glyph index of the variant part\n @start_connector_length: The length of the connector on the starting side of the variant part\n @end_connector_length: The length of the connector on the ending side of the variant part\n @full_advance: The total advance of the part\n @flags: #hb_ot_math_glyph_part_flags_t flags for the part\n\n Data type to hold information for a \"part\" component of a math-variant glyph.\n Large variants for stretchable math glyphs (such as parentheses) can be constructed\n on the fly from parts.\n\n Since: 1.3.3"]
3623#[repr(C)]
3624#[derive(Debug, Copy, Clone)]
3625pub struct hb_ot_math_glyph_part_t {
3626    pub glyph: hb_codepoint_t,
3627    pub start_connector_length: hb_position_t,
3628    pub end_connector_length: hb_position_t,
3629    pub full_advance: hb_position_t,
3630    pub flags: hb_ot_math_glyph_part_flags_t,
3631}
3632#[test]
3633fn bindgen_test_layout_hb_ot_math_glyph_part_t() {
3634    const UNINIT: ::core::mem::MaybeUninit<hb_ot_math_glyph_part_t> =
3635        ::core::mem::MaybeUninit::uninit();
3636    let ptr = UNINIT.as_ptr();
3637    assert_eq!(
3638        ::core::mem::size_of::<hb_ot_math_glyph_part_t>(),
3639        20usize,
3640        concat!("Size of: ", stringify!(hb_ot_math_glyph_part_t))
3641    );
3642    assert_eq!(
3643        ::core::mem::align_of::<hb_ot_math_glyph_part_t>(),
3644        4usize,
3645        concat!("Alignment of ", stringify!(hb_ot_math_glyph_part_t))
3646    );
3647    assert_eq!(
3648        unsafe { ::core::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
3649        0usize,
3650        concat!(
3651            "Offset of field: ",
3652            stringify!(hb_ot_math_glyph_part_t),
3653            "::",
3654            stringify!(glyph)
3655        )
3656    );
3657    assert_eq!(
3658        unsafe { ::core::ptr::addr_of!((*ptr).start_connector_length) as usize - ptr as usize },
3659        4usize,
3660        concat!(
3661            "Offset of field: ",
3662            stringify!(hb_ot_math_glyph_part_t),
3663            "::",
3664            stringify!(start_connector_length)
3665        )
3666    );
3667    assert_eq!(
3668        unsafe { ::core::ptr::addr_of!((*ptr).end_connector_length) as usize - ptr as usize },
3669        8usize,
3670        concat!(
3671            "Offset of field: ",
3672            stringify!(hb_ot_math_glyph_part_t),
3673            "::",
3674            stringify!(end_connector_length)
3675        )
3676    );
3677    assert_eq!(
3678        unsafe { ::core::ptr::addr_of!((*ptr).full_advance) as usize - ptr as usize },
3679        12usize,
3680        concat!(
3681            "Offset of field: ",
3682            stringify!(hb_ot_math_glyph_part_t),
3683            "::",
3684            stringify!(full_advance)
3685        )
3686    );
3687    assert_eq!(
3688        unsafe { ::core::ptr::addr_of!((*ptr).flags) as usize - ptr as usize },
3689        16usize,
3690        concat!(
3691            "Offset of field: ",
3692            stringify!(hb_ot_math_glyph_part_t),
3693            "::",
3694            stringify!(flags)
3695        )
3696    );
3697}
3698extern "C" {
3699    pub fn hb_ot_math_has_data(face: *mut hb_face_t) -> hb_bool_t;
3700}
3701extern "C" {
3702    pub fn hb_ot_math_get_constant(
3703        font: *mut hb_font_t,
3704        constant: hb_ot_math_constant_t,
3705    ) -> hb_position_t;
3706}
3707extern "C" {
3708    pub fn hb_ot_math_get_glyph_italics_correction(
3709        font: *mut hb_font_t,
3710        glyph: hb_codepoint_t,
3711    ) -> hb_position_t;
3712}
3713extern "C" {
3714    pub fn hb_ot_math_get_glyph_top_accent_attachment(
3715        font: *mut hb_font_t,
3716        glyph: hb_codepoint_t,
3717    ) -> hb_position_t;
3718}
3719extern "C" {
3720    pub fn hb_ot_math_is_glyph_extended_shape(
3721        face: *mut hb_face_t,
3722        glyph: hb_codepoint_t,
3723    ) -> hb_bool_t;
3724}
3725extern "C" {
3726    pub fn hb_ot_math_get_glyph_kerning(
3727        font: *mut hb_font_t,
3728        glyph: hb_codepoint_t,
3729        kern: hb_ot_math_kern_t,
3730        correction_height: hb_position_t,
3731    ) -> hb_position_t;
3732}
3733extern "C" {
3734    pub fn hb_ot_math_get_glyph_variants(
3735        font: *mut hb_font_t,
3736        glyph: hb_codepoint_t,
3737        direction: hb_direction_t,
3738        start_offset: ::core::ffi::c_uint,
3739        variants_count: *mut ::core::ffi::c_uint,
3740        variants: *mut hb_ot_math_glyph_variant_t,
3741    ) -> ::core::ffi::c_uint;
3742}
3743extern "C" {
3744    pub fn hb_ot_math_get_min_connector_overlap(
3745        font: *mut hb_font_t,
3746        direction: hb_direction_t,
3747    ) -> hb_position_t;
3748}
3749extern "C" {
3750    pub fn hb_ot_math_get_glyph_assembly(
3751        font: *mut hb_font_t,
3752        glyph: hb_codepoint_t,
3753        direction: hb_direction_t,
3754        start_offset: ::core::ffi::c_uint,
3755        parts_count: *mut ::core::ffi::c_uint,
3756        parts: *mut hb_ot_math_glyph_part_t,
3757        italics_correction: *mut hb_position_t,
3758    ) -> ::core::ffi::c_uint;
3759}
3760pub const HB_OT_META_TAG_DESIGN_LANGUAGES: hb_ot_meta_tag_t = 1684827751;
3761pub const HB_OT_META_TAG_SUPPORTED_LANGUAGES: hb_ot_meta_tag_t = 1936485991;
3762pub const _HB_OT_META_TAG_MAX_VALUE: hb_ot_meta_tag_t = 2147483647;
3763#[doc = " hb_ot_meta_tag_t:\n @HB_OT_META_TAG_DESIGN_LANGUAGES: Design languages. Text, using only\n Basic Latin (ASCII) characters. Indicates languages and/or scripts\n for the user audiences that the font was primarily designed for.\n @HB_OT_META_TAG_SUPPORTED_LANGUAGES: Supported languages. Text, using\n only Basic Latin (ASCII) characters. Indicates languages and/or scripts\n that the font is declared to be capable of supporting.\n\n Known metadata tags from https://docs.microsoft.com/en-us/typography/opentype/spec/meta\n\n Since: 2.6.0"]
3764pub type hb_ot_meta_tag_t = ::core::ffi::c_uint;
3765extern "C" {
3766    pub fn hb_ot_meta_get_entry_tags(
3767        face: *mut hb_face_t,
3768        start_offset: ::core::ffi::c_uint,
3769        entries_count: *mut ::core::ffi::c_uint,
3770        entries: *mut hb_ot_meta_tag_t,
3771    ) -> ::core::ffi::c_uint;
3772}
3773extern "C" {
3774    pub fn hb_ot_meta_reference_entry(
3775        face: *mut hb_face_t,
3776        meta_tag: hb_ot_meta_tag_t,
3777    ) -> *mut hb_blob_t;
3778}
3779pub const HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER: hb_ot_metrics_tag_t = 1751216995;
3780pub const HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER: hb_ot_metrics_tag_t = 1751413603;
3781pub const HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP: hb_ot_metrics_tag_t = 1751934832;
3782pub const HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT: hb_ot_metrics_tag_t = 1751346273;
3783pub const HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT: hb_ot_metrics_tag_t = 1751346276;
3784pub const HB_OT_METRICS_TAG_VERTICAL_ASCENDER: hb_ot_metrics_tag_t = 1986098019;
3785pub const HB_OT_METRICS_TAG_VERTICAL_DESCENDER: hb_ot_metrics_tag_t = 1986294627;
3786pub const HB_OT_METRICS_TAG_VERTICAL_LINE_GAP: hb_ot_metrics_tag_t = 1986815856;
3787pub const HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE: hb_ot_metrics_tag_t = 1751347827;
3788pub const HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN: hb_ot_metrics_tag_t = 1751347822;
3789pub const HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: hb_ot_metrics_tag_t = 1751347046;
3790pub const HB_OT_METRICS_TAG_VERTICAL_CARET_RISE: hb_ot_metrics_tag_t = 1986228851;
3791pub const HB_OT_METRICS_TAG_VERTICAL_CARET_RUN: hb_ot_metrics_tag_t = 1986228846;
3792pub const HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET: hb_ot_metrics_tag_t = 1986228070;
3793pub const HB_OT_METRICS_TAG_X_HEIGHT: hb_ot_metrics_tag_t = 2020108148;
3794pub const HB_OT_METRICS_TAG_CAP_HEIGHT: hb_ot_metrics_tag_t = 1668311156;
3795pub const HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE: hb_ot_metrics_tag_t = 1935833203;
3796pub const HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE: hb_ot_metrics_tag_t = 1935833459;
3797pub const HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET: hb_ot_metrics_tag_t = 1935833199;
3798pub const HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET: hb_ot_metrics_tag_t = 1935833455;
3799pub const HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE: hb_ot_metrics_tag_t = 1936750707;
3800pub const HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE: hb_ot_metrics_tag_t = 1936750963;
3801pub const HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET: hb_ot_metrics_tag_t = 1936750703;
3802pub const HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET: hb_ot_metrics_tag_t = 1936750959;
3803pub const HB_OT_METRICS_TAG_STRIKEOUT_SIZE: hb_ot_metrics_tag_t = 1937011315;
3804pub const HB_OT_METRICS_TAG_STRIKEOUT_OFFSET: hb_ot_metrics_tag_t = 1937011311;
3805pub const HB_OT_METRICS_TAG_UNDERLINE_SIZE: hb_ot_metrics_tag_t = 1970168947;
3806pub const HB_OT_METRICS_TAG_UNDERLINE_OFFSET: hb_ot_metrics_tag_t = 1970168943;
3807pub const _HB_OT_METRICS_TAG_MAX_VALUE: hb_ot_metrics_tag_t = 2147483647;
3808#[doc = " hb_ot_metrics_tag_t:\n @HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER: horizontal ascender.\n @HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER: horizontal descender.\n @HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP: horizontal line gap.\n @HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT: horizontal clipping ascent.\n @HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT: horizontal clipping descent.\n @HB_OT_METRICS_TAG_VERTICAL_ASCENDER: vertical ascender.\n @HB_OT_METRICS_TAG_VERTICAL_DESCENDER: vertical descender.\n @HB_OT_METRICS_TAG_VERTICAL_LINE_GAP: vertical line gap.\n @HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE: horizontal caret rise.\n @HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN: horizontal caret run.\n @HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: horizontal caret offset.\n @HB_OT_METRICS_TAG_VERTICAL_CARET_RISE: vertical caret rise.\n @HB_OT_METRICS_TAG_VERTICAL_CARET_RUN: vertical caret run.\n @HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET: vertical caret offset.\n @HB_OT_METRICS_TAG_X_HEIGHT: x height.\n @HB_OT_METRICS_TAG_CAP_HEIGHT: cap height.\n @HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE: subscript em x size.\n @HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE: subscript em y size.\n @HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET: subscript em x offset.\n @HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET: subscript em y offset.\n @HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE: superscript em x size.\n @HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE: superscript em y size.\n @HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET: superscript em x offset.\n @HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET: superscript em y offset.\n @HB_OT_METRICS_TAG_STRIKEOUT_SIZE: strikeout size.\n @HB_OT_METRICS_TAG_STRIKEOUT_OFFSET: strikeout offset.\n @HB_OT_METRICS_TAG_UNDERLINE_SIZE: underline size.\n @HB_OT_METRICS_TAG_UNDERLINE_OFFSET: underline offset.\n\n From https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags\n\n Since: 2.6.0"]
3809pub type hb_ot_metrics_tag_t = ::core::ffi::c_uint;
3810extern "C" {
3811    pub fn hb_ot_metrics_get_position(
3812        font: *mut hb_font_t,
3813        metrics_tag: hb_ot_metrics_tag_t,
3814        position: *mut hb_position_t,
3815    ) -> hb_bool_t;
3816}
3817extern "C" {
3818    pub fn hb_ot_metrics_get_variation(
3819        font: *mut hb_font_t,
3820        metrics_tag: hb_ot_metrics_tag_t,
3821    ) -> ::core::ffi::c_float;
3822}
3823extern "C" {
3824    pub fn hb_ot_metrics_get_x_variation(
3825        font: *mut hb_font_t,
3826        metrics_tag: hb_ot_metrics_tag_t,
3827    ) -> hb_position_t;
3828}
3829extern "C" {
3830    pub fn hb_ot_metrics_get_y_variation(
3831        font: *mut hb_font_t,
3832        metrics_tag: hb_ot_metrics_tag_t,
3833    ) -> hb_position_t;
3834}
3835extern "C" {
3836    pub fn hb_ot_shape_glyphs_closure(
3837        font: *mut hb_font_t,
3838        buffer: *mut hb_buffer_t,
3839        features: *const hb_feature_t,
3840        num_features: ::core::ffi::c_uint,
3841        glyphs: *mut hb_set_t,
3842    );
3843}
3844extern "C" {
3845    pub fn hb_ot_shape_plan_collect_lookups(
3846        shape_plan: *mut hb_shape_plan_t,
3847        table_tag: hb_tag_t,
3848        lookup_indexes: *mut hb_set_t,
3849    );
3850}
3851extern "C" {
3852    pub fn hb_ot_var_has_data(face: *mut hb_face_t) -> hb_bool_t;
3853}
3854extern "C" {
3855    pub fn hb_ot_var_get_axis_count(face: *mut hb_face_t) -> ::core::ffi::c_uint;
3856}
3857pub const HB_OT_VAR_AXIS_FLAG_HIDDEN: hb_ot_var_axis_flags_t = 1;
3858pub const _HB_OT_VAR_AXIS_FLAG_MAX_VALUE: hb_ot_var_axis_flags_t = 2147483647;
3859#[doc = " hb_ot_var_axis_flags_t:\n @HB_OT_VAR_AXIS_FLAG_HIDDEN: The axis should not be exposed directly in user interfaces.\n\n Since: 2.2.0"]
3860pub type hb_ot_var_axis_flags_t = ::core::ffi::c_uint;
3861#[doc = " hb_ot_var_axis_info_t:\n @axis_index: Index of the axis in the variation-axis array\n @tag: The #hb_tag_t tag identifying the design variation of the axis\n @name_id: The `name` table Name ID that provides display names for the axis\n @flags: The #hb_ot_var_axis_flags_t flags for the axis\n @min_value: The mininum value on the variation axis that the font covers\n @default_value: The position on the variation axis corresponding to the font's defaults\n @max_value: The maximum value on the variation axis that the font covers\n\n Data type for holding variation-axis values.\n\n The minimum, default, and maximum values are in un-normalized, user scales.\n\n <note>Note: at present, the only flag defined for @flags is\n #HB_OT_VAR_AXIS_FLAG_HIDDEN.</note>\n\n Since: 2.2.0"]
3862#[repr(C)]
3863#[derive(Debug, Copy, Clone)]
3864pub struct hb_ot_var_axis_info_t {
3865    pub axis_index: ::core::ffi::c_uint,
3866    pub tag: hb_tag_t,
3867    pub name_id: hb_ot_name_id_t,
3868    pub flags: hb_ot_var_axis_flags_t,
3869    pub min_value: ::core::ffi::c_float,
3870    pub default_value: ::core::ffi::c_float,
3871    pub max_value: ::core::ffi::c_float,
3872    pub reserved: ::core::ffi::c_uint,
3873}
3874#[test]
3875fn bindgen_test_layout_hb_ot_var_axis_info_t() {
3876    const UNINIT: ::core::mem::MaybeUninit<hb_ot_var_axis_info_t> =
3877        ::core::mem::MaybeUninit::uninit();
3878    let ptr = UNINIT.as_ptr();
3879    assert_eq!(
3880        ::core::mem::size_of::<hb_ot_var_axis_info_t>(),
3881        32usize,
3882        concat!("Size of: ", stringify!(hb_ot_var_axis_info_t))
3883    );
3884    assert_eq!(
3885        ::core::mem::align_of::<hb_ot_var_axis_info_t>(),
3886        4usize,
3887        concat!("Alignment of ", stringify!(hb_ot_var_axis_info_t))
3888    );
3889    assert_eq!(
3890        unsafe { ::core::ptr::addr_of!((*ptr).axis_index) as usize - ptr as usize },
3891        0usize,
3892        concat!(
3893            "Offset of field: ",
3894            stringify!(hb_ot_var_axis_info_t),
3895            "::",
3896            stringify!(axis_index)
3897        )
3898    );
3899    assert_eq!(
3900        unsafe { ::core::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
3901        4usize,
3902        concat!(
3903            "Offset of field: ",
3904            stringify!(hb_ot_var_axis_info_t),
3905            "::",
3906            stringify!(tag)
3907        )
3908    );
3909    assert_eq!(
3910        unsafe { ::core::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
3911        8usize,
3912        concat!(
3913            "Offset of field: ",
3914            stringify!(hb_ot_var_axis_info_t),
3915            "::",
3916            stringify!(name_id)
3917        )
3918    );
3919    assert_eq!(
3920        unsafe { ::core::ptr::addr_of!((*ptr).flags) as usize - ptr as usize },
3921        12usize,
3922        concat!(
3923            "Offset of field: ",
3924            stringify!(hb_ot_var_axis_info_t),
3925            "::",
3926            stringify!(flags)
3927        )
3928    );
3929    assert_eq!(
3930        unsafe { ::core::ptr::addr_of!((*ptr).min_value) as usize - ptr as usize },
3931        16usize,
3932        concat!(
3933            "Offset of field: ",
3934            stringify!(hb_ot_var_axis_info_t),
3935            "::",
3936            stringify!(min_value)
3937        )
3938    );
3939    assert_eq!(
3940        unsafe { ::core::ptr::addr_of!((*ptr).default_value) as usize - ptr as usize },
3941        20usize,
3942        concat!(
3943            "Offset of field: ",
3944            stringify!(hb_ot_var_axis_info_t),
3945            "::",
3946            stringify!(default_value)
3947        )
3948    );
3949    assert_eq!(
3950        unsafe { ::core::ptr::addr_of!((*ptr).max_value) as usize - ptr as usize },
3951        24usize,
3952        concat!(
3953            "Offset of field: ",
3954            stringify!(hb_ot_var_axis_info_t),
3955            "::",
3956            stringify!(max_value)
3957        )
3958    );
3959    assert_eq!(
3960        unsafe { ::core::ptr::addr_of!((*ptr).reserved) as usize - ptr as usize },
3961        28usize,
3962        concat!(
3963            "Offset of field: ",
3964            stringify!(hb_ot_var_axis_info_t),
3965            "::",
3966            stringify!(reserved)
3967        )
3968    );
3969}
3970extern "C" {
3971    pub fn hb_ot_var_get_axis_infos(
3972        face: *mut hb_face_t,
3973        start_offset: ::core::ffi::c_uint,
3974        axes_count: *mut ::core::ffi::c_uint,
3975        axes_array: *mut hb_ot_var_axis_info_t,
3976    ) -> ::core::ffi::c_uint;
3977}
3978extern "C" {
3979    pub fn hb_ot_var_find_axis_info(
3980        face: *mut hb_face_t,
3981        axis_tag: hb_tag_t,
3982        axis_info: *mut hb_ot_var_axis_info_t,
3983    ) -> hb_bool_t;
3984}
3985extern "C" {
3986    pub fn hb_ot_var_get_named_instance_count(face: *mut hb_face_t) -> ::core::ffi::c_uint;
3987}
3988extern "C" {
3989    pub fn hb_ot_var_named_instance_get_subfamily_name_id(
3990        face: *mut hb_face_t,
3991        instance_index: ::core::ffi::c_uint,
3992    ) -> hb_ot_name_id_t;
3993}
3994extern "C" {
3995    pub fn hb_ot_var_named_instance_get_postscript_name_id(
3996        face: *mut hb_face_t,
3997        instance_index: ::core::ffi::c_uint,
3998    ) -> hb_ot_name_id_t;
3999}
4000extern "C" {
4001    pub fn hb_ot_var_named_instance_get_design_coords(
4002        face: *mut hb_face_t,
4003        instance_index: ::core::ffi::c_uint,
4004        coords_length: *mut ::core::ffi::c_uint,
4005        coords: *mut ::core::ffi::c_float,
4006    ) -> ::core::ffi::c_uint;
4007}
4008extern "C" {
4009    pub fn hb_ot_var_normalize_variations(
4010        face: *mut hb_face_t,
4011        variations: *const hb_variation_t,
4012        variations_length: ::core::ffi::c_uint,
4013        coords: *mut ::core::ffi::c_int,
4014        coords_length: ::core::ffi::c_uint,
4015    );
4016}
4017extern "C" {
4018    pub fn hb_ot_var_normalize_coords(
4019        face: *mut hb_face_t,
4020        coords_length: ::core::ffi::c_uint,
4021        design_coords: *const ::core::ffi::c_float,
4022        normalized_coords: *mut ::core::ffi::c_int,
4023    );
4024}
4025pub const HB_AAT_LAYOUT_FEATURE_TYPE_INVALID: hb_aat_layout_feature_type_t = 65535;
4026pub const HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC: hb_aat_layout_feature_type_t = 0;
4027pub const HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES: hb_aat_layout_feature_type_t = 1;
4028pub const HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION: hb_aat_layout_feature_type_t = 2;
4029pub const HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE: hb_aat_layout_feature_type_t = 3;
4030pub const HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION: hb_aat_layout_feature_type_t = 4;
4031pub const HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT: hb_aat_layout_feature_type_t = 5;
4032pub const HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING: hb_aat_layout_feature_type_t = 6;
4033pub const HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE: hb_aat_layout_feature_type_t = 8;
4034pub const HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE: hb_aat_layout_feature_type_t = 9;
4035pub const HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION: hb_aat_layout_feature_type_t = 10;
4036pub const HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS: hb_aat_layout_feature_type_t = 11;
4037pub const HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE: hb_aat_layout_feature_type_t = 13;
4038pub const HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS: hb_aat_layout_feature_type_t = 14;
4039pub const HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS: hb_aat_layout_feature_type_t = 15;
4040pub const HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE: hb_aat_layout_feature_type_t = 16;
4041pub const HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES: hb_aat_layout_feature_type_t = 17;
4042pub const HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE: hb_aat_layout_feature_type_t = 18;
4043pub const HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS: hb_aat_layout_feature_type_t = 19;
4044pub const HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE: hb_aat_layout_feature_type_t = 20;
4045pub const HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE: hb_aat_layout_feature_type_t = 21;
4046pub const HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING: hb_aat_layout_feature_type_t = 22;
4047pub const HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION: hb_aat_layout_feature_type_t = 23;
4048pub const HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE: hb_aat_layout_feature_type_t = 24;
4049pub const HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE: hb_aat_layout_feature_type_t = 25;
4050pub const HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE: hb_aat_layout_feature_type_t = 26;
4051pub const HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE: hb_aat_layout_feature_type_t = 27;
4052pub const HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA: hb_aat_layout_feature_type_t = 28;
4053pub const HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE: hb_aat_layout_feature_type_t =
4054    29;
4055pub const HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE: hb_aat_layout_feature_type_t =
4056    30;
4057pub const HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE:
4058    hb_aat_layout_feature_type_t = 31;
4059pub const HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN: hb_aat_layout_feature_type_t = 32;
4060pub const HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT: hb_aat_layout_feature_type_t = 33;
4061pub const HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA: hb_aat_layout_feature_type_t = 34;
4062pub const HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES: hb_aat_layout_feature_type_t = 35;
4063pub const HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES: hb_aat_layout_feature_type_t = 36;
4064pub const HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE: hb_aat_layout_feature_type_t = 37;
4065pub const HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE: hb_aat_layout_feature_type_t = 38;
4066pub const HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE: hb_aat_layout_feature_type_t = 39;
4067pub const HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE: hb_aat_layout_feature_type_t = 103;
4068pub const _HB_AAT_LAYOUT_FEATURE_TYPE_MAX_VALUE: hb_aat_layout_feature_type_t = 2147483647;
4069#[doc = " hb_aat_layout_feature_type_t:\n @HB_AAT_LAYOUT_FEATURE_TYPE_INVALID: Initial, unset feature type\n @HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC:\n @HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CURISVE_CONNECTION:\n @HB_AAT_LAYOUT_FEATURE_TYPE_LETTER_CASE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION:\n @HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT:\n @HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING:\n @HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION:\n @HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS:\n @HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS:\n @HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS:\n @HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES:\n @HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING:\n @HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION:\n @HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT:\n @HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA:\n @HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES:\n @HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_LANGUAGE_TAG_TYPE:\n @HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE:\n\n The possible feature types defined for AAT shaping.\n\n Since: 2.2.0"]
4070pub type hb_aat_layout_feature_type_t = ::core::ffi::c_uint;
4071pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID: hb_aat_layout_feature_selector_t = 65535;
4072pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_ON: hb_aat_layout_feature_selector_t = 0;
4073pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_OFF: hb_aat_layout_feature_selector_t =
4074    1;
4075pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4076    0;
4077pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF: hb_aat_layout_feature_selector_t =
4078    1;
4079pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_ON: hb_aat_layout_feature_selector_t = 2;
4080pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_OFF: hb_aat_layout_feature_selector_t = 3;
4081pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_ON: hb_aat_layout_feature_selector_t = 4;
4082pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_OFF: hb_aat_layout_feature_selector_t = 5;
4083pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_ON: hb_aat_layout_feature_selector_t = 6;
4084pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_OFF: hb_aat_layout_feature_selector_t = 7;
4085pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_ON: hb_aat_layout_feature_selector_t = 8;
4086pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_OFF: hb_aat_layout_feature_selector_t = 9;
4087pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4088    10;
4089pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_OFF: hb_aat_layout_feature_selector_t =
4090    11;
4091pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4092    12;
4093pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_OFF: hb_aat_layout_feature_selector_t =
4094    13;
4095pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_ON:
4096    hb_aat_layout_feature_selector_t = 14;
4097pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_OFF:
4098    hb_aat_layout_feature_selector_t = 15;
4099pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_ON: hb_aat_layout_feature_selector_t = 16;
4100pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_OFF: hb_aat_layout_feature_selector_t =
4101    17;
4102pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4103    18;
4104pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF:
4105    hb_aat_layout_feature_selector_t = 19;
4106pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4107    20;
4108pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF:
4109    hb_aat_layout_feature_selector_t = 21;
4110pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_UNCONNECTED: hb_aat_layout_feature_selector_t = 0;
4111pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PARTIALLY_CONNECTED: hb_aat_layout_feature_selector_t = 1;
4112pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CURSIVE: hb_aat_layout_feature_selector_t = 2;
4113pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_AND_LOWER_CASE: hb_aat_layout_feature_selector_t = 0;
4114pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_CAPS: hb_aat_layout_feature_selector_t = 1;
4115pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_LOWER_CASE: hb_aat_layout_feature_selector_t = 2;
4116pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS: hb_aat_layout_feature_selector_t = 3;
4117pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS: hb_aat_layout_feature_selector_t = 4;
4118pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS_AND_SMALL_CAPS:
4119    hb_aat_layout_feature_selector_t = 5;
4120pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON:
4121    hb_aat_layout_feature_selector_t = 0;
4122pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF:
4123    hb_aat_layout_feature_selector_t = 1;
4124pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_ON:
4125    hb_aat_layout_feature_selector_t = 0;
4126pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_OFF:
4127    hb_aat_layout_feature_selector_t = 1;
4128pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_NUMBERS: hb_aat_layout_feature_selector_t = 0;
4129pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_NUMBERS: hb_aat_layout_feature_selector_t = 1;
4130pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_NUMBERS: hb_aat_layout_feature_selector_t = 2;
4131pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_NUMBERS: hb_aat_layout_feature_selector_t =
4132    3;
4133pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_ON: hb_aat_layout_feature_selector_t =
4134    0;
4135pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_OFF:
4136    hb_aat_layout_feature_selector_t = 1;
4137pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_ON: hb_aat_layout_feature_selector_t =
4138    2;
4139pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_OFF: hb_aat_layout_feature_selector_t =
4140    3;
4141pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_ON: hb_aat_layout_feature_selector_t =
4142    4;
4143pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_OFF:
4144    hb_aat_layout_feature_selector_t = 5;
4145pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_ON: hb_aat_layout_feature_selector_t =
4146    6;
4147pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_OFF: hb_aat_layout_feature_selector_t =
4148    7;
4149pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_ON: hb_aat_layout_feature_selector_t = 8;
4150pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_OFF: hb_aat_layout_feature_selector_t =
4151    9;
4152pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SHOW_DIACRITICS: hb_aat_layout_feature_selector_t = 0;
4153pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HIDE_DIACRITICS: hb_aat_layout_feature_selector_t = 1;
4154pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DECOMPOSE_DIACRITICS: hb_aat_layout_feature_selector_t = 2;
4155pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION: hb_aat_layout_feature_selector_t = 0;
4156pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SUPERIORS: hb_aat_layout_feature_selector_t = 1;
4157pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INFERIORS: hb_aat_layout_feature_selector_t = 2;
4158pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ORDINALS: hb_aat_layout_feature_selector_t = 3;
4159pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SCIENTIFIC_INFERIORS: hb_aat_layout_feature_selector_t = 4;
4160pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS: hb_aat_layout_feature_selector_t = 0;
4161pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_VERTICAL_FRACTIONS: hb_aat_layout_feature_selector_t = 1;
4162pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS: hb_aat_layout_feature_selector_t = 2;
4163pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_ON: hb_aat_layout_feature_selector_t = 0;
4164pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_OFF: hb_aat_layout_feature_selector_t = 1;
4165pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_ON: hb_aat_layout_feature_selector_t =
4166    0;
4167pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_OFF: hb_aat_layout_feature_selector_t =
4168    1;
4169pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_ON: hb_aat_layout_feature_selector_t = 2;
4170pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_OFF: hb_aat_layout_feature_selector_t =
4171    3;
4172pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON: hb_aat_layout_feature_selector_t = 4;
4173pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF: hb_aat_layout_feature_selector_t = 5;
4174pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_ON: hb_aat_layout_feature_selector_t = 6;
4175pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_OFF: hb_aat_layout_feature_selector_t = 7;
4176pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_ON: hb_aat_layout_feature_selector_t = 8;
4177pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_OFF: hb_aat_layout_feature_selector_t = 9;
4178pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_ON: hb_aat_layout_feature_selector_t =
4179    10;
4180pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_OFF: hb_aat_layout_feature_selector_t =
4181    11;
4182pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_ON: hb_aat_layout_feature_selector_t = 0;
4183pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_OFF: hb_aat_layout_feature_selector_t = 1;
4184pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_ON: hb_aat_layout_feature_selector_t =
4185    2;
4186pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_OFF:
4187    hb_aat_layout_feature_selector_t = 3;
4188pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_ON: hb_aat_layout_feature_selector_t = 4;
4189pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_OFF: hb_aat_layout_feature_selector_t = 5;
4190pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_ON: hb_aat_layout_feature_selector_t =
4191    6;
4192pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_OFF:
4193    hb_aat_layout_feature_selector_t = 7;
4194pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_ON: hb_aat_layout_feature_selector_t = 8;
4195pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_OFF: hb_aat_layout_feature_selector_t = 9;
4196pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON: hb_aat_layout_feature_selector_t =
4197    10;
4198pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF: hb_aat_layout_feature_selector_t =
4199    11;
4200pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ORNAMENTS: hb_aat_layout_feature_selector_t = 0;
4201pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DINGBATS: hb_aat_layout_feature_selector_t = 1;
4202pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PI_CHARACTERS: hb_aat_layout_feature_selector_t = 2;
4203pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FLEURONS: hb_aat_layout_feature_selector_t = 3;
4204pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DECORATIVE_BORDERS: hb_aat_layout_feature_selector_t = 4;
4205pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INTERNATIONAL_SYMBOLS: hb_aat_layout_feature_selector_t =
4206    5;
4207pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_MATH_SYMBOLS: hb_aat_layout_feature_selector_t = 6;
4208pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ALTERNATES: hb_aat_layout_feature_selector_t = 0;
4209pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL1: hb_aat_layout_feature_selector_t = 0;
4210pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL2: hb_aat_layout_feature_selector_t = 1;
4211pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL3: hb_aat_layout_feature_selector_t = 2;
4212pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL4: hb_aat_layout_feature_selector_t = 3;
4213pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL5: hb_aat_layout_feature_selector_t = 4;
4214pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLE_OPTIONS: hb_aat_layout_feature_selector_t = 0;
4215pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DISPLAY_TEXT: hb_aat_layout_feature_selector_t = 1;
4216pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ENGRAVED_TEXT: hb_aat_layout_feature_selector_t = 2;
4217pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ILLUMINATED_CAPS: hb_aat_layout_feature_selector_t = 3;
4218pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TITLING_CAPS: hb_aat_layout_feature_selector_t = 4;
4219pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TALL_CAPS: hb_aat_layout_feature_selector_t = 5;
4220pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_CHARACTERS: hb_aat_layout_feature_selector_t =
4221    0;
4222pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS: hb_aat_layout_feature_selector_t =
4223    1;
4224pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1978_CHARACTERS: hb_aat_layout_feature_selector_t = 2;
4225pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1983_CHARACTERS: hb_aat_layout_feature_selector_t = 3;
4226pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1990_CHARACTERS: hb_aat_layout_feature_selector_t = 4;
4227pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_ONE: hb_aat_layout_feature_selector_t = 5;
4228pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_TWO: hb_aat_layout_feature_selector_t = 6;
4229pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_THREE: hb_aat_layout_feature_selector_t =
4230    7;
4231pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FOUR: hb_aat_layout_feature_selector_t = 8;
4232pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FIVE: hb_aat_layout_feature_selector_t = 9;
4233pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPERT_CHARACTERS: hb_aat_layout_feature_selector_t = 10;
4234pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS2004_CHARACTERS: hb_aat_layout_feature_selector_t = 11;
4235pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HOJO_CHARACTERS: hb_aat_layout_feature_selector_t = 12;
4236pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NLCCHARACTERS: hb_aat_layout_feature_selector_t = 13;
4237pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS:
4238    hb_aat_layout_feature_selector_t = 14;
4239pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_NUMBERS: hb_aat_layout_feature_selector_t = 0;
4240pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_NUMBERS: hb_aat_layout_feature_selector_t = 1;
4241pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT: hb_aat_layout_feature_selector_t = 0;
4242pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT: hb_aat_layout_feature_selector_t = 1;
4243pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_TEXT: hb_aat_layout_feature_selector_t = 2;
4244pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_TEXT: hb_aat_layout_feature_selector_t = 3;
4245pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_TEXT: hb_aat_layout_feature_selector_t = 4;
4246pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT: hb_aat_layout_feature_selector_t =
4247    5;
4248pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT: hb_aat_layout_feature_selector_t = 6;
4249pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION: hb_aat_layout_feature_selector_t = 0;
4250pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL: hb_aat_layout_feature_selector_t = 1;
4251pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HIRAGANA_TO_KATAKANA: hb_aat_layout_feature_selector_t = 2;
4252pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_KATAKANA_TO_HIRAGANA: hb_aat_layout_feature_selector_t = 3;
4253pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_KANA_TO_ROMANIZATION: hb_aat_layout_feature_selector_t = 4;
4254pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_HIRAGANA:
4255    hb_aat_layout_feature_selector_t = 5;
4256pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_KATAKANA:
4257    hb_aat_layout_feature_selector_t = 6;
4258pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_ONE: hb_aat_layout_feature_selector_t =
4259    7;
4260pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_TWO: hb_aat_layout_feature_selector_t =
4261    8;
4262pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_THREE:
4263    hb_aat_layout_feature_selector_t = 9;
4264pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ANNOTATION: hb_aat_layout_feature_selector_t = 0;
4265pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_BOX_ANNOTATION: hb_aat_layout_feature_selector_t = 1;
4266pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ROUNDED_BOX_ANNOTATION: hb_aat_layout_feature_selector_t =
4267    2;
4268pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CIRCLE_ANNOTATION: hb_aat_layout_feature_selector_t = 3;
4269pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_CIRCLE_ANNOTATION:
4270    hb_aat_layout_feature_selector_t = 4;
4271pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PARENTHESIS_ANNOTATION: hb_aat_layout_feature_selector_t =
4272    5;
4273pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIOD_ANNOTATION: hb_aat_layout_feature_selector_t = 6;
4274pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMAN_NUMERAL_ANNOTATION:
4275    hb_aat_layout_feature_selector_t = 7;
4276pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAMOND_ANNOTATION: hb_aat_layout_feature_selector_t = 8;
4277pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_BOX_ANNOTATION: hb_aat_layout_feature_selector_t =
4278    9;
4279pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_ROUNDED_BOX_ANNOTATION:
4280    hb_aat_layout_feature_selector_t = 10;
4281pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_KANA: hb_aat_layout_feature_selector_t = 0;
4282pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_KANA: hb_aat_layout_feature_selector_t = 1;
4283pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_IDEOGRAPHS: hb_aat_layout_feature_selector_t =
4284    0;
4285pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_IDEOGRAPHS: hb_aat_layout_feature_selector_t =
4286    1;
4287pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_IDEOGRAPHS: hb_aat_layout_feature_selector_t =
4288    2;
4289pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_ON:
4290    hb_aat_layout_feature_selector_t = 0;
4291pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_OFF:
4292    hb_aat_layout_feature_selector_t = 1;
4293pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_ON:
4294    hb_aat_layout_feature_selector_t = 2;
4295pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_OFF:
4296    hb_aat_layout_feature_selector_t = 3;
4297pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_ON:
4298    hb_aat_layout_feature_selector_t = 4;
4299pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_OFF:
4300    hb_aat_layout_feature_selector_t = 5;
4301pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_RUBY_KANA: hb_aat_layout_feature_selector_t = 0;
4302pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA: hb_aat_layout_feature_selector_t = 1;
4303pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON: hb_aat_layout_feature_selector_t = 2;
4304pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF: hb_aat_layout_feature_selector_t = 3;
4305pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_SYMBOL_ALTERNATIVES:
4306    hb_aat_layout_feature_selector_t = 0;
4307pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_ONE: hb_aat_layout_feature_selector_t = 1;
4308pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_TWO: hb_aat_layout_feature_selector_t = 2;
4309pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_THREE: hb_aat_layout_feature_selector_t = 3;
4310pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FOUR: hb_aat_layout_feature_selector_t = 4;
4311pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FIVE: hb_aat_layout_feature_selector_t = 5;
4312pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_IDEOGRAPHIC_ALTERNATIVES:
4313    hb_aat_layout_feature_selector_t = 0;
4314pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_ONE: hb_aat_layout_feature_selector_t = 1;
4315pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_TWO: hb_aat_layout_feature_selector_t = 2;
4316pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_THREE: hb_aat_layout_feature_selector_t =
4317    3;
4318pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FOUR: hb_aat_layout_feature_selector_t = 4;
4319pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FIVE: hb_aat_layout_feature_selector_t = 5;
4320pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_CENTERED:
4321    hb_aat_layout_feature_selector_t = 0;
4322pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_HBASELINE:
4323    hb_aat_layout_feature_selector_t = 1;
4324pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_ITALIC_ROMAN: hb_aat_layout_feature_selector_t = 0;
4325pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN: hb_aat_layout_feature_selector_t = 1;
4326pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON: hb_aat_layout_feature_selector_t = 2;
4327pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF: hb_aat_layout_feature_selector_t = 3;
4328pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON:
4329    hb_aat_layout_feature_selector_t = 0;
4330pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF:
4331    hb_aat_layout_feature_selector_t = 1;
4332pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON:
4333    hb_aat_layout_feature_selector_t = 2;
4334pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF:
4335    hb_aat_layout_feature_selector_t = 3;
4336pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON: hb_aat_layout_feature_selector_t =
4337    0;
4338pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF:
4339    hb_aat_layout_feature_selector_t = 1;
4340pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON: hb_aat_layout_feature_selector_t =
4341    2;
4342pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF: hb_aat_layout_feature_selector_t =
4343    3;
4344pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLISTIC_ALTERNATES: hb_aat_layout_feature_selector_t =
4345    0;
4346pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON: hb_aat_layout_feature_selector_t = 2;
4347pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF: hb_aat_layout_feature_selector_t =
4348    3;
4349pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON: hb_aat_layout_feature_selector_t = 4;
4350pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF: hb_aat_layout_feature_selector_t =
4351    5;
4352pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON: hb_aat_layout_feature_selector_t =
4353    6;
4354pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF: hb_aat_layout_feature_selector_t =
4355    7;
4356pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON: hb_aat_layout_feature_selector_t =
4357    8;
4358pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF: hb_aat_layout_feature_selector_t =
4359    9;
4360pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON: hb_aat_layout_feature_selector_t =
4361    10;
4362pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF: hb_aat_layout_feature_selector_t =
4363    11;
4364pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON: hb_aat_layout_feature_selector_t =
4365    12;
4366pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF: hb_aat_layout_feature_selector_t =
4367    13;
4368pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON: hb_aat_layout_feature_selector_t =
4369    14;
4370pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF: hb_aat_layout_feature_selector_t =
4371    15;
4372pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON: hb_aat_layout_feature_selector_t =
4373    16;
4374pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF: hb_aat_layout_feature_selector_t =
4375    17;
4376pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON: hb_aat_layout_feature_selector_t =
4377    18;
4378pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF: hb_aat_layout_feature_selector_t =
4379    19;
4380pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON: hb_aat_layout_feature_selector_t =
4381    20;
4382pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF: hb_aat_layout_feature_selector_t =
4383    21;
4384pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON: hb_aat_layout_feature_selector_t =
4385    22;
4386pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF:
4387    hb_aat_layout_feature_selector_t = 23;
4388pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON: hb_aat_layout_feature_selector_t =
4389    24;
4390pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF:
4391    hb_aat_layout_feature_selector_t = 25;
4392pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON:
4393    hb_aat_layout_feature_selector_t = 26;
4394pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF:
4395    hb_aat_layout_feature_selector_t = 27;
4396pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON:
4397    hb_aat_layout_feature_selector_t = 28;
4398pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF:
4399    hb_aat_layout_feature_selector_t = 29;
4400pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON:
4401    hb_aat_layout_feature_selector_t = 30;
4402pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF:
4403    hb_aat_layout_feature_selector_t = 31;
4404pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON:
4405    hb_aat_layout_feature_selector_t = 32;
4406pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF:
4407    hb_aat_layout_feature_selector_t = 33;
4408pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON:
4409    hb_aat_layout_feature_selector_t = 34;
4410pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF:
4411    hb_aat_layout_feature_selector_t = 35;
4412pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON:
4413    hb_aat_layout_feature_selector_t = 36;
4414pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF:
4415    hb_aat_layout_feature_selector_t = 37;
4416pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON:
4417    hb_aat_layout_feature_selector_t = 38;
4418pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF:
4419    hb_aat_layout_feature_selector_t = 39;
4420pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON: hb_aat_layout_feature_selector_t =
4421    40;
4422pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF:
4423    hb_aat_layout_feature_selector_t = 41;
4424pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON:
4425    hb_aat_layout_feature_selector_t = 0;
4426pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF:
4427    hb_aat_layout_feature_selector_t = 1;
4428pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_ON: hb_aat_layout_feature_selector_t = 2;
4429pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_OFF: hb_aat_layout_feature_selector_t = 3;
4430pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON:
4431    hb_aat_layout_feature_selector_t = 4;
4432pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF:
4433    hb_aat_layout_feature_selector_t = 5;
4434pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE: hb_aat_layout_feature_selector_t = 0;
4435pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS: hb_aat_layout_feature_selector_t =
4436    1;
4437pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS: hb_aat_layout_feature_selector_t =
4438    2;
4439pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE: hb_aat_layout_feature_selector_t = 0;
4440pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS: hb_aat_layout_feature_selector_t =
4441    1;
4442pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS: hb_aat_layout_feature_selector_t =
4443    2;
4444pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_CJK_ROMAN: hb_aat_layout_feature_selector_t = 0;
4445pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_CJK_ROMAN: hb_aat_layout_feature_selector_t =
4446    1;
4447pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_CJK_ROMAN: hb_aat_layout_feature_selector_t = 2;
4448pub const HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN: hb_aat_layout_feature_selector_t = 3;
4449pub const _HB_AAT_LAYOUT_FEATURE_SELECTOR_MAX_VALUE: hb_aat_layout_feature_selector_t = 2147483647;
4450#[doc = " hb_aat_layout_feature_selector_t:\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INVALID: Initial, unset feature selector\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_TYPE_FEATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALL_TYPOGRAPHIC\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_COMMON_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_RARE_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LOGOS_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_REBUS_PICTURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DIPHTHONG_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SQUARED_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SYMBOL_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_UNCONNECTED: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PARTIALLY_CONNECTED: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CURSIVE: for #HB_AAT_LAYOUT_FEATURE_TYPE_LIGATURES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_AND_LOWER_CASE: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_CAPS: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALL_LOWER_CASE: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SMALL_CAPS: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INITIAL_CAPS_AND_SMALL_CAPS: Deprecated\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_SUBSTITUTION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_LINGUISTIC_REARRANGEMENT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_INITIAL_SWASHES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_WORD_FINAL_SWASHES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_INITIAL_SWASHES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LINE_FINAL_SWASHES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NON_FINAL_SWASHES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_SMART_SWASH_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SHOW_DIACRITICS: for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HIDE_DIACRITICS: for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DECOMPOSE_DIACRITICS: for #HB_AAT_LAYOUT_FEATURE_TYPE_DIACRITICS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NORMAL_POSITION: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SUPERIORS: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INFERIORS: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ORDINALS: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SCIENTIFIC_INFERIORS: for #HB_AAT_LAYOUT_FEATURE_TYPE_VERTICAL_POSITION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_FRACTIONS: for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_VERTICAL_FRACTIONS: for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAGONAL_FRACTIONS: for #HB_AAT_LAYOUT_FEATURE_TYPE_FRACTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PREVENT_OVERLAP_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASHED_ZERO_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FORM_INTERROBANG_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SMART_QUOTES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_TYPOGRAPHIC_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HYPHEN_TO_MINUS_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SLASH_TO_DIVIDE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INEQUALITY_LIGATURES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPONENTS_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_MATHEMATICAL_EXTRAS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ORNAMENTS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DINGBATS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PI_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FLEURONS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DECORATIVE_BORDERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INTERNATIONAL_SYMBOLS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_MATH_SYMBOLS: for #HB_AAT_LAYOUT_FEATURE_TYPE_ORNAMENT_SETS_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ALTERNATES: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL1: for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL2: for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL3: for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL4: for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DESIGN_LEVEL5: for #HB_AAT_LAYOUT_FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLE_OPTIONS: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DISPLAY_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ENGRAVED_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ILLUMINATED_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TITLING_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TALL_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLE_OPTIONS\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1978_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1983_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS1990_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_ONE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_TWO: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_THREE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FOUR: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_ALT_FIVE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_EXPERT_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_JIS2004_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HOJO_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NLCCHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_CHARACTER_SHAPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_NUMBERS: for #HB_AAT_LAYOUT_FEATURE_TYPE_NUMBER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_MONOSPACED_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_THIRD_WIDTH_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_QUARTER_WIDTH_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT: for #HB_AAT_LAYOUT_FEATURE_TYPE_TEXT_SPACING\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_TRANSLITERATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HIRAGANA_TO_KATAKANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_KATAKANA_TO_HIRAGANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_KANA_TO_ROMANIZATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_HIRAGANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMANIZATION_TO_KATAKANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_ONE: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_TWO: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_THREE: for #HB_AAT_LAYOUT_FEATURE_TYPE_TRANSLITERATION\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_BOX_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ROUNDED_BOX_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CIRCLE_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_CIRCLE_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PARENTHESIS_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PERIOD_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ROMAN_NUMERAL_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DIAMOND_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_BOX_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_INVERTED_ROUNDED_BOX_ANNOTATION: for #HB_AAT_LAYOUT_FEATURE_TYPE_ANNOTATION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_KANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_KANA: for #HB_AAT_LAYOUT_FEATURE_TYPE_KANA_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_IDEOGRAPHS: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_IDEOGRAPHS: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_IDEOGRAPHS: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CANONICAL_COMPOSITION_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_TRANSCODING_COMPOSITION_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_RUBY_KANA: Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF instead\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA: Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON instead\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_RUBY_KANA_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_RUBY_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_SYMBOL_ALTERNATIVES: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_ONE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_TWO: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_THREE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FOUR: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_SYMBOL_ALT_FIVE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_IDEOGRAPHIC_ALTERNATIVES: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_ONE: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_TWO: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_THREE: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FOUR: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FIVE: for #HB_AAT_LAYOUT_FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_CENTERED: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_HBASELINE: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_CJK_ITALIC_ROMAN: Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF instead\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN: Deprecated; use #HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON instead\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_ITALIC_CJK_ROMAN\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_CASE_SENSITIVE_LAYOUT\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_ALTERNATE_KANA\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_NO_STYLISTIC_ALTERNATES: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_STYLISTIC_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_SWASH_ALTERNATES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF: for #HB_AAT_LAYOUT_FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_LOWER_CASE: for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_LOWER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_UPPER_CASE: for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS: for #HB_AAT_LAYOUT_FEATURE_TYPE_UPPER_CASE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_HALF_WIDTH_CJK_ROMAN: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_PROPORTIONAL_CJK_ROMAN: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_DEFAULT_CJK_ROMAN: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE\n @HB_AAT_LAYOUT_FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN: for #HB_AAT_LAYOUT_FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE\n\n The selectors defined for specifying AAT feature settings.\n\n Since: 2.2.0"]
4451pub type hb_aat_layout_feature_selector_t = ::core::ffi::c_uint;
4452extern "C" {
4453    pub fn hb_aat_layout_get_feature_types(
4454        face: *mut hb_face_t,
4455        start_offset: ::core::ffi::c_uint,
4456        feature_count: *mut ::core::ffi::c_uint,
4457        features: *mut hb_aat_layout_feature_type_t,
4458    ) -> ::core::ffi::c_uint;
4459}
4460extern "C" {
4461    pub fn hb_aat_layout_feature_type_get_name_id(
4462        face: *mut hb_face_t,
4463        feature_type: hb_aat_layout_feature_type_t,
4464    ) -> hb_ot_name_id_t;
4465}
4466#[repr(C)]
4467#[derive(Debug, Copy, Clone)]
4468pub struct hb_aat_layout_feature_selector_info_t {
4469    pub name_id: hb_ot_name_id_t,
4470    pub enable: hb_aat_layout_feature_selector_t,
4471    pub disable: hb_aat_layout_feature_selector_t,
4472    pub reserved: ::core::ffi::c_uint,
4473}
4474#[test]
4475fn bindgen_test_layout_hb_aat_layout_feature_selector_info_t() {
4476    const UNINIT: ::core::mem::MaybeUninit<hb_aat_layout_feature_selector_info_t> =
4477        ::core::mem::MaybeUninit::uninit();
4478    let ptr = UNINIT.as_ptr();
4479    assert_eq!(
4480        ::core::mem::size_of::<hb_aat_layout_feature_selector_info_t>(),
4481        16usize,
4482        concat!(
4483            "Size of: ",
4484            stringify!(hb_aat_layout_feature_selector_info_t)
4485        )
4486    );
4487    assert_eq!(
4488        ::core::mem::align_of::<hb_aat_layout_feature_selector_info_t>(),
4489        4usize,
4490        concat!(
4491            "Alignment of ",
4492            stringify!(hb_aat_layout_feature_selector_info_t)
4493        )
4494    );
4495    assert_eq!(
4496        unsafe { ::core::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
4497        0usize,
4498        concat!(
4499            "Offset of field: ",
4500            stringify!(hb_aat_layout_feature_selector_info_t),
4501            "::",
4502            stringify!(name_id)
4503        )
4504    );
4505    assert_eq!(
4506        unsafe { ::core::ptr::addr_of!((*ptr).enable) as usize - ptr as usize },
4507        4usize,
4508        concat!(
4509            "Offset of field: ",
4510            stringify!(hb_aat_layout_feature_selector_info_t),
4511            "::",
4512            stringify!(enable)
4513        )
4514    );
4515    assert_eq!(
4516        unsafe { ::core::ptr::addr_of!((*ptr).disable) as usize - ptr as usize },
4517        8usize,
4518        concat!(
4519            "Offset of field: ",
4520            stringify!(hb_aat_layout_feature_selector_info_t),
4521            "::",
4522            stringify!(disable)
4523        )
4524    );
4525    assert_eq!(
4526        unsafe { ::core::ptr::addr_of!((*ptr).reserved) as usize - ptr as usize },
4527        12usize,
4528        concat!(
4529            "Offset of field: ",
4530            stringify!(hb_aat_layout_feature_selector_info_t),
4531            "::",
4532            stringify!(reserved)
4533        )
4534    );
4535}
4536extern "C" {
4537    pub fn hb_aat_layout_feature_type_get_selector_infos(
4538        face: *mut hb_face_t,
4539        feature_type: hb_aat_layout_feature_type_t,
4540        start_offset: ::core::ffi::c_uint,
4541        selector_count: *mut ::core::ffi::c_uint,
4542        selectors: *mut hb_aat_layout_feature_selector_info_t,
4543        default_index: *mut ::core::ffi::c_uint,
4544    ) -> ::core::ffi::c_uint;
4545}
4546extern "C" {
4547    pub fn hb_aat_layout_has_substitution(face: *mut hb_face_t) -> hb_bool_t;
4548}
4549extern "C" {
4550    pub fn hb_aat_layout_has_positioning(face: *mut hb_face_t) -> hb_bool_t;
4551}
4552extern "C" {
4553    pub fn hb_aat_layout_has_tracking(face: *mut hb_face_t) -> hb_bool_t;
4554}