hb_subset/
bindings.rs

1/* automatically generated by rust-bindgen 0.69.4 */
2
3#[doc = " hb_bool_t:\n\n Data type for booleans.\n"]
4pub type hb_bool_t = ::std::os::raw::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: ::std::mem::MaybeUninit<_hb_var_int_t> = ::std::mem::MaybeUninit::uninit();
24    let ptr = UNINIT.as_ptr();
25    assert_eq!(
26        ::std::mem::size_of::<_hb_var_int_t>(),
27        4usize,
28        concat!("Size of: ", stringify!(_hb_var_int_t))
29    );
30    assert_eq!(
31        ::std::mem::align_of::<_hb_var_int_t>(),
32        4usize,
33        concat!("Alignment of ", stringify!(_hb_var_int_t))
34    );
35    assert_eq!(
36        unsafe { ::std::ptr::addr_of!((*ptr).u32_) as usize - ptr as usize },
37        0usize,
38        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(u32_))
39    );
40    assert_eq!(
41        unsafe { ::std::ptr::addr_of!((*ptr).i32_) as usize - ptr as usize },
42        0usize,
43        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(i32_))
44    );
45    assert_eq!(
46        unsafe { ::std::ptr::addr_of!((*ptr).u16_) as usize - ptr as usize },
47        0usize,
48        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(u16_))
49    );
50    assert_eq!(
51        unsafe { ::std::ptr::addr_of!((*ptr).i16_) as usize - ptr as usize },
52        0usize,
53        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(i16_))
54    );
55    assert_eq!(
56        unsafe { ::std::ptr::addr_of!((*ptr).u8_) as usize - ptr as usize },
57        0usize,
58        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(u8_))
59    );
60    assert_eq!(
61        unsafe { ::std::ptr::addr_of!((*ptr).i8_) as usize - ptr as usize },
62        0usize,
63        concat!("Offset of field: ", stringify!(_hb_var_int_t), "::", stringify!(i8_))
64    );
65}
66pub type hb_var_int_t = _hb_var_int_t;
67#[repr(C)]
68#[derive(Copy, Clone)]
69pub union _hb_var_num_t {
70    pub f: f32,
71    pub u32_: u32,
72    pub i32_: i32,
73    pub u16_: [u16; 2usize],
74    pub i16_: [i16; 2usize],
75    pub u8_: [u8; 4usize],
76    pub i8_: [i8; 4usize],
77}
78#[test]
79fn bindgen_test_layout__hb_var_num_t() {
80    const UNINIT: ::std::mem::MaybeUninit<_hb_var_num_t> = ::std::mem::MaybeUninit::uninit();
81    let ptr = UNINIT.as_ptr();
82    assert_eq!(
83        ::std::mem::size_of::<_hb_var_num_t>(),
84        4usize,
85        concat!("Size of: ", stringify!(_hb_var_num_t))
86    );
87    assert_eq!(
88        ::std::mem::align_of::<_hb_var_num_t>(),
89        4usize,
90        concat!("Alignment of ", stringify!(_hb_var_num_t))
91    );
92    assert_eq!(
93        unsafe { ::std::ptr::addr_of!((*ptr).f) as usize - ptr as usize },
94        0usize,
95        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(f))
96    );
97    assert_eq!(
98        unsafe { ::std::ptr::addr_of!((*ptr).u32_) as usize - ptr as usize },
99        0usize,
100        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(u32_))
101    );
102    assert_eq!(
103        unsafe { ::std::ptr::addr_of!((*ptr).i32_) as usize - ptr as usize },
104        0usize,
105        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(i32_))
106    );
107    assert_eq!(
108        unsafe { ::std::ptr::addr_of!((*ptr).u16_) as usize - ptr as usize },
109        0usize,
110        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(u16_))
111    );
112    assert_eq!(
113        unsafe { ::std::ptr::addr_of!((*ptr).i16_) as usize - ptr as usize },
114        0usize,
115        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(i16_))
116    );
117    assert_eq!(
118        unsafe { ::std::ptr::addr_of!((*ptr).u8_) as usize - ptr as usize },
119        0usize,
120        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(u8_))
121    );
122    assert_eq!(
123        unsafe { ::std::ptr::addr_of!((*ptr).i8_) as usize - ptr as usize },
124        0usize,
125        concat!("Offset of field: ", stringify!(_hb_var_num_t), "::", stringify!(i8_))
126    );
127}
128pub type hb_var_num_t = _hb_var_num_t;
129#[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"]
130pub type hb_tag_t = u32;
131extern "C" {
132    pub fn hb_tag_from_string(
133        str_: *const ::std::os::raw::c_char,
134        len: ::std::os::raw::c_int,
135    ) -> hb_tag_t;
136}
137extern "C" {
138    pub fn hb_tag_to_string(tag: hb_tag_t, buf: *mut ::std::os::raw::c_char);
139}
140pub const hb_direction_t_HB_DIRECTION_INVALID: hb_direction_t = 0;
141pub const hb_direction_t_HB_DIRECTION_LTR: hb_direction_t = 4;
142pub const hb_direction_t_HB_DIRECTION_RTL: hb_direction_t = 5;
143pub const hb_direction_t_HB_DIRECTION_TTB: hb_direction_t = 6;
144pub const hb_direction_t_HB_DIRECTION_BTT: hb_direction_t = 7;
145#[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"]
146pub type hb_direction_t = ::std::os::raw::c_uint;
147extern "C" {
148    pub fn hb_direction_from_string(
149        str_: *const ::std::os::raw::c_char,
150        len: ::std::os::raw::c_int,
151    ) -> hb_direction_t;
152}
153extern "C" {
154    pub fn hb_direction_to_string(direction: hb_direction_t) -> *const ::std::os::raw::c_char;
155}
156#[repr(C)]
157#[derive(Debug, Copy, Clone)]
158pub struct hb_language_impl_t {
159    _unused: [u8; 0],
160}
161#[doc = " hb_language_t:\n\n Data type for languages. Each #hb_language_t corresponds to a BCP 47\n language tag.\n"]
162pub type hb_language_t = *const hb_language_impl_t;
163extern "C" {
164    pub fn hb_language_from_string(
165        str_: *const ::std::os::raw::c_char,
166        len: ::std::os::raw::c_int,
167    ) -> hb_language_t;
168}
169extern "C" {
170    pub fn hb_language_to_string(language: hb_language_t) -> *const ::std::os::raw::c_char;
171}
172extern "C" {
173    pub fn hb_language_get_default() -> hb_language_t;
174}
175extern "C" {
176    pub fn hb_language_matches(language: hb_language_t, specific: hb_language_t) -> hb_bool_t;
177}
178pub const hb_script_t_HB_SCRIPT_COMMON: hb_script_t = 1517910393;
179pub const hb_script_t_HB_SCRIPT_INHERITED: hb_script_t = 1516858984;
180pub const hb_script_t_HB_SCRIPT_UNKNOWN: hb_script_t = 1517976186;
181pub const hb_script_t_HB_SCRIPT_ARABIC: hb_script_t = 1098015074;
182pub const hb_script_t_HB_SCRIPT_ARMENIAN: hb_script_t = 1098018158;
183pub const hb_script_t_HB_SCRIPT_BENGALI: hb_script_t = 1113943655;
184pub const hb_script_t_HB_SCRIPT_CYRILLIC: hb_script_t = 1132032620;
185pub const hb_script_t_HB_SCRIPT_DEVANAGARI: hb_script_t = 1147500129;
186pub const hb_script_t_HB_SCRIPT_GEORGIAN: hb_script_t = 1197830002;
187pub const hb_script_t_HB_SCRIPT_GREEK: hb_script_t = 1198679403;
188pub const hb_script_t_HB_SCRIPT_GUJARATI: hb_script_t = 1198877298;
189pub const hb_script_t_HB_SCRIPT_GURMUKHI: hb_script_t = 1198879349;
190pub const hb_script_t_HB_SCRIPT_HANGUL: hb_script_t = 1214344807;
191pub const hb_script_t_HB_SCRIPT_HAN: hb_script_t = 1214344809;
192pub const hb_script_t_HB_SCRIPT_HEBREW: hb_script_t = 1214603890;
193pub const hb_script_t_HB_SCRIPT_HIRAGANA: hb_script_t = 1214870113;
194pub const hb_script_t_HB_SCRIPT_KANNADA: hb_script_t = 1265525857;
195pub const hb_script_t_HB_SCRIPT_KATAKANA: hb_script_t = 1264676449;
196pub const hb_script_t_HB_SCRIPT_LAO: hb_script_t = 1281453935;
197pub const hb_script_t_HB_SCRIPT_LATIN: hb_script_t = 1281455214;
198pub const hb_script_t_HB_SCRIPT_MALAYALAM: hb_script_t = 1298954605;
199pub const hb_script_t_HB_SCRIPT_ORIYA: hb_script_t = 1332902241;
200pub const hb_script_t_HB_SCRIPT_TAMIL: hb_script_t = 1415671148;
201pub const hb_script_t_HB_SCRIPT_TELUGU: hb_script_t = 1415933045;
202pub const hb_script_t_HB_SCRIPT_THAI: hb_script_t = 1416126825;
203pub const hb_script_t_HB_SCRIPT_TIBETAN: hb_script_t = 1416192628;
204pub const hb_script_t_HB_SCRIPT_BOPOMOFO: hb_script_t = 1114599535;
205pub const hb_script_t_HB_SCRIPT_BRAILLE: hb_script_t = 1114792297;
206pub const hb_script_t_HB_SCRIPT_CANADIAN_SYLLABICS: hb_script_t = 1130458739;
207pub const hb_script_t_HB_SCRIPT_CHEROKEE: hb_script_t = 1130915186;
208pub const hb_script_t_HB_SCRIPT_ETHIOPIC: hb_script_t = 1165256809;
209pub const hb_script_t_HB_SCRIPT_KHMER: hb_script_t = 1265134962;
210pub const hb_script_t_HB_SCRIPT_MONGOLIAN: hb_script_t = 1299148391;
211pub const hb_script_t_HB_SCRIPT_MYANMAR: hb_script_t = 1299803506;
212pub const hb_script_t_HB_SCRIPT_OGHAM: hb_script_t = 1332175213;
213pub const hb_script_t_HB_SCRIPT_RUNIC: hb_script_t = 1383427698;
214pub const hb_script_t_HB_SCRIPT_SINHALA: hb_script_t = 1399418472;
215pub const hb_script_t_HB_SCRIPT_SYRIAC: hb_script_t = 1400468067;
216pub const hb_script_t_HB_SCRIPT_THAANA: hb_script_t = 1416126817;
217pub const hb_script_t_HB_SCRIPT_YI: hb_script_t = 1500080489;
218pub const hb_script_t_HB_SCRIPT_DESERET: hb_script_t = 1148416628;
219pub const hb_script_t_HB_SCRIPT_GOTHIC: hb_script_t = 1198486632;
220pub const hb_script_t_HB_SCRIPT_OLD_ITALIC: hb_script_t = 1232363884;
221pub const hb_script_t_HB_SCRIPT_BUHID: hb_script_t = 1114990692;
222pub const hb_script_t_HB_SCRIPT_HANUNOO: hb_script_t = 1214344815;
223pub const hb_script_t_HB_SCRIPT_TAGALOG: hb_script_t = 1416064103;
224pub const hb_script_t_HB_SCRIPT_TAGBANWA: hb_script_t = 1415669602;
225pub const hb_script_t_HB_SCRIPT_CYPRIOT: hb_script_t = 1131442804;
226pub const hb_script_t_HB_SCRIPT_LIMBU: hb_script_t = 1281977698;
227pub const hb_script_t_HB_SCRIPT_LINEAR_B: hb_script_t = 1281977954;
228pub const hb_script_t_HB_SCRIPT_OSMANYA: hb_script_t = 1332964705;
229pub const hb_script_t_HB_SCRIPT_SHAVIAN: hb_script_t = 1399349623;
230pub const hb_script_t_HB_SCRIPT_TAI_LE: hb_script_t = 1415670885;
231pub const hb_script_t_HB_SCRIPT_UGARITIC: hb_script_t = 1432838514;
232pub const hb_script_t_HB_SCRIPT_BUGINESE: hb_script_t = 1114990441;
233pub const hb_script_t_HB_SCRIPT_COPTIC: hb_script_t = 1131376756;
234pub const hb_script_t_HB_SCRIPT_GLAGOLITIC: hb_script_t = 1198285159;
235pub const hb_script_t_HB_SCRIPT_KHAROSHTHI: hb_script_t = 1265131890;
236pub const hb_script_t_HB_SCRIPT_NEW_TAI_LUE: hb_script_t = 1415670901;
237pub const hb_script_t_HB_SCRIPT_OLD_PERSIAN: hb_script_t = 1483761007;
238pub const hb_script_t_HB_SCRIPT_SYLOTI_NAGRI: hb_script_t = 1400466543;
239pub const hb_script_t_HB_SCRIPT_TIFINAGH: hb_script_t = 1415999079;
240pub const hb_script_t_HB_SCRIPT_BALINESE: hb_script_t = 1113681001;
241pub const hb_script_t_HB_SCRIPT_CUNEIFORM: hb_script_t = 1483961720;
242pub const hb_script_t_HB_SCRIPT_NKO: hb_script_t = 1315663727;
243pub const hb_script_t_HB_SCRIPT_PHAGS_PA: hb_script_t = 1349017959;
244pub const hb_script_t_HB_SCRIPT_PHOENICIAN: hb_script_t = 1349021304;
245pub const hb_script_t_HB_SCRIPT_CARIAN: hb_script_t = 1130459753;
246pub const hb_script_t_HB_SCRIPT_CHAM: hb_script_t = 1130914157;
247pub const hb_script_t_HB_SCRIPT_KAYAH_LI: hb_script_t = 1264675945;
248pub const hb_script_t_HB_SCRIPT_LEPCHA: hb_script_t = 1281716323;
249pub const hb_script_t_HB_SCRIPT_LYCIAN: hb_script_t = 1283023721;
250pub const hb_script_t_HB_SCRIPT_LYDIAN: hb_script_t = 1283023977;
251pub const hb_script_t_HB_SCRIPT_OL_CHIKI: hb_script_t = 1332503403;
252pub const hb_script_t_HB_SCRIPT_REJANG: hb_script_t = 1382706791;
253pub const hb_script_t_HB_SCRIPT_SAURASHTRA: hb_script_t = 1398895986;
254pub const hb_script_t_HB_SCRIPT_SUNDANESE: hb_script_t = 1400204900;
255pub const hb_script_t_HB_SCRIPT_VAI: hb_script_t = 1449224553;
256pub const hb_script_t_HB_SCRIPT_AVESTAN: hb_script_t = 1098281844;
257pub const hb_script_t_HB_SCRIPT_BAMUM: hb_script_t = 1113681269;
258pub const hb_script_t_HB_SCRIPT_EGYPTIAN_HIEROGLYPHS: hb_script_t = 1164409200;
259pub const hb_script_t_HB_SCRIPT_IMPERIAL_ARAMAIC: hb_script_t = 1098018153;
260pub const hb_script_t_HB_SCRIPT_INSCRIPTIONAL_PAHLAVI: hb_script_t = 1349020777;
261pub const hb_script_t_HB_SCRIPT_INSCRIPTIONAL_PARTHIAN: hb_script_t = 1349678185;
262pub const hb_script_t_HB_SCRIPT_JAVANESE: hb_script_t = 1247901281;
263pub const hb_script_t_HB_SCRIPT_KAITHI: hb_script_t = 1265920105;
264pub const hb_script_t_HB_SCRIPT_LISU: hb_script_t = 1281979253;
265pub const hb_script_t_HB_SCRIPT_MEETEI_MAYEK: hb_script_t = 1299473769;
266pub const hb_script_t_HB_SCRIPT_OLD_SOUTH_ARABIAN: hb_script_t = 1398895202;
267pub const hb_script_t_HB_SCRIPT_OLD_TURKIC: hb_script_t = 1332898664;
268pub const hb_script_t_HB_SCRIPT_SAMARITAN: hb_script_t = 1398893938;
269pub const hb_script_t_HB_SCRIPT_TAI_THAM: hb_script_t = 1281453665;
270pub const hb_script_t_HB_SCRIPT_TAI_VIET: hb_script_t = 1415673460;
271pub const hb_script_t_HB_SCRIPT_BATAK: hb_script_t = 1113683051;
272pub const hb_script_t_HB_SCRIPT_BRAHMI: hb_script_t = 1114792296;
273pub const hb_script_t_HB_SCRIPT_MANDAIC: hb_script_t = 1298230884;
274pub const hb_script_t_HB_SCRIPT_CHAKMA: hb_script_t = 1130457965;
275pub const hb_script_t_HB_SCRIPT_MEROITIC_CURSIVE: hb_script_t = 1298494051;
276pub const hb_script_t_HB_SCRIPT_MEROITIC_HIEROGLYPHS: hb_script_t = 1298494063;
277pub const hb_script_t_HB_SCRIPT_MIAO: hb_script_t = 1349284452;
278pub const hb_script_t_HB_SCRIPT_SHARADA: hb_script_t = 1399353956;
279pub const hb_script_t_HB_SCRIPT_SORA_SOMPENG: hb_script_t = 1399812705;
280pub const hb_script_t_HB_SCRIPT_TAKRI: hb_script_t = 1415670642;
281pub const hb_script_t_HB_SCRIPT_BASSA_VAH: hb_script_t = 1113682803;
282pub const hb_script_t_HB_SCRIPT_CAUCASIAN_ALBANIAN: hb_script_t = 1097295970;
283pub const hb_script_t_HB_SCRIPT_DUPLOYAN: hb_script_t = 1148547180;
284pub const hb_script_t_HB_SCRIPT_ELBASAN: hb_script_t = 1164730977;
285pub const hb_script_t_HB_SCRIPT_GRANTHA: hb_script_t = 1198678382;
286pub const hb_script_t_HB_SCRIPT_KHOJKI: hb_script_t = 1265135466;
287pub const hb_script_t_HB_SCRIPT_KHUDAWADI: hb_script_t = 1399418468;
288pub const hb_script_t_HB_SCRIPT_LINEAR_A: hb_script_t = 1281977953;
289pub const hb_script_t_HB_SCRIPT_MAHAJANI: hb_script_t = 1298229354;
290pub const hb_script_t_HB_SCRIPT_MANICHAEAN: hb_script_t = 1298230889;
291pub const hb_script_t_HB_SCRIPT_MENDE_KIKAKUI: hb_script_t = 1298493028;
292pub const hb_script_t_HB_SCRIPT_MODI: hb_script_t = 1299145833;
293pub const hb_script_t_HB_SCRIPT_MRO: hb_script_t = 1299345263;
294pub const hb_script_t_HB_SCRIPT_NABATAEAN: hb_script_t = 1315070324;
295pub const hb_script_t_HB_SCRIPT_OLD_NORTH_ARABIAN: hb_script_t = 1315009122;
296pub const hb_script_t_HB_SCRIPT_OLD_PERMIC: hb_script_t = 1348825709;
297pub const hb_script_t_HB_SCRIPT_PAHAWH_HMONG: hb_script_t = 1215131239;
298pub const hb_script_t_HB_SCRIPT_PALMYRENE: hb_script_t = 1348562029;
299pub const hb_script_t_HB_SCRIPT_PAU_CIN_HAU: hb_script_t = 1348564323;
300pub const hb_script_t_HB_SCRIPT_PSALTER_PAHLAVI: hb_script_t = 1349020784;
301pub const hb_script_t_HB_SCRIPT_SIDDHAM: hb_script_t = 1399415908;
302pub const hb_script_t_HB_SCRIPT_TIRHUTA: hb_script_t = 1416196712;
303pub const hb_script_t_HB_SCRIPT_WARANG_CITI: hb_script_t = 1466004065;
304pub const hb_script_t_HB_SCRIPT_AHOM: hb_script_t = 1097363309;
305pub const hb_script_t_HB_SCRIPT_ANATOLIAN_HIEROGLYPHS: hb_script_t = 1215067511;
306pub const hb_script_t_HB_SCRIPT_HATRAN: hb_script_t = 1214346354;
307pub const hb_script_t_HB_SCRIPT_MULTANI: hb_script_t = 1299541108;
308pub const hb_script_t_HB_SCRIPT_OLD_HUNGARIAN: hb_script_t = 1215655527;
309pub const hb_script_t_HB_SCRIPT_SIGNWRITING: hb_script_t = 1399287415;
310pub const hb_script_t_HB_SCRIPT_ADLAM: hb_script_t = 1097100397;
311pub const hb_script_t_HB_SCRIPT_BHAIKSUKI: hb_script_t = 1114139507;
312pub const hb_script_t_HB_SCRIPT_MARCHEN: hb_script_t = 1298231907;
313pub const hb_script_t_HB_SCRIPT_OSAGE: hb_script_t = 1332963173;
314pub const hb_script_t_HB_SCRIPT_TANGUT: hb_script_t = 1415671399;
315pub const hb_script_t_HB_SCRIPT_NEWA: hb_script_t = 1315272545;
316pub const hb_script_t_HB_SCRIPT_MASARAM_GONDI: hb_script_t = 1198485101;
317pub const hb_script_t_HB_SCRIPT_NUSHU: hb_script_t = 1316186229;
318pub const hb_script_t_HB_SCRIPT_SOYOMBO: hb_script_t = 1399814511;
319pub const hb_script_t_HB_SCRIPT_ZANABAZAR_SQUARE: hb_script_t = 1516334690;
320pub const hb_script_t_HB_SCRIPT_DOGRA: hb_script_t = 1148151666;
321pub const hb_script_t_HB_SCRIPT_GUNJALA_GONDI: hb_script_t = 1198485095;
322pub const hb_script_t_HB_SCRIPT_HANIFI_ROHINGYA: hb_script_t = 1383032935;
323pub const hb_script_t_HB_SCRIPT_MAKASAR: hb_script_t = 1298230113;
324pub const hb_script_t_HB_SCRIPT_MEDEFAIDRIN: hb_script_t = 1298490470;
325pub const hb_script_t_HB_SCRIPT_OLD_SOGDIAN: hb_script_t = 1399809903;
326pub const hb_script_t_HB_SCRIPT_SOGDIAN: hb_script_t = 1399809892;
327pub const hb_script_t_HB_SCRIPT_ELYMAIC: hb_script_t = 1164736877;
328pub const hb_script_t_HB_SCRIPT_NANDINAGARI: hb_script_t = 1315008100;
329pub const hb_script_t_HB_SCRIPT_NYIAKENG_PUACHUE_HMONG: hb_script_t = 1215131248;
330pub const hb_script_t_HB_SCRIPT_WANCHO: hb_script_t = 1466132591;
331pub const hb_script_t_HB_SCRIPT_CHORASMIAN: hb_script_t = 1130918515;
332pub const hb_script_t_HB_SCRIPT_DIVES_AKURU: hb_script_t = 1147756907;
333pub const hb_script_t_HB_SCRIPT_KHITAN_SMALL_SCRIPT: hb_script_t = 1265202291;
334pub const hb_script_t_HB_SCRIPT_YEZIDI: hb_script_t = 1499822697;
335pub const hb_script_t_HB_SCRIPT_CYPRO_MINOAN: hb_script_t = 1131441518;
336pub const hb_script_t_HB_SCRIPT_OLD_UYGHUR: hb_script_t = 1333094258;
337pub const hb_script_t_HB_SCRIPT_TANGSA: hb_script_t = 1416524641;
338pub const hb_script_t_HB_SCRIPT_TOTO: hb_script_t = 1416590447;
339pub const hb_script_t_HB_SCRIPT_VITHKUQI: hb_script_t = 1449751656;
340pub const hb_script_t_HB_SCRIPT_MATH: hb_script_t = 1517122664;
341pub const hb_script_t_HB_SCRIPT_KAWI: hb_script_t = 1264678761;
342pub const hb_script_t_HB_SCRIPT_NAG_MUNDARI: hb_script_t = 1315006317;
343pub const hb_script_t_HB_SCRIPT_INVALID: hb_script_t = 0;
344pub const hb_script_t__HB_SCRIPT_MAX_VALUE: hb_script_t = 2147483647;
345pub const hb_script_t__HB_SCRIPT_MAX_VALUE_SIGNED: hb_script_t = 2147483647;
346#[doc = " hb_script_t:\n @HB_SCRIPT_COMMON: `Zyyy`\n @HB_SCRIPT_INHERITED: `Zinh`\n @HB_SCRIPT_UNKNOWN: `Zzzz`\n @HB_SCRIPT_ARABIC: `Arab`\n @HB_SCRIPT_ARMENIAN: `Armn`\n @HB_SCRIPT_BENGALI: `Beng`\n @HB_SCRIPT_CYRILLIC: `Cyrl`\n @HB_SCRIPT_DEVANAGARI: `Deva`\n @HB_SCRIPT_GEORGIAN: `Geor`\n @HB_SCRIPT_GREEK: `Grek`\n @HB_SCRIPT_GUJARATI: `Gujr`\n @HB_SCRIPT_GURMUKHI: `Guru`\n @HB_SCRIPT_HANGUL: `Hang`\n @HB_SCRIPT_HAN: `Hani`\n @HB_SCRIPT_HEBREW: `Hebr`\n @HB_SCRIPT_HIRAGANA: `Hira`\n @HB_SCRIPT_KANNADA: `Knda`\n @HB_SCRIPT_KATAKANA: `Kana`\n @HB_SCRIPT_LAO: `Laoo`\n @HB_SCRIPT_LATIN: `Latn`\n @HB_SCRIPT_MALAYALAM: `Mlym`\n @HB_SCRIPT_ORIYA: `Orya`\n @HB_SCRIPT_TAMIL: `Taml`\n @HB_SCRIPT_TELUGU: `Telu`\n @HB_SCRIPT_THAI: `Thai`\n @HB_SCRIPT_TIBETAN: `Tibt`\n @HB_SCRIPT_BOPOMOFO: `Bopo`\n @HB_SCRIPT_BRAILLE: `Brai`\n @HB_SCRIPT_CANADIAN_SYLLABICS: `Cans`\n @HB_SCRIPT_CHEROKEE: `Cher`\n @HB_SCRIPT_ETHIOPIC: `Ethi`\n @HB_SCRIPT_KHMER: `Khmr`\n @HB_SCRIPT_MONGOLIAN: `Mong`\n @HB_SCRIPT_MYANMAR: `Mymr`\n @HB_SCRIPT_OGHAM: `Ogam`\n @HB_SCRIPT_RUNIC: `Runr`\n @HB_SCRIPT_SINHALA: `Sinh`\n @HB_SCRIPT_SYRIAC: `Syrc`\n @HB_SCRIPT_THAANA: `Thaa`\n @HB_SCRIPT_YI: `Yiii`\n @HB_SCRIPT_DESERET: `Dsrt`\n @HB_SCRIPT_GOTHIC: `Goth`\n @HB_SCRIPT_OLD_ITALIC: `Ital`\n @HB_SCRIPT_BUHID: `Buhd`\n @HB_SCRIPT_HANUNOO: `Hano`\n @HB_SCRIPT_TAGALOG: `Tglg`\n @HB_SCRIPT_TAGBANWA: `Tagb`\n @HB_SCRIPT_CYPRIOT: `Cprt`\n @HB_SCRIPT_LIMBU: `Limb`\n @HB_SCRIPT_LINEAR_B: `Linb`\n @HB_SCRIPT_OSMANYA: `Osma`\n @HB_SCRIPT_SHAVIAN: `Shaw`\n @HB_SCRIPT_TAI_LE: `Tale`\n @HB_SCRIPT_UGARITIC: `Ugar`\n @HB_SCRIPT_BUGINESE: `Bugi`\n @HB_SCRIPT_COPTIC: `Copt`\n @HB_SCRIPT_GLAGOLITIC: `Glag`\n @HB_SCRIPT_KHAROSHTHI: `Khar`\n @HB_SCRIPT_NEW_TAI_LUE: `Talu`\n @HB_SCRIPT_OLD_PERSIAN: `Xpeo`\n @HB_SCRIPT_SYLOTI_NAGRI: `Sylo`\n @HB_SCRIPT_TIFINAGH: `Tfng`\n @HB_SCRIPT_BALINESE: `Bali`\n @HB_SCRIPT_CUNEIFORM: `Xsux`\n @HB_SCRIPT_NKO: `Nkoo`\n @HB_SCRIPT_PHAGS_PA: `Phag`\n @HB_SCRIPT_PHOENICIAN: `Phnx`\n @HB_SCRIPT_CARIAN: `Cari`\n @HB_SCRIPT_CHAM: `Cham`\n @HB_SCRIPT_KAYAH_LI: `Kali`\n @HB_SCRIPT_LEPCHA: `Lepc`\n @HB_SCRIPT_LYCIAN: `Lyci`\n @HB_SCRIPT_LYDIAN: `Lydi`\n @HB_SCRIPT_OL_CHIKI: `Olck`\n @HB_SCRIPT_REJANG: `Rjng`\n @HB_SCRIPT_SAURASHTRA: `Saur`\n @HB_SCRIPT_SUNDANESE: `Sund`\n @HB_SCRIPT_VAI: `Vaii`\n @HB_SCRIPT_AVESTAN: `Avst`\n @HB_SCRIPT_BAMUM: `Bamu`\n @HB_SCRIPT_EGYPTIAN_HIEROGLYPHS: `Egyp`\n @HB_SCRIPT_IMPERIAL_ARAMAIC: `Armi`\n @HB_SCRIPT_INSCRIPTIONAL_PAHLAVI: `Phli`\n @HB_SCRIPT_INSCRIPTIONAL_PARTHIAN: `Prti`\n @HB_SCRIPT_JAVANESE: `Java`\n @HB_SCRIPT_KAITHI: `Kthi`\n @HB_SCRIPT_LISU: `Lisu`\n @HB_SCRIPT_MEETEI_MAYEK: `Mtei`\n @HB_SCRIPT_OLD_SOUTH_ARABIAN: `Sarb`\n @HB_SCRIPT_OLD_TURKIC: `Orkh`\n @HB_SCRIPT_SAMARITAN: `Samr`\n @HB_SCRIPT_TAI_THAM: `Lana`\n @HB_SCRIPT_TAI_VIET: `Tavt`\n @HB_SCRIPT_BATAK: `Batk`\n @HB_SCRIPT_BRAHMI: `Brah`\n @HB_SCRIPT_MANDAIC: `Mand`\n @HB_SCRIPT_CHAKMA: `Cakm`\n @HB_SCRIPT_MEROITIC_CURSIVE: `Merc`\n @HB_SCRIPT_MEROITIC_HIEROGLYPHS: `Mero`\n @HB_SCRIPT_MIAO: `Plrd`\n @HB_SCRIPT_SHARADA: `Shrd`\n @HB_SCRIPT_SORA_SOMPENG: `Sora`\n @HB_SCRIPT_TAKRI: `Takr`\n @HB_SCRIPT_BASSA_VAH: `Bass`, Since: 0.9.30\n @HB_SCRIPT_CAUCASIAN_ALBANIAN: `Aghb`, Since: 0.9.30\n @HB_SCRIPT_DUPLOYAN: `Dupl`, Since: 0.9.30\n @HB_SCRIPT_ELBASAN: `Elba`, Since: 0.9.30\n @HB_SCRIPT_GRANTHA: `Gran`, Since: 0.9.30\n @HB_SCRIPT_KHOJKI: `Khoj`, Since: 0.9.30\n @HB_SCRIPT_KHUDAWADI: `Sind`, Since: 0.9.30\n @HB_SCRIPT_LINEAR_A: `Lina`, Since: 0.9.30\n @HB_SCRIPT_MAHAJANI: `Mahj`, Since: 0.9.30\n @HB_SCRIPT_MANICHAEAN: `Mani`, Since: 0.9.30\n @HB_SCRIPT_MENDE_KIKAKUI: `Mend`, Since: 0.9.30\n @HB_SCRIPT_MODI: `Modi`, Since: 0.9.30\n @HB_SCRIPT_MRO: `Mroo`, Since: 0.9.30\n @HB_SCRIPT_NABATAEAN: `Nbat`, Since: 0.9.30\n @HB_SCRIPT_OLD_NORTH_ARABIAN: `Narb`, Since: 0.9.30\n @HB_SCRIPT_OLD_PERMIC: `Perm`, Since: 0.9.30\n @HB_SCRIPT_PAHAWH_HMONG: `Hmng`, Since: 0.9.30\n @HB_SCRIPT_PALMYRENE: `Palm`, Since: 0.9.30\n @HB_SCRIPT_PAU_CIN_HAU: `Pauc`, Since: 0.9.30\n @HB_SCRIPT_PSALTER_PAHLAVI: `Phlp`, Since: 0.9.30\n @HB_SCRIPT_SIDDHAM: `Sidd`, Since: 0.9.30\n @HB_SCRIPT_TIRHUTA: `Tirh`, Since: 0.9.30\n @HB_SCRIPT_WARANG_CITI: `Wara`, Since: 0.9.30\n @HB_SCRIPT_AHOM: `Ahom`, Since: 0.9.30\n @HB_SCRIPT_ANATOLIAN_HIEROGLYPHS: `Hluw`, Since: 0.9.30\n @HB_SCRIPT_HATRAN: `Hatr`, Since: 0.9.30\n @HB_SCRIPT_MULTANI: `Mult`, Since: 0.9.30\n @HB_SCRIPT_OLD_HUNGARIAN: `Hung`, Since: 0.9.30\n @HB_SCRIPT_SIGNWRITING: `Sgnw`, Since: 0.9.30\n @HB_SCRIPT_ADLAM: `Adlm`, Since: 1.3.0\n @HB_SCRIPT_BHAIKSUKI: `Bhks`, Since: 1.3.0\n @HB_SCRIPT_MARCHEN: `Marc`, Since: 1.3.0\n @HB_SCRIPT_OSAGE: `Osge`, Since: 1.3.0\n @HB_SCRIPT_TANGUT: `Tang`, Since: 1.3.0\n @HB_SCRIPT_NEWA: `Newa`, Since: 1.3.0\n @HB_SCRIPT_MASARAM_GONDI: `Gonm`, Since: 1.6.0\n @HB_SCRIPT_NUSHU: `Nshu`, Since: 1.6.0\n @HB_SCRIPT_SOYOMBO: `Soyo`, Since: 1.6.0\n @HB_SCRIPT_ZANABAZAR_SQUARE: `Zanb`, Since: 1.6.0\n @HB_SCRIPT_DOGRA: `Dogr`, Since: 1.8.0\n @HB_SCRIPT_GUNJALA_GONDI: `Gong`, Since: 1.8.0\n @HB_SCRIPT_HANIFI_ROHINGYA: `Rohg`, Since: 1.8.0\n @HB_SCRIPT_MAKASAR: `Maka`, Since: 1.8.0\n @HB_SCRIPT_MEDEFAIDRIN: `Medf`, Since: 1.8.0\n @HB_SCRIPT_OLD_SOGDIAN: `Sogo`, Since: 1.8.0\n @HB_SCRIPT_SOGDIAN: `Sogd`, Since: 1.8.0\n @HB_SCRIPT_ELYMAIC: `Elym`, Since: 2.4.0\n @HB_SCRIPT_NANDINAGARI: `Nand`, Since: 2.4.0\n @HB_SCRIPT_NYIAKENG_PUACHUE_HMONG: `Hmnp`, Since: 2.4.0\n @HB_SCRIPT_WANCHO: `Wcho`, Since: 2.4.0\n @HB_SCRIPT_CHORASMIAN: `Chrs`, Since: 2.6.7\n @HB_SCRIPT_DIVES_AKURU: `Diak`, Since: 2.6.7\n @HB_SCRIPT_KHITAN_SMALL_SCRIPT: `Kits`, Since: 2.6.7\n @HB_SCRIPT_YEZIDI: `Yezi`, Since: 2.6.7\n @HB_SCRIPT_CYPRO_MINOAN: `Cpmn`, Since: 3.0.0\n @HB_SCRIPT_OLD_UYGHUR: `Ougr`, Since: 3.0.0\n @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0\n @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0\n @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0\n @HB_SCRIPT_MATH: `Zmth`, Since: 3.4.0\n @HB_SCRIPT_KAWI: `Kawi`, Since: 5.2.0\n @HB_SCRIPT_NAG_MUNDARI: `Nagm`, Since: 5.2.0\n @HB_SCRIPT_INVALID: No script set\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"]
347pub type hb_script_t = ::std::os::raw::c_uint;
348extern "C" {
349    pub fn hb_script_from_iso15924_tag(tag: hb_tag_t) -> hb_script_t;
350}
351extern "C" {
352    pub fn hb_script_from_string(
353        str_: *const ::std::os::raw::c_char,
354        len: ::std::os::raw::c_int,
355    ) -> hb_script_t;
356}
357extern "C" {
358    pub fn hb_script_to_iso15924_tag(script: hb_script_t) -> hb_tag_t;
359}
360extern "C" {
361    pub fn hb_script_get_horizontal_direction(script: hb_script_t) -> hb_direction_t;
362}
363#[doc = " hb_user_data_key_t:\n\n Data structure for holding user-data keys.\n"]
364#[repr(C)]
365#[derive(Debug, Copy, Clone)]
366pub struct hb_user_data_key_t {
367    pub unused: ::std::os::raw::c_char,
368}
369#[test]
370fn bindgen_test_layout_hb_user_data_key_t() {
371    const UNINIT: ::std::mem::MaybeUninit<hb_user_data_key_t> = ::std::mem::MaybeUninit::uninit();
372    let ptr = UNINIT.as_ptr();
373    assert_eq!(
374        ::std::mem::size_of::<hb_user_data_key_t>(),
375        1usize,
376        concat!("Size of: ", stringify!(hb_user_data_key_t))
377    );
378    assert_eq!(
379        ::std::mem::align_of::<hb_user_data_key_t>(),
380        1usize,
381        concat!("Alignment of ", stringify!(hb_user_data_key_t))
382    );
383    assert_eq!(
384        unsafe { ::std::ptr::addr_of!((*ptr).unused) as usize - ptr as usize },
385        0usize,
386        concat!("Offset of field: ", stringify!(hb_user_data_key_t), "::", stringify!(unused))
387    );
388}
389#[doc = " hb_destroy_func_t:\n @user_data: the data to be destroyed\n\n A virtual method for destroy user-data callbacks.\n"]
390pub type hb_destroy_func_t =
391    ::std::option::Option<unsafe extern "C" fn(user_data: *mut ::std::os::raw::c_void)>;
392#[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."]
393#[repr(C)]
394#[derive(Debug, Copy, Clone)]
395pub struct hb_feature_t {
396    pub tag: hb_tag_t,
397    pub value: u32,
398    pub start: ::std::os::raw::c_uint,
399    pub end: ::std::os::raw::c_uint,
400}
401#[test]
402fn bindgen_test_layout_hb_feature_t() {
403    const UNINIT: ::std::mem::MaybeUninit<hb_feature_t> = ::std::mem::MaybeUninit::uninit();
404    let ptr = UNINIT.as_ptr();
405    assert_eq!(
406        ::std::mem::size_of::<hb_feature_t>(),
407        16usize,
408        concat!("Size of: ", stringify!(hb_feature_t))
409    );
410    assert_eq!(
411        ::std::mem::align_of::<hb_feature_t>(),
412        4usize,
413        concat!("Alignment of ", stringify!(hb_feature_t))
414    );
415    assert_eq!(
416        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
417        0usize,
418        concat!("Offset of field: ", stringify!(hb_feature_t), "::", stringify!(tag))
419    );
420    assert_eq!(
421        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
422        4usize,
423        concat!("Offset of field: ", stringify!(hb_feature_t), "::", stringify!(value))
424    );
425    assert_eq!(
426        unsafe { ::std::ptr::addr_of!((*ptr).start) as usize - ptr as usize },
427        8usize,
428        concat!("Offset of field: ", stringify!(hb_feature_t), "::", stringify!(start))
429    );
430    assert_eq!(
431        unsafe { ::std::ptr::addr_of!((*ptr).end) as usize - ptr as usize },
432        12usize,
433        concat!("Offset of field: ", stringify!(hb_feature_t), "::", stringify!(end))
434    );
435}
436extern "C" {
437    pub fn hb_feature_from_string(
438        str_: *const ::std::os::raw::c_char,
439        len: ::std::os::raw::c_int,
440        feature: *mut hb_feature_t,
441    ) -> hb_bool_t;
442}
443extern "C" {
444    pub fn hb_feature_to_string(
445        feature: *mut hb_feature_t,
446        buf: *mut ::std::os::raw::c_char,
447        size: ::std::os::raw::c_uint,
448    );
449}
450#[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 in\n [OpenType Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).\n\n Since: 1.4.2"]
451#[repr(C)]
452#[derive(Debug, Copy, Clone)]
453pub struct hb_variation_t {
454    pub tag: hb_tag_t,
455    pub value: f32,
456}
457#[test]
458fn bindgen_test_layout_hb_variation_t() {
459    const UNINIT: ::std::mem::MaybeUninit<hb_variation_t> = ::std::mem::MaybeUninit::uninit();
460    let ptr = UNINIT.as_ptr();
461    assert_eq!(
462        ::std::mem::size_of::<hb_variation_t>(),
463        8usize,
464        concat!("Size of: ", stringify!(hb_variation_t))
465    );
466    assert_eq!(
467        ::std::mem::align_of::<hb_variation_t>(),
468        4usize,
469        concat!("Alignment of ", stringify!(hb_variation_t))
470    );
471    assert_eq!(
472        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
473        0usize,
474        concat!("Offset of field: ", stringify!(hb_variation_t), "::", stringify!(tag))
475    );
476    assert_eq!(
477        unsafe { ::std::ptr::addr_of!((*ptr).value) as usize - ptr as usize },
478        4usize,
479        concat!("Offset of field: ", stringify!(hb_variation_t), "::", stringify!(value))
480    );
481}
482extern "C" {
483    pub fn hb_variation_from_string(
484        str_: *const ::std::os::raw::c_char,
485        len: ::std::os::raw::c_int,
486        variation: *mut hb_variation_t,
487    ) -> hb_bool_t;
488}
489extern "C" {
490    pub fn hb_variation_to_string(
491        variation: *mut hb_variation_t,
492        buf: *mut ::std::os::raw::c_char,
493        size: ::std::os::raw::c_uint,
494    );
495}
496#[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"]
497pub type hb_color_t = u32;
498extern "C" {
499    pub fn hb_color_get_alpha(color: hb_color_t) -> u8;
500}
501extern "C" {
502    pub fn hb_color_get_red(color: hb_color_t) -> u8;
503}
504extern "C" {
505    pub fn hb_color_get_green(color: hb_color_t) -> u8;
506}
507extern "C" {
508    pub fn hb_color_get_blue(color: hb_color_t) -> u8;
509}
510#[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."]
511#[repr(C)]
512#[derive(Debug, Copy, Clone)]
513pub struct hb_glyph_extents_t {
514    pub x_bearing: hb_position_t,
515    pub y_bearing: hb_position_t,
516    pub width: hb_position_t,
517    pub height: hb_position_t,
518}
519#[test]
520fn bindgen_test_layout_hb_glyph_extents_t() {
521    const UNINIT: ::std::mem::MaybeUninit<hb_glyph_extents_t> = ::std::mem::MaybeUninit::uninit();
522    let ptr = UNINIT.as_ptr();
523    assert_eq!(
524        ::std::mem::size_of::<hb_glyph_extents_t>(),
525        16usize,
526        concat!("Size of: ", stringify!(hb_glyph_extents_t))
527    );
528    assert_eq!(
529        ::std::mem::align_of::<hb_glyph_extents_t>(),
530        4usize,
531        concat!("Alignment of ", stringify!(hb_glyph_extents_t))
532    );
533    assert_eq!(
534        unsafe { ::std::ptr::addr_of!((*ptr).x_bearing) as usize - ptr as usize },
535        0usize,
536        concat!("Offset of field: ", stringify!(hb_glyph_extents_t), "::", stringify!(x_bearing))
537    );
538    assert_eq!(
539        unsafe { ::std::ptr::addr_of!((*ptr).y_bearing) as usize - ptr as usize },
540        4usize,
541        concat!("Offset of field: ", stringify!(hb_glyph_extents_t), "::", stringify!(y_bearing))
542    );
543    assert_eq!(
544        unsafe { ::std::ptr::addr_of!((*ptr).width) as usize - ptr as usize },
545        8usize,
546        concat!("Offset of field: ", stringify!(hb_glyph_extents_t), "::", stringify!(width))
547    );
548    assert_eq!(
549        unsafe { ::std::ptr::addr_of!((*ptr).height) as usize - ptr as usize },
550        12usize,
551        concat!("Offset of field: ", stringify!(hb_glyph_extents_t), "::", stringify!(height))
552    );
553}
554#[repr(C)]
555#[derive(Debug, Copy, Clone)]
556pub struct hb_font_t {
557    _unused: [u8; 0],
558}
559pub const hb_memory_mode_t_HB_MEMORY_MODE_DUPLICATE: hb_memory_mode_t = 0;
560pub const hb_memory_mode_t_HB_MEMORY_MODE_READONLY: hb_memory_mode_t = 1;
561pub const hb_memory_mode_t_HB_MEMORY_MODE_WRITABLE: hb_memory_mode_t = 2;
562pub const hb_memory_mode_t_HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE: hb_memory_mode_t = 3;
563#[doc = " hb_memory_mode_t:\n @HB_MEMORY_MODE_DUPLICATE: HarfBuzz immediately makes a copy of the data.\n @HB_MEMORY_MODE_READONLY: HarfBuzz client will never modify the data,\n     and HarfBuzz will never modify the data.\n @HB_MEMORY_MODE_WRITABLE: HarfBuzz client made a copy of the data solely\n     for HarfBuzz, so HarfBuzz may modify the data.\n @HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE: See above\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_MODE_READONLY_MAY_MAKE_WRITABLE, however, using that mode\n   correctly is very tricky.  Use @HB_MEMORY_MODE_READONLY instead."]
564pub type hb_memory_mode_t = ::std::os::raw::c_uint;
565#[repr(C)]
566#[derive(Debug, Copy, Clone)]
567pub struct hb_blob_t {
568    _unused: [u8; 0],
569}
570extern "C" {
571    pub fn hb_blob_create(
572        data: *const ::std::os::raw::c_char,
573        length: ::std::os::raw::c_uint,
574        mode: hb_memory_mode_t,
575        user_data: *mut ::std::os::raw::c_void,
576        destroy: hb_destroy_func_t,
577    ) -> *mut hb_blob_t;
578}
579extern "C" {
580    pub fn hb_blob_create_or_fail(
581        data: *const ::std::os::raw::c_char,
582        length: ::std::os::raw::c_uint,
583        mode: hb_memory_mode_t,
584        user_data: *mut ::std::os::raw::c_void,
585        destroy: hb_destroy_func_t,
586    ) -> *mut hb_blob_t;
587}
588extern "C" {
589    pub fn hb_blob_create_from_file(file_name: *const ::std::os::raw::c_char) -> *mut hb_blob_t;
590}
591extern "C" {
592    pub fn hb_blob_create_from_file_or_fail(
593        file_name: *const ::std::os::raw::c_char,
594    ) -> *mut hb_blob_t;
595}
596extern "C" {
597    pub fn hb_blob_create_sub_blob(
598        parent: *mut hb_blob_t,
599        offset: ::std::os::raw::c_uint,
600        length: ::std::os::raw::c_uint,
601    ) -> *mut hb_blob_t;
602}
603extern "C" {
604    pub fn hb_blob_copy_writable_or_fail(blob: *mut hb_blob_t) -> *mut hb_blob_t;
605}
606extern "C" {
607    pub fn hb_blob_get_empty() -> *mut hb_blob_t;
608}
609extern "C" {
610    pub fn hb_blob_reference(blob: *mut hb_blob_t) -> *mut hb_blob_t;
611}
612extern "C" {
613    pub fn hb_blob_destroy(blob: *mut hb_blob_t);
614}
615extern "C" {
616    pub fn hb_blob_set_user_data(
617        blob: *mut hb_blob_t,
618        key: *mut hb_user_data_key_t,
619        data: *mut ::std::os::raw::c_void,
620        destroy: hb_destroy_func_t,
621        replace: hb_bool_t,
622    ) -> hb_bool_t;
623}
624extern "C" {
625    pub fn hb_blob_get_user_data(
626        blob: *const hb_blob_t,
627        key: *mut hb_user_data_key_t,
628    ) -> *mut ::std::os::raw::c_void;
629}
630extern "C" {
631    pub fn hb_blob_make_immutable(blob: *mut hb_blob_t);
632}
633extern "C" {
634    pub fn hb_blob_is_immutable(blob: *mut hb_blob_t) -> hb_bool_t;
635}
636extern "C" {
637    pub fn hb_blob_get_length(blob: *mut hb_blob_t) -> ::std::os::raw::c_uint;
638}
639extern "C" {
640    pub fn hb_blob_get_data(
641        blob: *mut hb_blob_t,
642        length: *mut ::std::os::raw::c_uint,
643    ) -> *const ::std::os::raw::c_char;
644}
645extern "C" {
646    pub fn hb_blob_get_data_writable(
647        blob: *mut hb_blob_t,
648        length: *mut ::std::os::raw::c_uint,
649    ) -> *mut ::std::os::raw::c_char;
650}
651pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_CONTROL:
652    hb_unicode_general_category_t = 0;
653pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_FORMAT:
654    hb_unicode_general_category_t = 1;
655pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_UNASSIGNED:
656    hb_unicode_general_category_t = 2;
657pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_PRIVATE_USE:
658    hb_unicode_general_category_t = 3;
659pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_SURROGATE:
660    hb_unicode_general_category_t = 4;
661pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_LOWERCASE_LETTER:
662    hb_unicode_general_category_t = 5;
663pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_MODIFIER_LETTER:
664    hb_unicode_general_category_t = 6;
665pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_OTHER_LETTER:
666    hb_unicode_general_category_t = 7;
667pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_TITLECASE_LETTER:
668    hb_unicode_general_category_t = 8;
669pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_UPPERCASE_LETTER:
670    hb_unicode_general_category_t = 9;
671pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_SPACING_MARK:
672    hb_unicode_general_category_t = 10;
673pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_ENCLOSING_MARK:
674    hb_unicode_general_category_t = 11;
675pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_NON_SPACING_MARK:
676    hb_unicode_general_category_t = 12;
677pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_DECIMAL_NUMBER:
678    hb_unicode_general_category_t = 13;
679pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_LETTER_NUMBER:
680    hb_unicode_general_category_t = 14;
681pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_OTHER_NUMBER:
682    hb_unicode_general_category_t = 15;
683pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_CONNECT_PUNCTUATION:
684    hb_unicode_general_category_t = 16;
685pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_DASH_PUNCTUATION:
686    hb_unicode_general_category_t = 17;
687pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION:
688    hb_unicode_general_category_t = 18;
689pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION:
690    hb_unicode_general_category_t = 19;
691pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION:
692    hb_unicode_general_category_t = 20;
693pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION:
694    hb_unicode_general_category_t = 21;
695pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION:
696    hb_unicode_general_category_t = 22;
697pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_CURRENCY_SYMBOL:
698    hb_unicode_general_category_t = 23;
699pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_MODIFIER_SYMBOL:
700    hb_unicode_general_category_t = 24;
701pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_MATH_SYMBOL:
702    hb_unicode_general_category_t = 25;
703pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_OTHER_SYMBOL:
704    hb_unicode_general_category_t = 26;
705pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_LINE_SEPARATOR:
706    hb_unicode_general_category_t = 27;
707pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_PARAGRAPH_SEPARATOR:
708    hb_unicode_general_category_t = 28;
709pub const hb_unicode_general_category_t_HB_UNICODE_GENERAL_CATEGORY_SPACE_SEPARATOR:
710    hb_unicode_general_category_t = 29;
711#[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."]
712pub type hb_unicode_general_category_t = ::std::os::raw::c_uint;
713pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_NOT_REORDERED:
714    hb_unicode_combining_class_t = 0;
715pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_OVERLAY:
716    hb_unicode_combining_class_t = 1;
717pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_NUKTA:
718    hb_unicode_combining_class_t = 7;
719pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_KANA_VOICING:
720    hb_unicode_combining_class_t = 8;
721pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_VIRAMA:
722    hb_unicode_combining_class_t = 9;
723pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC10:
724    hb_unicode_combining_class_t = 10;
725pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC11:
726    hb_unicode_combining_class_t = 11;
727pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC12:
728    hb_unicode_combining_class_t = 12;
729pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC13:
730    hb_unicode_combining_class_t = 13;
731pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC14:
732    hb_unicode_combining_class_t = 14;
733pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC15:
734    hb_unicode_combining_class_t = 15;
735pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC16:
736    hb_unicode_combining_class_t = 16;
737pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC17:
738    hb_unicode_combining_class_t = 17;
739pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC18:
740    hb_unicode_combining_class_t = 18;
741pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC19:
742    hb_unicode_combining_class_t = 19;
743pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC20:
744    hb_unicode_combining_class_t = 20;
745pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC21:
746    hb_unicode_combining_class_t = 21;
747pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC22:
748    hb_unicode_combining_class_t = 22;
749pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC23:
750    hb_unicode_combining_class_t = 23;
751pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC24:
752    hb_unicode_combining_class_t = 24;
753pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC25:
754    hb_unicode_combining_class_t = 25;
755pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC26:
756    hb_unicode_combining_class_t = 26;
757pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC27:
758    hb_unicode_combining_class_t = 27;
759pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC28:
760    hb_unicode_combining_class_t = 28;
761pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC29:
762    hb_unicode_combining_class_t = 29;
763pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC30:
764    hb_unicode_combining_class_t = 30;
765pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC31:
766    hb_unicode_combining_class_t = 31;
767pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC32:
768    hb_unicode_combining_class_t = 32;
769pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC33:
770    hb_unicode_combining_class_t = 33;
771pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC34:
772    hb_unicode_combining_class_t = 34;
773pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC35:
774    hb_unicode_combining_class_t = 35;
775pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC36:
776    hb_unicode_combining_class_t = 36;
777pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC84:
778    hb_unicode_combining_class_t = 84;
779pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC91:
780    hb_unicode_combining_class_t = 91;
781pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC103:
782    hb_unicode_combining_class_t = 103;
783pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC107:
784    hb_unicode_combining_class_t = 107;
785pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC118:
786    hb_unicode_combining_class_t = 118;
787pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC122:
788    hb_unicode_combining_class_t = 122;
789pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC129:
790    hb_unicode_combining_class_t = 129;
791pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC130:
792    hb_unicode_combining_class_t = 130;
793pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_CCC132:
794    hb_unicode_combining_class_t = 132;
795pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW_LEFT:
796    hb_unicode_combining_class_t = 200;
797pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ATTACHED_BELOW:
798    hb_unicode_combining_class_t = 202;
799pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE:
800    hb_unicode_combining_class_t = 214;
801pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ATTACHED_ABOVE_RIGHT:
802    hb_unicode_combining_class_t = 216;
803pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_BELOW_LEFT:
804    hb_unicode_combining_class_t = 218;
805pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_BELOW:
806    hb_unicode_combining_class_t = 220;
807pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_BELOW_RIGHT:
808    hb_unicode_combining_class_t = 222;
809pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_LEFT:
810    hb_unicode_combining_class_t = 224;
811pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_RIGHT:
812    hb_unicode_combining_class_t = 226;
813pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ABOVE_LEFT:
814    hb_unicode_combining_class_t = 228;
815pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ABOVE:
816    hb_unicode_combining_class_t = 230;
817pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_ABOVE_RIGHT:
818    hb_unicode_combining_class_t = 232;
819pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_DOUBLE_BELOW:
820    hb_unicode_combining_class_t = 233;
821pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_DOUBLE_ABOVE:
822    hb_unicode_combining_class_t = 234;
823pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_IOTA_SUBSCRIPT:
824    hb_unicode_combining_class_t = 240;
825pub const hb_unicode_combining_class_t_HB_UNICODE_COMBINING_CLASS_INVALID:
826    hb_unicode_combining_class_t = 255;
827#[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_CCC132: [Tibetan] Since: 7.2.0\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"]
828pub type hb_unicode_combining_class_t = ::std::os::raw::c_uint;
829#[repr(C)]
830#[derive(Debug, Copy, Clone)]
831pub struct hb_unicode_funcs_t {
832    _unused: [u8; 0],
833}
834extern "C" {
835    pub fn hb_unicode_funcs_get_default() -> *mut hb_unicode_funcs_t;
836}
837extern "C" {
838    pub fn hb_unicode_funcs_create(parent: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
839}
840extern "C" {
841    pub fn hb_unicode_funcs_get_empty() -> *mut hb_unicode_funcs_t;
842}
843extern "C" {
844    pub fn hb_unicode_funcs_reference(ufuncs: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
845}
846extern "C" {
847    pub fn hb_unicode_funcs_destroy(ufuncs: *mut hb_unicode_funcs_t);
848}
849extern "C" {
850    pub fn hb_unicode_funcs_set_user_data(
851        ufuncs: *mut hb_unicode_funcs_t,
852        key: *mut hb_user_data_key_t,
853        data: *mut ::std::os::raw::c_void,
854        destroy: hb_destroy_func_t,
855        replace: hb_bool_t,
856    ) -> hb_bool_t;
857}
858extern "C" {
859    pub fn hb_unicode_funcs_get_user_data(
860        ufuncs: *const hb_unicode_funcs_t,
861        key: *mut hb_user_data_key_t,
862    ) -> *mut ::std::os::raw::c_void;
863}
864extern "C" {
865    pub fn hb_unicode_funcs_make_immutable(ufuncs: *mut hb_unicode_funcs_t);
866}
867extern "C" {
868    pub fn hb_unicode_funcs_is_immutable(ufuncs: *mut hb_unicode_funcs_t) -> hb_bool_t;
869}
870extern "C" {
871    pub fn hb_unicode_funcs_get_parent(ufuncs: *mut hb_unicode_funcs_t) -> *mut hb_unicode_funcs_t;
872}
873#[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"]
874pub type hb_unicode_combining_class_func_t = ::std::option::Option<
875    unsafe extern "C" fn(
876        ufuncs: *mut hb_unicode_funcs_t,
877        unicode: hb_codepoint_t,
878        user_data: *mut ::std::os::raw::c_void,
879    ) -> hb_unicode_combining_class_t,
880>;
881#[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"]
882pub type hb_unicode_general_category_func_t = ::std::option::Option<
883    unsafe extern "C" fn(
884        ufuncs: *mut hb_unicode_funcs_t,
885        unicode: hb_codepoint_t,
886        user_data: *mut ::std::os::raw::c_void,
887    ) -> hb_unicode_general_category_t,
888>;
889#[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"]
890pub type hb_unicode_mirroring_func_t = ::std::option::Option<
891    unsafe extern "C" fn(
892        ufuncs: *mut hb_unicode_funcs_t,
893        unicode: hb_codepoint_t,
894        user_data: *mut ::std::os::raw::c_void,
895    ) -> hb_codepoint_t,
896>;
897#[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"]
898pub type hb_unicode_script_func_t = ::std::option::Option<
899    unsafe extern "C" fn(
900        ufuncs: *mut hb_unicode_funcs_t,
901        unicode: hb_codepoint_t,
902        user_data: *mut ::std::os::raw::c_void,
903    ) -> hb_script_t,
904>;
905#[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"]
906pub type hb_unicode_compose_func_t = ::std::option::Option<
907    unsafe extern "C" fn(
908        ufuncs: *mut hb_unicode_funcs_t,
909        a: hb_codepoint_t,
910        b: hb_codepoint_t,
911        ab: *mut hb_codepoint_t,
912        user_data: *mut ::std::os::raw::c_void,
913    ) -> hb_bool_t,
914>;
915#[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"]
916pub type hb_unicode_decompose_func_t = ::std::option::Option<
917    unsafe extern "C" fn(
918        ufuncs: *mut hb_unicode_funcs_t,
919        ab: hb_codepoint_t,
920        a: *mut hb_codepoint_t,
921        b: *mut hb_codepoint_t,
922        user_data: *mut ::std::os::raw::c_void,
923    ) -> hb_bool_t,
924>;
925extern "C" {
926    #[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: (nullable): 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"]
927    pub fn hb_unicode_funcs_set_combining_class_func(
928        ufuncs: *mut hb_unicode_funcs_t,
929        func: hb_unicode_combining_class_func_t,
930        user_data: *mut ::std::os::raw::c_void,
931        destroy: hb_destroy_func_t,
932    );
933}
934extern "C" {
935    #[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: (nullable): 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"]
936    pub fn hb_unicode_funcs_set_general_category_func(
937        ufuncs: *mut hb_unicode_funcs_t,
938        func: hb_unicode_general_category_func_t,
939        user_data: *mut ::std::os::raw::c_void,
940        destroy: hb_destroy_func_t,
941    );
942}
943extern "C" {
944    #[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: (nullable): 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"]
945    pub fn hb_unicode_funcs_set_mirroring_func(
946        ufuncs: *mut hb_unicode_funcs_t,
947        func: hb_unicode_mirroring_func_t,
948        user_data: *mut ::std::os::raw::c_void,
949        destroy: hb_destroy_func_t,
950    );
951}
952extern "C" {
953    #[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: (nullable): 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"]
954    pub fn hb_unicode_funcs_set_script_func(
955        ufuncs: *mut hb_unicode_funcs_t,
956        func: hb_unicode_script_func_t,
957        user_data: *mut ::std::os::raw::c_void,
958        destroy: hb_destroy_func_t,
959    );
960}
961extern "C" {
962    #[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: (nullable): 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"]
963    pub fn hb_unicode_funcs_set_compose_func(
964        ufuncs: *mut hb_unicode_funcs_t,
965        func: hb_unicode_compose_func_t,
966        user_data: *mut ::std::os::raw::c_void,
967        destroy: hb_destroy_func_t,
968    );
969}
970extern "C" {
971    #[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: (nullable): 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"]
972    pub fn hb_unicode_funcs_set_decompose_func(
973        ufuncs: *mut hb_unicode_funcs_t,
974        func: hb_unicode_decompose_func_t,
975        user_data: *mut ::std::os::raw::c_void,
976        destroy: hb_destroy_func_t,
977    );
978}
979extern "C" {
980    #[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"]
981    pub fn hb_unicode_combining_class(
982        ufuncs: *mut hb_unicode_funcs_t,
983        unicode: hb_codepoint_t,
984    ) -> hb_unicode_combining_class_t;
985}
986extern "C" {
987    #[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"]
988    pub fn hb_unicode_general_category(
989        ufuncs: *mut hb_unicode_funcs_t,
990        unicode: hb_codepoint_t,
991    ) -> hb_unicode_general_category_t;
992}
993extern "C" {
994    #[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"]
995    pub fn hb_unicode_mirroring(
996        ufuncs: *mut hb_unicode_funcs_t,
997        unicode: hb_codepoint_t,
998    ) -> hb_codepoint_t;
999}
1000extern "C" {
1001    #[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"]
1002    pub fn hb_unicode_script(
1003        ufuncs: *mut hb_unicode_funcs_t,
1004        unicode: hb_codepoint_t,
1005    ) -> hb_script_t;
1006}
1007extern "C" {
1008    pub fn hb_unicode_compose(
1009        ufuncs: *mut hb_unicode_funcs_t,
1010        a: hb_codepoint_t,
1011        b: hb_codepoint_t,
1012        ab: *mut hb_codepoint_t,
1013    ) -> hb_bool_t;
1014}
1015extern "C" {
1016    pub fn hb_unicode_decompose(
1017        ufuncs: *mut hb_unicode_funcs_t,
1018        ab: hb_codepoint_t,
1019        a: *mut hb_codepoint_t,
1020        b: *mut hb_codepoint_t,
1021    ) -> hb_bool_t;
1022}
1023#[repr(C)]
1024#[derive(Debug, Copy, Clone)]
1025pub struct hb_set_t {
1026    _unused: [u8; 0],
1027}
1028extern "C" {
1029    pub fn hb_set_create() -> *mut hb_set_t;
1030}
1031extern "C" {
1032    pub fn hb_set_get_empty() -> *mut hb_set_t;
1033}
1034extern "C" {
1035    pub fn hb_set_reference(set: *mut hb_set_t) -> *mut hb_set_t;
1036}
1037extern "C" {
1038    pub fn hb_set_destroy(set: *mut hb_set_t);
1039}
1040extern "C" {
1041    pub fn hb_set_set_user_data(
1042        set: *mut hb_set_t,
1043        key: *mut hb_user_data_key_t,
1044        data: *mut ::std::os::raw::c_void,
1045        destroy: hb_destroy_func_t,
1046        replace: hb_bool_t,
1047    ) -> hb_bool_t;
1048}
1049extern "C" {
1050    pub fn hb_set_get_user_data(
1051        set: *const hb_set_t,
1052        key: *mut hb_user_data_key_t,
1053    ) -> *mut ::std::os::raw::c_void;
1054}
1055extern "C" {
1056    pub fn hb_set_allocation_successful(set: *const hb_set_t) -> hb_bool_t;
1057}
1058extern "C" {
1059    pub fn hb_set_copy(set: *const hb_set_t) -> *mut hb_set_t;
1060}
1061extern "C" {
1062    pub fn hb_set_clear(set: *mut hb_set_t);
1063}
1064extern "C" {
1065    pub fn hb_set_is_empty(set: *const hb_set_t) -> hb_bool_t;
1066}
1067extern "C" {
1068    pub fn hb_set_invert(set: *mut hb_set_t);
1069}
1070extern "C" {
1071    pub fn hb_set_is_inverted(set: *const hb_set_t) -> hb_bool_t;
1072}
1073extern "C" {
1074    pub fn hb_set_has(set: *const hb_set_t, codepoint: hb_codepoint_t) -> hb_bool_t;
1075}
1076extern "C" {
1077    pub fn hb_set_add(set: *mut hb_set_t, codepoint: hb_codepoint_t);
1078}
1079extern "C" {
1080    pub fn hb_set_add_range(set: *mut hb_set_t, first: hb_codepoint_t, last: hb_codepoint_t);
1081}
1082extern "C" {
1083    pub fn hb_set_add_sorted_array(
1084        set: *mut hb_set_t,
1085        sorted_codepoints: *const hb_codepoint_t,
1086        num_codepoints: ::std::os::raw::c_uint,
1087    );
1088}
1089extern "C" {
1090    pub fn hb_set_del(set: *mut hb_set_t, codepoint: hb_codepoint_t);
1091}
1092extern "C" {
1093    pub fn hb_set_del_range(set: *mut hb_set_t, first: hb_codepoint_t, last: hb_codepoint_t);
1094}
1095extern "C" {
1096    pub fn hb_set_is_equal(set: *const hb_set_t, other: *const hb_set_t) -> hb_bool_t;
1097}
1098extern "C" {
1099    pub fn hb_set_hash(set: *const hb_set_t) -> ::std::os::raw::c_uint;
1100}
1101extern "C" {
1102    pub fn hb_set_is_subset(set: *const hb_set_t, larger_set: *const hb_set_t) -> hb_bool_t;
1103}
1104extern "C" {
1105    pub fn hb_set_set(set: *mut hb_set_t, other: *const hb_set_t);
1106}
1107extern "C" {
1108    pub fn hb_set_union(set: *mut hb_set_t, other: *const hb_set_t);
1109}
1110extern "C" {
1111    pub fn hb_set_intersect(set: *mut hb_set_t, other: *const hb_set_t);
1112}
1113extern "C" {
1114    pub fn hb_set_subtract(set: *mut hb_set_t, other: *const hb_set_t);
1115}
1116extern "C" {
1117    pub fn hb_set_symmetric_difference(set: *mut hb_set_t, other: *const hb_set_t);
1118}
1119extern "C" {
1120    pub fn hb_set_get_population(set: *const hb_set_t) -> ::std::os::raw::c_uint;
1121}
1122extern "C" {
1123    pub fn hb_set_get_min(set: *const hb_set_t) -> hb_codepoint_t;
1124}
1125extern "C" {
1126    pub fn hb_set_get_max(set: *const hb_set_t) -> hb_codepoint_t;
1127}
1128extern "C" {
1129    pub fn hb_set_next(set: *const hb_set_t, codepoint: *mut hb_codepoint_t) -> hb_bool_t;
1130}
1131extern "C" {
1132    pub fn hb_set_previous(set: *const hb_set_t, codepoint: *mut hb_codepoint_t) -> hb_bool_t;
1133}
1134extern "C" {
1135    pub fn hb_set_next_range(
1136        set: *const hb_set_t,
1137        first: *mut hb_codepoint_t,
1138        last: *mut hb_codepoint_t,
1139    ) -> hb_bool_t;
1140}
1141extern "C" {
1142    pub fn hb_set_previous_range(
1143        set: *const hb_set_t,
1144        first: *mut hb_codepoint_t,
1145        last: *mut hb_codepoint_t,
1146    ) -> hb_bool_t;
1147}
1148extern "C" {
1149    pub fn hb_set_next_many(
1150        set: *const hb_set_t,
1151        codepoint: hb_codepoint_t,
1152        out: *mut hb_codepoint_t,
1153        size: ::std::os::raw::c_uint,
1154    ) -> ::std::os::raw::c_uint;
1155}
1156#[repr(C)]
1157#[derive(Debug, Copy, Clone)]
1158pub struct hb_map_t {
1159    _unused: [u8; 0],
1160}
1161extern "C" {
1162    pub fn hb_map_create() -> *mut hb_map_t;
1163}
1164extern "C" {
1165    pub fn hb_map_get_empty() -> *mut hb_map_t;
1166}
1167extern "C" {
1168    pub fn hb_map_reference(map: *mut hb_map_t) -> *mut hb_map_t;
1169}
1170extern "C" {
1171    pub fn hb_map_destroy(map: *mut hb_map_t);
1172}
1173extern "C" {
1174    pub fn hb_map_set_user_data(
1175        map: *mut hb_map_t,
1176        key: *mut hb_user_data_key_t,
1177        data: *mut ::std::os::raw::c_void,
1178        destroy: hb_destroy_func_t,
1179        replace: hb_bool_t,
1180    ) -> hb_bool_t;
1181}
1182extern "C" {
1183    pub fn hb_map_get_user_data(
1184        map: *const hb_map_t,
1185        key: *mut hb_user_data_key_t,
1186    ) -> *mut ::std::os::raw::c_void;
1187}
1188extern "C" {
1189    pub fn hb_map_allocation_successful(map: *const hb_map_t) -> hb_bool_t;
1190}
1191extern "C" {
1192    pub fn hb_map_copy(map: *const hb_map_t) -> *mut hb_map_t;
1193}
1194extern "C" {
1195    pub fn hb_map_clear(map: *mut hb_map_t);
1196}
1197extern "C" {
1198    pub fn hb_map_is_empty(map: *const hb_map_t) -> hb_bool_t;
1199}
1200extern "C" {
1201    pub fn hb_map_get_population(map: *const hb_map_t) -> ::std::os::raw::c_uint;
1202}
1203extern "C" {
1204    pub fn hb_map_is_equal(map: *const hb_map_t, other: *const hb_map_t) -> hb_bool_t;
1205}
1206extern "C" {
1207    pub fn hb_map_hash(map: *const hb_map_t) -> ::std::os::raw::c_uint;
1208}
1209extern "C" {
1210    pub fn hb_map_set(map: *mut hb_map_t, key: hb_codepoint_t, value: hb_codepoint_t);
1211}
1212extern "C" {
1213    pub fn hb_map_get(map: *const hb_map_t, key: hb_codepoint_t) -> hb_codepoint_t;
1214}
1215extern "C" {
1216    pub fn hb_map_del(map: *mut hb_map_t, key: hb_codepoint_t);
1217}
1218extern "C" {
1219    pub fn hb_map_has(map: *const hb_map_t, key: hb_codepoint_t) -> hb_bool_t;
1220}
1221extern "C" {
1222    pub fn hb_map_update(map: *mut hb_map_t, other: *const hb_map_t);
1223}
1224extern "C" {
1225    pub fn hb_map_next(
1226        map: *const hb_map_t,
1227        idx: *mut ::std::os::raw::c_int,
1228        key: *mut hb_codepoint_t,
1229        value: *mut hb_codepoint_t,
1230    ) -> hb_bool_t;
1231}
1232extern "C" {
1233    pub fn hb_map_keys(map: *const hb_map_t, keys: *mut hb_set_t);
1234}
1235extern "C" {
1236    pub fn hb_map_values(map: *const hb_map_t, values: *mut hb_set_t);
1237}
1238extern "C" {
1239    pub fn hb_face_count(blob: *mut hb_blob_t) -> ::std::os::raw::c_uint;
1240}
1241#[repr(C)]
1242#[derive(Debug, Copy, Clone)]
1243pub struct hb_face_t {
1244    _unused: [u8; 0],
1245}
1246extern "C" {
1247    pub fn hb_face_create(blob: *mut hb_blob_t, index: ::std::os::raw::c_uint) -> *mut hb_face_t;
1248}
1249#[doc = " hb_reference_table_func_t:\n @face: an #hb_face_t to reference table for\n @tag: the tag of the table to reference\n @user_data: User data pointer passed by the caller\n\n Callback function for hb_face_create_for_tables().\n\n Return value: (transfer full): A pointer to the @tag table within @face\n\n Since: 0.9.2"]
1250pub type hb_reference_table_func_t = ::std::option::Option<
1251    unsafe extern "C" fn(
1252        face: *mut hb_face_t,
1253        tag: hb_tag_t,
1254        user_data: *mut ::std::os::raw::c_void,
1255    ) -> *mut hb_blob_t,
1256>;
1257extern "C" {
1258    pub fn hb_face_create_for_tables(
1259        reference_table_func: hb_reference_table_func_t,
1260        user_data: *mut ::std::os::raw::c_void,
1261        destroy: hb_destroy_func_t,
1262    ) -> *mut hb_face_t;
1263}
1264extern "C" {
1265    pub fn hb_face_get_empty() -> *mut hb_face_t;
1266}
1267extern "C" {
1268    pub fn hb_face_reference(face: *mut hb_face_t) -> *mut hb_face_t;
1269}
1270extern "C" {
1271    pub fn hb_face_destroy(face: *mut hb_face_t);
1272}
1273extern "C" {
1274    pub fn hb_face_set_user_data(
1275        face: *mut hb_face_t,
1276        key: *mut hb_user_data_key_t,
1277        data: *mut ::std::os::raw::c_void,
1278        destroy: hb_destroy_func_t,
1279        replace: hb_bool_t,
1280    ) -> hb_bool_t;
1281}
1282extern "C" {
1283    pub fn hb_face_get_user_data(
1284        face: *const hb_face_t,
1285        key: *mut hb_user_data_key_t,
1286    ) -> *mut ::std::os::raw::c_void;
1287}
1288extern "C" {
1289    pub fn hb_face_make_immutable(face: *mut hb_face_t);
1290}
1291extern "C" {
1292    pub fn hb_face_is_immutable(face: *const hb_face_t) -> hb_bool_t;
1293}
1294extern "C" {
1295    pub fn hb_face_reference_table(face: *const hb_face_t, tag: hb_tag_t) -> *mut hb_blob_t;
1296}
1297extern "C" {
1298    pub fn hb_face_reference_blob(face: *mut hb_face_t) -> *mut hb_blob_t;
1299}
1300extern "C" {
1301    pub fn hb_face_set_index(face: *mut hb_face_t, index: ::std::os::raw::c_uint);
1302}
1303extern "C" {
1304    pub fn hb_face_get_index(face: *const hb_face_t) -> ::std::os::raw::c_uint;
1305}
1306extern "C" {
1307    pub fn hb_face_set_upem(face: *mut hb_face_t, upem: ::std::os::raw::c_uint);
1308}
1309extern "C" {
1310    pub fn hb_face_get_upem(face: *const hb_face_t) -> ::std::os::raw::c_uint;
1311}
1312extern "C" {
1313    pub fn hb_face_set_glyph_count(face: *mut hb_face_t, glyph_count: ::std::os::raw::c_uint);
1314}
1315extern "C" {
1316    pub fn hb_face_get_glyph_count(face: *const hb_face_t) -> ::std::os::raw::c_uint;
1317}
1318extern "C" {
1319    pub fn hb_face_get_table_tags(
1320        face: *const hb_face_t,
1321        start_offset: ::std::os::raw::c_uint,
1322        table_count: *mut ::std::os::raw::c_uint,
1323        table_tags: *mut hb_tag_t,
1324    ) -> ::std::os::raw::c_uint;
1325}
1326extern "C" {
1327    pub fn hb_face_collect_unicodes(face: *mut hb_face_t, out: *mut hb_set_t);
1328}
1329extern "C" {
1330    pub fn hb_face_collect_nominal_glyph_mapping(
1331        face: *mut hb_face_t,
1332        mapping: *mut hb_map_t,
1333        unicodes: *mut hb_set_t,
1334    );
1335}
1336extern "C" {
1337    pub fn hb_face_collect_variation_selectors(face: *mut hb_face_t, out: *mut hb_set_t);
1338}
1339extern "C" {
1340    pub fn hb_face_collect_variation_unicodes(
1341        face: *mut hb_face_t,
1342        variation_selector: hb_codepoint_t,
1343        out: *mut hb_set_t,
1344    );
1345}
1346extern "C" {
1347    pub fn hb_face_builder_create() -> *mut hb_face_t;
1348}
1349extern "C" {
1350    pub fn hb_face_builder_add_table(
1351        face: *mut hb_face_t,
1352        tag: hb_tag_t,
1353        blob: *mut hb_blob_t,
1354    ) -> hb_bool_t;
1355}
1356extern "C" {
1357    pub fn hb_face_builder_sort_tables(face: *mut hb_face_t, tags: *const hb_tag_t);
1358}
1359#[doc = " hb_draw_state_t\n @path_open: Whether there is an open path\n @path_start_x: X component of the start of current path\n @path_start_y: Y component of the start of current path\n @current_x: X component of current point\n @current_y: Y component of current point\n\n Current drawing state.\n\n Since: 4.0.0"]
1360#[repr(C)]
1361#[derive(Copy, Clone)]
1362pub struct hb_draw_state_t {
1363    pub path_open: hb_bool_t,
1364    pub path_start_x: f32,
1365    pub path_start_y: f32,
1366    pub current_x: f32,
1367    pub current_y: f32,
1368    pub reserved1: hb_var_num_t,
1369    pub reserved2: hb_var_num_t,
1370    pub reserved3: hb_var_num_t,
1371    pub reserved4: hb_var_num_t,
1372    pub reserved5: hb_var_num_t,
1373    pub reserved6: hb_var_num_t,
1374    pub reserved7: hb_var_num_t,
1375}
1376#[test]
1377fn bindgen_test_layout_hb_draw_state_t() {
1378    const UNINIT: ::std::mem::MaybeUninit<hb_draw_state_t> = ::std::mem::MaybeUninit::uninit();
1379    let ptr = UNINIT.as_ptr();
1380    assert_eq!(
1381        ::std::mem::size_of::<hb_draw_state_t>(),
1382        48usize,
1383        concat!("Size of: ", stringify!(hb_draw_state_t))
1384    );
1385    assert_eq!(
1386        ::std::mem::align_of::<hb_draw_state_t>(),
1387        4usize,
1388        concat!("Alignment of ", stringify!(hb_draw_state_t))
1389    );
1390    assert_eq!(
1391        unsafe { ::std::ptr::addr_of!((*ptr).path_open) as usize - ptr as usize },
1392        0usize,
1393        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(path_open))
1394    );
1395    assert_eq!(
1396        unsafe { ::std::ptr::addr_of!((*ptr).path_start_x) as usize - ptr as usize },
1397        4usize,
1398        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(path_start_x))
1399    );
1400    assert_eq!(
1401        unsafe { ::std::ptr::addr_of!((*ptr).path_start_y) as usize - ptr as usize },
1402        8usize,
1403        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(path_start_y))
1404    );
1405    assert_eq!(
1406        unsafe { ::std::ptr::addr_of!((*ptr).current_x) as usize - ptr as usize },
1407        12usize,
1408        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(current_x))
1409    );
1410    assert_eq!(
1411        unsafe { ::std::ptr::addr_of!((*ptr).current_y) as usize - ptr as usize },
1412        16usize,
1413        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(current_y))
1414    );
1415    assert_eq!(
1416        unsafe { ::std::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
1417        20usize,
1418        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved1))
1419    );
1420    assert_eq!(
1421        unsafe { ::std::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
1422        24usize,
1423        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved2))
1424    );
1425    assert_eq!(
1426        unsafe { ::std::ptr::addr_of!((*ptr).reserved3) as usize - ptr as usize },
1427        28usize,
1428        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved3))
1429    );
1430    assert_eq!(
1431        unsafe { ::std::ptr::addr_of!((*ptr).reserved4) as usize - ptr as usize },
1432        32usize,
1433        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved4))
1434    );
1435    assert_eq!(
1436        unsafe { ::std::ptr::addr_of!((*ptr).reserved5) as usize - ptr as usize },
1437        36usize,
1438        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved5))
1439    );
1440    assert_eq!(
1441        unsafe { ::std::ptr::addr_of!((*ptr).reserved6) as usize - ptr as usize },
1442        40usize,
1443        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved6))
1444    );
1445    assert_eq!(
1446        unsafe { ::std::ptr::addr_of!((*ptr).reserved7) as usize - ptr as usize },
1447        44usize,
1448        concat!("Offset of field: ", stringify!(hb_draw_state_t), "::", stringify!(reserved7))
1449    );
1450}
1451#[repr(C)]
1452#[derive(Debug, Copy, Clone)]
1453pub struct hb_draw_funcs_t {
1454    _unused: [u8; 0],
1455}
1456#[doc = " hb_draw_move_to_func_t:\n @dfuncs: draw functions object\n @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()\n @st: current draw state\n @to_x: X component of target point\n @to_y: Y component of target point\n @user_data: User data pointer passed to hb_draw_funcs_set_move_to_func()\n\n A virtual method for the #hb_draw_funcs_t to perform a \"move-to\" draw\n operation.\n\n Since: 4.0.0\n"]
1457pub type hb_draw_move_to_func_t = ::std::option::Option<
1458    unsafe extern "C" fn(
1459        dfuncs: *mut hb_draw_funcs_t,
1460        draw_data: *mut ::std::os::raw::c_void,
1461        st: *mut hb_draw_state_t,
1462        to_x: f32,
1463        to_y: f32,
1464        user_data: *mut ::std::os::raw::c_void,
1465    ),
1466>;
1467#[doc = " hb_draw_line_to_func_t:\n @dfuncs: draw functions object\n @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()\n @st: current draw state\n @to_x: X component of target point\n @to_y: Y component of target point\n @user_data: User data pointer passed to hb_draw_funcs_set_line_to_func()\n\n A virtual method for the #hb_draw_funcs_t to perform a \"line-to\" draw\n operation.\n\n Since: 4.0.0\n"]
1468pub type hb_draw_line_to_func_t = ::std::option::Option<
1469    unsafe extern "C" fn(
1470        dfuncs: *mut hb_draw_funcs_t,
1471        draw_data: *mut ::std::os::raw::c_void,
1472        st: *mut hb_draw_state_t,
1473        to_x: f32,
1474        to_y: f32,
1475        user_data: *mut ::std::os::raw::c_void,
1476    ),
1477>;
1478#[doc = " hb_draw_quadratic_to_func_t:\n @dfuncs: draw functions object\n @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()\n @st: current draw state\n @control_x: X component of control point\n @control_y: Y component of control point\n @to_x: X component of target point\n @to_y: Y component of target point\n @user_data: User data pointer passed to hb_draw_funcs_set_quadratic_to_func()\n\n A virtual method for the #hb_draw_funcs_t to perform a \"quadratic-to\" draw\n operation.\n\n Since: 4.0.0\n"]
1479pub type hb_draw_quadratic_to_func_t = ::std::option::Option<
1480    unsafe extern "C" fn(
1481        dfuncs: *mut hb_draw_funcs_t,
1482        draw_data: *mut ::std::os::raw::c_void,
1483        st: *mut hb_draw_state_t,
1484        control_x: f32,
1485        control_y: f32,
1486        to_x: f32,
1487        to_y: f32,
1488        user_data: *mut ::std::os::raw::c_void,
1489    ),
1490>;
1491#[doc = " hb_draw_cubic_to_func_t:\n @dfuncs: draw functions object\n @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()\n @st: current draw state\n @control1_x: X component of first control point\n @control1_y: Y component of first control point\n @control2_x: X component of second control point\n @control2_y: Y component of second control point\n @to_x: X component of target point\n @to_y: Y component of target point\n @user_data: User data pointer passed to hb_draw_funcs_set_cubic_to_func()\n\n A virtual method for the #hb_draw_funcs_t to perform a \"cubic-to\" draw\n operation.\n\n Since: 4.0.0\n"]
1492pub type hb_draw_cubic_to_func_t = ::std::option::Option<
1493    unsafe extern "C" fn(
1494        dfuncs: *mut hb_draw_funcs_t,
1495        draw_data: *mut ::std::os::raw::c_void,
1496        st: *mut hb_draw_state_t,
1497        control1_x: f32,
1498        control1_y: f32,
1499        control2_x: f32,
1500        control2_y: f32,
1501        to_x: f32,
1502        to_y: f32,
1503        user_data: *mut ::std::os::raw::c_void,
1504    ),
1505>;
1506#[doc = " hb_draw_close_path_func_t:\n @dfuncs: draw functions object\n @draw_data: The data accompanying the draw functions in hb_font_draw_glyph()\n @st: current draw state\n @user_data: User data pointer passed to hb_draw_funcs_set_close_path_func()\n\n A virtual method for the #hb_draw_funcs_t to perform a \"close-path\" draw\n operation.\n\n Since: 4.0.0\n"]
1507pub type hb_draw_close_path_func_t = ::std::option::Option<
1508    unsafe extern "C" fn(
1509        dfuncs: *mut hb_draw_funcs_t,
1510        draw_data: *mut ::std::os::raw::c_void,
1511        st: *mut hb_draw_state_t,
1512        user_data: *mut ::std::os::raw::c_void,
1513    ),
1514>;
1515extern "C" {
1516    #[doc = " hb_draw_funcs_set_move_to_func:\n @dfuncs: draw functions object\n @func: (closure user_data) (destroy destroy) (scope notified): move-to callback\n @user_data: Data to pass to @func\n @destroy: (nullable): The function to call when @user_data is not needed anymore\n\n Sets move-to callback to the draw functions object.\n\n Since: 4.0.0"]
1517    pub fn hb_draw_funcs_set_move_to_func(
1518        dfuncs: *mut hb_draw_funcs_t,
1519        func: hb_draw_move_to_func_t,
1520        user_data: *mut ::std::os::raw::c_void,
1521        destroy: hb_destroy_func_t,
1522    );
1523}
1524extern "C" {
1525    #[doc = " hb_draw_funcs_set_line_to_func:\n @dfuncs: draw functions object\n @func: (closure user_data) (destroy destroy) (scope notified): line-to callback\n @user_data: Data to pass to @func\n @destroy: (nullable): The function to call when @user_data is not needed anymore\n\n Sets line-to callback to the draw functions object.\n\n Since: 4.0.0"]
1526    pub fn hb_draw_funcs_set_line_to_func(
1527        dfuncs: *mut hb_draw_funcs_t,
1528        func: hb_draw_line_to_func_t,
1529        user_data: *mut ::std::os::raw::c_void,
1530        destroy: hb_destroy_func_t,
1531    );
1532}
1533extern "C" {
1534    #[doc = " hb_draw_funcs_set_quadratic_to_func:\n @dfuncs: draw functions object\n @func: (closure user_data) (destroy destroy) (scope notified): quadratic-to callback\n @user_data: Data to pass to @func\n @destroy: (nullable): The function to call when @user_data is not needed anymore\n\n Sets quadratic-to callback to the draw functions object.\n\n Since: 4.0.0"]
1535    pub fn hb_draw_funcs_set_quadratic_to_func(
1536        dfuncs: *mut hb_draw_funcs_t,
1537        func: hb_draw_quadratic_to_func_t,
1538        user_data: *mut ::std::os::raw::c_void,
1539        destroy: hb_destroy_func_t,
1540    );
1541}
1542extern "C" {
1543    #[doc = " hb_draw_funcs_set_cubic_to_func:\n @dfuncs: draw functions\n @func: (closure user_data) (destroy destroy) (scope notified): cubic-to callback\n @user_data: Data to pass to @func\n @destroy: (nullable): The function to call when @user_data is not needed anymore\n\n Sets cubic-to callback to the draw functions object.\n\n Since: 4.0.0"]
1544    pub fn hb_draw_funcs_set_cubic_to_func(
1545        dfuncs: *mut hb_draw_funcs_t,
1546        func: hb_draw_cubic_to_func_t,
1547        user_data: *mut ::std::os::raw::c_void,
1548        destroy: hb_destroy_func_t,
1549    );
1550}
1551extern "C" {
1552    #[doc = " hb_draw_funcs_set_close_path_func:\n @dfuncs: draw functions object\n @func: (closure user_data) (destroy destroy) (scope notified): close-path callback\n @user_data: Data to pass to @func\n @destroy: (nullable): The function to call when @user_data is not needed anymore\n\n Sets close-path callback to the draw functions object.\n\n Since: 4.0.0"]
1553    pub fn hb_draw_funcs_set_close_path_func(
1554        dfuncs: *mut hb_draw_funcs_t,
1555        func: hb_draw_close_path_func_t,
1556        user_data: *mut ::std::os::raw::c_void,
1557        destroy: hb_destroy_func_t,
1558    );
1559}
1560extern "C" {
1561    pub fn hb_draw_funcs_create() -> *mut hb_draw_funcs_t;
1562}
1563extern "C" {
1564    pub fn hb_draw_funcs_get_empty() -> *mut hb_draw_funcs_t;
1565}
1566extern "C" {
1567    pub fn hb_draw_funcs_reference(dfuncs: *mut hb_draw_funcs_t) -> *mut hb_draw_funcs_t;
1568}
1569extern "C" {
1570    pub fn hb_draw_funcs_destroy(dfuncs: *mut hb_draw_funcs_t);
1571}
1572extern "C" {
1573    pub fn hb_draw_funcs_set_user_data(
1574        dfuncs: *mut hb_draw_funcs_t,
1575        key: *mut hb_user_data_key_t,
1576        data: *mut ::std::os::raw::c_void,
1577        destroy: hb_destroy_func_t,
1578        replace: hb_bool_t,
1579    ) -> hb_bool_t;
1580}
1581extern "C" {
1582    pub fn hb_draw_funcs_get_user_data(
1583        dfuncs: *const hb_draw_funcs_t,
1584        key: *mut hb_user_data_key_t,
1585    ) -> *mut ::std::os::raw::c_void;
1586}
1587extern "C" {
1588    pub fn hb_draw_funcs_make_immutable(dfuncs: *mut hb_draw_funcs_t);
1589}
1590extern "C" {
1591    pub fn hb_draw_funcs_is_immutable(dfuncs: *mut hb_draw_funcs_t) -> hb_bool_t;
1592}
1593extern "C" {
1594    pub fn hb_draw_move_to(
1595        dfuncs: *mut hb_draw_funcs_t,
1596        draw_data: *mut ::std::os::raw::c_void,
1597        st: *mut hb_draw_state_t,
1598        to_x: f32,
1599        to_y: f32,
1600    );
1601}
1602extern "C" {
1603    pub fn hb_draw_line_to(
1604        dfuncs: *mut hb_draw_funcs_t,
1605        draw_data: *mut ::std::os::raw::c_void,
1606        st: *mut hb_draw_state_t,
1607        to_x: f32,
1608        to_y: f32,
1609    );
1610}
1611extern "C" {
1612    pub fn hb_draw_quadratic_to(
1613        dfuncs: *mut hb_draw_funcs_t,
1614        draw_data: *mut ::std::os::raw::c_void,
1615        st: *mut hb_draw_state_t,
1616        control_x: f32,
1617        control_y: f32,
1618        to_x: f32,
1619        to_y: f32,
1620    );
1621}
1622extern "C" {
1623    pub fn hb_draw_cubic_to(
1624        dfuncs: *mut hb_draw_funcs_t,
1625        draw_data: *mut ::std::os::raw::c_void,
1626        st: *mut hb_draw_state_t,
1627        control1_x: f32,
1628        control1_y: f32,
1629        control2_x: f32,
1630        control2_y: f32,
1631        to_x: f32,
1632        to_y: f32,
1633    );
1634}
1635extern "C" {
1636    pub fn hb_draw_close_path(
1637        dfuncs: *mut hb_draw_funcs_t,
1638        draw_data: *mut ::std::os::raw::c_void,
1639        st: *mut hb_draw_state_t,
1640    );
1641}
1642#[repr(C)]
1643#[derive(Debug, Copy, Clone)]
1644pub struct hb_paint_funcs_t {
1645    _unused: [u8; 0],
1646}
1647extern "C" {
1648    pub fn hb_paint_funcs_create() -> *mut hb_paint_funcs_t;
1649}
1650extern "C" {
1651    pub fn hb_paint_funcs_get_empty() -> *mut hb_paint_funcs_t;
1652}
1653extern "C" {
1654    pub fn hb_paint_funcs_reference(funcs: *mut hb_paint_funcs_t) -> *mut hb_paint_funcs_t;
1655}
1656extern "C" {
1657    pub fn hb_paint_funcs_destroy(funcs: *mut hb_paint_funcs_t);
1658}
1659extern "C" {
1660    pub fn hb_paint_funcs_set_user_data(
1661        funcs: *mut hb_paint_funcs_t,
1662        key: *mut hb_user_data_key_t,
1663        data: *mut ::std::os::raw::c_void,
1664        destroy: hb_destroy_func_t,
1665        replace: hb_bool_t,
1666    ) -> hb_bool_t;
1667}
1668extern "C" {
1669    pub fn hb_paint_funcs_get_user_data(
1670        funcs: *const hb_paint_funcs_t,
1671        key: *mut hb_user_data_key_t,
1672    ) -> *mut ::std::os::raw::c_void;
1673}
1674extern "C" {
1675    pub fn hb_paint_funcs_make_immutable(funcs: *mut hb_paint_funcs_t);
1676}
1677extern "C" {
1678    pub fn hb_paint_funcs_is_immutable(funcs: *mut hb_paint_funcs_t) -> hb_bool_t;
1679}
1680#[doc = " hb_paint_push_transform_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @xx: xx component of the transform matrix\n @yx: yx component of the transform matrix\n @xy: xy component of the transform matrix\n @yy: yy component of the transform matrix\n @dx: dx component of the transform matrix\n @dy: dy component of the transform matrix\n @user_data: User data pointer passed to hb_paint_funcs_set_push_transform_func()\n\n A virtual method for the #hb_paint_funcs_t to apply\n a transform to subsequent paint calls.\n\n This transform is applied after the current transform,\n and remains in effect until a matching call to\n the #hb_paint_funcs_pop_transform_func_t vfunc.\n\n Since: 7.0.0"]
1681pub type hb_paint_push_transform_func_t = ::std::option::Option<
1682    unsafe extern "C" fn(
1683        funcs: *mut hb_paint_funcs_t,
1684        paint_data: *mut ::std::os::raw::c_void,
1685        xx: f32,
1686        yx: f32,
1687        xy: f32,
1688        yy: f32,
1689        dx: f32,
1690        dy: f32,
1691        user_data: *mut ::std::os::raw::c_void,
1692    ),
1693>;
1694#[doc = " hb_paint_pop_transform_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @user_data: User data pointer passed to hb_paint_funcs_set_pop_transform_func()\n\n A virtual method for the #hb_paint_funcs_t to undo\n the effect of a prior call to the #hb_paint_funcs_push_transform_func_t\n vfunc.\n\n Since: 7.0.0"]
1695pub type hb_paint_pop_transform_func_t = ::std::option::Option<
1696    unsafe extern "C" fn(
1697        funcs: *mut hb_paint_funcs_t,
1698        paint_data: *mut ::std::os::raw::c_void,
1699        user_data: *mut ::std::os::raw::c_void,
1700    ),
1701>;
1702#[doc = " hb_paint_color_glyph_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @glyph: the glyph ID\n @font: the font\n @user_data: User data pointer passed to hb_paint_funcs_set_color_glyph_func()\n\n A virtual method for the #hb_paint_funcs_t to render a color glyph by glyph index.\n\n Return value: %true if the glyph was painted, %false otherwise.\n\n Since: 8.2.0"]
1703pub type hb_paint_color_glyph_func_t = ::std::option::Option<
1704    unsafe extern "C" fn(
1705        funcs: *mut hb_paint_funcs_t,
1706        paint_data: *mut ::std::os::raw::c_void,
1707        glyph: hb_codepoint_t,
1708        font: *mut hb_font_t,
1709        user_data: *mut ::std::os::raw::c_void,
1710    ) -> hb_bool_t,
1711>;
1712#[doc = " hb_paint_push_clip_glyph_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @glyph: the glyph ID\n @font: the font\n @user_data: User data pointer passed to hb_paint_funcs_set_push_clip_glyph_func()\n\n A virtual method for the #hb_paint_funcs_t to clip\n subsequent paint calls to the outline of a glyph.\n\n The coordinates of the glyph outline are interpreted according\n to the current transform.\n\n This clip is applied in addition to the current clip,\n and remains in effect until a matching call to\n the #hb_paint_funcs_pop_clip_func_t vfunc.\n\n Since: 7.0.0"]
1713pub type hb_paint_push_clip_glyph_func_t = ::std::option::Option<
1714    unsafe extern "C" fn(
1715        funcs: *mut hb_paint_funcs_t,
1716        paint_data: *mut ::std::os::raw::c_void,
1717        glyph: hb_codepoint_t,
1718        font: *mut hb_font_t,
1719        user_data: *mut ::std::os::raw::c_void,
1720    ),
1721>;
1722#[doc = " hb_paint_push_clip_rectangle_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @xmin: min X for the rectangle\n @ymin: min Y for the rectangle\n @xmax: max X for the rectangle\n @ymax: max Y for the rectangle\n @user_data: User data pointer passed to hb_paint_funcs_set_push_clip_rectangle_func()\n\n A virtual method for the #hb_paint_funcs_t to clip\n subsequent paint calls to a rectangle.\n\n The coordinates of the rectangle are interpreted according\n to the current transform.\n\n This clip is applied in addition to the current clip,\n and remains in effect until a matching call to\n the #hb_paint_funcs_pop_clip_func_t vfunc.\n\n Since: 7.0.0"]
1723pub type hb_paint_push_clip_rectangle_func_t = ::std::option::Option<
1724    unsafe extern "C" fn(
1725        funcs: *mut hb_paint_funcs_t,
1726        paint_data: *mut ::std::os::raw::c_void,
1727        xmin: f32,
1728        ymin: f32,
1729        xmax: f32,
1730        ymax: f32,
1731        user_data: *mut ::std::os::raw::c_void,
1732    ),
1733>;
1734#[doc = " hb_paint_pop_clip_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @user_data: User data pointer passed to hb_paint_funcs_set_pop_clip_func()\n\n A virtual method for the #hb_paint_funcs_t to undo\n the effect of a prior call to the #hb_paint_funcs_push_clip_glyph_func_t\n or #hb_paint_funcs_push_clip_rectangle_func_t vfuncs.\n\n Since: 7.0.0"]
1735pub type hb_paint_pop_clip_func_t = ::std::option::Option<
1736    unsafe extern "C" fn(
1737        funcs: *mut hb_paint_funcs_t,
1738        paint_data: *mut ::std::os::raw::c_void,
1739        user_data: *mut ::std::os::raw::c_void,
1740    ),
1741>;
1742#[doc = " hb_paint_color_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @is_foreground: whether the color is the foreground\n @color: The color to use, unpremultiplied\n @user_data: User data pointer passed to hb_paint_funcs_set_color_func()\n\n A virtual method for the #hb_paint_funcs_t to paint a\n color everywhere within the current clip.\n\n Since: 7.0.0"]
1743pub type hb_paint_color_func_t = ::std::option::Option<
1744    unsafe extern "C" fn(
1745        funcs: *mut hb_paint_funcs_t,
1746        paint_data: *mut ::std::os::raw::c_void,
1747        is_foreground: hb_bool_t,
1748        color: hb_color_t,
1749        user_data: *mut ::std::os::raw::c_void,
1750    ),
1751>;
1752#[doc = " hb_paint_image_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @image: the image data\n @width: width of the raster image in pixels, or 0\n @height: height of the raster image in pixels, or 0\n @format: the image format as a tag\n @slant: the synthetic slant ratio to be applied to the image during rendering\n @extents: (nullable): glyph extents for desired rendering\n @user_data: User data pointer passed to hb_paint_funcs_set_image_func()\n\n A virtual method for the #hb_paint_funcs_t to paint a glyph image.\n\n This method is called for glyphs with image blobs in the CBDT,\n sbix or SVG tables. The @format identifies the kind of data that\n is contained in @image. Possible values include #HB_PAINT_IMAGE_FORMAT_PNG,\n #HB_PAINT_IMAGE_FORMAT_SVG and #HB_PAINT_IMAGE_FORMAT_BGRA.\n\n The image dimensions and glyph extents are provided if available,\n and should be used to size and position the image.\n\n Return value: Whether the operation was successful.\n\n Since: 7.0.0"]
1753pub type hb_paint_image_func_t = ::std::option::Option<
1754    unsafe extern "C" fn(
1755        funcs: *mut hb_paint_funcs_t,
1756        paint_data: *mut ::std::os::raw::c_void,
1757        image: *mut hb_blob_t,
1758        width: ::std::os::raw::c_uint,
1759        height: ::std::os::raw::c_uint,
1760        format: hb_tag_t,
1761        slant: f32,
1762        extents: *mut hb_glyph_extents_t,
1763        user_data: *mut ::std::os::raw::c_void,
1764    ) -> hb_bool_t,
1765>;
1766#[doc = " hb_color_stop_t:\n @offset: the offset of the color stop\n @is_foreground: whether the color is the foreground\n @color: the color, unpremultiplied\n\n Information about a color stop on a color line.\n\n Color lines typically have offsets ranging between 0 and 1,\n but that is not required.\n\n Note: despite @color being unpremultiplied here, interpolation in\n gradients shall happen in premultiplied space. See the OpenType spec\n [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details.\n\n Since: 7.0.0"]
1767#[repr(C)]
1768#[derive(Debug, Copy, Clone)]
1769pub struct hb_color_stop_t {
1770    pub offset: f32,
1771    pub is_foreground: hb_bool_t,
1772    pub color: hb_color_t,
1773}
1774#[test]
1775fn bindgen_test_layout_hb_color_stop_t() {
1776    const UNINIT: ::std::mem::MaybeUninit<hb_color_stop_t> = ::std::mem::MaybeUninit::uninit();
1777    let ptr = UNINIT.as_ptr();
1778    assert_eq!(
1779        ::std::mem::size_of::<hb_color_stop_t>(),
1780        12usize,
1781        concat!("Size of: ", stringify!(hb_color_stop_t))
1782    );
1783    assert_eq!(
1784        ::std::mem::align_of::<hb_color_stop_t>(),
1785        4usize,
1786        concat!("Alignment of ", stringify!(hb_color_stop_t))
1787    );
1788    assert_eq!(
1789        unsafe { ::std::ptr::addr_of!((*ptr).offset) as usize - ptr as usize },
1790        0usize,
1791        concat!("Offset of field: ", stringify!(hb_color_stop_t), "::", stringify!(offset))
1792    );
1793    assert_eq!(
1794        unsafe { ::std::ptr::addr_of!((*ptr).is_foreground) as usize - ptr as usize },
1795        4usize,
1796        concat!(
1797            "Offset of field: ",
1798            stringify!(hb_color_stop_t),
1799            "::",
1800            stringify!(is_foreground)
1801        )
1802    );
1803    assert_eq!(
1804        unsafe { ::std::ptr::addr_of!((*ptr).color) as usize - ptr as usize },
1805        8usize,
1806        concat!("Offset of field: ", stringify!(hb_color_stop_t), "::", stringify!(color))
1807    );
1808}
1809pub const hb_paint_extend_t_HB_PAINT_EXTEND_PAD: hb_paint_extend_t = 0;
1810pub const hb_paint_extend_t_HB_PAINT_EXTEND_REPEAT: hb_paint_extend_t = 1;
1811pub const hb_paint_extend_t_HB_PAINT_EXTEND_REFLECT: hb_paint_extend_t = 2;
1812#[doc = " hb_paint_extend_t:\n @HB_PAINT_EXTEND_PAD: Outside the defined interval,\n   the color of the closest color stop is used.\n @HB_PAINT_EXTEND_REPEAT: The color line is repeated over\n   repeated multiples of the defined interval\n @HB_PAINT_EXTEND_REFLECT: The color line is repeated over\n      repeated intervals, as for the repeat mode.\n      However, in each repeated interval, the ordering of\n      color stops is the reverse of the adjacent interval.\n\n The values of this enumeration determine how color values\n outside the minimum and maximum defined offset on a #hb_color_line_t\n are determined.\n\n See the OpenType spec [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details.\n\n Since: 7.0.0"]
1813pub type hb_paint_extend_t = ::std::os::raw::c_uint;
1814#[doc = " hb_color_line_get_color_stops_func_t:\n @color_line: a #hb_color_line_t object\n @color_line_data: the data accompanying @color_line\n @start: the index of the first color stop to return\n @count: (inout) (optional): Input = the maximum number of feature tags to return;\n     Output = the actual number of feature tags returned (may be zero)\n @color_stops: (out) (array length=count) (optional): Array of #hb_color_stop_t to populate\n @user_data: the data accompanying this method\n\n A virtual method for the #hb_color_line_t to fetch color stops.\n\n Return value: the total number of color stops in @color_line\n\n Since: 7.0.0"]
1815pub type hb_color_line_get_color_stops_func_t = ::std::option::Option<
1816    unsafe extern "C" fn(
1817        color_line: *mut hb_color_line_t,
1818        color_line_data: *mut ::std::os::raw::c_void,
1819        start: ::std::os::raw::c_uint,
1820        count: *mut ::std::os::raw::c_uint,
1821        color_stops: *mut hb_color_stop_t,
1822        user_data: *mut ::std::os::raw::c_void,
1823    ) -> ::std::os::raw::c_uint,
1824>;
1825#[doc = " hb_color_line_get_extend_func_t:\n @color_line: a #hb_color_line_t object\n @color_line_data: the data accompanying @color_line\n @user_data: the data accompanying this method\n\n A virtual method for the @hb_color_line_t to fetches the extend mode.\n\n Return value: the extend mode of @color_line\n\n Since: 7.0.0"]
1826pub type hb_color_line_get_extend_func_t = ::std::option::Option<
1827    unsafe extern "C" fn(
1828        color_line: *mut hb_color_line_t,
1829        color_line_data: *mut ::std::os::raw::c_void,
1830        user_data: *mut ::std::os::raw::c_void,
1831    ) -> hb_paint_extend_t,
1832>;
1833#[doc = " hb_color_line_t:\n\n A struct containing color information for a gradient.\n\n Since: 7.0.0"]
1834#[repr(C)]
1835#[derive(Debug, Copy, Clone)]
1836pub struct hb_color_line_t {
1837    pub data: *mut ::std::os::raw::c_void,
1838    pub get_color_stops: hb_color_line_get_color_stops_func_t,
1839    pub get_color_stops_user_data: *mut ::std::os::raw::c_void,
1840    pub get_extend: hb_color_line_get_extend_func_t,
1841    pub get_extend_user_data: *mut ::std::os::raw::c_void,
1842    pub reserved0: *mut ::std::os::raw::c_void,
1843    pub reserved1: *mut ::std::os::raw::c_void,
1844    pub reserved2: *mut ::std::os::raw::c_void,
1845    pub reserved3: *mut ::std::os::raw::c_void,
1846    pub reserved5: *mut ::std::os::raw::c_void,
1847    pub reserved6: *mut ::std::os::raw::c_void,
1848    pub reserved7: *mut ::std::os::raw::c_void,
1849    pub reserved8: *mut ::std::os::raw::c_void,
1850}
1851#[test]
1852fn bindgen_test_layout_hb_color_line_t() {
1853    const UNINIT: ::std::mem::MaybeUninit<hb_color_line_t> = ::std::mem::MaybeUninit::uninit();
1854    let ptr = UNINIT.as_ptr();
1855    assert_eq!(
1856        ::std::mem::size_of::<hb_color_line_t>(),
1857        104usize,
1858        concat!("Size of: ", stringify!(hb_color_line_t))
1859    );
1860    assert_eq!(
1861        ::std::mem::align_of::<hb_color_line_t>(),
1862        8usize,
1863        concat!("Alignment of ", stringify!(hb_color_line_t))
1864    );
1865    assert_eq!(
1866        unsafe { ::std::ptr::addr_of!((*ptr).data) as usize - ptr as usize },
1867        0usize,
1868        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(data))
1869    );
1870    assert_eq!(
1871        unsafe { ::std::ptr::addr_of!((*ptr).get_color_stops) as usize - ptr as usize },
1872        8usize,
1873        concat!(
1874            "Offset of field: ",
1875            stringify!(hb_color_line_t),
1876            "::",
1877            stringify!(get_color_stops)
1878        )
1879    );
1880    assert_eq!(
1881        unsafe { ::std::ptr::addr_of!((*ptr).get_color_stops_user_data) as usize - ptr as usize },
1882        16usize,
1883        concat!(
1884            "Offset of field: ",
1885            stringify!(hb_color_line_t),
1886            "::",
1887            stringify!(get_color_stops_user_data)
1888        )
1889    );
1890    assert_eq!(
1891        unsafe { ::std::ptr::addr_of!((*ptr).get_extend) as usize - ptr as usize },
1892        24usize,
1893        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(get_extend))
1894    );
1895    assert_eq!(
1896        unsafe { ::std::ptr::addr_of!((*ptr).get_extend_user_data) as usize - ptr as usize },
1897        32usize,
1898        concat!(
1899            "Offset of field: ",
1900            stringify!(hb_color_line_t),
1901            "::",
1902            stringify!(get_extend_user_data)
1903        )
1904    );
1905    assert_eq!(
1906        unsafe { ::std::ptr::addr_of!((*ptr).reserved0) as usize - ptr as usize },
1907        40usize,
1908        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved0))
1909    );
1910    assert_eq!(
1911        unsafe { ::std::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
1912        48usize,
1913        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved1))
1914    );
1915    assert_eq!(
1916        unsafe { ::std::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
1917        56usize,
1918        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved2))
1919    );
1920    assert_eq!(
1921        unsafe { ::std::ptr::addr_of!((*ptr).reserved3) as usize - ptr as usize },
1922        64usize,
1923        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved3))
1924    );
1925    assert_eq!(
1926        unsafe { ::std::ptr::addr_of!((*ptr).reserved5) as usize - ptr as usize },
1927        72usize,
1928        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved5))
1929    );
1930    assert_eq!(
1931        unsafe { ::std::ptr::addr_of!((*ptr).reserved6) as usize - ptr as usize },
1932        80usize,
1933        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved6))
1934    );
1935    assert_eq!(
1936        unsafe { ::std::ptr::addr_of!((*ptr).reserved7) as usize - ptr as usize },
1937        88usize,
1938        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved7))
1939    );
1940    assert_eq!(
1941        unsafe { ::std::ptr::addr_of!((*ptr).reserved8) as usize - ptr as usize },
1942        96usize,
1943        concat!("Offset of field: ", stringify!(hb_color_line_t), "::", stringify!(reserved8))
1944    );
1945}
1946extern "C" {
1947    pub fn hb_color_line_get_color_stops(
1948        color_line: *mut hb_color_line_t,
1949        start: ::std::os::raw::c_uint,
1950        count: *mut ::std::os::raw::c_uint,
1951        color_stops: *mut hb_color_stop_t,
1952    ) -> ::std::os::raw::c_uint;
1953}
1954extern "C" {
1955    pub fn hb_color_line_get_extend(color_line: *mut hb_color_line_t) -> hb_paint_extend_t;
1956}
1957#[doc = " hb_paint_linear_gradient_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @color_line: Color information for the gradient\n @x0: X coordinate of the first point\n @y0: Y coordinate of the first point\n @x1: X coordinate of the second point\n @y1: Y coordinate of the second point\n @x2: X coordinate of the third point\n @y2: Y coordinate of the third point\n @user_data: User data pointer passed to hb_paint_funcs_set_linear_gradient_func()\n\n A virtual method for the #hb_paint_funcs_t to paint a linear\n gradient everywhere within the current clip.\n\n The @color_line object contains information about the colors of the gradients.\n It is only valid for the duration of the callback, you cannot keep it around.\n\n The coordinates of the points are interpreted according\n to the current transform.\n\n See the OpenType spec [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details on how the points define the direction\n of the gradient, and how to interpret the @color_line.\n\n Since: 7.0.0"]
1958pub type hb_paint_linear_gradient_func_t = ::std::option::Option<
1959    unsafe extern "C" fn(
1960        funcs: *mut hb_paint_funcs_t,
1961        paint_data: *mut ::std::os::raw::c_void,
1962        color_line: *mut hb_color_line_t,
1963        x0: f32,
1964        y0: f32,
1965        x1: f32,
1966        y1: f32,
1967        x2: f32,
1968        y2: f32,
1969        user_data: *mut ::std::os::raw::c_void,
1970    ),
1971>;
1972#[doc = " hb_paint_radial_gradient_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @color_line: Color information for the gradient\n @x0: X coordinate of the first circle's center\n @y0: Y coordinate of the first circle's center\n @r0: radius of the first circle\n @x1: X coordinate of the second circle's center\n @y1: Y coordinate of the second circle's center\n @r1: radius of the second circle\n @user_data: User data pointer passed to hb_paint_funcs_set_radial_gradient_func()\n\n A virtual method for the #hb_paint_funcs_t to paint a radial\n gradient everywhere within the current clip.\n\n The @color_line object contains information about the colors of the gradients.\n It is only valid for the duration of the callback, you cannot keep it around.\n\n The coordinates of the points are interpreted according\n to the current transform.\n\n See the OpenType spec [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details on how the points define the direction\n of the gradient, and how to interpret the @color_line.\n\n Since: 7.0.0"]
1973pub type hb_paint_radial_gradient_func_t = ::std::option::Option<
1974    unsafe extern "C" fn(
1975        funcs: *mut hb_paint_funcs_t,
1976        paint_data: *mut ::std::os::raw::c_void,
1977        color_line: *mut hb_color_line_t,
1978        x0: f32,
1979        y0: f32,
1980        r0: f32,
1981        x1: f32,
1982        y1: f32,
1983        r1: f32,
1984        user_data: *mut ::std::os::raw::c_void,
1985    ),
1986>;
1987#[doc = " hb_paint_sweep_gradient_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @color_line: Color information for the gradient\n @x0: X coordinate of the circle's center\n @y0: Y coordinate of the circle's center\n @start_angle: the start angle, in radians\n @end_angle: the end angle, in radians\n @user_data: User data pointer passed to hb_paint_funcs_set_sweep_gradient_func()\n\n A virtual method for the #hb_paint_funcs_t to paint a sweep\n gradient everywhere within the current clip.\n\n The @color_line object contains information about the colors of the gradients.\n It is only valid for the duration of the callback, you cannot keep it around.\n\n The coordinates of the points are interpreted according\n to the current transform.\n\n See the OpenType spec [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details on how the points define the direction\n of the gradient, and how to interpret the @color_line.\n\n Since: 7.0.0"]
1988pub type hb_paint_sweep_gradient_func_t = ::std::option::Option<
1989    unsafe extern "C" fn(
1990        funcs: *mut hb_paint_funcs_t,
1991        paint_data: *mut ::std::os::raw::c_void,
1992        color_line: *mut hb_color_line_t,
1993        x0: f32,
1994        y0: f32,
1995        start_angle: f32,
1996        end_angle: f32,
1997        user_data: *mut ::std::os::raw::c_void,
1998    ),
1999>;
2000pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_CLEAR: hb_paint_composite_mode_t = 0;
2001pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SRC: hb_paint_composite_mode_t = 1;
2002pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DEST: hb_paint_composite_mode_t = 2;
2003pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SRC_OVER: hb_paint_composite_mode_t = 3;
2004pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DEST_OVER: hb_paint_composite_mode_t =
2005    4;
2006pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SRC_IN: hb_paint_composite_mode_t = 5;
2007pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DEST_IN: hb_paint_composite_mode_t = 6;
2008pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SRC_OUT: hb_paint_composite_mode_t = 7;
2009pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DEST_OUT: hb_paint_composite_mode_t = 8;
2010pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SRC_ATOP: hb_paint_composite_mode_t = 9;
2011pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DEST_ATOP: hb_paint_composite_mode_t =
2012    10;
2013pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_XOR: hb_paint_composite_mode_t = 11;
2014pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_PLUS: hb_paint_composite_mode_t = 12;
2015pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SCREEN: hb_paint_composite_mode_t = 13;
2016pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_OVERLAY: hb_paint_composite_mode_t = 14;
2017pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DARKEN: hb_paint_composite_mode_t = 15;
2018pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_LIGHTEN: hb_paint_composite_mode_t = 16;
2019pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_COLOR_DODGE: hb_paint_composite_mode_t =
2020    17;
2021pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_COLOR_BURN: hb_paint_composite_mode_t =
2022    18;
2023pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_HARD_LIGHT: hb_paint_composite_mode_t =
2024    19;
2025pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT: hb_paint_composite_mode_t =
2026    20;
2027pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_DIFFERENCE: hb_paint_composite_mode_t =
2028    21;
2029pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_EXCLUSION: hb_paint_composite_mode_t =
2030    22;
2031pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_MULTIPLY: hb_paint_composite_mode_t =
2032    23;
2033pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_HSL_HUE: hb_paint_composite_mode_t = 24;
2034pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_HSL_SATURATION:
2035    hb_paint_composite_mode_t = 25;
2036pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_HSL_COLOR: hb_paint_composite_mode_t =
2037    26;
2038pub const hb_paint_composite_mode_t_HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY:
2039    hb_paint_composite_mode_t = 27;
2040#[doc = " hb_paint_composite_mode_t:\n @HB_PAINT_COMPOSITE_MODE_CLEAR: clear destination layer (bounded)\n @HB_PAINT_COMPOSITE_MODE_SRC: replace destination layer (bounded)\n @HB_PAINT_COMPOSITE_MODE_SRC_OVER: draw source layer on top of destination layer\n (bounded)\n @HB_PAINT_COMPOSITE_MODE_SRC_IN: draw source where there was destination content\n (unbounded)\n @HB_PAINT_COMPOSITE_MODE_SRC_OUT: draw source where there was no destination\n content (unbounded)\n @HB_PAINT_COMPOSITE_MODE_SRC_ATOP: draw source on top of destination content and\n only there\n @HB_PAINT_COMPOSITE_MODE_DEST: ignore the source\n @HB_PAINT_COMPOSITE_MODE_DEST_OVER: draw destination on top of source\n @HB_PAINT_COMPOSITE_MODE_DEST_IN: leave destination only where there was\n source content (unbounded)\n @HB_PAINT_COMPOSITE_MODE_DEST_OUT: leave destination only where there was no\n source content\n @HB_PAINT_COMPOSITE_MODE_DEST_ATOP: leave destination on top of source content\n and only there (unbounded)\n @HB_PAINT_COMPOSITE_MODE_XOR: source and destination are shown where there is only\n one of them\n @HB_PAINT_COMPOSITE_MODE_PLUS: source and destination layers are accumulated\n @HB_PAINT_COMPOSITE_MODE_MULTIPLY: source and destination layers are multiplied.\n This causes the result to be at least as dark as the darker inputs.\n @HB_PAINT_COMPOSITE_MODE_SCREEN: source and destination are complemented and\n multiplied. This causes the result to be at least as light as the lighter\n inputs.\n @HB_PAINT_COMPOSITE_MODE_OVERLAY: multiplies or screens, depending on the\n lightness of the destination color.\n @HB_PAINT_COMPOSITE_MODE_DARKEN: replaces the destination with the source if it\n is darker, otherwise keeps the source.\n @HB_PAINT_COMPOSITE_MODE_LIGHTEN: replaces the destination with the source if it\n is lighter, otherwise keeps the source.\n @HB_PAINT_COMPOSITE_MODE_COLOR_DODGE: brightens the destination color to reflect\n the source color.\n @HB_PAINT_COMPOSITE_MODE_COLOR_BURN: darkens the destination color to reflect\n the source color.\n @HB_PAINT_COMPOSITE_MODE_HARD_LIGHT: Multiplies or screens, dependent on source\n color.\n @HB_PAINT_COMPOSITE_MODE_SOFT_LIGHT: Darkens or lightens, dependent on source\n color.\n @HB_PAINT_COMPOSITE_MODE_DIFFERENCE: Takes the difference of the source and\n destination color.\n @HB_PAINT_COMPOSITE_MODE_EXCLUSION: Produces an effect similar to difference, but\n with lower contrast.\n @HB_PAINT_COMPOSITE_MODE_HSL_HUE: Creates a color with the hue of the source\n and the saturation and luminosity of the target.\n @HB_PAINT_COMPOSITE_MODE_HSL_SATURATION: Creates a color with the saturation\n of the source and the hue and luminosity of the target. Painting with\n this mode onto a gray area produces no change.\n @HB_PAINT_COMPOSITE_MODE_HSL_COLOR: Creates a color with the hue and saturation\n of the source and the luminosity of the target. This preserves the gray\n levels of the target and is useful for coloring monochrome images or\n tinting color images.\n @HB_PAINT_COMPOSITE_MODE_HSL_LUMINOSITY: Creates a color with the luminosity of\n the source and the hue and saturation of the target. This produces an\n inverse effect to @HB_PAINT_COMPOSITE_MODE_HSL_COLOR.\n\n The values of this enumeration describe the compositing modes\n that can be used when combining temporary redirected drawing\n with the backdrop.\n\n See the OpenType spec [COLR](https://learn.microsoft.com/en-us/typography/opentype/spec/colr)\n section for details.\n\n Since: 7.0.0"]
2041pub type hb_paint_composite_mode_t = ::std::os::raw::c_uint;
2042#[doc = " hb_paint_push_group_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @user_data: User data pointer passed to hb_paint_funcs_set_push_group_func()\n\n A virtual method for the #hb_paint_funcs_t to use\n an intermediate surface for subsequent paint calls.\n\n The drawing will be redirected to an intermediate surface\n until a matching call to the #hb_paint_funcs_pop_group_func_t\n vfunc.\n\n Since: 7.0.0"]
2043pub type hb_paint_push_group_func_t = ::std::option::Option<
2044    unsafe extern "C" fn(
2045        funcs: *mut hb_paint_funcs_t,
2046        paint_data: *mut ::std::os::raw::c_void,
2047        user_data: *mut ::std::os::raw::c_void,
2048    ),
2049>;
2050#[doc = " hb_paint_pop_group_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @mode: the compositing mode to use\n @user_data: User data pointer passed to hb_paint_funcs_set_pop_group_func()\n\n A virtual method for the #hb_paint_funcs_t to undo\n the effect of a prior call to the #hb_paint_funcs_push_group_func_t\n vfunc.\n\n This call stops the redirection to the intermediate surface,\n and then composites it on the previous surface, using the\n compositing mode passed to this call.\n\n Since: 7.0.0"]
2051pub type hb_paint_pop_group_func_t = ::std::option::Option<
2052    unsafe extern "C" fn(
2053        funcs: *mut hb_paint_funcs_t,
2054        paint_data: *mut ::std::os::raw::c_void,
2055        mode: hb_paint_composite_mode_t,
2056        user_data: *mut ::std::os::raw::c_void,
2057    ),
2058>;
2059#[doc = " hb_paint_custom_palette_color_func_t:\n @funcs: paint functions object\n @paint_data: The data accompanying the paint functions in hb_font_paint_glyph()\n @color_index: the color index\n @color: (out): fetched color\n @user_data: User data pointer passed to hb_paint_funcs_set_pop_group_func()\n\n A virtual method for the #hb_paint_funcs_t to fetch a color from the custom\n color palette.\n\n Custom palette colors override the colors from the fonts selected color\n palette. It is not necessary to override all palette entries; for entries\n that should be taken from the font palette, return `false`.\n\n This function might get called multiple times, but the custom palette is\n expected to remain unchanged for duration of a hb_font_paint_glyph() call.\n\n Return value: `true` if found, `false` otherwise\n\n Since: 7.0.0"]
2060pub type hb_paint_custom_palette_color_func_t = ::std::option::Option<
2061    unsafe extern "C" fn(
2062        funcs: *mut hb_paint_funcs_t,
2063        paint_data: *mut ::std::os::raw::c_void,
2064        color_index: ::std::os::raw::c_uint,
2065        color: *mut hb_color_t,
2066        user_data: *mut ::std::os::raw::c_void,
2067    ) -> hb_bool_t,
2068>;
2069extern "C" {
2070    #[doc = " hb_paint_funcs_set_push_transform_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The push-transform callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the push-transform callback on the paint functions struct.\n\n Since: 7.0.0"]
2071    pub fn hb_paint_funcs_set_push_transform_func(
2072        funcs: *mut hb_paint_funcs_t,
2073        func: hb_paint_push_transform_func_t,
2074        user_data: *mut ::std::os::raw::c_void,
2075        destroy: hb_destroy_func_t,
2076    );
2077}
2078extern "C" {
2079    #[doc = " hb_paint_funcs_set_pop_transform_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The pop-transform callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the pop-transform callback on the paint functions struct.\n\n Since: 7.0.0"]
2080    pub fn hb_paint_funcs_set_pop_transform_func(
2081        funcs: *mut hb_paint_funcs_t,
2082        func: hb_paint_pop_transform_func_t,
2083        user_data: *mut ::std::os::raw::c_void,
2084        destroy: hb_destroy_func_t,
2085    );
2086}
2087extern "C" {
2088    #[doc = " hb_paint_funcs_set_color_glyph_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The color-glyph callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the color-glyph callback on the paint functions struct.\n\n Since: 8.2.0"]
2089    pub fn hb_paint_funcs_set_color_glyph_func(
2090        funcs: *mut hb_paint_funcs_t,
2091        func: hb_paint_color_glyph_func_t,
2092        user_data: *mut ::std::os::raw::c_void,
2093        destroy: hb_destroy_func_t,
2094    );
2095}
2096extern "C" {
2097    #[doc = " hb_paint_funcs_set_push_clip_glyph_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The push-clip-glyph callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the push-clip-glyph callback on the paint functions struct.\n\n Since: 7.0.0"]
2098    pub fn hb_paint_funcs_set_push_clip_glyph_func(
2099        funcs: *mut hb_paint_funcs_t,
2100        func: hb_paint_push_clip_glyph_func_t,
2101        user_data: *mut ::std::os::raw::c_void,
2102        destroy: hb_destroy_func_t,
2103    );
2104}
2105extern "C" {
2106    #[doc = " hb_paint_funcs_set_push_clip_rectangle_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The push-clip-rectangle callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the push-clip-rect callback on the paint functions struct.\n\n Since: 7.0.0"]
2107    pub fn hb_paint_funcs_set_push_clip_rectangle_func(
2108        funcs: *mut hb_paint_funcs_t,
2109        func: hb_paint_push_clip_rectangle_func_t,
2110        user_data: *mut ::std::os::raw::c_void,
2111        destroy: hb_destroy_func_t,
2112    );
2113}
2114extern "C" {
2115    #[doc = " hb_paint_funcs_set_pop_clip_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The pop-clip callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the pop-clip callback on the paint functions struct.\n\n Since: 7.0.0"]
2116    pub fn hb_paint_funcs_set_pop_clip_func(
2117        funcs: *mut hb_paint_funcs_t,
2118        func: hb_paint_pop_clip_func_t,
2119        user_data: *mut ::std::os::raw::c_void,
2120        destroy: hb_destroy_func_t,
2121    );
2122}
2123extern "C" {
2124    #[doc = " hb_paint_funcs_set_color_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The paint-color callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the paint-color callback on the paint functions struct.\n\n Since: 7.0.0"]
2125    pub fn hb_paint_funcs_set_color_func(
2126        funcs: *mut hb_paint_funcs_t,
2127        func: hb_paint_color_func_t,
2128        user_data: *mut ::std::os::raw::c_void,
2129        destroy: hb_destroy_func_t,
2130    );
2131}
2132extern "C" {
2133    #[doc = " hb_paint_funcs_set_image_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The paint-image callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the paint-image callback on the paint functions struct.\n\n Since: 7.0.0"]
2134    pub fn hb_paint_funcs_set_image_func(
2135        funcs: *mut hb_paint_funcs_t,
2136        func: hb_paint_image_func_t,
2137        user_data: *mut ::std::os::raw::c_void,
2138        destroy: hb_destroy_func_t,
2139    );
2140}
2141extern "C" {
2142    #[doc = " hb_paint_funcs_set_linear_gradient_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The linear-gradient callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the linear-gradient callback on the paint functions struct.\n\n Since: 7.0.0"]
2143    pub fn hb_paint_funcs_set_linear_gradient_func(
2144        funcs: *mut hb_paint_funcs_t,
2145        func: hb_paint_linear_gradient_func_t,
2146        user_data: *mut ::std::os::raw::c_void,
2147        destroy: hb_destroy_func_t,
2148    );
2149}
2150extern "C" {
2151    #[doc = " hb_paint_funcs_set_radial_gradient_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The radial-gradient callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the radial-gradient callback on the paint functions struct.\n\n Since: 7.0.0"]
2152    pub fn hb_paint_funcs_set_radial_gradient_func(
2153        funcs: *mut hb_paint_funcs_t,
2154        func: hb_paint_radial_gradient_func_t,
2155        user_data: *mut ::std::os::raw::c_void,
2156        destroy: hb_destroy_func_t,
2157    );
2158}
2159extern "C" {
2160    #[doc = " hb_paint_funcs_set_sweep_gradient_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The sweep-gradient callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the sweep-gradient callback on the paint functions struct.\n\n Since: 7.0.0"]
2161    pub fn hb_paint_funcs_set_sweep_gradient_func(
2162        funcs: *mut hb_paint_funcs_t,
2163        func: hb_paint_sweep_gradient_func_t,
2164        user_data: *mut ::std::os::raw::c_void,
2165        destroy: hb_destroy_func_t,
2166    );
2167}
2168extern "C" {
2169    #[doc = " hb_paint_funcs_set_push_group_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The push-group callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the push-group callback on the paint functions struct.\n\n Since: 7.0.0"]
2170    pub fn hb_paint_funcs_set_push_group_func(
2171        funcs: *mut hb_paint_funcs_t,
2172        func: hb_paint_push_group_func_t,
2173        user_data: *mut ::std::os::raw::c_void,
2174        destroy: hb_destroy_func_t,
2175    );
2176}
2177extern "C" {
2178    #[doc = " hb_paint_funcs_set_pop_group_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The pop-group callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the pop-group callback on the paint functions struct.\n\n Since: 7.0.0"]
2179    pub fn hb_paint_funcs_set_pop_group_func(
2180        funcs: *mut hb_paint_funcs_t,
2181        func: hb_paint_pop_group_func_t,
2182        user_data: *mut ::std::os::raw::c_void,
2183        destroy: hb_destroy_func_t,
2184    );
2185}
2186extern "C" {
2187    #[doc = " hb_paint_funcs_set_custom_palette_color_func:\n @funcs: A paint functions struct\n @func: (closure user_data) (destroy destroy) (scope notified): The custom-palette-color callback\n @user_data: Data to pass to @func\n @destroy: (nullable): Function to call when @user_data is no longer needed\n\n Sets the custom-palette-color callback on the paint functions struct.\n\n Since: 7.0.0"]
2188    pub fn hb_paint_funcs_set_custom_palette_color_func(
2189        funcs: *mut hb_paint_funcs_t,
2190        func: hb_paint_custom_palette_color_func_t,
2191        user_data: *mut ::std::os::raw::c_void,
2192        destroy: hb_destroy_func_t,
2193    );
2194}
2195extern "C" {
2196    pub fn hb_paint_push_transform(
2197        funcs: *mut hb_paint_funcs_t,
2198        paint_data: *mut ::std::os::raw::c_void,
2199        xx: f32,
2200        yx: f32,
2201        xy: f32,
2202        yy: f32,
2203        dx: f32,
2204        dy: f32,
2205    );
2206}
2207extern "C" {
2208    pub fn hb_paint_pop_transform(
2209        funcs: *mut hb_paint_funcs_t,
2210        paint_data: *mut ::std::os::raw::c_void,
2211    );
2212}
2213extern "C" {
2214    pub fn hb_paint_color_glyph(
2215        funcs: *mut hb_paint_funcs_t,
2216        paint_data: *mut ::std::os::raw::c_void,
2217        glyph: hb_codepoint_t,
2218        font: *mut hb_font_t,
2219    ) -> hb_bool_t;
2220}
2221extern "C" {
2222    pub fn hb_paint_push_clip_glyph(
2223        funcs: *mut hb_paint_funcs_t,
2224        paint_data: *mut ::std::os::raw::c_void,
2225        glyph: hb_codepoint_t,
2226        font: *mut hb_font_t,
2227    );
2228}
2229extern "C" {
2230    pub fn hb_paint_push_clip_rectangle(
2231        funcs: *mut hb_paint_funcs_t,
2232        paint_data: *mut ::std::os::raw::c_void,
2233        xmin: f32,
2234        ymin: f32,
2235        xmax: f32,
2236        ymax: f32,
2237    );
2238}
2239extern "C" {
2240    pub fn hb_paint_pop_clip(funcs: *mut hb_paint_funcs_t, paint_data: *mut ::std::os::raw::c_void);
2241}
2242extern "C" {
2243    pub fn hb_paint_color(
2244        funcs: *mut hb_paint_funcs_t,
2245        paint_data: *mut ::std::os::raw::c_void,
2246        is_foreground: hb_bool_t,
2247        color: hb_color_t,
2248    );
2249}
2250extern "C" {
2251    pub fn hb_paint_image(
2252        funcs: *mut hb_paint_funcs_t,
2253        paint_data: *mut ::std::os::raw::c_void,
2254        image: *mut hb_blob_t,
2255        width: ::std::os::raw::c_uint,
2256        height: ::std::os::raw::c_uint,
2257        format: hb_tag_t,
2258        slant: f32,
2259        extents: *mut hb_glyph_extents_t,
2260    );
2261}
2262extern "C" {
2263    pub fn hb_paint_linear_gradient(
2264        funcs: *mut hb_paint_funcs_t,
2265        paint_data: *mut ::std::os::raw::c_void,
2266        color_line: *mut hb_color_line_t,
2267        x0: f32,
2268        y0: f32,
2269        x1: f32,
2270        y1: f32,
2271        x2: f32,
2272        y2: f32,
2273    );
2274}
2275extern "C" {
2276    pub fn hb_paint_radial_gradient(
2277        funcs: *mut hb_paint_funcs_t,
2278        paint_data: *mut ::std::os::raw::c_void,
2279        color_line: *mut hb_color_line_t,
2280        x0: f32,
2281        y0: f32,
2282        r0: f32,
2283        x1: f32,
2284        y1: f32,
2285        r1: f32,
2286    );
2287}
2288extern "C" {
2289    pub fn hb_paint_sweep_gradient(
2290        funcs: *mut hb_paint_funcs_t,
2291        paint_data: *mut ::std::os::raw::c_void,
2292        color_line: *mut hb_color_line_t,
2293        x0: f32,
2294        y0: f32,
2295        start_angle: f32,
2296        end_angle: f32,
2297    );
2298}
2299extern "C" {
2300    pub fn hb_paint_push_group(
2301        funcs: *mut hb_paint_funcs_t,
2302        paint_data: *mut ::std::os::raw::c_void,
2303    );
2304}
2305extern "C" {
2306    pub fn hb_paint_pop_group(
2307        funcs: *mut hb_paint_funcs_t,
2308        paint_data: *mut ::std::os::raw::c_void,
2309        mode: hb_paint_composite_mode_t,
2310    );
2311}
2312extern "C" {
2313    pub fn hb_paint_custom_palette_color(
2314        funcs: *mut hb_paint_funcs_t,
2315        paint_data: *mut ::std::os::raw::c_void,
2316        color_index: ::std::os::raw::c_uint,
2317        color: *mut hb_color_t,
2318    ) -> hb_bool_t;
2319}
2320#[repr(C)]
2321#[derive(Debug, Copy, Clone)]
2322pub struct hb_font_funcs_t {
2323    _unused: [u8; 0],
2324}
2325extern "C" {
2326    pub fn hb_font_funcs_create() -> *mut hb_font_funcs_t;
2327}
2328extern "C" {
2329    pub fn hb_font_funcs_get_empty() -> *mut hb_font_funcs_t;
2330}
2331extern "C" {
2332    pub fn hb_font_funcs_reference(ffuncs: *mut hb_font_funcs_t) -> *mut hb_font_funcs_t;
2333}
2334extern "C" {
2335    pub fn hb_font_funcs_destroy(ffuncs: *mut hb_font_funcs_t);
2336}
2337extern "C" {
2338    pub fn hb_font_funcs_set_user_data(
2339        ffuncs: *mut hb_font_funcs_t,
2340        key: *mut hb_user_data_key_t,
2341        data: *mut ::std::os::raw::c_void,
2342        destroy: hb_destroy_func_t,
2343        replace: hb_bool_t,
2344    ) -> hb_bool_t;
2345}
2346extern "C" {
2347    pub fn hb_font_funcs_get_user_data(
2348        ffuncs: *const hb_font_funcs_t,
2349        key: *mut hb_user_data_key_t,
2350    ) -> *mut ::std::os::raw::c_void;
2351}
2352extern "C" {
2353    pub fn hb_font_funcs_make_immutable(ffuncs: *mut hb_font_funcs_t);
2354}
2355extern "C" {
2356    pub fn hb_font_funcs_is_immutable(ffuncs: *mut hb_font_funcs_t) -> hb_bool_t;
2357}
2358#[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."]
2359#[repr(C)]
2360#[derive(Debug, Copy, Clone)]
2361pub struct hb_font_extents_t {
2362    pub ascender: hb_position_t,
2363    pub descender: hb_position_t,
2364    pub line_gap: hb_position_t,
2365    pub reserved9: hb_position_t,
2366    pub reserved8: hb_position_t,
2367    pub reserved7: hb_position_t,
2368    pub reserved6: hb_position_t,
2369    pub reserved5: hb_position_t,
2370    pub reserved4: hb_position_t,
2371    pub reserved3: hb_position_t,
2372    pub reserved2: hb_position_t,
2373    pub reserved1: hb_position_t,
2374}
2375#[test]
2376fn bindgen_test_layout_hb_font_extents_t() {
2377    const UNINIT: ::std::mem::MaybeUninit<hb_font_extents_t> = ::std::mem::MaybeUninit::uninit();
2378    let ptr = UNINIT.as_ptr();
2379    assert_eq!(
2380        ::std::mem::size_of::<hb_font_extents_t>(),
2381        48usize,
2382        concat!("Size of: ", stringify!(hb_font_extents_t))
2383    );
2384    assert_eq!(
2385        ::std::mem::align_of::<hb_font_extents_t>(),
2386        4usize,
2387        concat!("Alignment of ", stringify!(hb_font_extents_t))
2388    );
2389    assert_eq!(
2390        unsafe { ::std::ptr::addr_of!((*ptr).ascender) as usize - ptr as usize },
2391        0usize,
2392        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(ascender))
2393    );
2394    assert_eq!(
2395        unsafe { ::std::ptr::addr_of!((*ptr).descender) as usize - ptr as usize },
2396        4usize,
2397        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(descender))
2398    );
2399    assert_eq!(
2400        unsafe { ::std::ptr::addr_of!((*ptr).line_gap) as usize - ptr as usize },
2401        8usize,
2402        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(line_gap))
2403    );
2404    assert_eq!(
2405        unsafe { ::std::ptr::addr_of!((*ptr).reserved9) as usize - ptr as usize },
2406        12usize,
2407        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved9))
2408    );
2409    assert_eq!(
2410        unsafe { ::std::ptr::addr_of!((*ptr).reserved8) as usize - ptr as usize },
2411        16usize,
2412        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved8))
2413    );
2414    assert_eq!(
2415        unsafe { ::std::ptr::addr_of!((*ptr).reserved7) as usize - ptr as usize },
2416        20usize,
2417        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved7))
2418    );
2419    assert_eq!(
2420        unsafe { ::std::ptr::addr_of!((*ptr).reserved6) as usize - ptr as usize },
2421        24usize,
2422        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved6))
2423    );
2424    assert_eq!(
2425        unsafe { ::std::ptr::addr_of!((*ptr).reserved5) as usize - ptr as usize },
2426        28usize,
2427        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved5))
2428    );
2429    assert_eq!(
2430        unsafe { ::std::ptr::addr_of!((*ptr).reserved4) as usize - ptr as usize },
2431        32usize,
2432        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved4))
2433    );
2434    assert_eq!(
2435        unsafe { ::std::ptr::addr_of!((*ptr).reserved3) as usize - ptr as usize },
2436        36usize,
2437        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved3))
2438    );
2439    assert_eq!(
2440        unsafe { ::std::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
2441        40usize,
2442        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved2))
2443    );
2444    assert_eq!(
2445        unsafe { ::std::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
2446        44usize,
2447        concat!("Offset of field: ", stringify!(hb_font_extents_t), "::", stringify!(reserved1))
2448    );
2449}
2450#[doc = " hb_font_get_font_extents_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @extents: (out): The font extents retrieved\n @user_data: User data pointer passed by the caller\n\n This method should retrieve the extents for a font.\n"]
2451pub type hb_font_get_font_extents_func_t = ::std::option::Option<
2452    unsafe extern "C" fn(
2453        font: *mut hb_font_t,
2454        font_data: *mut ::std::os::raw::c_void,
2455        extents: *mut hb_font_extents_t,
2456        user_data: *mut ::std::os::raw::c_void,
2457    ) -> hb_bool_t,
2458>;
2459#[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, for horizontal-direction\n text segments. Extents must be returned in an #hb_glyph_extents output\n parameter.\n"]
2460pub type hb_font_get_font_h_extents_func_t = hb_font_get_font_extents_func_t;
2461#[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, for vertical-direction\n text segments. Extents must be returned in an #hb_glyph_extents output\n parameter.\n"]
2462pub type hb_font_get_font_v_extents_func_t = hb_font_get_font_extents_func_t;
2463#[doc = " hb_font_get_nominal_glyph_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @unicode: The Unicode code point to query\n @glyph: (out): The glyph ID retrieved\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2464pub type hb_font_get_nominal_glyph_func_t = ::std::option::Option<
2465    unsafe extern "C" fn(
2466        font: *mut hb_font_t,
2467        font_data: *mut ::std::os::raw::c_void,
2468        unicode: hb_codepoint_t,
2469        glyph: *mut hb_codepoint_t,
2470        user_data: *mut ::std::os::raw::c_void,
2471    ) -> hb_bool_t,
2472>;
2473#[doc = " hb_font_get_variation_glyph_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @unicode: The Unicode code point to query\n @variation_selector: The  variation-selector code point to query\n @glyph: (out): The glyph ID retrieved\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2474pub type hb_font_get_variation_glyph_func_t = ::std::option::Option<
2475    unsafe extern "C" fn(
2476        font: *mut hb_font_t,
2477        font_data: *mut ::std::os::raw::c_void,
2478        unicode: hb_codepoint_t,
2479        variation_selector: hb_codepoint_t,
2480        glyph: *mut hb_codepoint_t,
2481        user_data: *mut ::std::os::raw::c_void,
2482    ) -> hb_bool_t,
2483>;
2484#[doc = " hb_font_get_nominal_glyphs_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @count: number of code points to query\n @first_unicode: The first Unicode code point to query\n @unicode_stride: The stride between successive code points\n @first_glyph: (out): The first glyph ID retrieved\n @glyph_stride: The stride between successive glyph IDs\n @user_data: User data pointer passed by the caller\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\n Return value: the number of code points processed\n"]
2485pub type hb_font_get_nominal_glyphs_func_t = ::std::option::Option<
2486    unsafe extern "C" fn(
2487        font: *mut hb_font_t,
2488        font_data: *mut ::std::os::raw::c_void,
2489        count: ::std::os::raw::c_uint,
2490        first_unicode: *const hb_codepoint_t,
2491        unicode_stride: ::std::os::raw::c_uint,
2492        first_glyph: *mut hb_codepoint_t,
2493        glyph_stride: ::std::os::raw::c_uint,
2494        user_data: *mut ::std::os::raw::c_void,
2495    ) -> ::std::os::raw::c_uint,
2496>;
2497#[doc = " hb_font_get_glyph_advance_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @user_data: User data pointer passed by the caller\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\n Return value: The advance of @glyph within @font\n"]
2498pub type hb_font_get_glyph_advance_func_t = ::std::option::Option<
2499    unsafe extern "C" fn(
2500        font: *mut hb_font_t,
2501        font_data: *mut ::std::os::raw::c_void,
2502        glyph: hb_codepoint_t,
2503        user_data: *mut ::std::os::raw::c_void,
2504    ) -> hb_position_t,
2505>;
2506#[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"]
2507pub type hb_font_get_glyph_h_advance_func_t = hb_font_get_glyph_advance_func_t;
2508#[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"]
2509pub type hb_font_get_glyph_v_advance_func_t = hb_font_get_glyph_advance_func_t;
2510#[doc = " hb_font_get_glyph_advances_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @count: The number of glyph IDs in the sequence queried\n @first_glyph: The first glyph ID to query\n @glyph_stride: The stride between successive glyph IDs\n @first_advance: (out): The first advance retrieved\n @advance_stride: The stride between successive advances\n @user_data: User data pointer passed by the caller\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"]
2511pub type hb_font_get_glyph_advances_func_t = ::std::option::Option<
2512    unsafe extern "C" fn(
2513        font: *mut hb_font_t,
2514        font_data: *mut ::std::os::raw::c_void,
2515        count: ::std::os::raw::c_uint,
2516        first_glyph: *const hb_codepoint_t,
2517        glyph_stride: ::std::os::raw::c_uint,
2518        first_advance: *mut hb_position_t,
2519        advance_stride: ::std::os::raw::c_uint,
2520        user_data: *mut ::std::os::raw::c_void,
2521    ),
2522>;
2523#[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"]
2524pub type hb_font_get_glyph_h_advances_func_t = hb_font_get_glyph_advances_func_t;
2525#[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"]
2526pub type hb_font_get_glyph_v_advances_func_t = hb_font_get_glyph_advances_func_t;
2527#[doc = " hb_font_get_glyph_origin_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @x: (out): The X coordinate of the origin\n @y: (out): The Y coordinate of the origin\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2528pub type hb_font_get_glyph_origin_func_t = ::std::option::Option<
2529    unsafe extern "C" fn(
2530        font: *mut hb_font_t,
2531        font_data: *mut ::std::os::raw::c_void,
2532        glyph: hb_codepoint_t,
2533        x: *mut hb_position_t,
2534        y: *mut hb_position_t,
2535        user_data: *mut ::std::os::raw::c_void,
2536    ) -> hb_bool_t,
2537>;
2538#[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, for horizontal-direction text segments. Each\n coordinate must be returned in an #hb_position_t output parameter.\n"]
2539pub type hb_font_get_glyph_h_origin_func_t = hb_font_get_glyph_origin_func_t;
2540#[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, for vertical-direction text segments. Each coordinate\n must be returned in an #hb_position_t output parameter.\n"]
2541pub type hb_font_get_glyph_v_origin_func_t = hb_font_get_glyph_origin_func_t;
2542#[doc = " hb_font_get_glyph_kerning_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @first_glyph: The glyph ID of the first glyph in the glyph pair\n @second_glyph: The glyph ID of the second glyph in the glyph pair\n @user_data: User data pointer passed by the caller\n\n This method should retrieve the kerning-adjustment value for a glyph-pair in\n the specified font, for horizontal text segments.\n"]
2543pub type hb_font_get_glyph_kerning_func_t = ::std::option::Option<
2544    unsafe extern "C" fn(
2545        font: *mut hb_font_t,
2546        font_data: *mut ::std::os::raw::c_void,
2547        first_glyph: hb_codepoint_t,
2548        second_glyph: hb_codepoint_t,
2549        user_data: *mut ::std::os::raw::c_void,
2550    ) -> hb_position_t,
2551>;
2552#[doc = " hb_font_get_glyph_h_kerning_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 kerning-adjustment value for a glyph-pair in\n the specified font, for horizontal text segments.\n"]
2553pub type hb_font_get_glyph_h_kerning_func_t = hb_font_get_glyph_kerning_func_t;
2554#[doc = " hb_font_get_glyph_extents_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @extents: (out): The #hb_glyph_extents_t retrieved\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2555pub type hb_font_get_glyph_extents_func_t = ::std::option::Option<
2556    unsafe extern "C" fn(
2557        font: *mut hb_font_t,
2558        font_data: *mut ::std::os::raw::c_void,
2559        glyph: hb_codepoint_t,
2560        extents: *mut hb_glyph_extents_t,
2561        user_data: *mut ::std::os::raw::c_void,
2562    ) -> hb_bool_t,
2563>;
2564#[doc = " hb_font_get_glyph_contour_point_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @point_index: The contour-point index to query\n @x: (out): The X value retrieved for the contour point\n @y: (out): The Y value retrieved for the contour point\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2565pub type hb_font_get_glyph_contour_point_func_t = ::std::option::Option<
2566    unsafe extern "C" fn(
2567        font: *mut hb_font_t,
2568        font_data: *mut ::std::os::raw::c_void,
2569        glyph: hb_codepoint_t,
2570        point_index: ::std::os::raw::c_uint,
2571        x: *mut hb_position_t,
2572        y: *mut hb_position_t,
2573        user_data: *mut ::std::os::raw::c_void,
2574    ) -> hb_bool_t,
2575>;
2576#[doc = " hb_font_get_glyph_name_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @name: (out) (array length=size): Name string retrieved for the glyph ID\n @size: Length of the glyph-name string retrieved\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2577pub type hb_font_get_glyph_name_func_t = ::std::option::Option<
2578    unsafe extern "C" fn(
2579        font: *mut hb_font_t,
2580        font_data: *mut ::std::os::raw::c_void,
2581        glyph: hb_codepoint_t,
2582        name: *mut ::std::os::raw::c_char,
2583        size: ::std::os::raw::c_uint,
2584        user_data: *mut ::std::os::raw::c_void,
2585    ) -> hb_bool_t,
2586>;
2587#[doc = " hb_font_get_glyph_from_name_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @name: (array length=len): The name string to query\n @len: The length of the name queried\n @glyph: (out): The glyph ID retrieved\n @user_data: User data pointer passed by the caller\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\n Return value: `true` if data found, `false` otherwise\n"]
2588pub type hb_font_get_glyph_from_name_func_t = ::std::option::Option<
2589    unsafe extern "C" fn(
2590        font: *mut hb_font_t,
2591        font_data: *mut ::std::os::raw::c_void,
2592        name: *const ::std::os::raw::c_char,
2593        len: ::std::os::raw::c_int,
2594        glyph: *mut hb_codepoint_t,
2595        user_data: *mut ::std::os::raw::c_void,
2596    ) -> hb_bool_t,
2597>;
2598#[doc = " hb_font_draw_glyph_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @draw_funcs: The draw functions to send the shape data to\n @draw_data: The data accompanying the draw functions\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n Since: 7.0.0\n"]
2599pub type hb_font_draw_glyph_func_t = ::std::option::Option<
2600    unsafe extern "C" fn(
2601        font: *mut hb_font_t,
2602        font_data: *mut ::std::os::raw::c_void,
2603        glyph: hb_codepoint_t,
2604        draw_funcs: *mut hb_draw_funcs_t,
2605        draw_data: *mut ::std::os::raw::c_void,
2606        user_data: *mut ::std::os::raw::c_void,
2607    ),
2608>;
2609#[doc = " hb_font_paint_glyph_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @paint_funcs: The paint functions to use\n @paint_data: The data accompanying the paint functions\n @palette_index: The color palette to use\n @foreground: The foreground color\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n Since: 7.0.0"]
2610pub type hb_font_paint_glyph_func_t = ::std::option::Option<
2611    unsafe extern "C" fn(
2612        font: *mut hb_font_t,
2613        font_data: *mut ::std::os::raw::c_void,
2614        glyph: hb_codepoint_t,
2615        paint_funcs: *mut hb_paint_funcs_t,
2616        paint_data: *mut ::std::os::raw::c_void,
2617        palette_index: ::std::os::raw::c_uint,
2618        foreground: hb_color_t,
2619        user_data: *mut ::std::os::raw::c_void,
2620    ),
2621>;
2622extern "C" {
2623    #[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: (nullable): 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"]
2624    pub fn hb_font_funcs_set_font_h_extents_func(
2625        ffuncs: *mut hb_font_funcs_t,
2626        func: hb_font_get_font_h_extents_func_t,
2627        user_data: *mut ::std::os::raw::c_void,
2628        destroy: hb_destroy_func_t,
2629    );
2630}
2631extern "C" {
2632    #[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: (nullable): 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"]
2633    pub fn hb_font_funcs_set_font_v_extents_func(
2634        ffuncs: *mut hb_font_funcs_t,
2635        func: hb_font_get_font_v_extents_func_t,
2636        user_data: *mut ::std::os::raw::c_void,
2637        destroy: hb_destroy_func_t,
2638    );
2639}
2640extern "C" {
2641    #[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: (nullable): 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"]
2642    pub fn hb_font_funcs_set_nominal_glyph_func(
2643        ffuncs: *mut hb_font_funcs_t,
2644        func: hb_font_get_nominal_glyph_func_t,
2645        user_data: *mut ::std::os::raw::c_void,
2646        destroy: hb_destroy_func_t,
2647    );
2648}
2649extern "C" {
2650    #[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: (nullable): 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"]
2651    pub fn hb_font_funcs_set_nominal_glyphs_func(
2652        ffuncs: *mut hb_font_funcs_t,
2653        func: hb_font_get_nominal_glyphs_func_t,
2654        user_data: *mut ::std::os::raw::c_void,
2655        destroy: hb_destroy_func_t,
2656    );
2657}
2658extern "C" {
2659    #[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: (nullable): 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"]
2660    pub fn hb_font_funcs_set_variation_glyph_func(
2661        ffuncs: *mut hb_font_funcs_t,
2662        func: hb_font_get_variation_glyph_func_t,
2663        user_data: *mut ::std::os::raw::c_void,
2664        destroy: hb_destroy_func_t,
2665    );
2666}
2667extern "C" {
2668    #[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: (nullable): 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"]
2669    pub fn hb_font_funcs_set_glyph_h_advance_func(
2670        ffuncs: *mut hb_font_funcs_t,
2671        func: hb_font_get_glyph_h_advance_func_t,
2672        user_data: *mut ::std::os::raw::c_void,
2673        destroy: hb_destroy_func_t,
2674    );
2675}
2676extern "C" {
2677    #[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: (nullable): 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"]
2678    pub fn hb_font_funcs_set_glyph_v_advance_func(
2679        ffuncs: *mut hb_font_funcs_t,
2680        func: hb_font_get_glyph_v_advance_func_t,
2681        user_data: *mut ::std::os::raw::c_void,
2682        destroy: hb_destroy_func_t,
2683    );
2684}
2685extern "C" {
2686    #[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: (nullable): 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"]
2687    pub fn hb_font_funcs_set_glyph_h_advances_func(
2688        ffuncs: *mut hb_font_funcs_t,
2689        func: hb_font_get_glyph_h_advances_func_t,
2690        user_data: *mut ::std::os::raw::c_void,
2691        destroy: hb_destroy_func_t,
2692    );
2693}
2694extern "C" {
2695    #[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: (nullable): 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"]
2696    pub fn hb_font_funcs_set_glyph_v_advances_func(
2697        ffuncs: *mut hb_font_funcs_t,
2698        func: hb_font_get_glyph_v_advances_func_t,
2699        user_data: *mut ::std::os::raw::c_void,
2700        destroy: hb_destroy_func_t,
2701    );
2702}
2703extern "C" {
2704    #[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: (nullable): 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"]
2705    pub fn hb_font_funcs_set_glyph_h_origin_func(
2706        ffuncs: *mut hb_font_funcs_t,
2707        func: hb_font_get_glyph_h_origin_func_t,
2708        user_data: *mut ::std::os::raw::c_void,
2709        destroy: hb_destroy_func_t,
2710    );
2711}
2712extern "C" {
2713    #[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: (nullable): 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"]
2714    pub fn hb_font_funcs_set_glyph_v_origin_func(
2715        ffuncs: *mut hb_font_funcs_t,
2716        func: hb_font_get_glyph_v_origin_func_t,
2717        user_data: *mut ::std::os::raw::c_void,
2718        destroy: hb_destroy_func_t,
2719    );
2720}
2721extern "C" {
2722    #[doc = " hb_font_funcs_set_glyph_h_kerning_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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_h_kerning_func_t.\n\n Since: 0.9.2"]
2723    pub fn hb_font_funcs_set_glyph_h_kerning_func(
2724        ffuncs: *mut hb_font_funcs_t,
2725        func: hb_font_get_glyph_h_kerning_func_t,
2726        user_data: *mut ::std::os::raw::c_void,
2727        destroy: hb_destroy_func_t,
2728    );
2729}
2730extern "C" {
2731    #[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: (nullable): 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"]
2732    pub fn hb_font_funcs_set_glyph_extents_func(
2733        ffuncs: *mut hb_font_funcs_t,
2734        func: hb_font_get_glyph_extents_func_t,
2735        user_data: *mut ::std::os::raw::c_void,
2736        destroy: hb_destroy_func_t,
2737    );
2738}
2739extern "C" {
2740    #[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: (nullable): 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"]
2741    pub fn hb_font_funcs_set_glyph_contour_point_func(
2742        ffuncs: *mut hb_font_funcs_t,
2743        func: hb_font_get_glyph_contour_point_func_t,
2744        user_data: *mut ::std::os::raw::c_void,
2745        destroy: hb_destroy_func_t,
2746    );
2747}
2748extern "C" {
2749    #[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: (nullable): 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"]
2750    pub fn hb_font_funcs_set_glyph_name_func(
2751        ffuncs: *mut hb_font_funcs_t,
2752        func: hb_font_get_glyph_name_func_t,
2753        user_data: *mut ::std::os::raw::c_void,
2754        destroy: hb_destroy_func_t,
2755    );
2756}
2757extern "C" {
2758    #[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: (nullable): 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"]
2759    pub fn hb_font_funcs_set_glyph_from_name_func(
2760        ffuncs: *mut hb_font_funcs_t,
2761        func: hb_font_get_glyph_from_name_func_t,
2762        user_data: *mut ::std::os::raw::c_void,
2763        destroy: hb_destroy_func_t,
2764    );
2765}
2766extern "C" {
2767    #[doc = " hb_font_funcs_set_draw_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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_draw_glyph_func_t.\n\n Since: 7.0.0"]
2768    pub fn hb_font_funcs_set_draw_glyph_func(
2769        ffuncs: *mut hb_font_funcs_t,
2770        func: hb_font_draw_glyph_func_t,
2771        user_data: *mut ::std::os::raw::c_void,
2772        destroy: hb_destroy_func_t,
2773    );
2774}
2775extern "C" {
2776    #[doc = " hb_font_funcs_set_paint_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: (nullable): The function to call when @user_data is no longer needed\n\n Sets the implementation function for #hb_font_paint_glyph_func_t.\n\n Since: 7.0.0"]
2777    pub fn hb_font_funcs_set_paint_glyph_func(
2778        ffuncs: *mut hb_font_funcs_t,
2779        func: hb_font_paint_glyph_func_t,
2780        user_data: *mut ::std::os::raw::c_void,
2781        destroy: hb_destroy_func_t,
2782    );
2783}
2784extern "C" {
2785    pub fn hb_font_get_h_extents(
2786        font: *mut hb_font_t,
2787        extents: *mut hb_font_extents_t,
2788    ) -> hb_bool_t;
2789}
2790extern "C" {
2791    pub fn hb_font_get_v_extents(
2792        font: *mut hb_font_t,
2793        extents: *mut hb_font_extents_t,
2794    ) -> hb_bool_t;
2795}
2796extern "C" {
2797    pub fn hb_font_get_nominal_glyph(
2798        font: *mut hb_font_t,
2799        unicode: hb_codepoint_t,
2800        glyph: *mut hb_codepoint_t,
2801    ) -> hb_bool_t;
2802}
2803extern "C" {
2804    pub fn hb_font_get_variation_glyph(
2805        font: *mut hb_font_t,
2806        unicode: hb_codepoint_t,
2807        variation_selector: hb_codepoint_t,
2808        glyph: *mut hb_codepoint_t,
2809    ) -> hb_bool_t;
2810}
2811extern "C" {
2812    pub fn hb_font_get_nominal_glyphs(
2813        font: *mut hb_font_t,
2814        count: ::std::os::raw::c_uint,
2815        first_unicode: *const hb_codepoint_t,
2816        unicode_stride: ::std::os::raw::c_uint,
2817        first_glyph: *mut hb_codepoint_t,
2818        glyph_stride: ::std::os::raw::c_uint,
2819    ) -> ::std::os::raw::c_uint;
2820}
2821extern "C" {
2822    pub fn hb_font_get_glyph_h_advance(
2823        font: *mut hb_font_t,
2824        glyph: hb_codepoint_t,
2825    ) -> hb_position_t;
2826}
2827extern "C" {
2828    pub fn hb_font_get_glyph_v_advance(
2829        font: *mut hb_font_t,
2830        glyph: hb_codepoint_t,
2831    ) -> hb_position_t;
2832}
2833extern "C" {
2834    pub fn hb_font_get_glyph_h_advances(
2835        font: *mut hb_font_t,
2836        count: ::std::os::raw::c_uint,
2837        first_glyph: *const hb_codepoint_t,
2838        glyph_stride: ::std::os::raw::c_uint,
2839        first_advance: *mut hb_position_t,
2840        advance_stride: ::std::os::raw::c_uint,
2841    );
2842}
2843extern "C" {
2844    pub fn hb_font_get_glyph_v_advances(
2845        font: *mut hb_font_t,
2846        count: ::std::os::raw::c_uint,
2847        first_glyph: *const hb_codepoint_t,
2848        glyph_stride: ::std::os::raw::c_uint,
2849        first_advance: *mut hb_position_t,
2850        advance_stride: ::std::os::raw::c_uint,
2851    );
2852}
2853extern "C" {
2854    pub fn hb_font_get_glyph_h_origin(
2855        font: *mut hb_font_t,
2856        glyph: hb_codepoint_t,
2857        x: *mut hb_position_t,
2858        y: *mut hb_position_t,
2859    ) -> hb_bool_t;
2860}
2861extern "C" {
2862    pub fn hb_font_get_glyph_v_origin(
2863        font: *mut hb_font_t,
2864        glyph: hb_codepoint_t,
2865        x: *mut hb_position_t,
2866        y: *mut hb_position_t,
2867    ) -> hb_bool_t;
2868}
2869extern "C" {
2870    pub fn hb_font_get_glyph_h_kerning(
2871        font: *mut hb_font_t,
2872        left_glyph: hb_codepoint_t,
2873        right_glyph: hb_codepoint_t,
2874    ) -> hb_position_t;
2875}
2876extern "C" {
2877    pub fn hb_font_get_glyph_extents(
2878        font: *mut hb_font_t,
2879        glyph: hb_codepoint_t,
2880        extents: *mut hb_glyph_extents_t,
2881    ) -> hb_bool_t;
2882}
2883extern "C" {
2884    pub fn hb_font_get_glyph_contour_point(
2885        font: *mut hb_font_t,
2886        glyph: hb_codepoint_t,
2887        point_index: ::std::os::raw::c_uint,
2888        x: *mut hb_position_t,
2889        y: *mut hb_position_t,
2890    ) -> hb_bool_t;
2891}
2892extern "C" {
2893    pub fn hb_font_get_glyph_name(
2894        font: *mut hb_font_t,
2895        glyph: hb_codepoint_t,
2896        name: *mut ::std::os::raw::c_char,
2897        size: ::std::os::raw::c_uint,
2898    ) -> hb_bool_t;
2899}
2900extern "C" {
2901    pub fn hb_font_get_glyph_from_name(
2902        font: *mut hb_font_t,
2903        name: *const ::std::os::raw::c_char,
2904        len: ::std::os::raw::c_int,
2905        glyph: *mut hb_codepoint_t,
2906    ) -> hb_bool_t;
2907}
2908extern "C" {
2909    pub fn hb_font_draw_glyph(
2910        font: *mut hb_font_t,
2911        glyph: hb_codepoint_t,
2912        dfuncs: *mut hb_draw_funcs_t,
2913        draw_data: *mut ::std::os::raw::c_void,
2914    );
2915}
2916extern "C" {
2917    pub fn hb_font_paint_glyph(
2918        font: *mut hb_font_t,
2919        glyph: hb_codepoint_t,
2920        pfuncs: *mut hb_paint_funcs_t,
2921        paint_data: *mut ::std::os::raw::c_void,
2922        palette_index: ::std::os::raw::c_uint,
2923        foreground: hb_color_t,
2924    );
2925}
2926extern "C" {
2927    pub fn hb_font_get_glyph(
2928        font: *mut hb_font_t,
2929        unicode: hb_codepoint_t,
2930        variation_selector: hb_codepoint_t,
2931        glyph: *mut hb_codepoint_t,
2932    ) -> hb_bool_t;
2933}
2934extern "C" {
2935    pub fn hb_font_get_extents_for_direction(
2936        font: *mut hb_font_t,
2937        direction: hb_direction_t,
2938        extents: *mut hb_font_extents_t,
2939    );
2940}
2941extern "C" {
2942    pub fn hb_font_get_glyph_advance_for_direction(
2943        font: *mut hb_font_t,
2944        glyph: hb_codepoint_t,
2945        direction: hb_direction_t,
2946        x: *mut hb_position_t,
2947        y: *mut hb_position_t,
2948    );
2949}
2950extern "C" {
2951    pub fn hb_font_get_glyph_advances_for_direction(
2952        font: *mut hb_font_t,
2953        direction: hb_direction_t,
2954        count: ::std::os::raw::c_uint,
2955        first_glyph: *const hb_codepoint_t,
2956        glyph_stride: ::std::os::raw::c_uint,
2957        first_advance: *mut hb_position_t,
2958        advance_stride: ::std::os::raw::c_uint,
2959    );
2960}
2961extern "C" {
2962    pub fn hb_font_get_glyph_origin_for_direction(
2963        font: *mut hb_font_t,
2964        glyph: hb_codepoint_t,
2965        direction: hb_direction_t,
2966        x: *mut hb_position_t,
2967        y: *mut hb_position_t,
2968    );
2969}
2970extern "C" {
2971    pub fn hb_font_add_glyph_origin_for_direction(
2972        font: *mut hb_font_t,
2973        glyph: hb_codepoint_t,
2974        direction: hb_direction_t,
2975        x: *mut hb_position_t,
2976        y: *mut hb_position_t,
2977    );
2978}
2979extern "C" {
2980    pub fn hb_font_subtract_glyph_origin_for_direction(
2981        font: *mut hb_font_t,
2982        glyph: hb_codepoint_t,
2983        direction: hb_direction_t,
2984        x: *mut hb_position_t,
2985        y: *mut hb_position_t,
2986    );
2987}
2988extern "C" {
2989    pub fn hb_font_get_glyph_kerning_for_direction(
2990        font: *mut hb_font_t,
2991        first_glyph: hb_codepoint_t,
2992        second_glyph: hb_codepoint_t,
2993        direction: hb_direction_t,
2994        x: *mut hb_position_t,
2995        y: *mut hb_position_t,
2996    );
2997}
2998extern "C" {
2999    pub fn hb_font_get_glyph_extents_for_origin(
3000        font: *mut hb_font_t,
3001        glyph: hb_codepoint_t,
3002        direction: hb_direction_t,
3003        extents: *mut hb_glyph_extents_t,
3004    ) -> hb_bool_t;
3005}
3006extern "C" {
3007    pub fn hb_font_get_glyph_contour_point_for_origin(
3008        font: *mut hb_font_t,
3009        glyph: hb_codepoint_t,
3010        point_index: ::std::os::raw::c_uint,
3011        direction: hb_direction_t,
3012        x: *mut hb_position_t,
3013        y: *mut hb_position_t,
3014    ) -> hb_bool_t;
3015}
3016extern "C" {
3017    pub fn hb_font_glyph_to_string(
3018        font: *mut hb_font_t,
3019        glyph: hb_codepoint_t,
3020        s: *mut ::std::os::raw::c_char,
3021        size: ::std::os::raw::c_uint,
3022    );
3023}
3024extern "C" {
3025    pub fn hb_font_glyph_from_string(
3026        font: *mut hb_font_t,
3027        s: *const ::std::os::raw::c_char,
3028        len: ::std::os::raw::c_int,
3029        glyph: *mut hb_codepoint_t,
3030    ) -> hb_bool_t;
3031}
3032extern "C" {
3033    pub fn hb_font_create(face: *mut hb_face_t) -> *mut hb_font_t;
3034}
3035extern "C" {
3036    pub fn hb_font_create_sub_font(parent: *mut hb_font_t) -> *mut hb_font_t;
3037}
3038extern "C" {
3039    pub fn hb_font_get_empty() -> *mut hb_font_t;
3040}
3041extern "C" {
3042    pub fn hb_font_reference(font: *mut hb_font_t) -> *mut hb_font_t;
3043}
3044extern "C" {
3045    pub fn hb_font_destroy(font: *mut hb_font_t);
3046}
3047extern "C" {
3048    pub fn hb_font_set_user_data(
3049        font: *mut hb_font_t,
3050        key: *mut hb_user_data_key_t,
3051        data: *mut ::std::os::raw::c_void,
3052        destroy: hb_destroy_func_t,
3053        replace: hb_bool_t,
3054    ) -> hb_bool_t;
3055}
3056extern "C" {
3057    pub fn hb_font_get_user_data(
3058        font: *const hb_font_t,
3059        key: *mut hb_user_data_key_t,
3060    ) -> *mut ::std::os::raw::c_void;
3061}
3062extern "C" {
3063    pub fn hb_font_make_immutable(font: *mut hb_font_t);
3064}
3065extern "C" {
3066    pub fn hb_font_is_immutable(font: *mut hb_font_t) -> hb_bool_t;
3067}
3068extern "C" {
3069    pub fn hb_font_get_serial(font: *mut hb_font_t) -> ::std::os::raw::c_uint;
3070}
3071extern "C" {
3072    pub fn hb_font_changed(font: *mut hb_font_t);
3073}
3074extern "C" {
3075    pub fn hb_font_set_parent(font: *mut hb_font_t, parent: *mut hb_font_t);
3076}
3077extern "C" {
3078    pub fn hb_font_get_parent(font: *mut hb_font_t) -> *mut hb_font_t;
3079}
3080extern "C" {
3081    pub fn hb_font_set_face(font: *mut hb_font_t, face: *mut hb_face_t);
3082}
3083extern "C" {
3084    pub fn hb_font_get_face(font: *mut hb_font_t) -> *mut hb_face_t;
3085}
3086extern "C" {
3087    pub fn hb_font_set_funcs(
3088        font: *mut hb_font_t,
3089        klass: *mut hb_font_funcs_t,
3090        font_data: *mut ::std::os::raw::c_void,
3091        destroy: hb_destroy_func_t,
3092    );
3093}
3094extern "C" {
3095    pub fn hb_font_set_funcs_data(
3096        font: *mut hb_font_t,
3097        font_data: *mut ::std::os::raw::c_void,
3098        destroy: hb_destroy_func_t,
3099    );
3100}
3101extern "C" {
3102    pub fn hb_font_set_scale(
3103        font: *mut hb_font_t,
3104        x_scale: ::std::os::raw::c_int,
3105        y_scale: ::std::os::raw::c_int,
3106    );
3107}
3108extern "C" {
3109    pub fn hb_font_get_scale(
3110        font: *mut hb_font_t,
3111        x_scale: *mut ::std::os::raw::c_int,
3112        y_scale: *mut ::std::os::raw::c_int,
3113    );
3114}
3115extern "C" {
3116    pub fn hb_font_set_ppem(
3117        font: *mut hb_font_t,
3118        x_ppem: ::std::os::raw::c_uint,
3119        y_ppem: ::std::os::raw::c_uint,
3120    );
3121}
3122extern "C" {
3123    pub fn hb_font_get_ppem(
3124        font: *mut hb_font_t,
3125        x_ppem: *mut ::std::os::raw::c_uint,
3126        y_ppem: *mut ::std::os::raw::c_uint,
3127    );
3128}
3129extern "C" {
3130    pub fn hb_font_set_ptem(font: *mut hb_font_t, ptem: f32);
3131}
3132extern "C" {
3133    pub fn hb_font_get_ptem(font: *mut hb_font_t) -> f32;
3134}
3135extern "C" {
3136    pub fn hb_font_set_synthetic_bold(
3137        font: *mut hb_font_t,
3138        x_embolden: f32,
3139        y_embolden: f32,
3140        in_place: hb_bool_t,
3141    );
3142}
3143extern "C" {
3144    pub fn hb_font_get_synthetic_bold(
3145        font: *mut hb_font_t,
3146        x_embolden: *mut f32,
3147        y_embolden: *mut f32,
3148        in_place: *mut hb_bool_t,
3149    );
3150}
3151extern "C" {
3152    pub fn hb_font_set_synthetic_slant(font: *mut hb_font_t, slant: f32);
3153}
3154extern "C" {
3155    pub fn hb_font_get_synthetic_slant(font: *mut hb_font_t) -> f32;
3156}
3157extern "C" {
3158    pub fn hb_font_set_variations(
3159        font: *mut hb_font_t,
3160        variations: *const hb_variation_t,
3161        variations_length: ::std::os::raw::c_uint,
3162    );
3163}
3164extern "C" {
3165    pub fn hb_font_set_variation(font: *mut hb_font_t, tag: hb_tag_t, value: f32);
3166}
3167extern "C" {
3168    pub fn hb_font_set_var_coords_design(
3169        font: *mut hb_font_t,
3170        coords: *const f32,
3171        coords_length: ::std::os::raw::c_uint,
3172    );
3173}
3174extern "C" {
3175    pub fn hb_font_get_var_coords_design(
3176        font: *mut hb_font_t,
3177        length: *mut ::std::os::raw::c_uint,
3178    ) -> *const f32;
3179}
3180extern "C" {
3181    pub fn hb_font_set_var_coords_normalized(
3182        font: *mut hb_font_t,
3183        coords: *const ::std::os::raw::c_int,
3184        coords_length: ::std::os::raw::c_uint,
3185    );
3186}
3187extern "C" {
3188    pub fn hb_font_get_var_coords_normalized(
3189        font: *mut hb_font_t,
3190        length: *mut ::std::os::raw::c_uint,
3191    ) -> *const ::std::os::raw::c_int;
3192}
3193extern "C" {
3194    pub fn hb_font_set_var_named_instance(
3195        font: *mut hb_font_t,
3196        instance_index: ::std::os::raw::c_uint,
3197    );
3198}
3199extern "C" {
3200    pub fn hb_font_get_var_named_instance(font: *mut hb_font_t) -> ::std::os::raw::c_uint;
3201}
3202#[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."]
3203#[repr(C)]
3204#[derive(Copy, Clone)]
3205pub struct hb_glyph_info_t {
3206    pub codepoint: hb_codepoint_t,
3207    pub mask: hb_mask_t,
3208    pub cluster: u32,
3209    pub var1: hb_var_int_t,
3210    pub var2: hb_var_int_t,
3211}
3212#[test]
3213fn bindgen_test_layout_hb_glyph_info_t() {
3214    const UNINIT: ::std::mem::MaybeUninit<hb_glyph_info_t> = ::std::mem::MaybeUninit::uninit();
3215    let ptr = UNINIT.as_ptr();
3216    assert_eq!(
3217        ::std::mem::size_of::<hb_glyph_info_t>(),
3218        20usize,
3219        concat!("Size of: ", stringify!(hb_glyph_info_t))
3220    );
3221    assert_eq!(
3222        ::std::mem::align_of::<hb_glyph_info_t>(),
3223        4usize,
3224        concat!("Alignment of ", stringify!(hb_glyph_info_t))
3225    );
3226    assert_eq!(
3227        unsafe { ::std::ptr::addr_of!((*ptr).codepoint) as usize - ptr as usize },
3228        0usize,
3229        concat!("Offset of field: ", stringify!(hb_glyph_info_t), "::", stringify!(codepoint))
3230    );
3231    assert_eq!(
3232        unsafe { ::std::ptr::addr_of!((*ptr).mask) as usize - ptr as usize },
3233        4usize,
3234        concat!("Offset of field: ", stringify!(hb_glyph_info_t), "::", stringify!(mask))
3235    );
3236    assert_eq!(
3237        unsafe { ::std::ptr::addr_of!((*ptr).cluster) as usize - ptr as usize },
3238        8usize,
3239        concat!("Offset of field: ", stringify!(hb_glyph_info_t), "::", stringify!(cluster))
3240    );
3241    assert_eq!(
3242        unsafe { ::std::ptr::addr_of!((*ptr).var1) as usize - ptr as usize },
3243        12usize,
3244        concat!("Offset of field: ", stringify!(hb_glyph_info_t), "::", stringify!(var1))
3245    );
3246    assert_eq!(
3247        unsafe { ::std::ptr::addr_of!((*ptr).var2) as usize - ptr as usize },
3248        16usize,
3249        concat!("Offset of field: ", stringify!(hb_glyph_info_t), "::", stringify!(var2))
3250    );
3251}
3252pub const hb_glyph_flags_t_HB_GLYPH_FLAG_UNSAFE_TO_BREAK: hb_glyph_flags_t = 1;
3253pub const hb_glyph_flags_t_HB_GLYPH_FLAG_UNSAFE_TO_CONCAT: hb_glyph_flags_t = 2;
3254pub const hb_glyph_flags_t_HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL: hb_glyph_flags_t = 4;
3255pub const hb_glyph_flags_t_HB_GLYPH_FLAG_DEFINED: hb_glyph_flags_t = 7;
3256#[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.\n \t\t\t\t   On the flip side, it means that when this\n \t\t\t\t   flag is not present, then it is safe to break\n \t\t\t\t   the glyph-run at the beginning of this\n \t\t\t\t   cluster, and the two sides will represent the\n \t\t\t\t   exact same result one would get if breaking\n \t\t\t\t   input text at the beginning of this cluster\n \t\t\t\t   and shaping the two sides separately.\n \t\t\t\t   This can be used to optimize paragraph\n \t\t\t\t   layout, by avoiding re-shaping of each line\n \t\t\t\t   after line-breaking.\n @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT: Indicates that if input text is changed on one\n \t\t\t\t   side of the beginning of the cluster this glyph\n \t\t\t\t   is part of, then the shaping results for the\n \t\t\t\t   other side might change.\n \t\t\t\t   Note that the absence of this flag will NOT by\n \t\t\t\t   itself mean that it IS safe to concat text.\n \t\t\t\t   Only two pieces of text both of which clear of\n \t\t\t\t   this flag can be concatenated safely.\n \t\t\t\t   This can be used to optimize paragraph\n \t\t\t\t   layout, by avoiding re-shaping of each line\n \t\t\t\t   after line-breaking, by limiting the\n \t\t\t\t   reshaping to a small piece around the\n \t\t\t\t   breaking position only, even if the breaking\n \t\t\t\t   position carries the\n \t\t\t\t   #HB_GLYPH_FLAG_UNSAFE_TO_BREAK or when\n \t\t\t\t   hyphenation or other text transformation\n \t\t\t\t   happens at line-break position, in the following\n \t\t\t\t   way:\n \t\t\t\t   1. Iterate back from the line-break position\n \t\t\t\t   until the first cluster start position that is\n \t\t\t\t   NOT unsafe-to-concat, 2. shape the segment from\n \t\t\t\t   there till the end of line, 3. check whether the\n \t\t\t\t   resulting glyph-run also is clear of the\n \t\t\t\t   unsafe-to-concat at its start-of-text position;\n \t\t\t\t   if it is, just splice it into place and the line\n \t\t\t\t   is shaped; If not, move on to a position further\n \t\t\t\t   back that is clear of unsafe-to-concat and retry\n \t\t\t\t   from there, and repeat.\n \t\t\t\t   At the start of next line a similar algorithm can\n \t\t\t\t   be implemented. That is: 1. Iterate forward from\n \t\t\t\t   the line-break position until the first cluster\n \t\t\t\t   start position that is NOT unsafe-to-concat, 2.\n \t\t\t\t   shape the segment from beginning of the line to\n \t\t\t\t   that position, 3. check whether the resulting\n \t\t\t\t   glyph-run also is clear of the unsafe-to-concat\n \t\t\t\t   at its end-of-text position; if it is, just splice\n \t\t\t\t   it into place and the beginning is shaped; If not,\n \t\t\t\t   move on to a position further forward that is clear\n \t\t\t\t   of unsafe-to-concat and retry up to there, and repeat.\n \t\t\t\t   A slight complication will arise in the\n \t\t\t\t   implementation of the algorithm above,\n \t\t\t\t   because while our buffer API has a way to\n \t\t\t\t   return flags for position corresponding to\n \t\t\t\t   start-of-text, there is currently no position\n \t\t\t\t   corresponding to end-of-text.  This limitation\n \t\t\t\t   can be alleviated by shaping more text than needed\n \t\t\t\t   and looking for unsafe-to-concat flag within text\n \t\t\t\t   clusters.\n \t\t\t\t   The #HB_GLYPH_FLAG_UNSAFE_TO_BREAK flag will\n \t\t\t\t   always imply this flag.\n\t\t\t\t   To use this flag, you must enable the buffer flag\n\t\t\t\t   @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT during\n\t\t\t\t   shaping, otherwise the buffer flag will not be\n\t\t\t\t   reliably produced.\n \t\t\t\t   Since: 4.0.0\n @HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL: In scripts that use elongation (Arabic,\nMongolian, Syriac, etc.), this flag signifies\nthat it is safe to insert a U+0640 TATWEEL\ncharacter before this cluster for elongation.\nThis flag does not determine the\nscript-specific elongation places, but only\nwhen it is safe to do the elongation without\ninterrupting text shaping.\nSince: 5.1.0\n @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.\n\n Flags for #hb_glyph_info_t.\n\n Since: 1.5.0"]
3257pub type hb_glyph_flags_t = ::std::os::raw::c_uint;
3258extern "C" {
3259    pub fn hb_glyph_info_get_glyph_flags(info: *const hb_glyph_info_t) -> hb_glyph_flags_t;
3260}
3261#[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"]
3262#[repr(C)]
3263#[derive(Copy, Clone)]
3264pub struct hb_glyph_position_t {
3265    pub x_advance: hb_position_t,
3266    pub y_advance: hb_position_t,
3267    pub x_offset: hb_position_t,
3268    pub y_offset: hb_position_t,
3269    pub var: hb_var_int_t,
3270}
3271#[test]
3272fn bindgen_test_layout_hb_glyph_position_t() {
3273    const UNINIT: ::std::mem::MaybeUninit<hb_glyph_position_t> = ::std::mem::MaybeUninit::uninit();
3274    let ptr = UNINIT.as_ptr();
3275    assert_eq!(
3276        ::std::mem::size_of::<hb_glyph_position_t>(),
3277        20usize,
3278        concat!("Size of: ", stringify!(hb_glyph_position_t))
3279    );
3280    assert_eq!(
3281        ::std::mem::align_of::<hb_glyph_position_t>(),
3282        4usize,
3283        concat!("Alignment of ", stringify!(hb_glyph_position_t))
3284    );
3285    assert_eq!(
3286        unsafe { ::std::ptr::addr_of!((*ptr).x_advance) as usize - ptr as usize },
3287        0usize,
3288        concat!(
3289            "Offset of field: ",
3290            stringify!(hb_glyph_position_t),
3291            "::",
3292            stringify!(x_advance)
3293        )
3294    );
3295    assert_eq!(
3296        unsafe { ::std::ptr::addr_of!((*ptr).y_advance) as usize - ptr as usize },
3297        4usize,
3298        concat!(
3299            "Offset of field: ",
3300            stringify!(hb_glyph_position_t),
3301            "::",
3302            stringify!(y_advance)
3303        )
3304    );
3305    assert_eq!(
3306        unsafe { ::std::ptr::addr_of!((*ptr).x_offset) as usize - ptr as usize },
3307        8usize,
3308        concat!("Offset of field: ", stringify!(hb_glyph_position_t), "::", stringify!(x_offset))
3309    );
3310    assert_eq!(
3311        unsafe { ::std::ptr::addr_of!((*ptr).y_offset) as usize - ptr as usize },
3312        12usize,
3313        concat!("Offset of field: ", stringify!(hb_glyph_position_t), "::", stringify!(y_offset))
3314    );
3315    assert_eq!(
3316        unsafe { ::std::ptr::addr_of!((*ptr).var) as usize - ptr as usize },
3317        16usize,
3318        concat!("Offset of field: ", stringify!(hb_glyph_position_t), "::", stringify!(var))
3319    );
3320}
3321#[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."]
3322#[repr(C)]
3323#[derive(Debug, Copy, Clone)]
3324pub struct hb_segment_properties_t {
3325    pub direction: hb_direction_t,
3326    pub script: hb_script_t,
3327    pub language: hb_language_t,
3328    pub reserved1: *mut ::std::os::raw::c_void,
3329    pub reserved2: *mut ::std::os::raw::c_void,
3330}
3331#[test]
3332fn bindgen_test_layout_hb_segment_properties_t() {
3333    const UNINIT: ::std::mem::MaybeUninit<hb_segment_properties_t> =
3334        ::std::mem::MaybeUninit::uninit();
3335    let ptr = UNINIT.as_ptr();
3336    assert_eq!(
3337        ::std::mem::size_of::<hb_segment_properties_t>(),
3338        32usize,
3339        concat!("Size of: ", stringify!(hb_segment_properties_t))
3340    );
3341    assert_eq!(
3342        ::std::mem::align_of::<hb_segment_properties_t>(),
3343        8usize,
3344        concat!("Alignment of ", stringify!(hb_segment_properties_t))
3345    );
3346    assert_eq!(
3347        unsafe { ::std::ptr::addr_of!((*ptr).direction) as usize - ptr as usize },
3348        0usize,
3349        concat!(
3350            "Offset of field: ",
3351            stringify!(hb_segment_properties_t),
3352            "::",
3353            stringify!(direction)
3354        )
3355    );
3356    assert_eq!(
3357        unsafe { ::std::ptr::addr_of!((*ptr).script) as usize - ptr as usize },
3358        4usize,
3359        concat!(
3360            "Offset of field: ",
3361            stringify!(hb_segment_properties_t),
3362            "::",
3363            stringify!(script)
3364        )
3365    );
3366    assert_eq!(
3367        unsafe { ::std::ptr::addr_of!((*ptr).language) as usize - ptr as usize },
3368        8usize,
3369        concat!(
3370            "Offset of field: ",
3371            stringify!(hb_segment_properties_t),
3372            "::",
3373            stringify!(language)
3374        )
3375    );
3376    assert_eq!(
3377        unsafe { ::std::ptr::addr_of!((*ptr).reserved1) as usize - ptr as usize },
3378        16usize,
3379        concat!(
3380            "Offset of field: ",
3381            stringify!(hb_segment_properties_t),
3382            "::",
3383            stringify!(reserved1)
3384        )
3385    );
3386    assert_eq!(
3387        unsafe { ::std::ptr::addr_of!((*ptr).reserved2) as usize - ptr as usize },
3388        24usize,
3389        concat!(
3390            "Offset of field: ",
3391            stringify!(hb_segment_properties_t),
3392            "::",
3393            stringify!(reserved2)
3394        )
3395    );
3396}
3397extern "C" {
3398    pub fn hb_segment_properties_equal(
3399        a: *const hb_segment_properties_t,
3400        b: *const hb_segment_properties_t,
3401    ) -> hb_bool_t;
3402}
3403extern "C" {
3404    pub fn hb_segment_properties_hash(p: *const hb_segment_properties_t) -> ::std::os::raw::c_uint;
3405}
3406extern "C" {
3407    pub fn hb_segment_properties_overlay(
3408        p: *mut hb_segment_properties_t,
3409        src: *const hb_segment_properties_t,
3410    );
3411}
3412#[repr(C)]
3413#[derive(Debug, Copy, Clone)]
3414pub struct hb_buffer_t {
3415    _unused: [u8; 0],
3416}
3417extern "C" {
3418    pub fn hb_buffer_create() -> *mut hb_buffer_t;
3419}
3420extern "C" {
3421    pub fn hb_buffer_create_similar(src: *const hb_buffer_t) -> *mut hb_buffer_t;
3422}
3423extern "C" {
3424    pub fn hb_buffer_reset(buffer: *mut hb_buffer_t);
3425}
3426extern "C" {
3427    pub fn hb_buffer_get_empty() -> *mut hb_buffer_t;
3428}
3429extern "C" {
3430    pub fn hb_buffer_reference(buffer: *mut hb_buffer_t) -> *mut hb_buffer_t;
3431}
3432extern "C" {
3433    pub fn hb_buffer_destroy(buffer: *mut hb_buffer_t);
3434}
3435extern "C" {
3436    pub fn hb_buffer_set_user_data(
3437        buffer: *mut hb_buffer_t,
3438        key: *mut hb_user_data_key_t,
3439        data: *mut ::std::os::raw::c_void,
3440        destroy: hb_destroy_func_t,
3441        replace: hb_bool_t,
3442    ) -> hb_bool_t;
3443}
3444extern "C" {
3445    pub fn hb_buffer_get_user_data(
3446        buffer: *const hb_buffer_t,
3447        key: *mut hb_user_data_key_t,
3448    ) -> *mut ::std::os::raw::c_void;
3449}
3450pub const hb_buffer_content_type_t_HB_BUFFER_CONTENT_TYPE_INVALID: hb_buffer_content_type_t = 0;
3451pub const hb_buffer_content_type_t_HB_BUFFER_CONTENT_TYPE_UNICODE: hb_buffer_content_type_t = 1;
3452pub const hb_buffer_content_type_t_HB_BUFFER_CONTENT_TYPE_GLYPHS: hb_buffer_content_type_t = 2;
3453#[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).\n\n The type of #hb_buffer_t contents."]
3454pub type hb_buffer_content_type_t = ::std::os::raw::c_uint;
3455extern "C" {
3456    pub fn hb_buffer_set_content_type(
3457        buffer: *mut hb_buffer_t,
3458        content_type: hb_buffer_content_type_t,
3459    );
3460}
3461extern "C" {
3462    pub fn hb_buffer_get_content_type(buffer: *const hb_buffer_t) -> hb_buffer_content_type_t;
3463}
3464extern "C" {
3465    pub fn hb_buffer_set_unicode_funcs(
3466        buffer: *mut hb_buffer_t,
3467        unicode_funcs: *mut hb_unicode_funcs_t,
3468    );
3469}
3470extern "C" {
3471    pub fn hb_buffer_get_unicode_funcs(buffer: *const hb_buffer_t) -> *mut hb_unicode_funcs_t;
3472}
3473extern "C" {
3474    pub fn hb_buffer_set_direction(buffer: *mut hb_buffer_t, direction: hb_direction_t);
3475}
3476extern "C" {
3477    pub fn hb_buffer_get_direction(buffer: *const hb_buffer_t) -> hb_direction_t;
3478}
3479extern "C" {
3480    pub fn hb_buffer_set_script(buffer: *mut hb_buffer_t, script: hb_script_t);
3481}
3482extern "C" {
3483    pub fn hb_buffer_get_script(buffer: *const hb_buffer_t) -> hb_script_t;
3484}
3485extern "C" {
3486    pub fn hb_buffer_set_language(buffer: *mut hb_buffer_t, language: hb_language_t);
3487}
3488extern "C" {
3489    pub fn hb_buffer_get_language(buffer: *const hb_buffer_t) -> hb_language_t;
3490}
3491extern "C" {
3492    pub fn hb_buffer_set_segment_properties(
3493        buffer: *mut hb_buffer_t,
3494        props: *const hb_segment_properties_t,
3495    );
3496}
3497extern "C" {
3498    pub fn hb_buffer_get_segment_properties(
3499        buffer: *const hb_buffer_t,
3500        props: *mut hb_segment_properties_t,
3501    );
3502}
3503extern "C" {
3504    pub fn hb_buffer_guess_segment_properties(buffer: *mut hb_buffer_t);
3505}
3506pub const hb_buffer_flags_t_HB_BUFFER_FLAG_DEFAULT: hb_buffer_flags_t = 0;
3507pub const hb_buffer_flags_t_HB_BUFFER_FLAG_BOT: hb_buffer_flags_t = 1;
3508pub const hb_buffer_flags_t_HB_BUFFER_FLAG_EOT: hb_buffer_flags_t = 2;
3509pub const hb_buffer_flags_t_HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES: hb_buffer_flags_t = 4;
3510pub const hb_buffer_flags_t_HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES: hb_buffer_flags_t = 8;
3511pub const hb_buffer_flags_t_HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE: hb_buffer_flags_t = 16;
3512pub const hb_buffer_flags_t_HB_BUFFER_FLAG_VERIFY: hb_buffer_flags_t = 32;
3513pub const hb_buffer_flags_t_HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT: hb_buffer_flags_t = 64;
3514pub const hb_buffer_flags_t_HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL: hb_buffer_flags_t = 128;
3515pub const hb_buffer_flags_t_HB_BUFFER_FLAG_DEFINED: hb_buffer_flags_t = 255;
3516#[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.0\n @HB_BUFFER_FLAG_VERIFY:\n                      flag indicating that the hb_shape() call and its variants\n                      should perform various verification processes on the results\n                      of the shaping operation on the buffer.  If the verification\n                      fails, then either a buffer message is sent, if a message\n                      handler is installed on the buffer, or a message is written\n                      to standard error.  In either case, the shaping result might\n                      be modified to show the failed output. Since: 3.4.0\n @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT:\n                      flag indicating that the @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT\n                      glyph-flag should be produced by the shaper. By default\n                      it will not be produced since it incurs a cost. Since: 4.0.0\n @HB_BUFFER_FLAG_PRODUCE_SAFE_TO_INSERT_TATWEEL:\n                      flag indicating that the @HB_GLYPH_FLAG_SAFE_TO_INSERT_TATWEEL\n                      glyph-flag should be produced by the shaper. By default\n                      it will not be produced. Since: 5.1.0\n @HB_BUFFER_FLAG_DEFINED: All currently defined flags: Since: 4.4.0\n\n Flags for #hb_buffer_t.\n\n Since: 0.9.20"]
3517pub type hb_buffer_flags_t = ::std::os::raw::c_uint;
3518extern "C" {
3519    pub fn hb_buffer_set_flags(buffer: *mut hb_buffer_t, flags: hb_buffer_flags_t);
3520}
3521extern "C" {
3522    pub fn hb_buffer_get_flags(buffer: *const hb_buffer_t) -> hb_buffer_flags_t;
3523}
3524pub const hb_buffer_cluster_level_t_HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES:
3525    hb_buffer_cluster_level_t = 0;
3526pub const hb_buffer_cluster_level_t_HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS:
3527    hb_buffer_cluster_level_t = 1;
3528pub const hb_buffer_cluster_level_t_HB_BUFFER_CLUSTER_LEVEL_CHARACTERS: hb_buffer_cluster_level_t =
3529    2;
3530pub const hb_buffer_cluster_level_t_HB_BUFFER_CLUSTER_LEVEL_DEFAULT: hb_buffer_cluster_level_t = 0;
3531#[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"]
3532pub type hb_buffer_cluster_level_t = ::std::os::raw::c_uint;
3533extern "C" {
3534    pub fn hb_buffer_set_cluster_level(
3535        buffer: *mut hb_buffer_t,
3536        cluster_level: hb_buffer_cluster_level_t,
3537    );
3538}
3539extern "C" {
3540    pub fn hb_buffer_get_cluster_level(buffer: *const hb_buffer_t) -> hb_buffer_cluster_level_t;
3541}
3542extern "C" {
3543    pub fn hb_buffer_set_replacement_codepoint(
3544        buffer: *mut hb_buffer_t,
3545        replacement: hb_codepoint_t,
3546    );
3547}
3548extern "C" {
3549    pub fn hb_buffer_get_replacement_codepoint(buffer: *const hb_buffer_t) -> hb_codepoint_t;
3550}
3551extern "C" {
3552    pub fn hb_buffer_set_invisible_glyph(buffer: *mut hb_buffer_t, invisible: hb_codepoint_t);
3553}
3554extern "C" {
3555    pub fn hb_buffer_get_invisible_glyph(buffer: *const hb_buffer_t) -> hb_codepoint_t;
3556}
3557extern "C" {
3558    pub fn hb_buffer_set_not_found_glyph(buffer: *mut hb_buffer_t, not_found: hb_codepoint_t);
3559}
3560extern "C" {
3561    pub fn hb_buffer_get_not_found_glyph(buffer: *const hb_buffer_t) -> hb_codepoint_t;
3562}
3563extern "C" {
3564    pub fn hb_buffer_set_random_state(buffer: *mut hb_buffer_t, state: ::std::os::raw::c_uint);
3565}
3566extern "C" {
3567    pub fn hb_buffer_get_random_state(buffer: *const hb_buffer_t) -> ::std::os::raw::c_uint;
3568}
3569extern "C" {
3570    pub fn hb_buffer_clear_contents(buffer: *mut hb_buffer_t);
3571}
3572extern "C" {
3573    pub fn hb_buffer_pre_allocate(
3574        buffer: *mut hb_buffer_t,
3575        size: ::std::os::raw::c_uint,
3576    ) -> hb_bool_t;
3577}
3578extern "C" {
3579    pub fn hb_buffer_allocation_successful(buffer: *mut hb_buffer_t) -> hb_bool_t;
3580}
3581extern "C" {
3582    pub fn hb_buffer_reverse(buffer: *mut hb_buffer_t);
3583}
3584extern "C" {
3585    pub fn hb_buffer_reverse_range(
3586        buffer: *mut hb_buffer_t,
3587        start: ::std::os::raw::c_uint,
3588        end: ::std::os::raw::c_uint,
3589    );
3590}
3591extern "C" {
3592    pub fn hb_buffer_reverse_clusters(buffer: *mut hb_buffer_t);
3593}
3594extern "C" {
3595    pub fn hb_buffer_add(
3596        buffer: *mut hb_buffer_t,
3597        codepoint: hb_codepoint_t,
3598        cluster: ::std::os::raw::c_uint,
3599    );
3600}
3601extern "C" {
3602    pub fn hb_buffer_add_utf8(
3603        buffer: *mut hb_buffer_t,
3604        text: *const ::std::os::raw::c_char,
3605        text_length: ::std::os::raw::c_int,
3606        item_offset: ::std::os::raw::c_uint,
3607        item_length: ::std::os::raw::c_int,
3608    );
3609}
3610extern "C" {
3611    pub fn hb_buffer_add_utf16(
3612        buffer: *mut hb_buffer_t,
3613        text: *const u16,
3614        text_length: ::std::os::raw::c_int,
3615        item_offset: ::std::os::raw::c_uint,
3616        item_length: ::std::os::raw::c_int,
3617    );
3618}
3619extern "C" {
3620    pub fn hb_buffer_add_utf32(
3621        buffer: *mut hb_buffer_t,
3622        text: *const u32,
3623        text_length: ::std::os::raw::c_int,
3624        item_offset: ::std::os::raw::c_uint,
3625        item_length: ::std::os::raw::c_int,
3626    );
3627}
3628extern "C" {
3629    pub fn hb_buffer_add_latin1(
3630        buffer: *mut hb_buffer_t,
3631        text: *const u8,
3632        text_length: ::std::os::raw::c_int,
3633        item_offset: ::std::os::raw::c_uint,
3634        item_length: ::std::os::raw::c_int,
3635    );
3636}
3637extern "C" {
3638    pub fn hb_buffer_add_codepoints(
3639        buffer: *mut hb_buffer_t,
3640        text: *const hb_codepoint_t,
3641        text_length: ::std::os::raw::c_int,
3642        item_offset: ::std::os::raw::c_uint,
3643        item_length: ::std::os::raw::c_int,
3644    );
3645}
3646extern "C" {
3647    pub fn hb_buffer_append(
3648        buffer: *mut hb_buffer_t,
3649        source: *const hb_buffer_t,
3650        start: ::std::os::raw::c_uint,
3651        end: ::std::os::raw::c_uint,
3652    );
3653}
3654extern "C" {
3655    pub fn hb_buffer_set_length(
3656        buffer: *mut hb_buffer_t,
3657        length: ::std::os::raw::c_uint,
3658    ) -> hb_bool_t;
3659}
3660extern "C" {
3661    pub fn hb_buffer_get_length(buffer: *const hb_buffer_t) -> ::std::os::raw::c_uint;
3662}
3663extern "C" {
3664    pub fn hb_buffer_get_glyph_infos(
3665        buffer: *mut hb_buffer_t,
3666        length: *mut ::std::os::raw::c_uint,
3667    ) -> *mut hb_glyph_info_t;
3668}
3669extern "C" {
3670    pub fn hb_buffer_get_glyph_positions(
3671        buffer: *mut hb_buffer_t,
3672        length: *mut ::std::os::raw::c_uint,
3673    ) -> *mut hb_glyph_position_t;
3674}
3675extern "C" {
3676    pub fn hb_buffer_has_positions(buffer: *mut hb_buffer_t) -> hb_bool_t;
3677}
3678extern "C" {
3679    pub fn hb_buffer_normalize_glyphs(buffer: *mut hb_buffer_t);
3680}
3681pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_DEFAULT:
3682    hb_buffer_serialize_flags_t = 0;
3683pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS:
3684    hb_buffer_serialize_flags_t = 1;
3685pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS:
3686    hb_buffer_serialize_flags_t = 2;
3687pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES:
3688    hb_buffer_serialize_flags_t = 4;
3689pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS:
3690    hb_buffer_serialize_flags_t = 8;
3691pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS:
3692    hb_buffer_serialize_flags_t = 16;
3693pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES:
3694    hb_buffer_serialize_flags_t = 32;
3695pub const hb_buffer_serialize_flags_t_HB_BUFFER_SERIALIZE_FLAG_DEFINED:
3696    hb_buffer_serialize_flags_t = 63;
3697#[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 @HB_BUFFER_SERIALIZE_FLAG_DEFINED: All currently defined flags. Since: 4.4.0\n\n Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().\n\n Since: 0.9.20"]
3698pub type hb_buffer_serialize_flags_t = ::std::os::raw::c_uint;
3699pub const hb_buffer_serialize_format_t_HB_BUFFER_SERIALIZE_FORMAT_TEXT:
3700    hb_buffer_serialize_format_t = 1413830740;
3701pub const hb_buffer_serialize_format_t_HB_BUFFER_SERIALIZE_FORMAT_JSON:
3702    hb_buffer_serialize_format_t = 1246973774;
3703pub const hb_buffer_serialize_format_t_HB_BUFFER_SERIALIZE_FORMAT_INVALID:
3704    hb_buffer_serialize_format_t = 0;
3705#[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"]
3706pub type hb_buffer_serialize_format_t = ::std::os::raw::c_uint;
3707extern "C" {
3708    pub fn hb_buffer_serialize_format_from_string(
3709        str_: *const ::std::os::raw::c_char,
3710        len: ::std::os::raw::c_int,
3711    ) -> hb_buffer_serialize_format_t;
3712}
3713extern "C" {
3714    pub fn hb_buffer_serialize_format_to_string(
3715        format: hb_buffer_serialize_format_t,
3716    ) -> *const ::std::os::raw::c_char;
3717}
3718extern "C" {
3719    pub fn hb_buffer_serialize_list_formats() -> *mut *const ::std::os::raw::c_char;
3720}
3721extern "C" {
3722    pub fn hb_buffer_serialize_glyphs(
3723        buffer: *mut hb_buffer_t,
3724        start: ::std::os::raw::c_uint,
3725        end: ::std::os::raw::c_uint,
3726        buf: *mut ::std::os::raw::c_char,
3727        buf_size: ::std::os::raw::c_uint,
3728        buf_consumed: *mut ::std::os::raw::c_uint,
3729        font: *mut hb_font_t,
3730        format: hb_buffer_serialize_format_t,
3731        flags: hb_buffer_serialize_flags_t,
3732    ) -> ::std::os::raw::c_uint;
3733}
3734extern "C" {
3735    pub fn hb_buffer_serialize_unicode(
3736        buffer: *mut hb_buffer_t,
3737        start: ::std::os::raw::c_uint,
3738        end: ::std::os::raw::c_uint,
3739        buf: *mut ::std::os::raw::c_char,
3740        buf_size: ::std::os::raw::c_uint,
3741        buf_consumed: *mut ::std::os::raw::c_uint,
3742        format: hb_buffer_serialize_format_t,
3743        flags: hb_buffer_serialize_flags_t,
3744    ) -> ::std::os::raw::c_uint;
3745}
3746extern "C" {
3747    pub fn hb_buffer_serialize(
3748        buffer: *mut hb_buffer_t,
3749        start: ::std::os::raw::c_uint,
3750        end: ::std::os::raw::c_uint,
3751        buf: *mut ::std::os::raw::c_char,
3752        buf_size: ::std::os::raw::c_uint,
3753        buf_consumed: *mut ::std::os::raw::c_uint,
3754        font: *mut hb_font_t,
3755        format: hb_buffer_serialize_format_t,
3756        flags: hb_buffer_serialize_flags_t,
3757    ) -> ::std::os::raw::c_uint;
3758}
3759extern "C" {
3760    pub fn hb_buffer_deserialize_glyphs(
3761        buffer: *mut hb_buffer_t,
3762        buf: *const ::std::os::raw::c_char,
3763        buf_len: ::std::os::raw::c_int,
3764        end_ptr: *mut *const ::std::os::raw::c_char,
3765        font: *mut hb_font_t,
3766        format: hb_buffer_serialize_format_t,
3767    ) -> hb_bool_t;
3768}
3769extern "C" {
3770    pub fn hb_buffer_deserialize_unicode(
3771        buffer: *mut hb_buffer_t,
3772        buf: *const ::std::os::raw::c_char,
3773        buf_len: ::std::os::raw::c_int,
3774        end_ptr: *mut *const ::std::os::raw::c_char,
3775        format: hb_buffer_serialize_format_t,
3776    ) -> hb_bool_t;
3777}
3778pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_EQUAL: hb_buffer_diff_flags_t = 0;
3779pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH: hb_buffer_diff_flags_t =
3780    1;
3781pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH: hb_buffer_diff_flags_t = 2;
3782pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT: hb_buffer_diff_flags_t = 4;
3783pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT: hb_buffer_diff_flags_t =
3784    8;
3785pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH: hb_buffer_diff_flags_t =
3786    16;
3787pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH: hb_buffer_diff_flags_t = 32;
3788pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH: hb_buffer_diff_flags_t =
3789    64;
3790pub const hb_buffer_diff_flags_t_HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH: hb_buffer_diff_flags_t =
3791    128;
3792#[doc = " hb_buffer_diff_flags_t:\n @HB_BUFFER_DIFF_FLAG_EQUAL: equal buffers.\n @HB_BUFFER_DIFF_FLAG_CONTENT_TYPE_MISMATCH: buffers with different\n     #hb_buffer_content_type_t.\n @HB_BUFFER_DIFF_FLAG_LENGTH_MISMATCH: buffers with differing length.\n @HB_BUFFER_DIFF_FLAG_NOTDEF_PRESENT: `.notdef` glyph is present in the\n     reference buffer.\n @HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT: dotted circle glyph is present\n     in the reference buffer.\n @HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH: difference in #hb_glyph_info_t.codepoint\n @HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH: difference in #hb_glyph_info_t.cluster\n @HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH: difference in #hb_glyph_flags_t.\n @HB_BUFFER_DIFF_FLAG_POSITION_MISMATCH: difference in #hb_glyph_position_t.\n\n Flags from comparing two #hb_buffer_t's.\n\n Buffer with different #hb_buffer_content_type_t cannot be meaningfully\n compared in any further detail.\n\n For buffers with differing length, the per-glyph comparison is not\n attempted, though we do still scan reference buffer for dotted circle and\n `.notdef` glyphs.\n\n If the buffers have the same length, we compare them glyph-by-glyph and\n report which aspect(s) of the glyph info/position are different.\n\n Since: 1.5.0"]
3793pub type hb_buffer_diff_flags_t = ::std::os::raw::c_uint;
3794extern "C" {
3795    pub fn hb_buffer_diff(
3796        buffer: *mut hb_buffer_t,
3797        reference: *mut hb_buffer_t,
3798        dottedcircle_glyph: hb_codepoint_t,
3799        position_fuzz: ::std::os::raw::c_uint,
3800    ) -> hb_buffer_diff_flags_t;
3801}
3802#[doc = " hb_buffer_message_func_t:\n @buffer: An #hb_buffer_t to work upon\n @font: The #hb_font_t the @buffer is shaped with\n @message: `NULL`-terminated message passed to the function\n @user_data: User data pointer passed by the caller\n\n A callback method for #hb_buffer_t. The method gets called with the\n #hb_buffer_t it was set on, the #hb_font_t the buffer is shaped with and a\n message describing what step of the shaping process will be performed.\n Returning `false` from this method will skip this shaping step and move to\n the next one.\n\n Return value: `true` to perform the shaping step, `false` to skip it.\n\n Since: 1.1.3"]
3803pub type hb_buffer_message_func_t = ::std::option::Option<
3804    unsafe extern "C" fn(
3805        buffer: *mut hb_buffer_t,
3806        font: *mut hb_font_t,
3807        message: *const ::std::os::raw::c_char,
3808        user_data: *mut ::std::os::raw::c_void,
3809    ) -> hb_bool_t,
3810>;
3811extern "C" {
3812    pub fn hb_buffer_set_message_func(
3813        buffer: *mut hb_buffer_t,
3814        func: hb_buffer_message_func_t,
3815        user_data: *mut ::std::os::raw::c_void,
3816        destroy: hb_destroy_func_t,
3817    );
3818}
3819#[doc = " hb_font_get_glyph_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @unicode: The Unicode code point to query\n @variation_selector: The  variation-selector code point to query\n @glyph: (out): The glyph ID retrieved\n @user_data: User data pointer passed by the caller\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 font, with an optional variation selector.\n\n Return value: `true` if data found, `false` otherwise\n Deprecated: 1.2.3\n"]
3820pub type hb_font_get_glyph_func_t = ::std::option::Option<
3821    unsafe extern "C" fn(
3822        font: *mut hb_font_t,
3823        font_data: *mut ::std::os::raw::c_void,
3824        unicode: hb_codepoint_t,
3825        variation_selector: hb_codepoint_t,
3826        glyph: *mut hb_codepoint_t,
3827        user_data: *mut ::std::os::raw::c_void,
3828    ) -> hb_bool_t,
3829>;
3830extern "C" {
3831    pub fn hb_font_funcs_set_glyph_func(
3832        ffuncs: *mut hb_font_funcs_t,
3833        func: hb_font_get_glyph_func_t,
3834        user_data: *mut ::std::os::raw::c_void,
3835        destroy: hb_destroy_func_t,
3836    );
3837}
3838#[doc = " hb_unicode_eastasian_width_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 Deprecated: 2.0.0"]
3839pub type hb_unicode_eastasian_width_func_t = ::std::option::Option<
3840    unsafe extern "C" fn(
3841        ufuncs: *mut hb_unicode_funcs_t,
3842        unicode: hb_codepoint_t,
3843        user_data: *mut ::std::os::raw::c_void,
3844    ) -> ::std::os::raw::c_uint,
3845>;
3846extern "C" {
3847    #[doc = " hb_unicode_funcs_set_eastasian_width_func:\n @ufuncs: a Unicode-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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_eastasian_width_func_t.\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
3848    pub fn hb_unicode_funcs_set_eastasian_width_func(
3849        ufuncs: *mut hb_unicode_funcs_t,
3850        func: hb_unicode_eastasian_width_func_t,
3851        user_data: *mut ::std::os::raw::c_void,
3852        destroy: hb_destroy_func_t,
3853    );
3854}
3855extern "C" {
3856    #[doc = " hb_unicode_eastasian_width:\n @ufuncs: a Unicode-function structure\n @unicode: The code point to query\n\n Don't use. Not used by HarfBuzz.\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
3857    pub fn hb_unicode_eastasian_width(
3858        ufuncs: *mut hb_unicode_funcs_t,
3859        unicode: hb_codepoint_t,
3860    ) -> ::std::os::raw::c_uint;
3861}
3862#[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"]
3863pub type hb_unicode_decompose_compatibility_func_t = ::std::option::Option<
3864    unsafe extern "C" fn(
3865        ufuncs: *mut hb_unicode_funcs_t,
3866        u: hb_codepoint_t,
3867        decomposed: *mut hb_codepoint_t,
3868        user_data: *mut ::std::os::raw::c_void,
3869    ) -> ::std::os::raw::c_uint,
3870>;
3871extern "C" {
3872    #[doc = " hb_unicode_funcs_set_decompose_compatibility_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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_unicode_decompose_compatibility_func_t.\n\n\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
3873    pub fn hb_unicode_funcs_set_decompose_compatibility_func(
3874        ufuncs: *mut hb_unicode_funcs_t,
3875        func: hb_unicode_decompose_compatibility_func_t,
3876        user_data: *mut ::std::os::raw::c_void,
3877        destroy: hb_destroy_func_t,
3878    );
3879}
3880extern "C" {
3881    pub fn hb_unicode_decompose_compatibility(
3882        ufuncs: *mut hb_unicode_funcs_t,
3883        u: hb_codepoint_t,
3884        decomposed: *mut hb_codepoint_t,
3885    ) -> ::std::os::raw::c_uint;
3886}
3887#[doc = " hb_font_get_glyph_v_kerning_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 kerning-adjustment value for a glyph-pair in\n the specified font, for vertical text segments.\n"]
3888pub type hb_font_get_glyph_v_kerning_func_t = hb_font_get_glyph_kerning_func_t;
3889extern "C" {
3890    #[doc = " hb_font_funcs_set_glyph_v_kerning_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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_v_kerning_func_t.\n\n Since: 0.9.2\n Deprecated: 2.0.0"]
3891    pub fn hb_font_funcs_set_glyph_v_kerning_func(
3892        ffuncs: *mut hb_font_funcs_t,
3893        func: hb_font_get_glyph_v_kerning_func_t,
3894        user_data: *mut ::std::os::raw::c_void,
3895        destroy: hb_destroy_func_t,
3896    );
3897}
3898extern "C" {
3899    pub fn hb_font_get_glyph_v_kerning(
3900        font: *mut hb_font_t,
3901        top_glyph: hb_codepoint_t,
3902        bottom_glyph: hb_codepoint_t,
3903    ) -> hb_position_t;
3904}
3905#[doc = " hb_font_get_glyph_shape_func_t:\n @font: #hb_font_t to work upon\n @font_data: @font user data pointer\n @glyph: The glyph ID to query\n @draw_funcs: The draw functions to send the shape data to\n @draw_data: The data accompanying the draw functions\n @user_data: User data pointer passed by the caller\n\n A virtual method for the #hb_font_funcs_t of an #hb_font_t object.\n\n Since: 4.0.0\n Deprecated: 7.0.0: Use #hb_font_draw_glyph_func_t instead"]
3906pub type hb_font_get_glyph_shape_func_t = ::std::option::Option<
3907    unsafe extern "C" fn(
3908        font: *mut hb_font_t,
3909        font_data: *mut ::std::os::raw::c_void,
3910        glyph: hb_codepoint_t,
3911        draw_funcs: *mut hb_draw_funcs_t,
3912        draw_data: *mut ::std::os::raw::c_void,
3913        user_data: *mut ::std::os::raw::c_void,
3914    ),
3915>;
3916extern "C" {
3917    #[doc = " hb_font_funcs_set_glyph_shape_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: (nullable): The function to call when @user_data is not needed anymore\n\n Sets the implementation function for #hb_font_get_glyph_shape_func_t,\n which is the same as #hb_font_draw_glyph_func_t.\n\n Since: 4.0.0\n Deprecated: 7.0.0: Use hb_font_funcs_set_draw_glyph_func() instead"]
3918    pub fn hb_font_funcs_set_glyph_shape_func(
3919        ffuncs: *mut hb_font_funcs_t,
3920        func: hb_font_get_glyph_shape_func_t,
3921        user_data: *mut ::std::os::raw::c_void,
3922        destroy: hb_destroy_func_t,
3923    );
3924}
3925extern "C" {
3926    pub fn hb_font_get_glyph_shape(
3927        font: *mut hb_font_t,
3928        glyph: hb_codepoint_t,
3929        dfuncs: *mut hb_draw_funcs_t,
3930        draw_data: *mut ::std::os::raw::c_void,
3931    );
3932}
3933extern "C" {
3934    pub fn hb_shape(
3935        font: *mut hb_font_t,
3936        buffer: *mut hb_buffer_t,
3937        features: *const hb_feature_t,
3938        num_features: ::std::os::raw::c_uint,
3939    );
3940}
3941extern "C" {
3942    pub fn hb_shape_full(
3943        font: *mut hb_font_t,
3944        buffer: *mut hb_buffer_t,
3945        features: *const hb_feature_t,
3946        num_features: ::std::os::raw::c_uint,
3947        shaper_list: *const *const ::std::os::raw::c_char,
3948    ) -> hb_bool_t;
3949}
3950extern "C" {
3951    pub fn hb_shape_justify(
3952        font: *mut hb_font_t,
3953        buffer: *mut hb_buffer_t,
3954        features: *const hb_feature_t,
3955        num_features: ::std::os::raw::c_uint,
3956        shaper_list: *const *const ::std::os::raw::c_char,
3957        min_target_advance: f32,
3958        max_target_advance: f32,
3959        advance: *mut f32,
3960        var_tag: *mut hb_tag_t,
3961        var_value: *mut f32,
3962    ) -> hb_bool_t;
3963}
3964extern "C" {
3965    pub fn hb_shape_list_shapers() -> *mut *const ::std::os::raw::c_char;
3966}
3967#[repr(C)]
3968#[derive(Debug, Copy, Clone)]
3969pub struct hb_shape_plan_t {
3970    _unused: [u8; 0],
3971}
3972extern "C" {
3973    pub fn hb_shape_plan_create(
3974        face: *mut hb_face_t,
3975        props: *const hb_segment_properties_t,
3976        user_features: *const hb_feature_t,
3977        num_user_features: ::std::os::raw::c_uint,
3978        shaper_list: *const *const ::std::os::raw::c_char,
3979    ) -> *mut hb_shape_plan_t;
3980}
3981extern "C" {
3982    pub fn hb_shape_plan_create_cached(
3983        face: *mut hb_face_t,
3984        props: *const hb_segment_properties_t,
3985        user_features: *const hb_feature_t,
3986        num_user_features: ::std::os::raw::c_uint,
3987        shaper_list: *const *const ::std::os::raw::c_char,
3988    ) -> *mut hb_shape_plan_t;
3989}
3990extern "C" {
3991    pub fn hb_shape_plan_create2(
3992        face: *mut hb_face_t,
3993        props: *const hb_segment_properties_t,
3994        user_features: *const hb_feature_t,
3995        num_user_features: ::std::os::raw::c_uint,
3996        coords: *const ::std::os::raw::c_int,
3997        num_coords: ::std::os::raw::c_uint,
3998        shaper_list: *const *const ::std::os::raw::c_char,
3999    ) -> *mut hb_shape_plan_t;
4000}
4001extern "C" {
4002    pub fn hb_shape_plan_create_cached2(
4003        face: *mut hb_face_t,
4004        props: *const hb_segment_properties_t,
4005        user_features: *const hb_feature_t,
4006        num_user_features: ::std::os::raw::c_uint,
4007        coords: *const ::std::os::raw::c_int,
4008        num_coords: ::std::os::raw::c_uint,
4009        shaper_list: *const *const ::std::os::raw::c_char,
4010    ) -> *mut hb_shape_plan_t;
4011}
4012extern "C" {
4013    pub fn hb_shape_plan_get_empty() -> *mut hb_shape_plan_t;
4014}
4015extern "C" {
4016    pub fn hb_shape_plan_reference(shape_plan: *mut hb_shape_plan_t) -> *mut hb_shape_plan_t;
4017}
4018extern "C" {
4019    pub fn hb_shape_plan_destroy(shape_plan: *mut hb_shape_plan_t);
4020}
4021extern "C" {
4022    pub fn hb_shape_plan_set_user_data(
4023        shape_plan: *mut hb_shape_plan_t,
4024        key: *mut hb_user_data_key_t,
4025        data: *mut ::std::os::raw::c_void,
4026        destroy: hb_destroy_func_t,
4027        replace: hb_bool_t,
4028    ) -> hb_bool_t;
4029}
4030extern "C" {
4031    pub fn hb_shape_plan_get_user_data(
4032        shape_plan: *const hb_shape_plan_t,
4033        key: *mut hb_user_data_key_t,
4034    ) -> *mut ::std::os::raw::c_void;
4035}
4036extern "C" {
4037    pub fn hb_shape_plan_execute(
4038        shape_plan: *mut hb_shape_plan_t,
4039        font: *mut hb_font_t,
4040        buffer: *mut hb_buffer_t,
4041        features: *const hb_feature_t,
4042        num_features: ::std::os::raw::c_uint,
4043    ) -> hb_bool_t;
4044}
4045extern "C" {
4046    pub fn hb_shape_plan_get_shaper(
4047        shape_plan: *mut hb_shape_plan_t,
4048    ) -> *const ::std::os::raw::c_char;
4049}
4050pub const hb_style_tag_t_HB_STYLE_TAG_ITALIC: hb_style_tag_t = 1769234796;
4051pub const hb_style_tag_t_HB_STYLE_TAG_OPTICAL_SIZE: hb_style_tag_t = 1869640570;
4052pub const hb_style_tag_t_HB_STYLE_TAG_SLANT_ANGLE: hb_style_tag_t = 1936486004;
4053pub const hb_style_tag_t_HB_STYLE_TAG_SLANT_RATIO: hb_style_tag_t = 1399615092;
4054pub const hb_style_tag_t_HB_STYLE_TAG_WIDTH: hb_style_tag_t = 2003072104;
4055pub const hb_style_tag_t_HB_STYLE_TAG_WEIGHT: hb_style_tag_t = 2003265652;
4056pub const hb_style_tag_t__HB_STYLE_TAG_MAX_VALUE: hb_style_tag_t = 2147483647;
4057#[doc = " hb_style_tag_t:\n @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.\n A value of 0 can be interpreted as \"Roman\" (non-italic); a value of 1 can\n be interpreted as (fully) italic.\n @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.\n Non-zero. Values can be interpreted as text size, in points.\n @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values\n must be greater than -90 and less than +90. Values can be interpreted as\n the angle, in counter-clockwise degrees, of oblique slant from whatever the\n designer considers to be upright for that font design. Typical right-leaning\n Italic fonts have a negative slant angle (typically around -12)\n @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.\n Typical right-leaning Italic fonts have a positive slant ratio (typically around 0.2)\n @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.\n Non-zero. Values can be interpreted as a percentage of whatever the font\n designer considers “normal width” for that font design.\n @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details\n to give variation from lighter to blacker. Values can be interpreted in direct\n comparison to values for usWeightClass in the OS/2 table,\n or the CSS font-weight property.\n\n Defined by [OpenType Design-Variation Axis Tag Registry](https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg).\n\n Since: 3.0.0"]
4058pub type hb_style_tag_t = ::std::os::raw::c_uint;
4059extern "C" {
4060    pub fn hb_style_get_value(font: *mut hb_font_t, style_tag: hb_style_tag_t) -> f32;
4061}
4062extern "C" {
4063    pub fn hb_version(
4064        major: *mut ::std::os::raw::c_uint,
4065        minor: *mut ::std::os::raw::c_uint,
4066        micro: *mut ::std::os::raw::c_uint,
4067    );
4068}
4069extern "C" {
4070    pub fn hb_version_string() -> *const ::std::os::raw::c_char;
4071}
4072extern "C" {
4073    pub fn hb_version_atleast(
4074        major: ::std::os::raw::c_uint,
4075        minor: ::std::os::raw::c_uint,
4076        micro: ::std::os::raw::c_uint,
4077    ) -> hb_bool_t;
4078}
4079impl hb_ot_name_id_predefined_t {
4080    pub const COPYRIGHT: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(0);
4081}
4082impl hb_ot_name_id_predefined_t {
4083    pub const FONT_FAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(1);
4084}
4085impl hb_ot_name_id_predefined_t {
4086    pub const FONT_SUBFAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(2);
4087}
4088impl hb_ot_name_id_predefined_t {
4089    pub const UNIQUE_ID: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(3);
4090}
4091impl hb_ot_name_id_predefined_t {
4092    pub const FULL_NAME: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(4);
4093}
4094impl hb_ot_name_id_predefined_t {
4095    pub const VERSION_STRING: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(5);
4096}
4097impl hb_ot_name_id_predefined_t {
4098    pub const POSTSCRIPT_NAME: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(6);
4099}
4100impl hb_ot_name_id_predefined_t {
4101    pub const TRADEMARK: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(7);
4102}
4103impl hb_ot_name_id_predefined_t {
4104    pub const MANUFACTURER: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(8);
4105}
4106impl hb_ot_name_id_predefined_t {
4107    pub const DESIGNER: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(9);
4108}
4109impl hb_ot_name_id_predefined_t {
4110    pub const DESCRIPTION: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(10);
4111}
4112impl hb_ot_name_id_predefined_t {
4113    pub const VENDOR_URL: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(11);
4114}
4115impl hb_ot_name_id_predefined_t {
4116    pub const DESIGNER_URL: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(12);
4117}
4118impl hb_ot_name_id_predefined_t {
4119    pub const LICENSE: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(13);
4120}
4121impl hb_ot_name_id_predefined_t {
4122    pub const LICENSE_URL: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(14);
4123}
4124impl hb_ot_name_id_predefined_t {
4125    pub const TYPOGRAPHIC_FAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(16);
4126}
4127impl hb_ot_name_id_predefined_t {
4128    pub const TYPOGRAPHIC_SUBFAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(17);
4129}
4130impl hb_ot_name_id_predefined_t {
4131    pub const MAC_FULL_NAME: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(18);
4132}
4133impl hb_ot_name_id_predefined_t {
4134    pub const SAMPLE_TEXT: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(19);
4135}
4136impl hb_ot_name_id_predefined_t {
4137    pub const CID_FINDFONT_NAME: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(20);
4138}
4139impl hb_ot_name_id_predefined_t {
4140    pub const WWS_FAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(21);
4141}
4142impl hb_ot_name_id_predefined_t {
4143    pub const WWS_SUBFAMILY: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(22);
4144}
4145impl hb_ot_name_id_predefined_t {
4146    pub const LIGHT_BACKGROUND: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(23);
4147}
4148impl hb_ot_name_id_predefined_t {
4149    pub const DARK_BACKGROUND: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(24);
4150}
4151impl hb_ot_name_id_predefined_t {
4152    pub const VARIATIONS_PS_PREFIX: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(25);
4153}
4154impl hb_ot_name_id_predefined_t {
4155    pub const INVALID: hb_ot_name_id_predefined_t = hb_ot_name_id_predefined_t(65535);
4156}
4157impl ::std::ops::BitOr<hb_ot_name_id_predefined_t> for hb_ot_name_id_predefined_t {
4158    type Output = Self;
4159    #[inline]
4160    fn bitor(self, other: Self) -> Self {
4161        hb_ot_name_id_predefined_t(self.0 | other.0)
4162    }
4163}
4164impl ::std::ops::BitOrAssign for hb_ot_name_id_predefined_t {
4165    #[inline]
4166    fn bitor_assign(&mut self, rhs: hb_ot_name_id_predefined_t) {
4167        self.0 |= rhs.0;
4168    }
4169}
4170impl ::std::ops::BitAnd<hb_ot_name_id_predefined_t> for hb_ot_name_id_predefined_t {
4171    type Output = Self;
4172    #[inline]
4173    fn bitand(self, other: Self) -> Self {
4174        hb_ot_name_id_predefined_t(self.0 & other.0)
4175    }
4176}
4177impl ::std::ops::BitAndAssign for hb_ot_name_id_predefined_t {
4178    #[inline]
4179    fn bitand_assign(&mut self, rhs: hb_ot_name_id_predefined_t) {
4180        self.0 &= rhs.0;
4181    }
4182}
4183#[repr(transparent)]
4184#[doc = " hb_ot_name_id_predefined_t:\n @COPYRIGHT: Copyright notice\n @FONT_FAMILY: Font Family name\n @FONT_SUBFAMILY: Font Subfamily name\n @UNIQUE_ID: Unique font identifier\n @FULL_NAME: Full font name that reflects\n all family and relevant subfamily descriptors\n @VERSION_STRING: Version string\n @POSTSCRIPT_NAME: PostScript name for the font\n @TRADEMARK: Trademark\n @MANUFACTURER: Manufacturer Name\n @DESIGNER: Designer\n @DESCRIPTION: Description\n @VENDOR_URL: URL of font vendor\n @DESIGNER_URL: URL of typeface designer\n @LICENSE: License Description\n @LICENSE_URL: URL where additional licensing\n information can be found\n @TYPOGRAPHIC_FAMILY: Typographic Family name\n @TYPOGRAPHIC_SUBFAMILY: Typographic Subfamily name\n @MAC_FULL_NAME: Compatible Full Name for MacOS\n @SAMPLE_TEXT: Sample text\n @CID_FINDFONT_NAME: PostScript CID findfont name\n @WWS_FAMILY: WWS Family Name\n @WWS_SUBFAMILY: WWS Subfamily Name\n @LIGHT_BACKGROUND: Light Background Palette\n @DARK_BACKGROUND: Dark Background Palette\n @VARIATIONS_PS_PREFIX: Variations PostScript Name Prefix\n @INVALID: Value to represent a nonexistent name ID.\n\n An enum type representing the pre-defined name IDs.\n\n For more information on these fields, see the\n [OpenType spec](https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids).\n\n Since: 7.0.0"]
4185#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
4186pub struct hb_ot_name_id_predefined_t(pub ::std::os::raw::c_uint);
4187#[doc = " hb_ot_name_id_t:\n\n An integral type representing an OpenType 'name' table name identifier.\n There are predefined name IDs, as well as name IDs return from other\n API.  These can be used to fetch name strings from a font face.\n\n Since: 2.0.0"]
4188#[repr(transparent)]
4189#[derive(Debug, Copy, Clone)]
4190pub struct hb_ot_name_id_t(pub ::std::os::raw::c_uint);
4191#[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"]
4192#[repr(C)]
4193#[derive(Copy, Clone)]
4194pub struct hb_ot_name_entry_t {
4195    pub name_id: hb_ot_name_id_t,
4196    pub var: hb_var_int_t,
4197    pub language: hb_language_t,
4198}
4199#[test]
4200fn bindgen_test_layout_hb_ot_name_entry_t() {
4201    const UNINIT: ::std::mem::MaybeUninit<hb_ot_name_entry_t> = ::std::mem::MaybeUninit::uninit();
4202    let ptr = UNINIT.as_ptr();
4203    assert_eq!(
4204        ::std::mem::size_of::<hb_ot_name_entry_t>(),
4205        16usize,
4206        concat!("Size of: ", stringify!(hb_ot_name_entry_t))
4207    );
4208    assert_eq!(
4209        ::std::mem::align_of::<hb_ot_name_entry_t>(),
4210        8usize,
4211        concat!("Alignment of ", stringify!(hb_ot_name_entry_t))
4212    );
4213    assert_eq!(
4214        unsafe { ::std::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
4215        0usize,
4216        concat!("Offset of field: ", stringify!(hb_ot_name_entry_t), "::", stringify!(name_id))
4217    );
4218    assert_eq!(
4219        unsafe { ::std::ptr::addr_of!((*ptr).var) as usize - ptr as usize },
4220        4usize,
4221        concat!("Offset of field: ", stringify!(hb_ot_name_entry_t), "::", stringify!(var))
4222    );
4223    assert_eq!(
4224        unsafe { ::std::ptr::addr_of!((*ptr).language) as usize - ptr as usize },
4225        8usize,
4226        concat!("Offset of field: ", stringify!(hb_ot_name_entry_t), "::", stringify!(language))
4227    );
4228}
4229extern "C" {
4230    pub fn hb_ot_name_list_names(
4231        face: *mut hb_face_t,
4232        num_entries: *mut ::std::os::raw::c_uint,
4233    ) -> *const hb_ot_name_entry_t;
4234}
4235extern "C" {
4236    pub fn hb_ot_name_get_utf8(
4237        face: *mut hb_face_t,
4238        name_id: hb_ot_name_id_t,
4239        language: hb_language_t,
4240        text_size: *mut ::std::os::raw::c_uint,
4241        text: *mut ::std::os::raw::c_char,
4242    ) -> ::std::os::raw::c_uint;
4243}
4244extern "C" {
4245    pub fn hb_ot_name_get_utf16(
4246        face: *mut hb_face_t,
4247        name_id: hb_ot_name_id_t,
4248        language: hb_language_t,
4249        text_size: *mut ::std::os::raw::c_uint,
4250        text: *mut u16,
4251    ) -> ::std::os::raw::c_uint;
4252}
4253extern "C" {
4254    pub fn hb_ot_name_get_utf32(
4255        face: *mut hb_face_t,
4256        name_id: hb_ot_name_id_t,
4257        language: hb_language_t,
4258        text_size: *mut ::std::os::raw::c_uint,
4259        text: *mut u32,
4260    ) -> ::std::os::raw::c_uint;
4261}
4262extern "C" {
4263    pub fn hb_ot_color_has_palettes(face: *mut hb_face_t) -> hb_bool_t;
4264}
4265extern "C" {
4266    pub fn hb_ot_color_palette_get_count(face: *mut hb_face_t) -> ::std::os::raw::c_uint;
4267}
4268extern "C" {
4269    pub fn hb_ot_color_palette_get_name_id(
4270        face: *mut hb_face_t,
4271        palette_index: ::std::os::raw::c_uint,
4272    ) -> hb_ot_name_id_t;
4273}
4274extern "C" {
4275    pub fn hb_ot_color_palette_color_get_name_id(
4276        face: *mut hb_face_t,
4277        color_index: ::std::os::raw::c_uint,
4278    ) -> hb_ot_name_id_t;
4279}
4280pub const hb_ot_color_palette_flags_t_HB_OT_COLOR_PALETTE_FLAG_DEFAULT:
4281    hb_ot_color_palette_flags_t = 0;
4282pub const hb_ot_color_palette_flags_t_HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_LIGHT_BACKGROUND:
4283    hb_ot_color_palette_flags_t = 1;
4284pub const hb_ot_color_palette_flags_t_HB_OT_COLOR_PALETTE_FLAG_USABLE_WITH_DARK_BACKGROUND:
4285    hb_ot_color_palette_flags_t = 2;
4286#[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 Flags that describe the properties of color palette.\n\n Since: 2.1.0"]
4287pub type hb_ot_color_palette_flags_t = ::std::os::raw::c_uint;
4288extern "C" {
4289    pub fn hb_ot_color_palette_get_flags(
4290        face: *mut hb_face_t,
4291        palette_index: ::std::os::raw::c_uint,
4292    ) -> hb_ot_color_palette_flags_t;
4293}
4294extern "C" {
4295    pub fn hb_ot_color_palette_get_colors(
4296        face: *mut hb_face_t,
4297        palette_index: ::std::os::raw::c_uint,
4298        start_offset: ::std::os::raw::c_uint,
4299        color_count: *mut ::std::os::raw::c_uint,
4300        colors: *mut hb_color_t,
4301    ) -> ::std::os::raw::c_uint;
4302}
4303extern "C" {
4304    pub fn hb_ot_color_has_layers(face: *mut hb_face_t) -> hb_bool_t;
4305}
4306#[doc = " hb_ot_color_layer_t:\n @glyph: the glyph ID of the layer\n @color_index: the palette color index of the layer\n\n Pairs of glyph and color index.\n\n A color index of 0xFFFF does not refer to a palette\n color, but indicates that the foreground color should\n be used.\n\n Since: 2.1.0"]
4307#[repr(C)]
4308#[derive(Debug, Copy, Clone)]
4309pub struct hb_ot_color_layer_t {
4310    pub glyph: hb_codepoint_t,
4311    pub color_index: ::std::os::raw::c_uint,
4312}
4313#[test]
4314fn bindgen_test_layout_hb_ot_color_layer_t() {
4315    const UNINIT: ::std::mem::MaybeUninit<hb_ot_color_layer_t> = ::std::mem::MaybeUninit::uninit();
4316    let ptr = UNINIT.as_ptr();
4317    assert_eq!(
4318        ::std::mem::size_of::<hb_ot_color_layer_t>(),
4319        8usize,
4320        concat!("Size of: ", stringify!(hb_ot_color_layer_t))
4321    );
4322    assert_eq!(
4323        ::std::mem::align_of::<hb_ot_color_layer_t>(),
4324        4usize,
4325        concat!("Alignment of ", stringify!(hb_ot_color_layer_t))
4326    );
4327    assert_eq!(
4328        unsafe { ::std::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
4329        0usize,
4330        concat!("Offset of field: ", stringify!(hb_ot_color_layer_t), "::", stringify!(glyph))
4331    );
4332    assert_eq!(
4333        unsafe { ::std::ptr::addr_of!((*ptr).color_index) as usize - ptr as usize },
4334        4usize,
4335        concat!(
4336            "Offset of field: ",
4337            stringify!(hb_ot_color_layer_t),
4338            "::",
4339            stringify!(color_index)
4340        )
4341    );
4342}
4343extern "C" {
4344    pub fn hb_ot_color_glyph_get_layers(
4345        face: *mut hb_face_t,
4346        glyph: hb_codepoint_t,
4347        start_offset: ::std::os::raw::c_uint,
4348        layer_count: *mut ::std::os::raw::c_uint,
4349        layers: *mut hb_ot_color_layer_t,
4350    ) -> ::std::os::raw::c_uint;
4351}
4352extern "C" {
4353    pub fn hb_ot_color_has_paint(face: *mut hb_face_t) -> hb_bool_t;
4354}
4355extern "C" {
4356    pub fn hb_ot_color_glyph_has_paint(face: *mut hb_face_t, glyph: hb_codepoint_t) -> hb_bool_t;
4357}
4358extern "C" {
4359    pub fn hb_ot_color_has_svg(face: *mut hb_face_t) -> hb_bool_t;
4360}
4361extern "C" {
4362    pub fn hb_ot_color_glyph_reference_svg(
4363        face: *mut hb_face_t,
4364        glyph: hb_codepoint_t,
4365    ) -> *mut hb_blob_t;
4366}
4367extern "C" {
4368    pub fn hb_ot_color_has_png(face: *mut hb_face_t) -> hb_bool_t;
4369}
4370extern "C" {
4371    pub fn hb_ot_color_glyph_reference_png(
4372        font: *mut hb_font_t,
4373        glyph: hb_codepoint_t,
4374    ) -> *mut hb_blob_t;
4375}
4376extern "C" {
4377    pub fn hb_ot_layout_table_choose_script(
4378        face: *mut hb_face_t,
4379        table_tag: hb_tag_t,
4380        script_tags: *const hb_tag_t,
4381        script_index: *mut ::std::os::raw::c_uint,
4382        chosen_script: *mut hb_tag_t,
4383    ) -> hb_bool_t;
4384}
4385extern "C" {
4386    pub fn hb_ot_layout_script_find_language(
4387        face: *mut hb_face_t,
4388        table_tag: hb_tag_t,
4389        script_index: ::std::os::raw::c_uint,
4390        language_tag: hb_tag_t,
4391        language_index: *mut ::std::os::raw::c_uint,
4392    ) -> hb_bool_t;
4393}
4394extern "C" {
4395    pub fn hb_ot_tags_from_script(
4396        script: hb_script_t,
4397        script_tag_1: *mut hb_tag_t,
4398        script_tag_2: *mut hb_tag_t,
4399    );
4400}
4401extern "C" {
4402    pub fn hb_ot_tag_from_language(language: hb_language_t) -> hb_tag_t;
4403}
4404#[doc = " hb_ot_var_axis_t:\n @tag: axis tag\n @name_id: axis name identifier\n @min_value: minimum value of the axis\n @default_value: default value of the axis\n @max_value: maximum value of the axis\n\n Use #hb_ot_var_axis_info_t instead.\n\n Since: 1.4.2\n Deprecated: 2.2.0"]
4405#[repr(C)]
4406#[derive(Debug, Copy, Clone)]
4407pub struct hb_ot_var_axis_t {
4408    pub tag: hb_tag_t,
4409    pub name_id: hb_ot_name_id_t,
4410    pub min_value: f32,
4411    pub default_value: f32,
4412    pub max_value: f32,
4413}
4414#[test]
4415fn bindgen_test_layout_hb_ot_var_axis_t() {
4416    const UNINIT: ::std::mem::MaybeUninit<hb_ot_var_axis_t> = ::std::mem::MaybeUninit::uninit();
4417    let ptr = UNINIT.as_ptr();
4418    assert_eq!(
4419        ::std::mem::size_of::<hb_ot_var_axis_t>(),
4420        20usize,
4421        concat!("Size of: ", stringify!(hb_ot_var_axis_t))
4422    );
4423    assert_eq!(
4424        ::std::mem::align_of::<hb_ot_var_axis_t>(),
4425        4usize,
4426        concat!("Alignment of ", stringify!(hb_ot_var_axis_t))
4427    );
4428    assert_eq!(
4429        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
4430        0usize,
4431        concat!("Offset of field: ", stringify!(hb_ot_var_axis_t), "::", stringify!(tag))
4432    );
4433    assert_eq!(
4434        unsafe { ::std::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
4435        4usize,
4436        concat!("Offset of field: ", stringify!(hb_ot_var_axis_t), "::", stringify!(name_id))
4437    );
4438    assert_eq!(
4439        unsafe { ::std::ptr::addr_of!((*ptr).min_value) as usize - ptr as usize },
4440        8usize,
4441        concat!("Offset of field: ", stringify!(hb_ot_var_axis_t), "::", stringify!(min_value))
4442    );
4443    assert_eq!(
4444        unsafe { ::std::ptr::addr_of!((*ptr).default_value) as usize - ptr as usize },
4445        12usize,
4446        concat!(
4447            "Offset of field: ",
4448            stringify!(hb_ot_var_axis_t),
4449            "::",
4450            stringify!(default_value)
4451        )
4452    );
4453    assert_eq!(
4454        unsafe { ::std::ptr::addr_of!((*ptr).max_value) as usize - ptr as usize },
4455        16usize,
4456        concat!("Offset of field: ", stringify!(hb_ot_var_axis_t), "::", stringify!(max_value))
4457    );
4458}
4459extern "C" {
4460    pub fn hb_ot_var_get_axes(
4461        face: *mut hb_face_t,
4462        start_offset: ::std::os::raw::c_uint,
4463        axes_count: *mut ::std::os::raw::c_uint,
4464        axes_array: *mut hb_ot_var_axis_t,
4465    ) -> ::std::os::raw::c_uint;
4466}
4467extern "C" {
4468    pub fn hb_ot_var_find_axis(
4469        face: *mut hb_face_t,
4470        axis_tag: hb_tag_t,
4471        axis_index: *mut ::std::os::raw::c_uint,
4472        axis_info: *mut hb_ot_var_axis_t,
4473    ) -> hb_bool_t;
4474}
4475extern "C" {
4476    pub fn hb_ot_font_set_funcs(font: *mut hb_font_t);
4477}
4478extern "C" {
4479    pub fn hb_ot_tags_from_script_and_language(
4480        script: hb_script_t,
4481        language: hb_language_t,
4482        script_count: *mut ::std::os::raw::c_uint,
4483        script_tags: *mut hb_tag_t,
4484        language_count: *mut ::std::os::raw::c_uint,
4485        language_tags: *mut hb_tag_t,
4486    );
4487}
4488extern "C" {
4489    pub fn hb_ot_tag_to_script(tag: hb_tag_t) -> hb_script_t;
4490}
4491extern "C" {
4492    pub fn hb_ot_tag_to_language(tag: hb_tag_t) -> hb_language_t;
4493}
4494extern "C" {
4495    pub fn hb_ot_tags_to_script_and_language(
4496        script_tag: hb_tag_t,
4497        language_tag: hb_tag_t,
4498        script: *mut hb_script_t,
4499        language: *mut hb_language_t,
4500    );
4501}
4502extern "C" {
4503    pub fn hb_ot_layout_has_glyph_classes(face: *mut hb_face_t) -> hb_bool_t;
4504}
4505pub const hb_ot_layout_glyph_class_t_HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED:
4506    hb_ot_layout_glyph_class_t = 0;
4507pub const hb_ot_layout_glyph_class_t_HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH:
4508    hb_ot_layout_glyph_class_t = 1;
4509pub const hb_ot_layout_glyph_class_t_HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE: hb_ot_layout_glyph_class_t =
4510    2;
4511pub const hb_ot_layout_glyph_class_t_HB_OT_LAYOUT_GLYPH_CLASS_MARK: hb_ot_layout_glyph_class_t = 3;
4512pub const hb_ot_layout_glyph_class_t_HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT:
4513    hb_ot_layout_glyph_class_t = 4;
4514#[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"]
4515pub type hb_ot_layout_glyph_class_t = ::std::os::raw::c_uint;
4516extern "C" {
4517    pub fn hb_ot_layout_get_glyph_class(
4518        face: *mut hb_face_t,
4519        glyph: hb_codepoint_t,
4520    ) -> hb_ot_layout_glyph_class_t;
4521}
4522extern "C" {
4523    pub fn hb_ot_layout_get_glyphs_in_class(
4524        face: *mut hb_face_t,
4525        klass: hb_ot_layout_glyph_class_t,
4526        glyphs: *mut hb_set_t,
4527    );
4528}
4529extern "C" {
4530    pub fn hb_ot_layout_get_attach_points(
4531        face: *mut hb_face_t,
4532        glyph: hb_codepoint_t,
4533        start_offset: ::std::os::raw::c_uint,
4534        point_count: *mut ::std::os::raw::c_uint,
4535        point_array: *mut ::std::os::raw::c_uint,
4536    ) -> ::std::os::raw::c_uint;
4537}
4538extern "C" {
4539    pub fn hb_ot_layout_get_ligature_carets(
4540        font: *mut hb_font_t,
4541        direction: hb_direction_t,
4542        glyph: hb_codepoint_t,
4543        start_offset: ::std::os::raw::c_uint,
4544        caret_count: *mut ::std::os::raw::c_uint,
4545        caret_array: *mut hb_position_t,
4546    ) -> ::std::os::raw::c_uint;
4547}
4548extern "C" {
4549    pub fn hb_ot_layout_table_get_script_tags(
4550        face: *mut hb_face_t,
4551        table_tag: hb_tag_t,
4552        start_offset: ::std::os::raw::c_uint,
4553        script_count: *mut ::std::os::raw::c_uint,
4554        script_tags: *mut hb_tag_t,
4555    ) -> ::std::os::raw::c_uint;
4556}
4557extern "C" {
4558    pub fn hb_ot_layout_table_find_script(
4559        face: *mut hb_face_t,
4560        table_tag: hb_tag_t,
4561        script_tag: hb_tag_t,
4562        script_index: *mut ::std::os::raw::c_uint,
4563    ) -> hb_bool_t;
4564}
4565extern "C" {
4566    pub fn hb_ot_layout_table_select_script(
4567        face: *mut hb_face_t,
4568        table_tag: hb_tag_t,
4569        script_count: ::std::os::raw::c_uint,
4570        script_tags: *const hb_tag_t,
4571        script_index: *mut ::std::os::raw::c_uint,
4572        chosen_script: *mut hb_tag_t,
4573    ) -> hb_bool_t;
4574}
4575extern "C" {
4576    pub fn hb_ot_layout_table_get_feature_tags(
4577        face: *mut hb_face_t,
4578        table_tag: hb_tag_t,
4579        start_offset: ::std::os::raw::c_uint,
4580        feature_count: *mut ::std::os::raw::c_uint,
4581        feature_tags: *mut hb_tag_t,
4582    ) -> ::std::os::raw::c_uint;
4583}
4584extern "C" {
4585    pub fn hb_ot_layout_script_get_language_tags(
4586        face: *mut hb_face_t,
4587        table_tag: hb_tag_t,
4588        script_index: ::std::os::raw::c_uint,
4589        start_offset: ::std::os::raw::c_uint,
4590        language_count: *mut ::std::os::raw::c_uint,
4591        language_tags: *mut hb_tag_t,
4592    ) -> ::std::os::raw::c_uint;
4593}
4594extern "C" {
4595    pub fn hb_ot_layout_script_select_language(
4596        face: *mut hb_face_t,
4597        table_tag: hb_tag_t,
4598        script_index: ::std::os::raw::c_uint,
4599        language_count: ::std::os::raw::c_uint,
4600        language_tags: *const hb_tag_t,
4601        language_index: *mut ::std::os::raw::c_uint,
4602    ) -> hb_bool_t;
4603}
4604extern "C" {
4605    pub fn hb_ot_layout_script_select_language2(
4606        face: *mut hb_face_t,
4607        table_tag: hb_tag_t,
4608        script_index: ::std::os::raw::c_uint,
4609        language_count: ::std::os::raw::c_uint,
4610        language_tags: *const hb_tag_t,
4611        language_index: *mut ::std::os::raw::c_uint,
4612        chosen_language: *mut hb_tag_t,
4613    ) -> hb_bool_t;
4614}
4615extern "C" {
4616    pub fn hb_ot_layout_language_get_required_feature_index(
4617        face: *mut hb_face_t,
4618        table_tag: hb_tag_t,
4619        script_index: ::std::os::raw::c_uint,
4620        language_index: ::std::os::raw::c_uint,
4621        feature_index: *mut ::std::os::raw::c_uint,
4622    ) -> hb_bool_t;
4623}
4624extern "C" {
4625    pub fn hb_ot_layout_language_get_required_feature(
4626        face: *mut hb_face_t,
4627        table_tag: hb_tag_t,
4628        script_index: ::std::os::raw::c_uint,
4629        language_index: ::std::os::raw::c_uint,
4630        feature_index: *mut ::std::os::raw::c_uint,
4631        feature_tag: *mut hb_tag_t,
4632    ) -> hb_bool_t;
4633}
4634extern "C" {
4635    pub fn hb_ot_layout_language_get_feature_indexes(
4636        face: *mut hb_face_t,
4637        table_tag: hb_tag_t,
4638        script_index: ::std::os::raw::c_uint,
4639        language_index: ::std::os::raw::c_uint,
4640        start_offset: ::std::os::raw::c_uint,
4641        feature_count: *mut ::std::os::raw::c_uint,
4642        feature_indexes: *mut ::std::os::raw::c_uint,
4643    ) -> ::std::os::raw::c_uint;
4644}
4645extern "C" {
4646    pub fn hb_ot_layout_language_get_feature_tags(
4647        face: *mut hb_face_t,
4648        table_tag: hb_tag_t,
4649        script_index: ::std::os::raw::c_uint,
4650        language_index: ::std::os::raw::c_uint,
4651        start_offset: ::std::os::raw::c_uint,
4652        feature_count: *mut ::std::os::raw::c_uint,
4653        feature_tags: *mut hb_tag_t,
4654    ) -> ::std::os::raw::c_uint;
4655}
4656extern "C" {
4657    pub fn hb_ot_layout_language_find_feature(
4658        face: *mut hb_face_t,
4659        table_tag: hb_tag_t,
4660        script_index: ::std::os::raw::c_uint,
4661        language_index: ::std::os::raw::c_uint,
4662        feature_tag: hb_tag_t,
4663        feature_index: *mut ::std::os::raw::c_uint,
4664    ) -> hb_bool_t;
4665}
4666extern "C" {
4667    pub fn hb_ot_layout_feature_get_lookups(
4668        face: *mut hb_face_t,
4669        table_tag: hb_tag_t,
4670        feature_index: ::std::os::raw::c_uint,
4671        start_offset: ::std::os::raw::c_uint,
4672        lookup_count: *mut ::std::os::raw::c_uint,
4673        lookup_indexes: *mut ::std::os::raw::c_uint,
4674    ) -> ::std::os::raw::c_uint;
4675}
4676extern "C" {
4677    pub fn hb_ot_layout_table_get_lookup_count(
4678        face: *mut hb_face_t,
4679        table_tag: hb_tag_t,
4680    ) -> ::std::os::raw::c_uint;
4681}
4682extern "C" {
4683    pub fn hb_ot_layout_collect_features(
4684        face: *mut hb_face_t,
4685        table_tag: hb_tag_t,
4686        scripts: *const hb_tag_t,
4687        languages: *const hb_tag_t,
4688        features: *const hb_tag_t,
4689        feature_indexes: *mut hb_set_t,
4690    );
4691}
4692extern "C" {
4693    pub fn hb_ot_layout_collect_features_map(
4694        face: *mut hb_face_t,
4695        table_tag: hb_tag_t,
4696        script_index: ::std::os::raw::c_uint,
4697        language_index: ::std::os::raw::c_uint,
4698        feature_map: *mut hb_map_t,
4699    );
4700}
4701extern "C" {
4702    pub fn hb_ot_layout_collect_lookups(
4703        face: *mut hb_face_t,
4704        table_tag: hb_tag_t,
4705        scripts: *const hb_tag_t,
4706        languages: *const hb_tag_t,
4707        features: *const hb_tag_t,
4708        lookup_indexes: *mut hb_set_t,
4709    );
4710}
4711extern "C" {
4712    pub fn hb_ot_layout_lookup_collect_glyphs(
4713        face: *mut hb_face_t,
4714        table_tag: hb_tag_t,
4715        lookup_index: ::std::os::raw::c_uint,
4716        glyphs_before: *mut hb_set_t,
4717        glyphs_input: *mut hb_set_t,
4718        glyphs_after: *mut hb_set_t,
4719        glyphs_output: *mut hb_set_t,
4720    );
4721}
4722extern "C" {
4723    pub fn hb_ot_layout_table_find_feature_variations(
4724        face: *mut hb_face_t,
4725        table_tag: hb_tag_t,
4726        coords: *const ::std::os::raw::c_int,
4727        num_coords: ::std::os::raw::c_uint,
4728        variations_index: *mut ::std::os::raw::c_uint,
4729    ) -> hb_bool_t;
4730}
4731extern "C" {
4732    pub fn hb_ot_layout_feature_with_variations_get_lookups(
4733        face: *mut hb_face_t,
4734        table_tag: hb_tag_t,
4735        feature_index: ::std::os::raw::c_uint,
4736        variations_index: ::std::os::raw::c_uint,
4737        start_offset: ::std::os::raw::c_uint,
4738        lookup_count: *mut ::std::os::raw::c_uint,
4739        lookup_indexes: *mut ::std::os::raw::c_uint,
4740    ) -> ::std::os::raw::c_uint;
4741}
4742extern "C" {
4743    pub fn hb_ot_layout_has_substitution(face: *mut hb_face_t) -> hb_bool_t;
4744}
4745extern "C" {
4746    pub fn hb_ot_layout_lookup_get_glyph_alternates(
4747        face: *mut hb_face_t,
4748        lookup_index: ::std::os::raw::c_uint,
4749        glyph: hb_codepoint_t,
4750        start_offset: ::std::os::raw::c_uint,
4751        alternate_count: *mut ::std::os::raw::c_uint,
4752        alternate_glyphs: *mut hb_codepoint_t,
4753    ) -> ::std::os::raw::c_uint;
4754}
4755extern "C" {
4756    pub fn hb_ot_layout_lookup_would_substitute(
4757        face: *mut hb_face_t,
4758        lookup_index: ::std::os::raw::c_uint,
4759        glyphs: *const hb_codepoint_t,
4760        glyphs_length: ::std::os::raw::c_uint,
4761        zero_context: hb_bool_t,
4762    ) -> hb_bool_t;
4763}
4764extern "C" {
4765    pub fn hb_ot_layout_lookup_substitute_closure(
4766        face: *mut hb_face_t,
4767        lookup_index: ::std::os::raw::c_uint,
4768        glyphs: *mut hb_set_t,
4769    );
4770}
4771extern "C" {
4772    pub fn hb_ot_layout_lookups_substitute_closure(
4773        face: *mut hb_face_t,
4774        lookups: *const hb_set_t,
4775        glyphs: *mut hb_set_t,
4776    );
4777}
4778extern "C" {
4779    pub fn hb_ot_layout_has_positioning(face: *mut hb_face_t) -> hb_bool_t;
4780}
4781extern "C" {
4782    pub fn hb_ot_layout_get_size_params(
4783        face: *mut hb_face_t,
4784        design_size: *mut ::std::os::raw::c_uint,
4785        subfamily_id: *mut ::std::os::raw::c_uint,
4786        subfamily_name_id: *mut hb_ot_name_id_t,
4787        range_start: *mut ::std::os::raw::c_uint,
4788        range_end: *mut ::std::os::raw::c_uint,
4789    ) -> hb_bool_t;
4790}
4791extern "C" {
4792    pub fn hb_ot_layout_lookup_get_optical_bound(
4793        font: *mut hb_font_t,
4794        lookup_index: ::std::os::raw::c_uint,
4795        direction: hb_direction_t,
4796        glyph: hb_codepoint_t,
4797    ) -> hb_position_t;
4798}
4799extern "C" {
4800    pub fn hb_ot_layout_feature_get_name_ids(
4801        face: *mut hb_face_t,
4802        table_tag: hb_tag_t,
4803        feature_index: ::std::os::raw::c_uint,
4804        label_id: *mut hb_ot_name_id_t,
4805        tooltip_id: *mut hb_ot_name_id_t,
4806        sample_id: *mut hb_ot_name_id_t,
4807        num_named_parameters: *mut ::std::os::raw::c_uint,
4808        first_param_id: *mut hb_ot_name_id_t,
4809    ) -> hb_bool_t;
4810}
4811extern "C" {
4812    pub fn hb_ot_layout_feature_get_characters(
4813        face: *mut hb_face_t,
4814        table_tag: hb_tag_t,
4815        feature_index: ::std::os::raw::c_uint,
4816        start_offset: ::std::os::raw::c_uint,
4817        char_count: *mut ::std::os::raw::c_uint,
4818        characters: *mut hb_codepoint_t,
4819    ) -> ::std::os::raw::c_uint;
4820}
4821extern "C" {
4822    pub fn hb_ot_layout_get_font_extents(
4823        font: *mut hb_font_t,
4824        direction: hb_direction_t,
4825        script_tag: hb_tag_t,
4826        language_tag: hb_tag_t,
4827        extents: *mut hb_font_extents_t,
4828    ) -> hb_bool_t;
4829}
4830extern "C" {
4831    pub fn hb_ot_layout_get_font_extents2(
4832        font: *mut hb_font_t,
4833        direction: hb_direction_t,
4834        script: hb_script_t,
4835        language: hb_language_t,
4836        extents: *mut hb_font_extents_t,
4837    ) -> hb_bool_t;
4838}
4839pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_ROMAN: hb_ot_layout_baseline_tag_t =
4840    1919905134;
4841pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_HANGING:
4842    hb_ot_layout_baseline_tag_t = 1751215719;
4843pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT:
4844    hb_ot_layout_baseline_tag_t = 1768121954;
4845pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT:
4846    hb_ot_layout_baseline_tag_t = 1768121972;
4847pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL:
4848    hb_ot_layout_baseline_tag_t = 1231251043;
4849pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT:
4850    hb_ot_layout_baseline_tag_t = 1768187247;
4851pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT:
4852    hb_ot_layout_baseline_tag_t = 1768191088;
4853pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL:
4854    hb_ot_layout_baseline_tag_t = 1231315813;
4855pub const hb_ot_layout_baseline_tag_t_HB_OT_LAYOUT_BASELINE_TAG_MATH: hb_ot_layout_baseline_tag_t =
4856    1835103336;
4857pub const hb_ot_layout_baseline_tag_t__HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE:
4858    hb_ot_layout_baseline_tag_t = 2147483647;
4859#[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_FACE_CENTRAL: The center of the ideographic character face. Since: 4.0.0\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 @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: 4.0.0\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 [Baseline Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/baselinetags) registry.\n\n Since: 2.6.0"]
4860pub type hb_ot_layout_baseline_tag_t = ::std::os::raw::c_uint;
4861extern "C" {
4862    pub fn hb_ot_layout_get_horizontal_baseline_tag_for_script(
4863        script: hb_script_t,
4864    ) -> hb_ot_layout_baseline_tag_t;
4865}
4866extern "C" {
4867    pub fn hb_ot_layout_get_baseline(
4868        font: *mut hb_font_t,
4869        baseline_tag: hb_ot_layout_baseline_tag_t,
4870        direction: hb_direction_t,
4871        script_tag: hb_tag_t,
4872        language_tag: hb_tag_t,
4873        coord: *mut hb_position_t,
4874    ) -> hb_bool_t;
4875}
4876extern "C" {
4877    pub fn hb_ot_layout_get_baseline2(
4878        font: *mut hb_font_t,
4879        baseline_tag: hb_ot_layout_baseline_tag_t,
4880        direction: hb_direction_t,
4881        script: hb_script_t,
4882        language: hb_language_t,
4883        coord: *mut hb_position_t,
4884    ) -> hb_bool_t;
4885}
4886extern "C" {
4887    pub fn hb_ot_layout_get_baseline_with_fallback(
4888        font: *mut hb_font_t,
4889        baseline_tag: hb_ot_layout_baseline_tag_t,
4890        direction: hb_direction_t,
4891        script_tag: hb_tag_t,
4892        language_tag: hb_tag_t,
4893        coord: *mut hb_position_t,
4894    );
4895}
4896extern "C" {
4897    pub fn hb_ot_layout_get_baseline_with_fallback2(
4898        font: *mut hb_font_t,
4899        baseline_tag: hb_ot_layout_baseline_tag_t,
4900        direction: hb_direction_t,
4901        script: hb_script_t,
4902        language: hb_language_t,
4903        coord: *mut hb_position_t,
4904    );
4905}
4906pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN:
4907    hb_ot_math_constant_t = 0;
4908pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN:
4909    hb_ot_math_constant_t = 1;
4910pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT:
4911    hb_ot_math_constant_t = 2;
4912pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT:
4913    hb_ot_math_constant_t = 3;
4914pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_MATH_LEADING: hb_ot_math_constant_t = 4;
4915pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_AXIS_HEIGHT: hb_ot_math_constant_t = 5;
4916pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT: hb_ot_math_constant_t = 6;
4917pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT:
4918    hb_ot_math_constant_t = 7;
4919pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN: hb_ot_math_constant_t = 8;
4920pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX: hb_ot_math_constant_t = 9;
4921pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN:
4922    hb_ot_math_constant_t = 10;
4923pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP: hb_ot_math_constant_t =
4924    11;
4925pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED:
4926    hb_ot_math_constant_t = 12;
4927pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN: hb_ot_math_constant_t =
4928    13;
4929pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX:
4930    hb_ot_math_constant_t = 14;
4931pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN: hb_ot_math_constant_t =
4932    15;
4933pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT:
4934    hb_ot_math_constant_t = 16;
4935pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT: hb_ot_math_constant_t = 17;
4936pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN: hb_ot_math_constant_t = 18;
4937pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN:
4938    hb_ot_math_constant_t = 19;
4939pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN: hb_ot_math_constant_t = 20;
4940pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN:
4941    hb_ot_math_constant_t = 21;
4942pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP: hb_ot_math_constant_t = 22;
4943pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP:
4944    hb_ot_math_constant_t = 23;
4945pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN: hb_ot_math_constant_t =
4946    24;
4947pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN:
4948    hb_ot_math_constant_t = 25;
4949pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_GAP_MIN: hb_ot_math_constant_t = 26;
4950pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN:
4951    hb_ot_math_constant_t = 27;
4952pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP:
4953    hb_ot_math_constant_t = 28;
4954pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN:
4955    hb_ot_math_constant_t = 29;
4956pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN:
4957    hb_ot_math_constant_t = 30;
4958pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN:
4959    hb_ot_math_constant_t = 31;
4960pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP:
4961    hb_ot_math_constant_t = 32;
4962pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP:
4963    hb_ot_math_constant_t = 33;
4964pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN:
4965    hb_ot_math_constant_t = 34;
4966pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN : hb_ot_math_constant_t = 35 ;
4967pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN:
4968    hb_ot_math_constant_t = 36;
4969pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN:
4970    hb_ot_math_constant_t = 37;
4971pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS: hb_ot_math_constant_t =
4972    38;
4973pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN:
4974    hb_ot_math_constant_t = 39;
4975pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN:
4976    hb_ot_math_constant_t = 40;
4977pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP:
4978    hb_ot_math_constant_t = 41;
4979pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP:
4980    hb_ot_math_constant_t = 42;
4981pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP: hb_ot_math_constant_t =
4982    43;
4983pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS: hb_ot_math_constant_t =
4984    44;
4985pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER: hb_ot_math_constant_t =
4986    45;
4987pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP: hb_ot_math_constant_t =
4988    46;
4989pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS: hb_ot_math_constant_t =
4990    47;
4991pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER:
4992    hb_ot_math_constant_t = 48;
4993pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP: hb_ot_math_constant_t =
4994    49;
4995pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP:
4996    hb_ot_math_constant_t = 50;
4997pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS: hb_ot_math_constant_t =
4998    51;
4999pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER: hb_ot_math_constant_t =
5000    52;
5001pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE:
5002    hb_ot_math_constant_t = 53;
5003pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE:
5004    hb_ot_math_constant_t = 54;
5005pub const hb_ot_math_constant_t_HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT:
5006    hb_ot_math_constant_t = 55;
5007#[doc = " hb_ot_math_constant_t:\n @HB_OT_MATH_CONSTANT_SCRIPT_PERCENT_SCALE_DOWN: scriptPercentScaleDown\n @HB_OT_MATH_CONSTANT_SCRIPT_SCRIPT_PERCENT_SCALE_DOWN: scriptScriptPercentScaleDown\n @HB_OT_MATH_CONSTANT_DELIMITED_SUB_FORMULA_MIN_HEIGHT: delimitedSubFormulaMinHeight\n @HB_OT_MATH_CONSTANT_DISPLAY_OPERATOR_MIN_HEIGHT: displayOperatorMinHeight\n @HB_OT_MATH_CONSTANT_MATH_LEADING: mathLeading\n @HB_OT_MATH_CONSTANT_AXIS_HEIGHT: axisHeight\n @HB_OT_MATH_CONSTANT_ACCENT_BASE_HEIGHT: accentBaseHeight\n @HB_OT_MATH_CONSTANT_FLATTENED_ACCENT_BASE_HEIGHT: flattenedAccentBaseHeight\n @HB_OT_MATH_CONSTANT_SUBSCRIPT_SHIFT_DOWN: subscriptShiftDown\n @HB_OT_MATH_CONSTANT_SUBSCRIPT_TOP_MAX: subscriptTopMax\n @HB_OT_MATH_CONSTANT_SUBSCRIPT_BASELINE_DROP_MIN: subscriptBaselineDropMin\n @HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP: superscriptShiftUp\n @HB_OT_MATH_CONSTANT_SUPERSCRIPT_SHIFT_UP_CRAMPED: superscriptShiftUpCramped\n @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MIN: superscriptBottomMin\n @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BASELINE_DROP_MAX: superscriptBaselineDropMax\n @HB_OT_MATH_CONSTANT_SUB_SUPERSCRIPT_GAP_MIN: subSuperscriptGapMin\n @HB_OT_MATH_CONSTANT_SUPERSCRIPT_BOTTOM_MAX_WITH_SUBSCRIPT: superscriptBottomMaxWithSubscript\n @HB_OT_MATH_CONSTANT_SPACE_AFTER_SCRIPT: spaceAfterScript\n @HB_OT_MATH_CONSTANT_UPPER_LIMIT_GAP_MIN: upperLimitGapMin\n @HB_OT_MATH_CONSTANT_UPPER_LIMIT_BASELINE_RISE_MIN: upperLimitBaselineRiseMin\n @HB_OT_MATH_CONSTANT_LOWER_LIMIT_GAP_MIN: lowerLimitGapMin\n @HB_OT_MATH_CONSTANT_LOWER_LIMIT_BASELINE_DROP_MIN: lowerLimitBaselineDropMin\n @HB_OT_MATH_CONSTANT_STACK_TOP_SHIFT_UP: stackTopShiftUp\n @HB_OT_MATH_CONSTANT_STACK_TOP_DISPLAY_STYLE_SHIFT_UP: stackTopDisplayStyleShiftUp\n @HB_OT_MATH_CONSTANT_STACK_BOTTOM_SHIFT_DOWN: stackBottomShiftDown\n @HB_OT_MATH_CONSTANT_STACK_BOTTOM_DISPLAY_STYLE_SHIFT_DOWN: stackBottomDisplayStyleShiftDown\n @HB_OT_MATH_CONSTANT_STACK_GAP_MIN: stackGapMin\n @HB_OT_MATH_CONSTANT_STACK_DISPLAY_STYLE_GAP_MIN: stackDisplayStyleGapMin\n @HB_OT_MATH_CONSTANT_STRETCH_STACK_TOP_SHIFT_UP: stretchStackTopShiftUp\n @HB_OT_MATH_CONSTANT_STRETCH_STACK_BOTTOM_SHIFT_DOWN: stretchStackBottomShiftDown\n @HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_ABOVE_MIN: stretchStackGapAboveMin\n @HB_OT_MATH_CONSTANT_STRETCH_STACK_GAP_BELOW_MIN: stretchStackGapBelowMin\n @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_SHIFT_UP: fractionNumeratorShiftUp\n @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_DISPLAY_STYLE_SHIFT_UP: fractionNumeratorDisplayStyleShiftUp\n @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_SHIFT_DOWN: fractionDenominatorShiftDown\n @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_DISPLAY_STYLE_SHIFT_DOWN: fractionDenominatorDisplayStyleShiftDown\n @HB_OT_MATH_CONSTANT_FRACTION_NUMERATOR_GAP_MIN: fractionNumeratorGapMin\n @HB_OT_MATH_CONSTANT_FRACTION_NUM_DISPLAY_STYLE_GAP_MIN: fractionNumDisplayStyleGapMin\n @HB_OT_MATH_CONSTANT_FRACTION_RULE_THICKNESS: fractionRuleThickness\n @HB_OT_MATH_CONSTANT_FRACTION_DENOMINATOR_GAP_MIN: fractionDenominatorGapMin\n @HB_OT_MATH_CONSTANT_FRACTION_DENOM_DISPLAY_STYLE_GAP_MIN: fractionDenomDisplayStyleGapMin\n @HB_OT_MATH_CONSTANT_SKEWED_FRACTION_HORIZONTAL_GAP: skewedFractionHorizontalGap\n @HB_OT_MATH_CONSTANT_SKEWED_FRACTION_VERTICAL_GAP: skewedFractionVerticalGap\n @HB_OT_MATH_CONSTANT_OVERBAR_VERTICAL_GAP: overbarVerticalGap\n @HB_OT_MATH_CONSTANT_OVERBAR_RULE_THICKNESS: overbarRuleThickness\n @HB_OT_MATH_CONSTANT_OVERBAR_EXTRA_ASCENDER: overbarExtraAscender\n @HB_OT_MATH_CONSTANT_UNDERBAR_VERTICAL_GAP: underbarVerticalGap\n @HB_OT_MATH_CONSTANT_UNDERBAR_RULE_THICKNESS: underbarRuleThickness\n @HB_OT_MATH_CONSTANT_UNDERBAR_EXTRA_DESCENDER: underbarExtraDescender\n @HB_OT_MATH_CONSTANT_RADICAL_VERTICAL_GAP: radicalVerticalGap\n @HB_OT_MATH_CONSTANT_RADICAL_DISPLAY_STYLE_VERTICAL_GAP: radicalDisplayStyleVerticalGap\n @HB_OT_MATH_CONSTANT_RADICAL_RULE_THICKNESS: radicalRuleThickness\n @HB_OT_MATH_CONSTANT_RADICAL_EXTRA_ASCENDER: radicalExtraAscender\n @HB_OT_MATH_CONSTANT_RADICAL_KERN_BEFORE_DEGREE: radicalKernBeforeDegree\n @HB_OT_MATH_CONSTANT_RADICAL_KERN_AFTER_DEGREE: radicalKernAfterDegree\n @HB_OT_MATH_CONSTANT_RADICAL_DEGREE_BOTTOM_RAISE_PERCENT: radicalDegreeBottomRaisePercent\n\n The 'MATH' table constants, refer to\n [OpenType documentation](https://docs.microsoft.com/en-us/typography/opentype/spec/math#mathconstants-table)\n For more explanations.\n\n Since: 1.3.3"]
5008pub type hb_ot_math_constant_t = ::std::os::raw::c_uint;
5009pub const hb_ot_math_kern_t_HB_OT_MATH_KERN_TOP_RIGHT: hb_ot_math_kern_t = 0;
5010pub const hb_ot_math_kern_t_HB_OT_MATH_KERN_TOP_LEFT: hb_ot_math_kern_t = 1;
5011pub const hb_ot_math_kern_t_HB_OT_MATH_KERN_BOTTOM_RIGHT: hb_ot_math_kern_t = 2;
5012pub const hb_ot_math_kern_t_HB_OT_MATH_KERN_BOTTOM_LEFT: hb_ot_math_kern_t = 3;
5013#[doc = " hb_ot_math_kern_t:\n @HB_OT_MATH_KERN_TOP_RIGHT: The top right corner of the glyph.\n @HB_OT_MATH_KERN_TOP_LEFT: The top left corner of the glyph.\n @HB_OT_MATH_KERN_BOTTOM_RIGHT: The bottom right corner of the glyph.\n @HB_OT_MATH_KERN_BOTTOM_LEFT: The bottom left corner of the glyph.\n\n The math kerning-table types defined for the four corners\n of a glyph.\n\n Since: 1.3.3"]
5014pub type hb_ot_math_kern_t = ::std::os::raw::c_uint;
5015#[doc = " hb_ot_math_kern_entry_t:\n @max_correction_height: The maximum height at which this entry should be used\n @kern_value: The kern value of the entry\n\n Data type to hold math kerning (cut-in) information for a glyph.\n\n Since: 3.4.0"]
5016#[repr(C)]
5017#[derive(Debug, Copy, Clone)]
5018pub struct hb_ot_math_kern_entry_t {
5019    pub max_correction_height: hb_position_t,
5020    pub kern_value: hb_position_t,
5021}
5022#[test]
5023fn bindgen_test_layout_hb_ot_math_kern_entry_t() {
5024    const UNINIT: ::std::mem::MaybeUninit<hb_ot_math_kern_entry_t> =
5025        ::std::mem::MaybeUninit::uninit();
5026    let ptr = UNINIT.as_ptr();
5027    assert_eq!(
5028        ::std::mem::size_of::<hb_ot_math_kern_entry_t>(),
5029        8usize,
5030        concat!("Size of: ", stringify!(hb_ot_math_kern_entry_t))
5031    );
5032    assert_eq!(
5033        ::std::mem::align_of::<hb_ot_math_kern_entry_t>(),
5034        4usize,
5035        concat!("Alignment of ", stringify!(hb_ot_math_kern_entry_t))
5036    );
5037    assert_eq!(
5038        unsafe { ::std::ptr::addr_of!((*ptr).max_correction_height) as usize - ptr as usize },
5039        0usize,
5040        concat!(
5041            "Offset of field: ",
5042            stringify!(hb_ot_math_kern_entry_t),
5043            "::",
5044            stringify!(max_correction_height)
5045        )
5046    );
5047    assert_eq!(
5048        unsafe { ::std::ptr::addr_of!((*ptr).kern_value) as usize - ptr as usize },
5049        4usize,
5050        concat!(
5051            "Offset of field: ",
5052            stringify!(hb_ot_math_kern_entry_t),
5053            "::",
5054            stringify!(kern_value)
5055        )
5056    );
5057}
5058#[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"]
5059#[repr(C)]
5060#[derive(Debug, Copy, Clone)]
5061pub struct hb_ot_math_glyph_variant_t {
5062    pub glyph: hb_codepoint_t,
5063    pub advance: hb_position_t,
5064}
5065#[test]
5066fn bindgen_test_layout_hb_ot_math_glyph_variant_t() {
5067    const UNINIT: ::std::mem::MaybeUninit<hb_ot_math_glyph_variant_t> =
5068        ::std::mem::MaybeUninit::uninit();
5069    let ptr = UNINIT.as_ptr();
5070    assert_eq!(
5071        ::std::mem::size_of::<hb_ot_math_glyph_variant_t>(),
5072        8usize,
5073        concat!("Size of: ", stringify!(hb_ot_math_glyph_variant_t))
5074    );
5075    assert_eq!(
5076        ::std::mem::align_of::<hb_ot_math_glyph_variant_t>(),
5077        4usize,
5078        concat!("Alignment of ", stringify!(hb_ot_math_glyph_variant_t))
5079    );
5080    assert_eq!(
5081        unsafe { ::std::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
5082        0usize,
5083        concat!(
5084            "Offset of field: ",
5085            stringify!(hb_ot_math_glyph_variant_t),
5086            "::",
5087            stringify!(glyph)
5088        )
5089    );
5090    assert_eq!(
5091        unsafe { ::std::ptr::addr_of!((*ptr).advance) as usize - ptr as usize },
5092        4usize,
5093        concat!(
5094            "Offset of field: ",
5095            stringify!(hb_ot_math_glyph_variant_t),
5096            "::",
5097            stringify!(advance)
5098        )
5099    );
5100}
5101pub const hb_ot_math_glyph_part_flags_t_HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER:
5102    hb_ot_math_glyph_part_flags_t = 1;
5103#[doc = " hb_ot_math_glyph_part_flags_t:\n @HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER: This is an extender glyph part that\n can be repeated to reach the desired length.\n\n Flags for math glyph parts.\n\n Since: 1.3.3"]
5104pub type hb_ot_math_glyph_part_flags_t = ::std::os::raw::c_uint;
5105#[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"]
5106#[repr(C)]
5107#[derive(Debug, Copy, Clone)]
5108pub struct hb_ot_math_glyph_part_t {
5109    pub glyph: hb_codepoint_t,
5110    pub start_connector_length: hb_position_t,
5111    pub end_connector_length: hb_position_t,
5112    pub full_advance: hb_position_t,
5113    pub flags: hb_ot_math_glyph_part_flags_t,
5114}
5115#[test]
5116fn bindgen_test_layout_hb_ot_math_glyph_part_t() {
5117    const UNINIT: ::std::mem::MaybeUninit<hb_ot_math_glyph_part_t> =
5118        ::std::mem::MaybeUninit::uninit();
5119    let ptr = UNINIT.as_ptr();
5120    assert_eq!(
5121        ::std::mem::size_of::<hb_ot_math_glyph_part_t>(),
5122        20usize,
5123        concat!("Size of: ", stringify!(hb_ot_math_glyph_part_t))
5124    );
5125    assert_eq!(
5126        ::std::mem::align_of::<hb_ot_math_glyph_part_t>(),
5127        4usize,
5128        concat!("Alignment of ", stringify!(hb_ot_math_glyph_part_t))
5129    );
5130    assert_eq!(
5131        unsafe { ::std::ptr::addr_of!((*ptr).glyph) as usize - ptr as usize },
5132        0usize,
5133        concat!(
5134            "Offset of field: ",
5135            stringify!(hb_ot_math_glyph_part_t),
5136            "::",
5137            stringify!(glyph)
5138        )
5139    );
5140    assert_eq!(
5141        unsafe { ::std::ptr::addr_of!((*ptr).start_connector_length) as usize - ptr as usize },
5142        4usize,
5143        concat!(
5144            "Offset of field: ",
5145            stringify!(hb_ot_math_glyph_part_t),
5146            "::",
5147            stringify!(start_connector_length)
5148        )
5149    );
5150    assert_eq!(
5151        unsafe { ::std::ptr::addr_of!((*ptr).end_connector_length) as usize - ptr as usize },
5152        8usize,
5153        concat!(
5154            "Offset of field: ",
5155            stringify!(hb_ot_math_glyph_part_t),
5156            "::",
5157            stringify!(end_connector_length)
5158        )
5159    );
5160    assert_eq!(
5161        unsafe { ::std::ptr::addr_of!((*ptr).full_advance) as usize - ptr as usize },
5162        12usize,
5163        concat!(
5164            "Offset of field: ",
5165            stringify!(hb_ot_math_glyph_part_t),
5166            "::",
5167            stringify!(full_advance)
5168        )
5169    );
5170    assert_eq!(
5171        unsafe { ::std::ptr::addr_of!((*ptr).flags) as usize - ptr as usize },
5172        16usize,
5173        concat!(
5174            "Offset of field: ",
5175            stringify!(hb_ot_math_glyph_part_t),
5176            "::",
5177            stringify!(flags)
5178        )
5179    );
5180}
5181extern "C" {
5182    pub fn hb_ot_math_has_data(face: *mut hb_face_t) -> hb_bool_t;
5183}
5184extern "C" {
5185    pub fn hb_ot_math_get_constant(
5186        font: *mut hb_font_t,
5187        constant: hb_ot_math_constant_t,
5188    ) -> hb_position_t;
5189}
5190extern "C" {
5191    pub fn hb_ot_math_get_glyph_italics_correction(
5192        font: *mut hb_font_t,
5193        glyph: hb_codepoint_t,
5194    ) -> hb_position_t;
5195}
5196extern "C" {
5197    pub fn hb_ot_math_get_glyph_top_accent_attachment(
5198        font: *mut hb_font_t,
5199        glyph: hb_codepoint_t,
5200    ) -> hb_position_t;
5201}
5202extern "C" {
5203    pub fn hb_ot_math_is_glyph_extended_shape(
5204        face: *mut hb_face_t,
5205        glyph: hb_codepoint_t,
5206    ) -> hb_bool_t;
5207}
5208extern "C" {
5209    pub fn hb_ot_math_get_glyph_kerning(
5210        font: *mut hb_font_t,
5211        glyph: hb_codepoint_t,
5212        kern: hb_ot_math_kern_t,
5213        correction_height: hb_position_t,
5214    ) -> hb_position_t;
5215}
5216extern "C" {
5217    pub fn hb_ot_math_get_glyph_kernings(
5218        font: *mut hb_font_t,
5219        glyph: hb_codepoint_t,
5220        kern: hb_ot_math_kern_t,
5221        start_offset: ::std::os::raw::c_uint,
5222        entries_count: *mut ::std::os::raw::c_uint,
5223        kern_entries: *mut hb_ot_math_kern_entry_t,
5224    ) -> ::std::os::raw::c_uint;
5225}
5226extern "C" {
5227    pub fn hb_ot_math_get_glyph_variants(
5228        font: *mut hb_font_t,
5229        glyph: hb_codepoint_t,
5230        direction: hb_direction_t,
5231        start_offset: ::std::os::raw::c_uint,
5232        variants_count: *mut ::std::os::raw::c_uint,
5233        variants: *mut hb_ot_math_glyph_variant_t,
5234    ) -> ::std::os::raw::c_uint;
5235}
5236extern "C" {
5237    pub fn hb_ot_math_get_min_connector_overlap(
5238        font: *mut hb_font_t,
5239        direction: hb_direction_t,
5240    ) -> hb_position_t;
5241}
5242extern "C" {
5243    pub fn hb_ot_math_get_glyph_assembly(
5244        font: *mut hb_font_t,
5245        glyph: hb_codepoint_t,
5246        direction: hb_direction_t,
5247        start_offset: ::std::os::raw::c_uint,
5248        parts_count: *mut ::std::os::raw::c_uint,
5249        parts: *mut hb_ot_math_glyph_part_t,
5250        italics_correction: *mut hb_position_t,
5251    ) -> ::std::os::raw::c_uint;
5252}
5253pub const hb_ot_meta_tag_t_HB_OT_META_TAG_DESIGN_LANGUAGES: hb_ot_meta_tag_t = 1684827751;
5254pub const hb_ot_meta_tag_t_HB_OT_META_TAG_SUPPORTED_LANGUAGES: hb_ot_meta_tag_t = 1936485991;
5255pub const hb_ot_meta_tag_t__HB_OT_META_TAG_MAX_VALUE: hb_ot_meta_tag_t = 2147483647;
5256#[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"]
5257pub type hb_ot_meta_tag_t = ::std::os::raw::c_uint;
5258extern "C" {
5259    pub fn hb_ot_meta_get_entry_tags(
5260        face: *mut hb_face_t,
5261        start_offset: ::std::os::raw::c_uint,
5262        entries_count: *mut ::std::os::raw::c_uint,
5263        entries: *mut hb_ot_meta_tag_t,
5264    ) -> ::std::os::raw::c_uint;
5265}
5266extern "C" {
5267    pub fn hb_ot_meta_reference_entry(
5268        face: *mut hb_face_t,
5269        meta_tag: hb_ot_meta_tag_t,
5270    ) -> *mut hb_blob_t;
5271}
5272pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER: hb_ot_metrics_tag_t =
5273    1751216995;
5274pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER: hb_ot_metrics_tag_t =
5275    1751413603;
5276pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP: hb_ot_metrics_tag_t =
5277    1751934832;
5278pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT: hb_ot_metrics_tag_t =
5279    1751346273;
5280pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT: hb_ot_metrics_tag_t =
5281    1751346276;
5282pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_ASCENDER: hb_ot_metrics_tag_t = 1986098019;
5283pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_DESCENDER: hb_ot_metrics_tag_t =
5284    1986294627;
5285pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_LINE_GAP: hb_ot_metrics_tag_t = 1986815856;
5286pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE: hb_ot_metrics_tag_t =
5287    1751347827;
5288pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN: hb_ot_metrics_tag_t =
5289    1751347822;
5290pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: hb_ot_metrics_tag_t =
5291    1751347046;
5292pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_CARET_RISE: hb_ot_metrics_tag_t =
5293    1986228851;
5294pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_CARET_RUN: hb_ot_metrics_tag_t =
5295    1986228846;
5296pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET: hb_ot_metrics_tag_t =
5297    1986228070;
5298pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_X_HEIGHT: hb_ot_metrics_tag_t = 2020108148;
5299pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_CAP_HEIGHT: hb_ot_metrics_tag_t = 1668311156;
5300pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE: hb_ot_metrics_tag_t =
5301    1935833203;
5302pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE: hb_ot_metrics_tag_t =
5303    1935833459;
5304pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET: hb_ot_metrics_tag_t =
5305    1935833199;
5306pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET: hb_ot_metrics_tag_t =
5307    1935833455;
5308pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE: hb_ot_metrics_tag_t =
5309    1936750707;
5310pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE: hb_ot_metrics_tag_t =
5311    1936750963;
5312pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET: hb_ot_metrics_tag_t =
5313    1936750703;
5314pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET: hb_ot_metrics_tag_t =
5315    1936750959;
5316pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_STRIKEOUT_SIZE: hb_ot_metrics_tag_t = 1937011315;
5317pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_STRIKEOUT_OFFSET: hb_ot_metrics_tag_t = 1937011311;
5318pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_UNDERLINE_SIZE: hb_ot_metrics_tag_t = 1970168947;
5319pub const hb_ot_metrics_tag_t_HB_OT_METRICS_TAG_UNDERLINE_OFFSET: hb_ot_metrics_tag_t = 1970168943;
5320pub const hb_ot_metrics_tag_t__HB_OT_METRICS_TAG_MAX_VALUE: hb_ot_metrics_tag_t = 2147483647;
5321#[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 Metric tags corresponding to [MVAR Value\n Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/mvar#value-tags)\n\n Since: 2.6.0"]
5322pub type hb_ot_metrics_tag_t = ::std::os::raw::c_uint;
5323extern "C" {
5324    pub fn hb_ot_metrics_get_position(
5325        font: *mut hb_font_t,
5326        metrics_tag: hb_ot_metrics_tag_t,
5327        position: *mut hb_position_t,
5328    ) -> hb_bool_t;
5329}
5330extern "C" {
5331    pub fn hb_ot_metrics_get_position_with_fallback(
5332        font: *mut hb_font_t,
5333        metrics_tag: hb_ot_metrics_tag_t,
5334        position: *mut hb_position_t,
5335    );
5336}
5337extern "C" {
5338    pub fn hb_ot_metrics_get_variation(
5339        font: *mut hb_font_t,
5340        metrics_tag: hb_ot_metrics_tag_t,
5341    ) -> f32;
5342}
5343extern "C" {
5344    pub fn hb_ot_metrics_get_x_variation(
5345        font: *mut hb_font_t,
5346        metrics_tag: hb_ot_metrics_tag_t,
5347    ) -> hb_position_t;
5348}
5349extern "C" {
5350    pub fn hb_ot_metrics_get_y_variation(
5351        font: *mut hb_font_t,
5352        metrics_tag: hb_ot_metrics_tag_t,
5353    ) -> hb_position_t;
5354}
5355extern "C" {
5356    pub fn hb_ot_shape_glyphs_closure(
5357        font: *mut hb_font_t,
5358        buffer: *mut hb_buffer_t,
5359        features: *const hb_feature_t,
5360        num_features: ::std::os::raw::c_uint,
5361        glyphs: *mut hb_set_t,
5362    );
5363}
5364extern "C" {
5365    pub fn hb_ot_shape_plan_collect_lookups(
5366        shape_plan: *mut hb_shape_plan_t,
5367        table_tag: hb_tag_t,
5368        lookup_indexes: *mut hb_set_t,
5369    );
5370}
5371extern "C" {
5372    pub fn hb_ot_var_has_data(face: *mut hb_face_t) -> hb_bool_t;
5373}
5374extern "C" {
5375    pub fn hb_ot_var_get_axis_count(face: *mut hb_face_t) -> ::std::os::raw::c_uint;
5376}
5377pub const hb_ot_var_axis_flags_t_HB_OT_VAR_AXIS_FLAG_HIDDEN: hb_ot_var_axis_flags_t = 1;
5378pub const hb_ot_var_axis_flags_t__HB_OT_VAR_AXIS_FLAG_MAX_VALUE: hb_ot_var_axis_flags_t =
5379    2147483647;
5380#[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 Flags for #hb_ot_var_axis_info_t.\n\n Since: 2.2.0"]
5381pub type hb_ot_var_axis_flags_t = ::std::os::raw::c_uint;
5382#[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 minimum 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"]
5383#[repr(C)]
5384#[derive(Debug, Copy, Clone)]
5385pub struct hb_ot_var_axis_info_t {
5386    pub axis_index: ::std::os::raw::c_uint,
5387    pub tag: hb_tag_t,
5388    pub name_id: hb_ot_name_id_t,
5389    pub flags: hb_ot_var_axis_flags_t,
5390    pub min_value: f32,
5391    pub default_value: f32,
5392    pub max_value: f32,
5393    pub reserved: ::std::os::raw::c_uint,
5394}
5395#[test]
5396fn bindgen_test_layout_hb_ot_var_axis_info_t() {
5397    const UNINIT: ::std::mem::MaybeUninit<hb_ot_var_axis_info_t> =
5398        ::std::mem::MaybeUninit::uninit();
5399    let ptr = UNINIT.as_ptr();
5400    assert_eq!(
5401        ::std::mem::size_of::<hb_ot_var_axis_info_t>(),
5402        32usize,
5403        concat!("Size of: ", stringify!(hb_ot_var_axis_info_t))
5404    );
5405    assert_eq!(
5406        ::std::mem::align_of::<hb_ot_var_axis_info_t>(),
5407        4usize,
5408        concat!("Alignment of ", stringify!(hb_ot_var_axis_info_t))
5409    );
5410    assert_eq!(
5411        unsafe { ::std::ptr::addr_of!((*ptr).axis_index) as usize - ptr as usize },
5412        0usize,
5413        concat!(
5414            "Offset of field: ",
5415            stringify!(hb_ot_var_axis_info_t),
5416            "::",
5417            stringify!(axis_index)
5418        )
5419    );
5420    assert_eq!(
5421        unsafe { ::std::ptr::addr_of!((*ptr).tag) as usize - ptr as usize },
5422        4usize,
5423        concat!("Offset of field: ", stringify!(hb_ot_var_axis_info_t), "::", stringify!(tag))
5424    );
5425    assert_eq!(
5426        unsafe { ::std::ptr::addr_of!((*ptr).name_id) as usize - ptr as usize },
5427        8usize,
5428        concat!(
5429            "Offset of field: ",
5430            stringify!(hb_ot_var_axis_info_t),
5431            "::",
5432            stringify!(name_id)
5433        )
5434    );
5435    assert_eq!(
5436        unsafe { ::std::ptr::addr_of!((*ptr).flags) as usize - ptr as usize },
5437        12usize,
5438        concat!("Offset of field: ", stringify!(hb_ot_var_axis_info_t), "::", stringify!(flags))
5439    );
5440    assert_eq!(
5441        unsafe { ::std::ptr::addr_of!((*ptr).min_value) as usize - ptr as usize },
5442        16usize,
5443        concat!(
5444            "Offset of field: ",
5445            stringify!(hb_ot_var_axis_info_t),
5446            "::",
5447            stringify!(min_value)
5448        )
5449    );
5450    assert_eq!(
5451        unsafe { ::std::ptr::addr_of!((*ptr).default_value) as usize - ptr as usize },
5452        20usize,
5453        concat!(
5454            "Offset of field: ",
5455            stringify!(hb_ot_var_axis_info_t),
5456            "::",
5457            stringify!(default_value)
5458        )
5459    );
5460    assert_eq!(
5461        unsafe { ::std::ptr::addr_of!((*ptr).max_value) as usize - ptr as usize },
5462        24usize,
5463        concat!(
5464            "Offset of field: ",
5465            stringify!(hb_ot_var_axis_info_t),
5466            "::",
5467            stringify!(max_value)
5468        )
5469    );
5470    assert_eq!(
5471        unsafe { ::std::ptr::addr_of!((*ptr).reserved) as usize - ptr as usize },
5472        28usize,
5473        concat!(
5474            "Offset of field: ",
5475            stringify!(hb_ot_var_axis_info_t),
5476            "::",
5477            stringify!(reserved)
5478        )
5479    );
5480}
5481extern "C" {
5482    pub fn hb_ot_var_get_axis_infos(
5483        face: *mut hb_face_t,
5484        start_offset: ::std::os::raw::c_uint,
5485        axes_count: *mut ::std::os::raw::c_uint,
5486        axes_array: *mut hb_ot_var_axis_info_t,
5487    ) -> ::std::os::raw::c_uint;
5488}
5489extern "C" {
5490    pub fn hb_ot_var_find_axis_info(
5491        face: *mut hb_face_t,
5492        axis_tag: hb_tag_t,
5493        axis_info: *mut hb_ot_var_axis_info_t,
5494    ) -> hb_bool_t;
5495}
5496extern "C" {
5497    pub fn hb_ot_var_get_named_instance_count(face: *mut hb_face_t) -> ::std::os::raw::c_uint;
5498}
5499extern "C" {
5500    pub fn hb_ot_var_named_instance_get_subfamily_name_id(
5501        face: *mut hb_face_t,
5502        instance_index: ::std::os::raw::c_uint,
5503    ) -> hb_ot_name_id_t;
5504}
5505extern "C" {
5506    pub fn hb_ot_var_named_instance_get_postscript_name_id(
5507        face: *mut hb_face_t,
5508        instance_index: ::std::os::raw::c_uint,
5509    ) -> hb_ot_name_id_t;
5510}
5511extern "C" {
5512    pub fn hb_ot_var_named_instance_get_design_coords(
5513        face: *mut hb_face_t,
5514        instance_index: ::std::os::raw::c_uint,
5515        coords_length: *mut ::std::os::raw::c_uint,
5516        coords: *mut f32,
5517    ) -> ::std::os::raw::c_uint;
5518}
5519extern "C" {
5520    pub fn hb_ot_var_normalize_variations(
5521        face: *mut hb_face_t,
5522        variations: *const hb_variation_t,
5523        variations_length: ::std::os::raw::c_uint,
5524        coords: *mut ::std::os::raw::c_int,
5525        coords_length: ::std::os::raw::c_uint,
5526    );
5527}
5528extern "C" {
5529    pub fn hb_ot_var_normalize_coords(
5530        face: *mut hb_face_t,
5531        coords_length: ::std::os::raw::c_uint,
5532        design_coords: *const f32,
5533        normalized_coords: *mut ::std::os::raw::c_int,
5534    );
5535}
5536#[repr(C)]
5537#[derive(Debug, Copy, Clone)]
5538pub struct hb_subset_input_t {
5539    _unused: [u8; 0],
5540}
5541#[repr(C)]
5542#[derive(Debug, Copy, Clone)]
5543pub struct hb_subset_plan_t {
5544    _unused: [u8; 0],
5545}
5546impl hb_subset_flags_t {
5547    pub const DEFAULT: hb_subset_flags_t = hb_subset_flags_t(0);
5548}
5549impl hb_subset_flags_t {
5550    pub const NO_HINTING: hb_subset_flags_t = hb_subset_flags_t(1);
5551}
5552impl hb_subset_flags_t {
5553    pub const RETAIN_GIDS: hb_subset_flags_t = hb_subset_flags_t(2);
5554}
5555impl hb_subset_flags_t {
5556    pub const DESUBROUTINIZE: hb_subset_flags_t = hb_subset_flags_t(4);
5557}
5558impl hb_subset_flags_t {
5559    pub const NAME_LEGACY: hb_subset_flags_t = hb_subset_flags_t(8);
5560}
5561impl hb_subset_flags_t {
5562    pub const SET_OVERLAPS_FLAG: hb_subset_flags_t = hb_subset_flags_t(16);
5563}
5564impl hb_subset_flags_t {
5565    pub const PASSTHROUGH_UNRECOGNIZED: hb_subset_flags_t = hb_subset_flags_t(32);
5566}
5567impl hb_subset_flags_t {
5568    pub const NOTDEF_OUTLINE: hb_subset_flags_t = hb_subset_flags_t(64);
5569}
5570impl hb_subset_flags_t {
5571    pub const GLYPH_NAMES: hb_subset_flags_t = hb_subset_flags_t(128);
5572}
5573impl hb_subset_flags_t {
5574    pub const NO_PRUNE_UNICODE_RANGES: hb_subset_flags_t = hb_subset_flags_t(256);
5575}
5576impl hb_subset_flags_t {
5577    pub const NO_LAYOUT_CLOSURE: hb_subset_flags_t = hb_subset_flags_t(512);
5578}
5579impl hb_subset_flags_t {
5580    pub const OPTIMIZE_IUP_DELTAS: hb_subset_flags_t = hb_subset_flags_t(1024);
5581}
5582impl ::std::ops::BitOr<hb_subset_flags_t> for hb_subset_flags_t {
5583    type Output = Self;
5584    #[inline]
5585    fn bitor(self, other: Self) -> Self {
5586        hb_subset_flags_t(self.0 | other.0)
5587    }
5588}
5589impl ::std::ops::BitOrAssign for hb_subset_flags_t {
5590    #[inline]
5591    fn bitor_assign(&mut self, rhs: hb_subset_flags_t) {
5592        self.0 |= rhs.0;
5593    }
5594}
5595impl ::std::ops::BitAnd<hb_subset_flags_t> for hb_subset_flags_t {
5596    type Output = Self;
5597    #[inline]
5598    fn bitand(self, other: Self) -> Self {
5599        hb_subset_flags_t(self.0 & other.0)
5600    }
5601}
5602impl ::std::ops::BitAndAssign for hb_subset_flags_t {
5603    #[inline]
5604    fn bitand_assign(&mut self, rhs: hb_subset_flags_t) {
5605        self.0 &= rhs.0;
5606    }
5607}
5608#[repr(transparent)]
5609#[doc = " hb_subset_flags_t:\n @DEFAULT: all flags at their default value of false.\n @NO_HINTING: If set hinting instructions will be dropped in\n the produced subset. Otherwise hinting instructions will be retained.\n @RETAIN_GIDS: If set glyph indices will not be modified in\n the produced subset. If glyphs are dropped their indices will be retained\n as an empty glyph.\n @DESUBROUTINIZE: If set and subsetting a CFF font the\n subsetter will attempt to remove subroutines from the CFF glyphs.\n @NAME_LEGACY: If set non-unicode name records will be\n retained in the subset.\n @SET_OVERLAPS_FLAG:\tIf set the subsetter will set the\n OVERLAP_SIMPLE flag on each simple glyph.\n @PASSTHROUGH_UNRECOGNIZED: If set the subsetter will not\n drop unrecognized tables and instead pass them through untouched.\n @NOTDEF_OUTLINE: If set the notdef glyph outline will be\n retained in the final subset.\n @GLYPH_NAMES: If set the PS glyph names will be retained\n in the final subset.\n @NO_PRUNE_UNICODE_RANGES: If set then the unicode ranges in\n OS/2 will not be recalculated.\n @NO_LAYOUT_CLOSURE: If set don't perform glyph closure on layout\n substitution rules (GSUB). Since: 7.2.0.\n @OPTIMIZE_IUP_DELTAS: If set perform IUP delta optimization on the\n remaining gvar table's deltas. Since: 8.5.0\n @IFTB_REQUIREMENTS: If set enforce requirements on the output subset\n to allow it to be used with incremental font transfer IFTB patches. Primarily,\n this forces all outline data to use long (32 bit) offsets. Since: EXPERIMENTAL\n\n List of boolean properties that can be configured on the subset input.\n\n Since: 2.9.0"]
5610#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
5611pub struct hb_subset_flags_t(pub ::std::os::raw::c_uint);
5612impl hb_subset_sets_t {
5613    pub const GLYPH_INDEX: hb_subset_sets_t = hb_subset_sets_t(0);
5614}
5615impl hb_subset_sets_t {
5616    pub const UNICODE: hb_subset_sets_t = hb_subset_sets_t(1);
5617}
5618impl hb_subset_sets_t {
5619    pub const NO_SUBSET_TABLE_TAG: hb_subset_sets_t = hb_subset_sets_t(2);
5620}
5621impl hb_subset_sets_t {
5622    pub const DROP_TABLE_TAG: hb_subset_sets_t = hb_subset_sets_t(3);
5623}
5624impl hb_subset_sets_t {
5625    pub const NAME_ID: hb_subset_sets_t = hb_subset_sets_t(4);
5626}
5627impl hb_subset_sets_t {
5628    pub const NAME_LANG_ID: hb_subset_sets_t = hb_subset_sets_t(5);
5629}
5630impl hb_subset_sets_t {
5631    pub const LAYOUT_FEATURE_TAG: hb_subset_sets_t = hb_subset_sets_t(6);
5632}
5633impl hb_subset_sets_t {
5634    pub const LAYOUT_SCRIPT_TAG: hb_subset_sets_t = hb_subset_sets_t(7);
5635}
5636impl ::std::ops::BitOr<hb_subset_sets_t> for hb_subset_sets_t {
5637    type Output = Self;
5638    #[inline]
5639    fn bitor(self, other: Self) -> Self {
5640        hb_subset_sets_t(self.0 | other.0)
5641    }
5642}
5643impl ::std::ops::BitOrAssign for hb_subset_sets_t {
5644    #[inline]
5645    fn bitor_assign(&mut self, rhs: hb_subset_sets_t) {
5646        self.0 |= rhs.0;
5647    }
5648}
5649impl ::std::ops::BitAnd<hb_subset_sets_t> for hb_subset_sets_t {
5650    type Output = Self;
5651    #[inline]
5652    fn bitand(self, other: Self) -> Self {
5653        hb_subset_sets_t(self.0 & other.0)
5654    }
5655}
5656impl ::std::ops::BitAndAssign for hb_subset_sets_t {
5657    #[inline]
5658    fn bitand_assign(&mut self, rhs: hb_subset_sets_t) {
5659        self.0 &= rhs.0;
5660    }
5661}
5662#[repr(transparent)]
5663#[doc = " hb_subset_sets_t:\n @GLYPH_INDEX: the set of glyph indexes to retain in the subset.\n @UNICODE: the set of unicode codepoints to retain in the subset.\n @NO_SUBSET_TABLE_TAG: the set of table tags which specifies tables that should not be\n subsetted.\n @DROP_TABLE_TAG: the set of table tags which specifies tables which will be dropped\n in the subset.\n @NAME_ID: the set of name ids that will be retained.\n @NAME_LANG_ID: the set of name lang ids that will be retained.\n @LAYOUT_FEATURE_TAG: the set of layout feature tags that will be retained\n in the subset.\n @LAYOUT_SCRIPT_TAG: the set of layout script tags that will be retained\n in the subset. Defaults to all tags. Since: 5.0.0\n\n List of sets that can be configured on the subset input.\n\n Since: 2.9.1"]
5664#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)]
5665pub struct hb_subset_sets_t(pub ::std::os::raw::c_uint);
5666extern "C" {
5667    pub fn hb_subset_input_create_or_fail() -> *mut hb_subset_input_t;
5668}
5669extern "C" {
5670    pub fn hb_subset_input_reference(input: *mut hb_subset_input_t) -> *mut hb_subset_input_t;
5671}
5672extern "C" {
5673    pub fn hb_subset_input_destroy(input: *mut hb_subset_input_t);
5674}
5675extern "C" {
5676    pub fn hb_subset_input_set_user_data(
5677        input: *mut hb_subset_input_t,
5678        key: *mut hb_user_data_key_t,
5679        data: *mut ::std::os::raw::c_void,
5680        destroy: hb_destroy_func_t,
5681        replace: hb_bool_t,
5682    ) -> hb_bool_t;
5683}
5684extern "C" {
5685    pub fn hb_subset_input_get_user_data(
5686        input: *const hb_subset_input_t,
5687        key: *mut hb_user_data_key_t,
5688    ) -> *mut ::std::os::raw::c_void;
5689}
5690extern "C" {
5691    pub fn hb_subset_input_keep_everything(input: *mut hb_subset_input_t);
5692}
5693extern "C" {
5694    pub fn hb_subset_input_unicode_set(input: *mut hb_subset_input_t) -> *mut hb_set_t;
5695}
5696extern "C" {
5697    pub fn hb_subset_input_glyph_set(input: *mut hb_subset_input_t) -> *mut hb_set_t;
5698}
5699extern "C" {
5700    pub fn hb_subset_input_set(
5701        input: *mut hb_subset_input_t,
5702        set_type: hb_subset_sets_t,
5703    ) -> *mut hb_set_t;
5704}
5705extern "C" {
5706    pub fn hb_subset_input_old_to_new_glyph_mapping(input: *mut hb_subset_input_t)
5707        -> *mut hb_map_t;
5708}
5709extern "C" {
5710    pub fn hb_subset_input_get_flags(input: *mut hb_subset_input_t) -> hb_subset_flags_t;
5711}
5712extern "C" {
5713    pub fn hb_subset_input_set_flags(input: *mut hb_subset_input_t, value: ::std::os::raw::c_uint);
5714}
5715extern "C" {
5716    pub fn hb_subset_input_pin_all_axes_to_default(
5717        input: *mut hb_subset_input_t,
5718        face: *mut hb_face_t,
5719    ) -> hb_bool_t;
5720}
5721extern "C" {
5722    pub fn hb_subset_input_pin_axis_to_default(
5723        input: *mut hb_subset_input_t,
5724        face: *mut hb_face_t,
5725        axis_tag: hb_tag_t,
5726    ) -> hb_bool_t;
5727}
5728extern "C" {
5729    pub fn hb_subset_input_pin_axis_location(
5730        input: *mut hb_subset_input_t,
5731        face: *mut hb_face_t,
5732        axis_tag: hb_tag_t,
5733        axis_value: f32,
5734    ) -> hb_bool_t;
5735}
5736extern "C" {
5737    pub fn hb_subset_input_get_axis_range(
5738        input: *mut hb_subset_input_t,
5739        axis_tag: hb_tag_t,
5740        axis_min_value: *mut f32,
5741        axis_max_value: *mut f32,
5742        axis_def_value: *mut f32,
5743    ) -> hb_bool_t;
5744}
5745extern "C" {
5746    pub fn hb_subset_input_set_axis_range(
5747        input: *mut hb_subset_input_t,
5748        face: *mut hb_face_t,
5749        axis_tag: hb_tag_t,
5750        axis_min_value: f32,
5751        axis_max_value: f32,
5752        axis_def_value: f32,
5753    ) -> hb_bool_t;
5754}
5755extern "C" {
5756    pub fn hb_subset_preprocess(source: *mut hb_face_t) -> *mut hb_face_t;
5757}
5758extern "C" {
5759    pub fn hb_subset_or_fail(
5760        source: *mut hb_face_t,
5761        input: *const hb_subset_input_t,
5762    ) -> *mut hb_face_t;
5763}
5764extern "C" {
5765    pub fn hb_subset_plan_execute_or_fail(plan: *mut hb_subset_plan_t) -> *mut hb_face_t;
5766}
5767extern "C" {
5768    pub fn hb_subset_plan_create_or_fail(
5769        face: *mut hb_face_t,
5770        input: *const hb_subset_input_t,
5771    ) -> *mut hb_subset_plan_t;
5772}
5773extern "C" {
5774    pub fn hb_subset_plan_destroy(plan: *mut hb_subset_plan_t);
5775}
5776extern "C" {
5777    pub fn hb_subset_plan_old_to_new_glyph_mapping(plan: *const hb_subset_plan_t) -> *mut hb_map_t;
5778}
5779extern "C" {
5780    pub fn hb_subset_plan_new_to_old_glyph_mapping(plan: *const hb_subset_plan_t) -> *mut hb_map_t;
5781}
5782extern "C" {
5783    pub fn hb_subset_plan_unicode_to_old_glyph_mapping(
5784        plan: *const hb_subset_plan_t,
5785    ) -> *mut hb_map_t;
5786}
5787extern "C" {
5788    pub fn hb_subset_plan_reference(plan: *mut hb_subset_plan_t) -> *mut hb_subset_plan_t;
5789}
5790extern "C" {
5791    pub fn hb_subset_plan_set_user_data(
5792        plan: *mut hb_subset_plan_t,
5793        key: *mut hb_user_data_key_t,
5794        data: *mut ::std::os::raw::c_void,
5795        destroy: hb_destroy_func_t,
5796        replace: hb_bool_t,
5797    ) -> hb_bool_t;
5798}
5799extern "C" {
5800    pub fn hb_subset_plan_get_user_data(
5801        plan: *const hb_subset_plan_t,
5802        key: *mut hb_user_data_key_t,
5803    ) -> *mut ::std::os::raw::c_void;
5804}