1 
2 //          Copyright Ahmet Sait Koçak 2020.
3 // Distributed under the Boost Software License, Version 1.0.
4 //    (See accompanying file LICENSE_1_0.txt or copy at
5 //          https://www.boost.org/LICENSE_1_0.txt)
6 
7 module bindbc.hb.bind.font;
8 
9 import bindbc.hb.config;
10 
11 import bindbc.hb.bind.common;
12 import bindbc.hb.bind.face;
13 
14 extern(C) @nogc nothrow:
15 
16 struct hb_font_t;
17 
18 /*
19  * hb_font_funcs_t
20  */
21 
22 struct hb_font_funcs_t;
23 
24 version(BindHB_Static)
25     hb_font_funcs_t* hb_font_funcs_create ();
26 else
27 {
28     private alias fp_hb_font_funcs_create = hb_font_funcs_t* function ();
29     __gshared fp_hb_font_funcs_create hb_font_funcs_create;
30 }
31 
32 version(BindHB_Static)
33     hb_font_funcs_t* hb_font_funcs_get_empty ();
34 else
35 {
36     private alias fp_hb_font_funcs_get_empty = hb_font_funcs_t* function ();
37     __gshared fp_hb_font_funcs_get_empty hb_font_funcs_get_empty;
38 }
39 
40 version(BindHB_Static)
41     hb_font_funcs_t* hb_font_funcs_reference (hb_font_funcs_t* ffuncs);
42 else
43 {
44     private alias fp_hb_font_funcs_reference = hb_font_funcs_t* function (hb_font_funcs_t* ffuncs);
45     __gshared fp_hb_font_funcs_reference hb_font_funcs_reference;
46 }
47 
48 version(BindHB_Static)
49     void hb_font_funcs_destroy (hb_font_funcs_t* ffuncs);
50 else
51 {
52     private alias fp_hb_font_funcs_destroy = void function (hb_font_funcs_t* ffuncs);
53     __gshared fp_hb_font_funcs_destroy hb_font_funcs_destroy;
54 }
55 
56 version(BindHB_Static)
57     hb_bool_t hb_font_funcs_set_user_data (
58         hb_font_funcs_t* ffuncs,
59         hb_user_data_key_t* key,
60         void* data,
61         hb_destroy_func_t destroy,
62         hb_bool_t replace);
63 else
64 {
65     private alias fp_hb_font_funcs_set_user_data = hb_bool_t function (
66         hb_font_funcs_t* ffuncs,
67         hb_user_data_key_t* key,
68         void* data,
69         hb_destroy_func_t destroy,
70         hb_bool_t replace);
71     __gshared fp_hb_font_funcs_set_user_data hb_font_funcs_set_user_data;
72 }
73 
74 version(BindHB_Static)
75     void* hb_font_funcs_get_user_data (
76         hb_font_funcs_t* ffuncs,
77         hb_user_data_key_t* key);
78 else
79 {
80     private alias fp_hb_font_funcs_get_user_data = void* function (
81         hb_font_funcs_t* ffuncs,
82         hb_user_data_key_t* key);
83     __gshared fp_hb_font_funcs_get_user_data hb_font_funcs_get_user_data;
84 }
85 
86 version(BindHB_Static)
87     void hb_font_funcs_make_immutable (hb_font_funcs_t* ffuncs);
88 else
89 {
90     private alias fp_hb_font_funcs_make_immutable = void function (hb_font_funcs_t* ffuncs);
91     __gshared fp_hb_font_funcs_make_immutable hb_font_funcs_make_immutable;
92 }
93 
94 version(BindHB_Static)
95     hb_bool_t hb_font_funcs_is_immutable (hb_font_funcs_t* ffuncs);
96 else
97 {
98     private alias fp_hb_font_funcs_is_immutable = hb_bool_t function (hb_font_funcs_t* ffuncs);
99     __gshared fp_hb_font_funcs_is_immutable hb_font_funcs_is_immutable;
100 }
101 
102 /* font and glyph extents */
103 
104 /* Note that typically ascender is positive and descender negative in coordinate systems that grow up. */
105 struct hb_font_extents_t
106 {
107     hb_position_t ascender; /* typographic ascender. */
108     hb_position_t descender; /* typographic descender. */
109     hb_position_t line_gap; /* suggested line spacing gap. */
110     /*< private >*/
111     hb_position_t reserved9;
112     hb_position_t reserved8;
113     hb_position_t reserved7;
114     hb_position_t reserved6;
115     hb_position_t reserved5;
116     hb_position_t reserved4;
117     hb_position_t reserved3;
118     hb_position_t reserved2;
119     hb_position_t reserved1;
120 }
121 
122 /* Note that height is negative in coordinate systems that grow up. */
123 struct hb_glyph_extents_t
124 {
125     hb_position_t x_bearing; /* left side of glyph from origin. */
126     hb_position_t y_bearing; /* top side of glyph from origin. */
127     hb_position_t width; /* distance from left to right side. */
128     hb_position_t height; /* distance from top to bottom side. */
129 }
130 
131 /* func types */
132 
133 alias hb_font_get_font_extents_func_t = int function (
134     hb_font_t* font,
135     void* font_data,
136     hb_font_extents_t* extents,
137     void* user_data);
138 alias hb_font_get_font_h_extents_func_t = int function ();
139 alias hb_font_get_font_v_extents_func_t = int function ();
140 
141 alias hb_font_get_nominal_glyph_func_t = int function (
142     hb_font_t* font,
143     void* font_data,
144     hb_codepoint_t unicode,
145     hb_codepoint_t* glyph,
146     void* user_data);
147 alias hb_font_get_variation_glyph_func_t = int function (
148     hb_font_t* font,
149     void* font_data,
150     hb_codepoint_t unicode,
151     hb_codepoint_t variation_selector,
152     hb_codepoint_t* glyph,
153     void* user_data);
154 
155 alias hb_font_get_nominal_glyphs_func_t = uint function (
156     hb_font_t* font,
157     void* font_data,
158     uint count,
159     const(hb_codepoint_t)* first_unicode,
160     uint unicode_stride,
161     hb_codepoint_t* first_glyph,
162     uint glyph_stride,
163     void* user_data);
164 
165 alias hb_font_get_glyph_advance_func_t = int function (
166     hb_font_t* font,
167     void* font_data,
168     hb_codepoint_t glyph,
169     void* user_data);
170 alias hb_font_get_glyph_h_advance_func_t = int function ();
171 alias hb_font_get_glyph_v_advance_func_t = int function ();
172 
173 alias hb_font_get_glyph_advances_func_t = void function (
174     hb_font_t* font,
175     void* font_data,
176     uint count,
177     const(hb_codepoint_t)* first_glyph,
178     uint glyph_stride,
179     hb_position_t* first_advance,
180     uint advance_stride,
181     void* user_data);
182 alias hb_font_get_glyph_h_advances_func_t = void function ();
183 alias hb_font_get_glyph_v_advances_func_t = void function ();
184 
185 alias hb_font_get_glyph_origin_func_t = int function (
186     hb_font_t* font,
187     void* font_data,
188     hb_codepoint_t glyph,
189     hb_position_t* x,
190     hb_position_t* y,
191     void* user_data);
192 alias hb_font_get_glyph_h_origin_func_t = int function ();
193 alias hb_font_get_glyph_v_origin_func_t = int function ();
194 
195 alias hb_font_get_glyph_kerning_func_t = int function (
196     hb_font_t* font,
197     void* font_data,
198     hb_codepoint_t first_glyph,
199     hb_codepoint_t second_glyph,
200     void* user_data);
201 alias hb_font_get_glyph_h_kerning_func_t = int function ();
202 
203 alias hb_font_get_glyph_extents_func_t = int function (
204     hb_font_t* font,
205     void* font_data,
206     hb_codepoint_t glyph,
207     hb_glyph_extents_t* extents,
208     void* user_data);
209 alias hb_font_get_glyph_contour_point_func_t = int function (
210     hb_font_t* font,
211     void* font_data,
212     hb_codepoint_t glyph,
213     uint point_index,
214     hb_position_t* x,
215     hb_position_t* y,
216     void* user_data);
217 
218 alias hb_font_get_glyph_name_func_t = int function (
219     hb_font_t* font,
220     void* font_data,
221     hb_codepoint_t glyph,
222     char* name,
223     uint size,
224     void* user_data);
225 
226 /* -1 means nul-terminated */
227 alias hb_font_get_glyph_from_name_func_t = int function (
228     hb_font_t* font,
229     void* font_data,
230     const(char)* name,
231     int len,
232     hb_codepoint_t* glyph,
233     void* user_data);
234 
235 /* func setters */
236 
237 /**
238  * hb_font_funcs_set_font_h_extents_func:
239  * @ffuncs: font functions.
240  * @func: (closure user_data) (destroy destroy) (scope notified):
241  * @user_data:
242  * @destroy:
243  *
244  *
245  *
246  * Since: 1.1.2
247  **/
248 version(BindHB_Static)
249     void hb_font_funcs_set_font_h_extents_func (
250         hb_font_funcs_t* ffuncs,
251         hb_font_get_font_h_extents_func_t func,
252         void* user_data,
253         hb_destroy_func_t destroy);
254 else
255 {
256     private alias fp_hb_font_funcs_set_font_h_extents_func = void function (
257         hb_font_funcs_t* ffuncs,
258         hb_font_get_font_h_extents_func_t func,
259         void* user_data,
260         hb_destroy_func_t destroy);
261     __gshared fp_hb_font_funcs_set_font_h_extents_func hb_font_funcs_set_font_h_extents_func;
262 }
263 
264 /**
265  * hb_font_funcs_set_font_v_extents_func:
266  * @ffuncs: font functions.
267  * @func: (closure user_data) (destroy destroy) (scope notified):
268  * @user_data:
269  * @destroy:
270  *
271  *
272  *
273  * Since: 1.1.2
274  **/
275 version(BindHB_Static)
276     void hb_font_funcs_set_font_v_extents_func (
277         hb_font_funcs_t* ffuncs,
278         hb_font_get_font_v_extents_func_t func,
279         void* user_data,
280         hb_destroy_func_t destroy);
281 else
282 {
283     private alias fp_hb_font_funcs_set_font_v_extents_func = void function (
284         hb_font_funcs_t* ffuncs,
285         hb_font_get_font_v_extents_func_t func,
286         void* user_data,
287         hb_destroy_func_t destroy);
288     __gshared fp_hb_font_funcs_set_font_v_extents_func hb_font_funcs_set_font_v_extents_func;
289 }
290 
291 /**
292  * hb_font_funcs_set_nominal_glyph_func:
293  * @ffuncs: font functions.
294  * @func: (closure user_data) (destroy destroy) (scope notified):
295  * @user_data:
296  * @destroy:
297  *
298  *
299  *
300  * Since: 1.2.3
301  **/
302 version(BindHB_Static)
303     void hb_font_funcs_set_nominal_glyph_func (
304         hb_font_funcs_t* ffuncs,
305         hb_font_get_nominal_glyph_func_t func,
306         void* user_data,
307         hb_destroy_func_t destroy);
308 else
309 {
310     private alias fp_hb_font_funcs_set_nominal_glyph_func = void function (
311         hb_font_funcs_t* ffuncs,
312         hb_font_get_nominal_glyph_func_t func,
313         void* user_data,
314         hb_destroy_func_t destroy);
315     __gshared fp_hb_font_funcs_set_nominal_glyph_func hb_font_funcs_set_nominal_glyph_func;
316 }
317 
318 static if (hbSupport >= 20000)
319 {
320 	/**
321 	 * hb_font_funcs_set_nominal_glyphs_func:
322 	 * @ffuncs: font functions.
323 	 * @func: (closure user_data) (destroy destroy) (scope notified):
324 	 * @user_data:
325 	 * @destroy:
326 	 *
327 	 *
328 	 *
329 	 * Since: 2.0.0
330 	 **/
331 	version(BindHB_Static)
332 		void hb_font_funcs_set_nominal_glyphs_func (
333 			hb_font_funcs_t* ffuncs,
334 			hb_font_get_nominal_glyphs_func_t func,
335 			void* user_data,
336 			hb_destroy_func_t destroy);
337 	else
338 	{
339 		private alias fp_hb_font_funcs_set_nominal_glyphs_func = void function (
340 			hb_font_funcs_t* ffuncs,
341 			hb_font_get_nominal_glyphs_func_t func,
342 			void* user_data,
343 			hb_destroy_func_t destroy);
344 		__gshared fp_hb_font_funcs_set_nominal_glyphs_func hb_font_funcs_set_nominal_glyphs_func;
345 	}
346 }
347 
348 /**
349  * hb_font_funcs_set_variation_glyph_func:
350  * @ffuncs: font functions.
351  * @func: (closure user_data) (destroy destroy) (scope notified):
352  * @user_data:
353  * @destroy:
354  *
355  *
356  *
357  * Since: 1.2.3
358  **/
359 version(BindHB_Static)
360     void hb_font_funcs_set_variation_glyph_func (
361         hb_font_funcs_t* ffuncs,
362         hb_font_get_variation_glyph_func_t func,
363         void* user_data,
364         hb_destroy_func_t destroy);
365 else
366 {
367     private alias fp_hb_font_funcs_set_variation_glyph_func = void function (
368         hb_font_funcs_t* ffuncs,
369         hb_font_get_variation_glyph_func_t func,
370         void* user_data,
371         hb_destroy_func_t destroy);
372     __gshared fp_hb_font_funcs_set_variation_glyph_func hb_font_funcs_set_variation_glyph_func;
373 }
374 
375 /**
376  * hb_font_funcs_set_glyph_h_advance_func:
377  * @ffuncs: font functions.
378  * @func: (closure user_data) (destroy destroy) (scope notified):
379  * @user_data:
380  * @destroy:
381  *
382  *
383  *
384  * Since: 0.9.2
385  **/
386 version(BindHB_Static)
387     void hb_font_funcs_set_glyph_h_advance_func (
388         hb_font_funcs_t* ffuncs,
389         hb_font_get_glyph_h_advance_func_t func,
390         void* user_data,
391         hb_destroy_func_t destroy);
392 else
393 {
394     private alias fp_hb_font_funcs_set_glyph_h_advance_func = void function (
395         hb_font_funcs_t* ffuncs,
396         hb_font_get_glyph_h_advance_func_t func,
397         void* user_data,
398         hb_destroy_func_t destroy);
399     __gshared fp_hb_font_funcs_set_glyph_h_advance_func hb_font_funcs_set_glyph_h_advance_func;
400 }
401 
402 /**
403  * hb_font_funcs_set_glyph_v_advance_func:
404  * @ffuncs: font functions.
405  * @func: (closure user_data) (destroy destroy) (scope notified):
406  * @user_data:
407  * @destroy:
408  *
409  *
410  *
411  * Since: 0.9.2
412  **/
413 version(BindHB_Static)
414     void hb_font_funcs_set_glyph_v_advance_func (
415         hb_font_funcs_t* ffuncs,
416         hb_font_get_glyph_v_advance_func_t func,
417         void* user_data,
418         hb_destroy_func_t destroy);
419 else
420 {
421     private alias fp_hb_font_funcs_set_glyph_v_advance_func = void function (
422         hb_font_funcs_t* ffuncs,
423         hb_font_get_glyph_v_advance_func_t func,
424         void* user_data,
425         hb_destroy_func_t destroy);
426     __gshared fp_hb_font_funcs_set_glyph_v_advance_func hb_font_funcs_set_glyph_v_advance_func;
427 }
428 
429 static if (hbSupport >= 10806)
430 {
431 	/**
432 	 * hb_font_funcs_set_glyph_h_advances_func:
433 	 * @ffuncs: font functions.
434 	 * @func: (closure user_data) (destroy destroy) (scope notified):
435 	 * @user_data:
436 	 * @destroy:
437 	 *
438 	 *
439 	 *
440 	 * Since: 1.8.6
441 	 **/
442 	version(BindHB_Static)
443 		void hb_font_funcs_set_glyph_h_advances_func (
444 			hb_font_funcs_t* ffuncs,
445 			hb_font_get_glyph_h_advances_func_t func,
446 			void* user_data,
447 			hb_destroy_func_t destroy);
448 	else
449 	{
450 		private alias fp_hb_font_funcs_set_glyph_h_advances_func = void function (
451 			hb_font_funcs_t* ffuncs,
452 			hb_font_get_glyph_h_advances_func_t func,
453 			void* user_data,
454 			hb_destroy_func_t destroy);
455 		__gshared fp_hb_font_funcs_set_glyph_h_advances_func hb_font_funcs_set_glyph_h_advances_func;
456 	}
457 
458 	/**
459 	 * hb_font_funcs_set_glyph_v_advances_func:
460 	 * @ffuncs: font functions.
461 	 * @func: (closure user_data) (destroy destroy) (scope notified):
462 	 * @user_data:
463 	 * @destroy:
464 	 *
465 	 *
466 	 *
467 	 * Since: 1.8.6
468 	 **/
469 	version(BindHB_Static)
470 		void hb_font_funcs_set_glyph_v_advances_func (
471 			hb_font_funcs_t* ffuncs,
472 			hb_font_get_glyph_v_advances_func_t func,
473 			void* user_data,
474 			hb_destroy_func_t destroy);
475 	else
476 	{
477 		private alias fp_hb_font_funcs_set_glyph_v_advances_func = void function (
478 			hb_font_funcs_t* ffuncs,
479 			hb_font_get_glyph_v_advances_func_t func,
480 			void* user_data,
481 			hb_destroy_func_t destroy);
482 		__gshared fp_hb_font_funcs_set_glyph_v_advances_func hb_font_funcs_set_glyph_v_advances_func;
483 	}
484 }
485 
486 /**
487  * hb_font_funcs_set_glyph_h_origin_func:
488  * @ffuncs: font functions.
489  * @func: (closure user_data) (destroy destroy) (scope notified):
490  * @user_data:
491  * @destroy:
492  *
493  *
494  *
495  * Since: 0.9.2
496  **/
497 version(BindHB_Static)
498     void hb_font_funcs_set_glyph_h_origin_func (
499         hb_font_funcs_t* ffuncs,
500         hb_font_get_glyph_h_origin_func_t func,
501         void* user_data,
502         hb_destroy_func_t destroy);
503 else
504 {
505     private alias fp_hb_font_funcs_set_glyph_h_origin_func = void function (
506         hb_font_funcs_t* ffuncs,
507         hb_font_get_glyph_h_origin_func_t func,
508         void* user_data,
509         hb_destroy_func_t destroy);
510     __gshared fp_hb_font_funcs_set_glyph_h_origin_func hb_font_funcs_set_glyph_h_origin_func;
511 }
512 
513 /**
514  * hb_font_funcs_set_glyph_v_origin_func:
515  * @ffuncs: font functions.
516  * @func: (closure user_data) (destroy destroy) (scope notified):
517  * @user_data:
518  * @destroy:
519  *
520  *
521  *
522  * Since: 0.9.2
523  **/
524 version(BindHB_Static)
525     void hb_font_funcs_set_glyph_v_origin_func (
526         hb_font_funcs_t* ffuncs,
527         hb_font_get_glyph_v_origin_func_t func,
528         void* user_data,
529         hb_destroy_func_t destroy);
530 else
531 {
532     private alias fp_hb_font_funcs_set_glyph_v_origin_func = void function (
533         hb_font_funcs_t* ffuncs,
534         hb_font_get_glyph_v_origin_func_t func,
535         void* user_data,
536         hb_destroy_func_t destroy);
537     __gshared fp_hb_font_funcs_set_glyph_v_origin_func hb_font_funcs_set_glyph_v_origin_func;
538 }
539 
540 /**
541  * hb_font_funcs_set_glyph_h_kerning_func:
542  * @ffuncs: font functions.
543  * @func: (closure user_data) (destroy destroy) (scope notified):
544  * @user_data:
545  * @destroy:
546  *
547  *
548  *
549  * Since: 0.9.2
550  **/
551 version(BindHB_Static)
552     void hb_font_funcs_set_glyph_h_kerning_func (
553         hb_font_funcs_t* ffuncs,
554         hb_font_get_glyph_h_kerning_func_t func,
555         void* user_data,
556         hb_destroy_func_t destroy);
557 else
558 {
559     private alias fp_hb_font_funcs_set_glyph_h_kerning_func = void function (
560         hb_font_funcs_t* ffuncs,
561         hb_font_get_glyph_h_kerning_func_t func,
562         void* user_data,
563         hb_destroy_func_t destroy);
564     __gshared fp_hb_font_funcs_set_glyph_h_kerning_func hb_font_funcs_set_glyph_h_kerning_func;
565 }
566 
567 /**
568  * hb_font_funcs_set_glyph_extents_func:
569  * @ffuncs: font functions.
570  * @func: (closure user_data) (destroy destroy) (scope notified):
571  * @user_data:
572  * @destroy:
573  *
574  *
575  *
576  * Since: 0.9.2
577  **/
578 version(BindHB_Static)
579     void hb_font_funcs_set_glyph_extents_func (
580         hb_font_funcs_t* ffuncs,
581         hb_font_get_glyph_extents_func_t func,
582         void* user_data,
583         hb_destroy_func_t destroy);
584 else
585 {
586     private alias fp_hb_font_funcs_set_glyph_extents_func = void function (
587         hb_font_funcs_t* ffuncs,
588         hb_font_get_glyph_extents_func_t func,
589         void* user_data,
590         hb_destroy_func_t destroy);
591     __gshared fp_hb_font_funcs_set_glyph_extents_func hb_font_funcs_set_glyph_extents_func;
592 }
593 
594 /**
595  * hb_font_funcs_set_glyph_contour_point_func:
596  * @ffuncs: font functions.
597  * @func: (closure user_data) (destroy destroy) (scope notified):
598  * @user_data:
599  * @destroy:
600  *
601  *
602  *
603  * Since: 0.9.2
604  **/
605 version(BindHB_Static)
606     void hb_font_funcs_set_glyph_contour_point_func (
607         hb_font_funcs_t* ffuncs,
608         hb_font_get_glyph_contour_point_func_t func,
609         void* user_data,
610         hb_destroy_func_t destroy);
611 else
612 {
613     private alias fp_hb_font_funcs_set_glyph_contour_point_func = void function (
614         hb_font_funcs_t* ffuncs,
615         hb_font_get_glyph_contour_point_func_t func,
616         void* user_data,
617         hb_destroy_func_t destroy);
618     __gshared fp_hb_font_funcs_set_glyph_contour_point_func hb_font_funcs_set_glyph_contour_point_func;
619 }
620 
621 /**
622  * hb_font_funcs_set_glyph_name_func:
623  * @ffuncs: font functions.
624  * @func: (closure user_data) (destroy destroy) (scope notified):
625  * @user_data:
626  * @destroy:
627  *
628  *
629  *
630  * Since: 0.9.2
631  **/
632 version(BindHB_Static)
633     void hb_font_funcs_set_glyph_name_func (
634         hb_font_funcs_t* ffuncs,
635         hb_font_get_glyph_name_func_t func,
636         void* user_data,
637         hb_destroy_func_t destroy);
638 else
639 {
640     private alias fp_hb_font_funcs_set_glyph_name_func = void function (
641         hb_font_funcs_t* ffuncs,
642         hb_font_get_glyph_name_func_t func,
643         void* user_data,
644         hb_destroy_func_t destroy);
645     __gshared fp_hb_font_funcs_set_glyph_name_func hb_font_funcs_set_glyph_name_func;
646 }
647 
648 /**
649  * hb_font_funcs_set_glyph_from_name_func:
650  * @ffuncs: font functions.
651  * @func: (closure user_data) (destroy destroy) (scope notified):
652  * @user_data:
653  * @destroy:
654  *
655  *
656  *
657  * Since: 0.9.2
658  **/
659 version(BindHB_Static)
660     void hb_font_funcs_set_glyph_from_name_func (
661         hb_font_funcs_t* ffuncs,
662         hb_font_get_glyph_from_name_func_t func,
663         void* user_data,
664         hb_destroy_func_t destroy);
665 else
666 {
667     private alias fp_hb_font_funcs_set_glyph_from_name_func = void function (
668         hb_font_funcs_t* ffuncs,
669         hb_font_get_glyph_from_name_func_t func,
670         void* user_data,
671         hb_destroy_func_t destroy);
672     __gshared fp_hb_font_funcs_set_glyph_from_name_func hb_font_funcs_set_glyph_from_name_func;
673 }
674 
675 /* func dispatch */
676 
677 version(BindHB_Static)
678     hb_bool_t hb_font_get_h_extents (hb_font_t* font, hb_font_extents_t* extents);
679 else
680 {
681     private alias fp_hb_font_get_h_extents = hb_bool_t function (hb_font_t* font, hb_font_extents_t* extents);
682     __gshared fp_hb_font_get_h_extents hb_font_get_h_extents;
683 }
684 version(BindHB_Static)
685     hb_bool_t hb_font_get_v_extents (hb_font_t* font, hb_font_extents_t* extents);
686 else
687 {
688     private alias fp_hb_font_get_v_extents = hb_bool_t function (hb_font_t* font, hb_font_extents_t* extents);
689     __gshared fp_hb_font_get_v_extents hb_font_get_v_extents;
690 }
691 
692 version(BindHB_Static)
693     hb_bool_t hb_font_get_nominal_glyph (
694         hb_font_t* font,
695         hb_codepoint_t unicode,
696         hb_codepoint_t* glyph);
697 else
698 {
699     private alias fp_hb_font_get_nominal_glyph = hb_bool_t function (
700         hb_font_t* font,
701         hb_codepoint_t unicode,
702         hb_codepoint_t* glyph);
703     __gshared fp_hb_font_get_nominal_glyph hb_font_get_nominal_glyph;
704 }
705 version(BindHB_Static)
706     hb_bool_t hb_font_get_variation_glyph (
707         hb_font_t* font,
708         hb_codepoint_t unicode,
709         hb_codepoint_t variation_selector,
710         hb_codepoint_t* glyph);
711 else
712 {
713     private alias fp_hb_font_get_variation_glyph = hb_bool_t function (
714         hb_font_t* font,
715         hb_codepoint_t unicode,
716         hb_codepoint_t variation_selector,
717         hb_codepoint_t* glyph);
718     __gshared fp_hb_font_get_variation_glyph hb_font_get_variation_glyph;
719 }
720 
721 static if (hbSupport >= HBSupport.v2_6_3)
722 {
723 	version(BindHB_Static)
724 		uint hb_font_get_nominal_glyphs (
725 			hb_font_t* font,
726 			uint count,
727 			const(hb_codepoint_t)* first_unicode,
728 			uint unicode_stride,
729 			hb_codepoint_t* first_glyph,
730 			uint glyph_stride);
731 	else
732 	{
733 		private alias fp_hb_font_get_nominal_glyphs = uint function (
734 			hb_font_t* font,
735 			uint count,
736 			const(hb_codepoint_t)* first_unicode,
737 			uint unicode_stride,
738 			hb_codepoint_t* first_glyph,
739 			uint glyph_stride);
740 		__gshared fp_hb_font_get_nominal_glyphs hb_font_get_nominal_glyphs;
741 	}
742 }
743 
744 version(BindHB_Static)
745     hb_position_t hb_font_get_glyph_h_advance (
746         hb_font_t* font,
747         hb_codepoint_t glyph);
748 else
749 {
750     private alias fp_hb_font_get_glyph_h_advance = hb_position_t function (
751         hb_font_t* font,
752         hb_codepoint_t glyph);
753     __gshared fp_hb_font_get_glyph_h_advance hb_font_get_glyph_h_advance;
754 }
755 version(BindHB_Static)
756     hb_position_t hb_font_get_glyph_v_advance (
757         hb_font_t* font,
758         hb_codepoint_t glyph);
759 else
760 {
761     private alias fp_hb_font_get_glyph_v_advance = hb_position_t function (
762         hb_font_t* font,
763         hb_codepoint_t glyph);
764     __gshared fp_hb_font_get_glyph_v_advance hb_font_get_glyph_v_advance;
765 }
766 
767 static if (hbSupport >= HBSupport.v2_6_3)
768 {
769 	version(BindHB_Static)
770 		void hb_font_get_glyph_h_advances (
771 			hb_font_t* font,
772 			uint count,
773 			const(hb_codepoint_t)* first_glyph,
774 			uint glyph_stride,
775 			hb_position_t* first_advance,
776 			uint advance_stride);
777 	else
778 	{
779 		private alias fp_hb_font_get_glyph_h_advances = void function (
780 			hb_font_t* font,
781 			uint count,
782 			const(hb_codepoint_t)* first_glyph,
783 			uint glyph_stride,
784 			hb_position_t* first_advance,
785 			uint advance_stride);
786 		__gshared fp_hb_font_get_glyph_h_advances hb_font_get_glyph_h_advances;
787 	}
788 	
789 	version(BindHB_Static)
790 		void hb_font_get_glyph_v_advances (
791 			hb_font_t* font,
792 			uint count,
793 			const(hb_codepoint_t)* first_glyph,
794 			uint glyph_stride,
795 			hb_position_t* first_advance,
796 			uint advance_stride);
797 	else
798 	{
799 		private alias fp_hb_font_get_glyph_v_advances = void function (
800 			hb_font_t* font,
801 			uint count,
802 			const(hb_codepoint_t)* first_glyph,
803 			uint glyph_stride,
804 			hb_position_t* first_advance,
805 			uint advance_stride);
806 		__gshared fp_hb_font_get_glyph_v_advances hb_font_get_glyph_v_advances;
807 	}
808 }
809 
810 version(BindHB_Static)
811     hb_bool_t hb_font_get_glyph_h_origin (
812         hb_font_t* font,
813         hb_codepoint_t glyph,
814         hb_position_t* x,
815         hb_position_t* y);
816 else
817 {
818     private alias fp_hb_font_get_glyph_h_origin = hb_bool_t function (
819         hb_font_t* font,
820         hb_codepoint_t glyph,
821         hb_position_t* x,
822         hb_position_t* y);
823     __gshared fp_hb_font_get_glyph_h_origin hb_font_get_glyph_h_origin;
824 }
825 version(BindHB_Static)
826     hb_bool_t hb_font_get_glyph_v_origin (
827         hb_font_t* font,
828         hb_codepoint_t glyph,
829         hb_position_t* x,
830         hb_position_t* y);
831 else
832 {
833     private alias fp_hb_font_get_glyph_v_origin = hb_bool_t function (
834         hb_font_t* font,
835         hb_codepoint_t glyph,
836         hb_position_t* x,
837         hb_position_t* y);
838     __gshared fp_hb_font_get_glyph_v_origin hb_font_get_glyph_v_origin;
839 }
840 
841 version(BindHB_Static)
842     hb_position_t hb_font_get_glyph_h_kerning (
843         hb_font_t* font,
844         hb_codepoint_t left_glyph,
845         hb_codepoint_t right_glyph);
846 else
847 {
848     private alias fp_hb_font_get_glyph_h_kerning = hb_position_t function (
849         hb_font_t* font,
850         hb_codepoint_t left_glyph,
851         hb_codepoint_t right_glyph);
852     __gshared fp_hb_font_get_glyph_h_kerning hb_font_get_glyph_h_kerning;
853 }
854 
855 version(BindHB_Static)
856     hb_bool_t hb_font_get_glyph_extents (
857         hb_font_t* font,
858         hb_codepoint_t glyph,
859         hb_glyph_extents_t* extents);
860 else
861 {
862     private alias fp_hb_font_get_glyph_extents = hb_bool_t function (
863         hb_font_t* font,
864         hb_codepoint_t glyph,
865         hb_glyph_extents_t* extents);
866     __gshared fp_hb_font_get_glyph_extents hb_font_get_glyph_extents;
867 }
868 
869 version(BindHB_Static)
870     hb_bool_t hb_font_get_glyph_contour_point (
871         hb_font_t* font,
872         hb_codepoint_t glyph,
873         uint point_index,
874         hb_position_t* x,
875         hb_position_t* y);
876 else
877 {
878     private alias fp_hb_font_get_glyph_contour_point = hb_bool_t function (
879         hb_font_t* font,
880         hb_codepoint_t glyph,
881         uint point_index,
882         hb_position_t* x,
883         hb_position_t* y);
884     __gshared fp_hb_font_get_glyph_contour_point hb_font_get_glyph_contour_point;
885 }
886 
887 version(BindHB_Static)
888     hb_bool_t hb_font_get_glyph_name (
889         hb_font_t* font,
890         hb_codepoint_t glyph,
891         char* name,
892         uint size);
893 else
894 {
895     private alias fp_hb_font_get_glyph_name = hb_bool_t function (
896         hb_font_t* font,
897         hb_codepoint_t glyph,
898         char* name,
899         uint size);
900     __gshared fp_hb_font_get_glyph_name hb_font_get_glyph_name;
901 }
902 
903 /* -1 means nul-terminated */
904 version(BindHB_Static)
905     hb_bool_t hb_font_get_glyph_from_name (
906         hb_font_t* font,
907         const(char)* name,
908         int len,
909         hb_codepoint_t* glyph);
910 else
911 {
912     private alias fp_hb_font_get_glyph_from_name = hb_bool_t function (
913         hb_font_t* font,
914         const(char)* name,
915         int len,
916         hb_codepoint_t* glyph);
917     __gshared fp_hb_font_get_glyph_from_name hb_font_get_glyph_from_name;
918 }
919 
920 /* high-level funcs, with fallback */
921 
922 /* Calls either hb_font_get_nominal_glyph() if variation_selector is 0,
923  * otherwise calls hb_font_get_variation_glyph(). */
924 version(BindHB_Static)
925     hb_bool_t hb_font_get_glyph (
926         hb_font_t* font,
927         hb_codepoint_t unicode,
928         hb_codepoint_t variation_selector,
929         hb_codepoint_t* glyph);
930 else
931 {
932     private alias fp_hb_font_get_glyph = hb_bool_t function (
933         hb_font_t* font,
934         hb_codepoint_t unicode,
935         hb_codepoint_t variation_selector,
936         hb_codepoint_t* glyph);
937     __gshared fp_hb_font_get_glyph hb_font_get_glyph;
938 }
939 
940 version(BindHB_Static)
941     void hb_font_get_extents_for_direction (
942         hb_font_t* font,
943         hb_direction_t direction,
944         hb_font_extents_t* extents);
945 else
946 {
947     private alias fp_hb_font_get_extents_for_direction = void function (
948         hb_font_t* font,
949         hb_direction_t direction,
950         hb_font_extents_t* extents);
951     __gshared fp_hb_font_get_extents_for_direction hb_font_get_extents_for_direction;
952 }
953 version(BindHB_Static)
954     void hb_font_get_glyph_advance_for_direction (
955         hb_font_t* font,
956         hb_codepoint_t glyph,
957         hb_direction_t direction,
958         hb_position_t* x,
959         hb_position_t* y);
960 else
961 {
962     private alias fp_hb_font_get_glyph_advance_for_direction = void function (
963         hb_font_t* font,
964         hb_codepoint_t glyph,
965         hb_direction_t direction,
966         hb_position_t* x,
967         hb_position_t* y);
968     __gshared fp_hb_font_get_glyph_advance_for_direction hb_font_get_glyph_advance_for_direction;
969 }
970 
971 static if (hbSupport >= HBSupport.v2_6_3)
972 {
973 	version(BindHB_Static)
974 		void hb_font_get_glyph_advances_for_direction (
975 			hb_font_t* font,
976 			hb_direction_t direction,
977 			uint count,
978 			const(hb_codepoint_t)* first_glyph,
979 			uint glyph_stride,
980 			hb_position_t* first_advance,
981 			uint advance_stride);
982 	else
983 	{
984 		private alias fp_hb_font_get_glyph_advances_for_direction = void function (
985 			hb_font_t* font,
986 			hb_direction_t direction,
987 			uint count,
988 			const(hb_codepoint_t)* first_glyph,
989 			uint glyph_stride,
990 			hb_position_t* first_advance,
991 			uint advance_stride);
992 		__gshared fp_hb_font_get_glyph_advances_for_direction hb_font_get_glyph_advances_for_direction;
993 	}
994 }
995 
996 version(BindHB_Static)
997     void hb_font_get_glyph_origin_for_direction (
998         hb_font_t* font,
999         hb_codepoint_t glyph,
1000         hb_direction_t direction,
1001         hb_position_t* x,
1002         hb_position_t* y);
1003 else
1004 {
1005     private alias fp_hb_font_get_glyph_origin_for_direction = void function (
1006         hb_font_t* font,
1007         hb_codepoint_t glyph,
1008         hb_direction_t direction,
1009         hb_position_t* x,
1010         hb_position_t* y);
1011     __gshared fp_hb_font_get_glyph_origin_for_direction hb_font_get_glyph_origin_for_direction;
1012 }
1013 version(BindHB_Static)
1014     void hb_font_add_glyph_origin_for_direction (
1015         hb_font_t* font,
1016         hb_codepoint_t glyph,
1017         hb_direction_t direction,
1018         hb_position_t* x,
1019         hb_position_t* y);
1020 else
1021 {
1022     private alias fp_hb_font_add_glyph_origin_for_direction = void function (
1023         hb_font_t* font,
1024         hb_codepoint_t glyph,
1025         hb_direction_t direction,
1026         hb_position_t* x,
1027         hb_position_t* y);
1028     __gshared fp_hb_font_add_glyph_origin_for_direction hb_font_add_glyph_origin_for_direction;
1029 }
1030 version(BindHB_Static)
1031     void hb_font_subtract_glyph_origin_for_direction (
1032         hb_font_t* font,
1033         hb_codepoint_t glyph,
1034         hb_direction_t direction,
1035         hb_position_t* x,
1036         hb_position_t* y);
1037 else
1038 {
1039     private alias fp_hb_font_subtract_glyph_origin_for_direction = void function (
1040         hb_font_t* font,
1041         hb_codepoint_t glyph,
1042         hb_direction_t direction,
1043         hb_position_t* x,
1044         hb_position_t* y);
1045     __gshared fp_hb_font_subtract_glyph_origin_for_direction hb_font_subtract_glyph_origin_for_direction;
1046 }
1047 
1048 version(BindHB_Static)
1049     void hb_font_get_glyph_kerning_for_direction (
1050         hb_font_t* font,
1051         hb_codepoint_t first_glyph,
1052         hb_codepoint_t second_glyph,
1053         hb_direction_t direction,
1054         hb_position_t* x,
1055         hb_position_t* y);
1056 else
1057 {
1058     private alias fp_hb_font_get_glyph_kerning_for_direction = void function (
1059         hb_font_t* font,
1060         hb_codepoint_t first_glyph,
1061         hb_codepoint_t second_glyph,
1062         hb_direction_t direction,
1063         hb_position_t* x,
1064         hb_position_t* y);
1065     __gshared fp_hb_font_get_glyph_kerning_for_direction hb_font_get_glyph_kerning_for_direction;
1066 }
1067 
1068 version(BindHB_Static)
1069     hb_bool_t hb_font_get_glyph_extents_for_origin (
1070         hb_font_t* font,
1071         hb_codepoint_t glyph,
1072         hb_direction_t direction,
1073         hb_glyph_extents_t* extents);
1074 else
1075 {
1076     private alias fp_hb_font_get_glyph_extents_for_origin = hb_bool_t function (
1077         hb_font_t* font,
1078         hb_codepoint_t glyph,
1079         hb_direction_t direction,
1080         hb_glyph_extents_t* extents);
1081     __gshared fp_hb_font_get_glyph_extents_for_origin hb_font_get_glyph_extents_for_origin;
1082 }
1083 
1084 version(BindHB_Static)
1085     hb_bool_t hb_font_get_glyph_contour_point_for_origin (
1086         hb_font_t* font,
1087         hb_codepoint_t glyph,
1088         uint point_index,
1089         hb_direction_t direction,
1090         hb_position_t* x,
1091         hb_position_t* y);
1092 else
1093 {
1094     private alias fp_hb_font_get_glyph_contour_point_for_origin = hb_bool_t function (
1095         hb_font_t* font,
1096         hb_codepoint_t glyph,
1097         uint point_index,
1098         hb_direction_t direction,
1099         hb_position_t* x,
1100         hb_position_t* y);
1101     __gshared fp_hb_font_get_glyph_contour_point_for_origin hb_font_get_glyph_contour_point_for_origin;
1102 }
1103 
1104 /* Generates gidDDD if glyph has no name. */
1105 version(BindHB_Static)
1106     void hb_font_glyph_to_string (
1107         hb_font_t* font,
1108         hb_codepoint_t glyph,
1109         char* s,
1110         uint size);
1111 else
1112 {
1113     private alias fp_hb_font_glyph_to_string = void function (
1114         hb_font_t* font,
1115         hb_codepoint_t glyph,
1116         char* s,
1117         uint size);
1118     __gshared fp_hb_font_glyph_to_string hb_font_glyph_to_string;
1119 }
1120 /* Parses gidDDD and uniUUUU strings automatically. */
1121 
1122 /* -1 means nul-terminated */
1123 version(BindHB_Static)
1124     hb_bool_t hb_font_glyph_from_string (
1125         hb_font_t* font,
1126         const(char)* s,
1127         int len,
1128         hb_codepoint_t* glyph);
1129 else
1130 {
1131     private alias fp_hb_font_glyph_from_string = hb_bool_t function (
1132         hb_font_t* font,
1133         const(char)* s,
1134         int len,
1135         hb_codepoint_t* glyph);
1136     __gshared fp_hb_font_glyph_from_string hb_font_glyph_from_string;
1137 }
1138 
1139 /*
1140  * hb_font_t
1141  */
1142 
1143 /* Fonts are very light-weight objects */
1144 
1145 version(BindHB_Static)
1146     hb_font_t* hb_font_create (hb_face_t* face);
1147 else
1148 {
1149     private alias fp_hb_font_create = hb_font_t* function (hb_face_t* face);
1150     __gshared fp_hb_font_create hb_font_create;
1151 }
1152 
1153 version(BindHB_Static)
1154     hb_font_t* hb_font_create_sub_font (hb_font_t* parent);
1155 else
1156 {
1157     private alias fp_hb_font_create_sub_font = hb_font_t* function (hb_font_t* parent);
1158     __gshared fp_hb_font_create_sub_font hb_font_create_sub_font;
1159 }
1160 
1161 version(BindHB_Static)
1162     hb_font_t* hb_font_get_empty ();
1163 else
1164 {
1165     private alias fp_hb_font_get_empty = hb_font_t* function ();
1166     __gshared fp_hb_font_get_empty hb_font_get_empty;
1167 }
1168 
1169 version(BindHB_Static)
1170     hb_font_t* hb_font_reference (hb_font_t* font);
1171 else
1172 {
1173     private alias fp_hb_font_reference = hb_font_t* function (hb_font_t* font);
1174     __gshared fp_hb_font_reference hb_font_reference;
1175 }
1176 
1177 version(BindHB_Static)
1178     void hb_font_destroy (hb_font_t* font);
1179 else
1180 {
1181     private alias fp_hb_font_destroy = void function (hb_font_t* font);
1182     __gshared fp_hb_font_destroy hb_font_destroy;
1183 }
1184 
1185 version(BindHB_Static)
1186     hb_bool_t hb_font_set_user_data (
1187         hb_font_t* font,
1188         hb_user_data_key_t* key,
1189         void* data,
1190         hb_destroy_func_t destroy,
1191         hb_bool_t replace);
1192 else
1193 {
1194     private alias fp_hb_font_set_user_data = hb_bool_t function (
1195         hb_font_t* font,
1196         hb_user_data_key_t* key,
1197         void* data,
1198         hb_destroy_func_t destroy,
1199         hb_bool_t replace);
1200     __gshared fp_hb_font_set_user_data hb_font_set_user_data;
1201 }
1202 
1203 version(BindHB_Static)
1204     void* hb_font_get_user_data (hb_font_t* font, hb_user_data_key_t* key);
1205 else
1206 {
1207     private alias fp_hb_font_get_user_data = void* function (hb_font_t* font, hb_user_data_key_t* key);
1208     __gshared fp_hb_font_get_user_data hb_font_get_user_data;
1209 }
1210 
1211 version(BindHB_Static)
1212     void hb_font_make_immutable (hb_font_t* font);
1213 else
1214 {
1215     private alias fp_hb_font_make_immutable = void function (hb_font_t* font);
1216     __gshared fp_hb_font_make_immutable hb_font_make_immutable;
1217 }
1218 
1219 version(BindHB_Static)
1220     hb_bool_t hb_font_is_immutable (hb_font_t* font);
1221 else
1222 {
1223     private alias fp_hb_font_is_immutable = hb_bool_t function (hb_font_t* font);
1224     __gshared fp_hb_font_is_immutable hb_font_is_immutable;
1225 }
1226 
1227 version(BindHB_Static)
1228     void hb_font_set_parent (hb_font_t* font, hb_font_t* parent);
1229 else
1230 {
1231     private alias fp_hb_font_set_parent = void function (hb_font_t* font, hb_font_t* parent);
1232     __gshared fp_hb_font_set_parent hb_font_set_parent;
1233 }
1234 
1235 version(BindHB_Static)
1236     hb_font_t* hb_font_get_parent (hb_font_t* font);
1237 else
1238 {
1239     private alias fp_hb_font_get_parent = hb_font_t* function (hb_font_t* font);
1240     __gshared fp_hb_font_get_parent hb_font_get_parent;
1241 }
1242 
1243 version(BindHB_Static)
1244     void hb_font_set_face (hb_font_t* font, hb_face_t* face);
1245 else
1246 {
1247     private alias fp_hb_font_set_face = void function (hb_font_t* font, hb_face_t* face);
1248     __gshared fp_hb_font_set_face hb_font_set_face;
1249 }
1250 
1251 version(BindHB_Static)
1252     hb_face_t* hb_font_get_face (hb_font_t* font);
1253 else
1254 {
1255     private alias fp_hb_font_get_face = hb_face_t* function (hb_font_t* font);
1256     __gshared fp_hb_font_get_face hb_font_get_face;
1257 }
1258 
1259 version(BindHB_Static)
1260     void hb_font_set_funcs (
1261         hb_font_t* font,
1262         hb_font_funcs_t* klass,
1263         void* font_data,
1264         hb_destroy_func_t destroy);
1265 else
1266 {
1267     private alias fp_hb_font_set_funcs = void function (
1268         hb_font_t* font,
1269         hb_font_funcs_t* klass,
1270         void* font_data,
1271         hb_destroy_func_t destroy);
1272     __gshared fp_hb_font_set_funcs hb_font_set_funcs;
1273 }
1274 
1275 /* Be *very* careful with this function! */
1276 version(BindHB_Static)
1277     void hb_font_set_funcs_data (
1278         hb_font_t* font,
1279         void* font_data,
1280         hb_destroy_func_t destroy);
1281 else
1282 {
1283     private alias fp_hb_font_set_funcs_data = void function (
1284         hb_font_t* font,
1285         void* font_data,
1286         hb_destroy_func_t destroy);
1287     __gshared fp_hb_font_set_funcs_data hb_font_set_funcs_data;
1288 }
1289 
1290 version(BindHB_Static)
1291     void hb_font_set_scale (hb_font_t* font, int x_scale, int y_scale);
1292 else
1293 {
1294     private alias fp_hb_font_set_scale = void function (hb_font_t* font, int x_scale, int y_scale);
1295     __gshared fp_hb_font_set_scale hb_font_set_scale;
1296 }
1297 
1298 version(BindHB_Static)
1299     void hb_font_get_scale (hb_font_t* font, int* x_scale, int* y_scale);
1300 else
1301 {
1302     private alias fp_hb_font_get_scale = void function (hb_font_t* font, int* x_scale, int* y_scale);
1303     __gshared fp_hb_font_get_scale hb_font_get_scale;
1304 }
1305 
1306 /*
1307  * A zero value means "no hinting in that direction"
1308  */
1309 version(BindHB_Static)
1310     void hb_font_set_ppem (hb_font_t* font, uint x_ppem, uint y_ppem);
1311 else
1312 {
1313     private alias fp_hb_font_set_ppem = void function (hb_font_t* font, uint x_ppem, uint y_ppem);
1314     __gshared fp_hb_font_set_ppem hb_font_set_ppem;
1315 }
1316 
1317 version(BindHB_Static)
1318     void hb_font_get_ppem (hb_font_t* font, uint* x_ppem, uint* y_ppem);
1319 else
1320 {
1321     private alias fp_hb_font_get_ppem = void function (hb_font_t* font, uint* x_ppem, uint* y_ppem);
1322     __gshared fp_hb_font_get_ppem hb_font_get_ppem;
1323 }
1324 
1325 /*
1326  * Point size per EM.  Used for optical-sizing in CoreText.
1327  * A value of zero means "not set".
1328  */
1329 version(BindHB_Static)
1330     void hb_font_set_ptem (hb_font_t* font, float ptem);
1331 else
1332 {
1333     private alias fp_hb_font_set_ptem = void function (hb_font_t* font, float ptem);
1334     __gshared fp_hb_font_set_ptem hb_font_set_ptem;
1335 }
1336 
1337 version(BindHB_Static)
1338     float hb_font_get_ptem (hb_font_t* font);
1339 else
1340 {
1341     private alias fp_hb_font_get_ptem = float function (hb_font_t* font);
1342     __gshared fp_hb_font_get_ptem hb_font_get_ptem;
1343 }
1344 
1345 version(BindHB_Static)
1346     void hb_font_set_variations (
1347         hb_font_t* font,
1348         const(hb_variation_t)* variations,
1349         uint variations_length);
1350 else
1351 {
1352     private alias fp_hb_font_set_variations = void function (
1353         hb_font_t* font,
1354         const(hb_variation_t)* variations,
1355         uint variations_length);
1356     __gshared fp_hb_font_set_variations hb_font_set_variations;
1357 }
1358 
1359 version(BindHB_Static)
1360     void hb_font_set_var_coords_design (
1361         hb_font_t* font,
1362         const(float)* coords,
1363         uint coords_length);
1364 else
1365 {
1366     private alias fp_hb_font_set_var_coords_design = void function (
1367         hb_font_t* font,
1368         const(float)* coords,
1369         uint coords_length);
1370     __gshared fp_hb_font_set_var_coords_design hb_font_set_var_coords_design;
1371 }
1372 
1373 /* 2.14 normalized */
1374 version(BindHB_Static)
1375     void hb_font_set_var_coords_normalized (
1376         hb_font_t* font,
1377         const(int)* coords,
1378         uint coords_length);
1379 else
1380 {
1381     private alias fp_hb_font_set_var_coords_normalized = void function (
1382         hb_font_t* font,
1383         const(int)* coords,
1384         uint coords_length);
1385     __gshared fp_hb_font_set_var_coords_normalized hb_font_set_var_coords_normalized;
1386 }
1387 
1388 version(BindHB_Static)
1389     const(int)* hb_font_get_var_coords_normalized (hb_font_t* font, uint* length);
1390 else
1391 {
1392     private alias fp_hb_font_get_var_coords_normalized = const(int)* function (hb_font_t* font, uint* length);
1393     __gshared fp_hb_font_get_var_coords_normalized hb_font_get_var_coords_normalized;
1394 }
1395 
1396 static if (hbSupport >= HBSupport.v2_6_3)
1397 {
1398 	version(BindHB_Static)
1399 		void hb_font_set_var_named_instance (hb_font_t* font, uint instance_index);
1400 	else
1401 	{
1402 		private alias fp_hb_font_set_var_named_instance = void function (hb_font_t* font, uint instance_index);
1403 		__gshared fp_hb_font_set_var_named_instance hb_font_set_var_named_instance;
1404 	}
1405 }