xref: /aosp_15_r20/external/harfbuzz_ng/src/hb-ot-layout.h (revision 2d1272b857b1f7575e6e246373e1cb218663db8a)
1*2d1272b8SAndroid Build Coastguard Worker /*
2*2d1272b8SAndroid Build Coastguard Worker  * Copyright © 2007,2008,2009  Red Hat, Inc.
3*2d1272b8SAndroid Build Coastguard Worker  *
4*2d1272b8SAndroid Build Coastguard Worker  *  This is part of HarfBuzz, a text shaping library.
5*2d1272b8SAndroid Build Coastguard Worker  *
6*2d1272b8SAndroid Build Coastguard Worker  * Permission is hereby granted, without written agreement and without
7*2d1272b8SAndroid Build Coastguard Worker  * license or royalty fees, to use, copy, modify, and distribute this
8*2d1272b8SAndroid Build Coastguard Worker  * software and its documentation for any purpose, provided that the
9*2d1272b8SAndroid Build Coastguard Worker  * above copyright notice and the following two paragraphs appear in
10*2d1272b8SAndroid Build Coastguard Worker  * all copies of this software.
11*2d1272b8SAndroid Build Coastguard Worker  *
12*2d1272b8SAndroid Build Coastguard Worker  * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13*2d1272b8SAndroid Build Coastguard Worker  * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14*2d1272b8SAndroid Build Coastguard Worker  * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15*2d1272b8SAndroid Build Coastguard Worker  * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16*2d1272b8SAndroid Build Coastguard Worker  * DAMAGE.
17*2d1272b8SAndroid Build Coastguard Worker  *
18*2d1272b8SAndroid Build Coastguard Worker  * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19*2d1272b8SAndroid Build Coastguard Worker  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20*2d1272b8SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
21*2d1272b8SAndroid Build Coastguard Worker  * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22*2d1272b8SAndroid Build Coastguard Worker  * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23*2d1272b8SAndroid Build Coastguard Worker  *
24*2d1272b8SAndroid Build Coastguard Worker  * Red Hat Author(s): Behdad Esfahbod
25*2d1272b8SAndroid Build Coastguard Worker  */
26*2d1272b8SAndroid Build Coastguard Worker 
27*2d1272b8SAndroid Build Coastguard Worker #if !defined(HB_OT_H_IN) && !defined(HB_NO_SINGLE_HEADER_ERROR)
28*2d1272b8SAndroid Build Coastguard Worker #error "Include <hb-ot.h> instead."
29*2d1272b8SAndroid Build Coastguard Worker #endif
30*2d1272b8SAndroid Build Coastguard Worker 
31*2d1272b8SAndroid Build Coastguard Worker #ifndef HB_OT_LAYOUT_H
32*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_H
33*2d1272b8SAndroid Build Coastguard Worker 
34*2d1272b8SAndroid Build Coastguard Worker #include "hb.h"
35*2d1272b8SAndroid Build Coastguard Worker 
36*2d1272b8SAndroid Build Coastguard Worker #include "hb-ot-name.h"
37*2d1272b8SAndroid Build Coastguard Worker 
38*2d1272b8SAndroid Build Coastguard Worker HB_BEGIN_DECLS
39*2d1272b8SAndroid Build Coastguard Worker 
40*2d1272b8SAndroid Build Coastguard Worker 
41*2d1272b8SAndroid Build Coastguard Worker /**
42*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_BASE:
43*2d1272b8SAndroid Build Coastguard Worker  *
44*2d1272b8SAndroid Build Coastguard Worker  * OpenType [Baseline Table](https://docs.microsoft.com/en-us/typography/opentype/spec/base).
45*2d1272b8SAndroid Build Coastguard Worker  */
46*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_BASE HB_TAG('B','A','S','E')
47*2d1272b8SAndroid Build Coastguard Worker /**
48*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_GDEF:
49*2d1272b8SAndroid Build Coastguard Worker  *
50*2d1272b8SAndroid Build Coastguard Worker  * OpenType [Glyph Definition Table](https://docs.microsoft.com/en-us/typography/opentype/spec/gdef).
51*2d1272b8SAndroid Build Coastguard Worker  */
52*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
53*2d1272b8SAndroid Build Coastguard Worker /**
54*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_GSUB:
55*2d1272b8SAndroid Build Coastguard Worker  *
56*2d1272b8SAndroid Build Coastguard Worker  * OpenType [Glyph Substitution Table](https://docs.microsoft.com/en-us/typography/opentype/spec/gsub).
57*2d1272b8SAndroid Build Coastguard Worker  */
58*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
59*2d1272b8SAndroid Build Coastguard Worker /**
60*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_GPOS:
61*2d1272b8SAndroid Build Coastguard Worker  *
62*2d1272b8SAndroid Build Coastguard Worker  * OpenType [Glyph Positioning Table](https://docs.microsoft.com/en-us/typography/opentype/spec/gpos).
63*2d1272b8SAndroid Build Coastguard Worker  */
64*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
65*2d1272b8SAndroid Build Coastguard Worker /**
66*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_JSTF:
67*2d1272b8SAndroid Build Coastguard Worker  *
68*2d1272b8SAndroid Build Coastguard Worker  * OpenType [Justification Table](https://docs.microsoft.com/en-us/typography/opentype/spec/jstf).
69*2d1272b8SAndroid Build Coastguard Worker  */
70*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
71*2d1272b8SAndroid Build Coastguard Worker 
72*2d1272b8SAndroid Build Coastguard Worker 
73*2d1272b8SAndroid Build Coastguard Worker /*
74*2d1272b8SAndroid Build Coastguard Worker  * Script & Language tags.
75*2d1272b8SAndroid Build Coastguard Worker  */
76*2d1272b8SAndroid Build Coastguard Worker 
77*2d1272b8SAndroid Build Coastguard Worker /**
78*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_DEFAULT_SCRIPT:
79*2d1272b8SAndroid Build Coastguard Worker  *
80*2d1272b8SAndroid Build Coastguard Worker  * OpenType script tag, `DFLT`, for features that are not script-specific.
81*2d1272b8SAndroid Build Coastguard Worker  *
82*2d1272b8SAndroid Build Coastguard Worker  */
83*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_DEFAULT_SCRIPT	HB_TAG ('D', 'F', 'L', 'T')
84*2d1272b8SAndroid Build Coastguard Worker /**
85*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_TAG_DEFAULT_LANGUAGE:
86*2d1272b8SAndroid Build Coastguard Worker  *
87*2d1272b8SAndroid Build Coastguard Worker  * OpenType language tag, `dflt`. Not a valid language tag, but some fonts
88*2d1272b8SAndroid Build Coastguard Worker  * mistakenly use it.
89*2d1272b8SAndroid Build Coastguard Worker  */
90*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_TAG_DEFAULT_LANGUAGE	HB_TAG ('d', 'f', 'l', 't')
91*2d1272b8SAndroid Build Coastguard Worker 
92*2d1272b8SAndroid Build Coastguard Worker /**
93*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_MAX_TAGS_PER_SCRIPT:
94*2d1272b8SAndroid Build Coastguard Worker  *
95*2d1272b8SAndroid Build Coastguard Worker  * Maximum number of OpenType tags that can correspond to a give #hb_script_t.
96*2d1272b8SAndroid Build Coastguard Worker  *
97*2d1272b8SAndroid Build Coastguard Worker  * Since: 2.0.0
98*2d1272b8SAndroid Build Coastguard Worker  **/
99*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_MAX_TAGS_PER_SCRIPT	3u
100*2d1272b8SAndroid Build Coastguard Worker /**
101*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_MAX_TAGS_PER_LANGUAGE:
102*2d1272b8SAndroid Build Coastguard Worker  *
103*2d1272b8SAndroid Build Coastguard Worker  * Maximum number of OpenType tags that can correspond to a give #hb_language_t.
104*2d1272b8SAndroid Build Coastguard Worker  *
105*2d1272b8SAndroid Build Coastguard Worker  * Since: 2.0.0
106*2d1272b8SAndroid Build Coastguard Worker  **/
107*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_MAX_TAGS_PER_LANGUAGE	3u
108*2d1272b8SAndroid Build Coastguard Worker 
109*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
110*2d1272b8SAndroid Build Coastguard Worker hb_ot_tags_from_script_and_language (hb_script_t   script,
111*2d1272b8SAndroid Build Coastguard Worker 				     hb_language_t language,
112*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int *script_count /* IN/OUT */,
113*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t     *script_tags /* OUT */,
114*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int *language_count /* IN/OUT */,
115*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t     *language_tags /* OUT */);
116*2d1272b8SAndroid Build Coastguard Worker 
117*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_script_t
118*2d1272b8SAndroid Build Coastguard Worker hb_ot_tag_to_script (hb_tag_t tag);
119*2d1272b8SAndroid Build Coastguard Worker 
120*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_language_t
121*2d1272b8SAndroid Build Coastguard Worker hb_ot_tag_to_language (hb_tag_t tag);
122*2d1272b8SAndroid Build Coastguard Worker 
123*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
124*2d1272b8SAndroid Build Coastguard Worker hb_ot_tags_to_script_and_language (hb_tag_t       script_tag,
125*2d1272b8SAndroid Build Coastguard Worker 				   hb_tag_t       language_tag,
126*2d1272b8SAndroid Build Coastguard Worker 				   hb_script_t   *script /* OUT */,
127*2d1272b8SAndroid Build Coastguard Worker 				   hb_language_t *language /* OUT */);
128*2d1272b8SAndroid Build Coastguard Worker 
129*2d1272b8SAndroid Build Coastguard Worker 
130*2d1272b8SAndroid Build Coastguard Worker /*
131*2d1272b8SAndroid Build Coastguard Worker  * GDEF
132*2d1272b8SAndroid Build Coastguard Worker  */
133*2d1272b8SAndroid Build Coastguard Worker 
134*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
135*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_has_glyph_classes (hb_face_t *face);
136*2d1272b8SAndroid Build Coastguard Worker 
137*2d1272b8SAndroid Build Coastguard Worker /**
138*2d1272b8SAndroid Build Coastguard Worker  * hb_ot_layout_glyph_class_t:
139*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED: Glyphs not matching the other classifications
140*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH: Spacing, single characters, capable of accepting marks
141*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE: Glyphs that represent ligation of multiple characters
142*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_GLYPH_CLASS_MARK: Non-spacing, combining glyphs that represent marks
143*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT: Spacing glyphs that represent part of a single character
144*2d1272b8SAndroid Build Coastguard Worker  *
145*2d1272b8SAndroid Build Coastguard Worker  * The GDEF classes defined for glyphs.
146*2d1272b8SAndroid Build Coastguard Worker  *
147*2d1272b8SAndroid Build Coastguard Worker  **/
148*2d1272b8SAndroid Build Coastguard Worker typedef enum {
149*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED	= 0,
150*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH	= 1,
151*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE	= 2,
152*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_GLYPH_CLASS_MARK		= 3,
153*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT	= 4
154*2d1272b8SAndroid Build Coastguard Worker } hb_ot_layout_glyph_class_t;
155*2d1272b8SAndroid Build Coastguard Worker 
156*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_ot_layout_glyph_class_t
157*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_glyph_class (hb_face_t      *face,
158*2d1272b8SAndroid Build Coastguard Worker 			      hb_codepoint_t  glyph);
159*2d1272b8SAndroid Build Coastguard Worker 
160*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
161*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_glyphs_in_class (hb_face_t                  *face,
162*2d1272b8SAndroid Build Coastguard Worker 				  hb_ot_layout_glyph_class_t  klass,
163*2d1272b8SAndroid Build Coastguard Worker 				  hb_set_t                   *glyphs /* OUT */);
164*2d1272b8SAndroid Build Coastguard Worker 
165*2d1272b8SAndroid Build Coastguard Worker /* Not that useful.  Provides list of attach points for a glyph that a
166*2d1272b8SAndroid Build Coastguard Worker  * client may want to cache */
167*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
168*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_attach_points (hb_face_t      *face,
169*2d1272b8SAndroid Build Coastguard Worker 				hb_codepoint_t  glyph,
170*2d1272b8SAndroid Build Coastguard Worker 				unsigned int    start_offset,
171*2d1272b8SAndroid Build Coastguard Worker 				unsigned int   *point_count /* IN/OUT */,
172*2d1272b8SAndroid Build Coastguard Worker 				unsigned int   *point_array /* OUT */);
173*2d1272b8SAndroid Build Coastguard Worker 
174*2d1272b8SAndroid Build Coastguard Worker /* Ligature caret positions */
175*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
176*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_ligature_carets (hb_font_t      *font,
177*2d1272b8SAndroid Build Coastguard Worker 				  hb_direction_t  direction,
178*2d1272b8SAndroid Build Coastguard Worker 				  hb_codepoint_t  glyph,
179*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int    start_offset,
180*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int   *caret_count /* IN/OUT */,
181*2d1272b8SAndroid Build Coastguard Worker 				  hb_position_t  *caret_array /* OUT */);
182*2d1272b8SAndroid Build Coastguard Worker 
183*2d1272b8SAndroid Build Coastguard Worker 
184*2d1272b8SAndroid Build Coastguard Worker /*
185*2d1272b8SAndroid Build Coastguard Worker  * GSUB/GPOS feature query and enumeration interface
186*2d1272b8SAndroid Build Coastguard Worker  */
187*2d1272b8SAndroid Build Coastguard Worker 
188*2d1272b8SAndroid Build Coastguard Worker /**
189*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_LAYOUT_NO_SCRIPT_INDEX:
190*2d1272b8SAndroid Build Coastguard Worker  *
191*2d1272b8SAndroid Build Coastguard Worker  * Special value for script index indicating unsupported script.
192*2d1272b8SAndroid Build Coastguard Worker  */
193*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_NO_SCRIPT_INDEX		0xFFFFu
194*2d1272b8SAndroid Build Coastguard Worker /**
195*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_LAYOUT_NO_FEATURE_INDEX:
196*2d1272b8SAndroid Build Coastguard Worker  *
197*2d1272b8SAndroid Build Coastguard Worker  * Special value for feature index indicating unsupported feature.
198*2d1272b8SAndroid Build Coastguard Worker  */
199*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_NO_FEATURE_INDEX		0xFFFFu
200*2d1272b8SAndroid Build Coastguard Worker /**
201*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX:
202*2d1272b8SAndroid Build Coastguard Worker  *
203*2d1272b8SAndroid Build Coastguard Worker  * Special value for language index indicating default or unsupported language.
204*2d1272b8SAndroid Build Coastguard Worker  */
205*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX	0xFFFFu
206*2d1272b8SAndroid Build Coastguard Worker /**
207*2d1272b8SAndroid Build Coastguard Worker  * HB_OT_LAYOUT_NO_VARIATIONS_INDEX:
208*2d1272b8SAndroid Build Coastguard Worker  *
209*2d1272b8SAndroid Build Coastguard Worker  * Special value for variations index indicating unsupported variation.
210*2d1272b8SAndroid Build Coastguard Worker  */
211*2d1272b8SAndroid Build Coastguard Worker #define HB_OT_LAYOUT_NO_VARIATIONS_INDEX	0xFFFFFFFFu
212*2d1272b8SAndroid Build Coastguard Worker 
213*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
214*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_get_script_tags (hb_face_t    *face,
215*2d1272b8SAndroid Build Coastguard Worker 				    hb_tag_t      table_tag,
216*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int  start_offset,
217*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int *script_count /* IN/OUT */,
218*2d1272b8SAndroid Build Coastguard Worker 				    hb_tag_t     *script_tags /* OUT */);
219*2d1272b8SAndroid Build Coastguard Worker 
220*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
221*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_find_script (hb_face_t    *face,
222*2d1272b8SAndroid Build Coastguard Worker 				hb_tag_t      table_tag,
223*2d1272b8SAndroid Build Coastguard Worker 				hb_tag_t      script_tag,
224*2d1272b8SAndroid Build Coastguard Worker 				unsigned int *script_index /* OUT */);
225*2d1272b8SAndroid Build Coastguard Worker 
226*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
227*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_select_script (hb_face_t      *face,
228*2d1272b8SAndroid Build Coastguard Worker 				  hb_tag_t        table_tag,
229*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int    script_count,
230*2d1272b8SAndroid Build Coastguard Worker 				  const hb_tag_t *script_tags,
231*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int   *script_index /* OUT */,
232*2d1272b8SAndroid Build Coastguard Worker 				  hb_tag_t       *chosen_script /* OUT */);
233*2d1272b8SAndroid Build Coastguard Worker 
234*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
235*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_get_feature_tags (hb_face_t    *face,
236*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t      table_tag,
237*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int  start_offset,
238*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int *feature_count /* IN/OUT */,
239*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t     *feature_tags /* OUT */);
240*2d1272b8SAndroid Build Coastguard Worker 
241*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
242*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_script_get_language_tags (hb_face_t    *face,
243*2d1272b8SAndroid Build Coastguard Worker 				       hb_tag_t      table_tag,
244*2d1272b8SAndroid Build Coastguard Worker 				       unsigned int  script_index,
245*2d1272b8SAndroid Build Coastguard Worker 				       unsigned int  start_offset,
246*2d1272b8SAndroid Build Coastguard Worker 				       unsigned int *language_count /* IN/OUT */,
247*2d1272b8SAndroid Build Coastguard Worker 				       hb_tag_t     *language_tags /* OUT */);
248*2d1272b8SAndroid Build Coastguard Worker 
249*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
250*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_script_select_language (hb_face_t      *face,
251*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t        table_tag,
252*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    script_index,
253*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    language_count,
254*2d1272b8SAndroid Build Coastguard Worker 				     const hb_tag_t *language_tags,
255*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int   *language_index /* OUT */);
256*2d1272b8SAndroid Build Coastguard Worker 
257*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
258*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_script_select_language2 (hb_face_t      *face,
259*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t        table_tag,
260*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    script_index,
261*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    language_count,
262*2d1272b8SAndroid Build Coastguard Worker 				     const hb_tag_t *language_tags,
263*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int   *language_index /* OUT */,
264*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t       *chosen_language /* OUT */);
265*2d1272b8SAndroid Build Coastguard Worker 
266*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
267*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_language_get_required_feature_index (hb_face_t    *face,
268*2d1272b8SAndroid Build Coastguard Worker 						  hb_tag_t      table_tag,
269*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int  script_index,
270*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int  language_index,
271*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int *feature_index /* OUT */);
272*2d1272b8SAndroid Build Coastguard Worker 
273*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
274*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_language_get_required_feature (hb_face_t    *face,
275*2d1272b8SAndroid Build Coastguard Worker 					    hb_tag_t      table_tag,
276*2d1272b8SAndroid Build Coastguard Worker 					    unsigned int  script_index,
277*2d1272b8SAndroid Build Coastguard Worker 					    unsigned int  language_index,
278*2d1272b8SAndroid Build Coastguard Worker 					    unsigned int *feature_index /* OUT */,
279*2d1272b8SAndroid Build Coastguard Worker 					    hb_tag_t     *feature_tag /* OUT */);
280*2d1272b8SAndroid Build Coastguard Worker 
281*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
282*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_language_get_feature_indexes (hb_face_t    *face,
283*2d1272b8SAndroid Build Coastguard Worker 					   hb_tag_t      table_tag,
284*2d1272b8SAndroid Build Coastguard Worker 					   unsigned int  script_index,
285*2d1272b8SAndroid Build Coastguard Worker 					   unsigned int  language_index,
286*2d1272b8SAndroid Build Coastguard Worker 					   unsigned int  start_offset,
287*2d1272b8SAndroid Build Coastguard Worker 					   unsigned int *feature_count /* IN/OUT */,
288*2d1272b8SAndroid Build Coastguard Worker 					   unsigned int *feature_indexes /* OUT */);
289*2d1272b8SAndroid Build Coastguard Worker 
290*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
291*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_language_get_feature_tags (hb_face_t    *face,
292*2d1272b8SAndroid Build Coastguard Worker 					hb_tag_t      table_tag,
293*2d1272b8SAndroid Build Coastguard Worker 					unsigned int  script_index,
294*2d1272b8SAndroid Build Coastguard Worker 					unsigned int  language_index,
295*2d1272b8SAndroid Build Coastguard Worker 					unsigned int  start_offset,
296*2d1272b8SAndroid Build Coastguard Worker 					unsigned int *feature_count /* IN/OUT */,
297*2d1272b8SAndroid Build Coastguard Worker 					hb_tag_t     *feature_tags /* OUT */);
298*2d1272b8SAndroid Build Coastguard Worker 
299*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
300*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_language_find_feature (hb_face_t    *face,
301*2d1272b8SAndroid Build Coastguard Worker 				    hb_tag_t      table_tag,
302*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int  script_index,
303*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int  language_index,
304*2d1272b8SAndroid Build Coastguard Worker 				    hb_tag_t      feature_tag,
305*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int *feature_index /* OUT */);
306*2d1272b8SAndroid Build Coastguard Worker 
307*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
308*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_feature_get_lookups (hb_face_t    *face,
309*2d1272b8SAndroid Build Coastguard Worker 				  hb_tag_t      table_tag,
310*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int  feature_index,
311*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int  start_offset,
312*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int *lookup_count /* IN/OUT */,
313*2d1272b8SAndroid Build Coastguard Worker 				  unsigned int *lookup_indexes /* OUT */);
314*2d1272b8SAndroid Build Coastguard Worker 
315*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
316*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_get_lookup_count (hb_face_t    *face,
317*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t      table_tag);
318*2d1272b8SAndroid Build Coastguard Worker 
319*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
320*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_collect_features (hb_face_t      *face,
321*2d1272b8SAndroid Build Coastguard Worker 			       hb_tag_t        table_tag,
322*2d1272b8SAndroid Build Coastguard Worker 			       const hb_tag_t *scripts,
323*2d1272b8SAndroid Build Coastguard Worker 			       const hb_tag_t *languages,
324*2d1272b8SAndroid Build Coastguard Worker 			       const hb_tag_t *features,
325*2d1272b8SAndroid Build Coastguard Worker 			       hb_set_t       *feature_indexes /* OUT */);
326*2d1272b8SAndroid Build Coastguard Worker 
327*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
328*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_collect_features_map (hb_face_t      *face,
329*2d1272b8SAndroid Build Coastguard Worker 				   hb_tag_t        table_tag,
330*2d1272b8SAndroid Build Coastguard Worker 				   unsigned        script_index,
331*2d1272b8SAndroid Build Coastguard Worker 				   unsigned        language_index,
332*2d1272b8SAndroid Build Coastguard Worker 				   hb_map_t       *feature_map /* OUT */);
333*2d1272b8SAndroid Build Coastguard Worker 
334*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
335*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_collect_lookups (hb_face_t      *face,
336*2d1272b8SAndroid Build Coastguard Worker 			      hb_tag_t        table_tag,
337*2d1272b8SAndroid Build Coastguard Worker 			      const hb_tag_t *scripts,
338*2d1272b8SAndroid Build Coastguard Worker 			      const hb_tag_t *languages,
339*2d1272b8SAndroid Build Coastguard Worker 			      const hb_tag_t *features,
340*2d1272b8SAndroid Build Coastguard Worker 			      hb_set_t       *lookup_indexes /* OUT */);
341*2d1272b8SAndroid Build Coastguard Worker 
342*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
343*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
344*2d1272b8SAndroid Build Coastguard Worker 				    hb_tag_t      table_tag,
345*2d1272b8SAndroid Build Coastguard Worker 				    unsigned int  lookup_index,
346*2d1272b8SAndroid Build Coastguard Worker 				    hb_set_t     *glyphs_before, /* OUT.  May be NULL */
347*2d1272b8SAndroid Build Coastguard Worker 				    hb_set_t     *glyphs_input,  /* OUT.  May be NULL */
348*2d1272b8SAndroid Build Coastguard Worker 				    hb_set_t     *glyphs_after,  /* OUT.  May be NULL */
349*2d1272b8SAndroid Build Coastguard Worker 				    hb_set_t     *glyphs_output  /* OUT.  May be NULL */);
350*2d1272b8SAndroid Build Coastguard Worker 
351*2d1272b8SAndroid Build Coastguard Worker 
352*2d1272b8SAndroid Build Coastguard Worker /* Variations support */
353*2d1272b8SAndroid Build Coastguard Worker 
354*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
355*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_table_find_feature_variations (hb_face_t    *face,
356*2d1272b8SAndroid Build Coastguard Worker 					    hb_tag_t      table_tag,
357*2d1272b8SAndroid Build Coastguard Worker 					    const int    *coords,
358*2d1272b8SAndroid Build Coastguard Worker 					    unsigned int  num_coords,
359*2d1272b8SAndroid Build Coastguard Worker 					    unsigned int *variations_index /* out */);
360*2d1272b8SAndroid Build Coastguard Worker 
361*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
362*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_feature_with_variations_get_lookups (hb_face_t    *face,
363*2d1272b8SAndroid Build Coastguard Worker 						  hb_tag_t      table_tag,
364*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int  feature_index,
365*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int  variations_index,
366*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int  start_offset,
367*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int *lookup_count /* IN/OUT */,
368*2d1272b8SAndroid Build Coastguard Worker 						  unsigned int *lookup_indexes /* OUT */);
369*2d1272b8SAndroid Build Coastguard Worker 
370*2d1272b8SAndroid Build Coastguard Worker 
371*2d1272b8SAndroid Build Coastguard Worker /*
372*2d1272b8SAndroid Build Coastguard Worker  * GSUB
373*2d1272b8SAndroid Build Coastguard Worker  */
374*2d1272b8SAndroid Build Coastguard Worker 
375*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
376*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_has_substitution (hb_face_t *face);
377*2d1272b8SAndroid Build Coastguard Worker 
378*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned
379*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookup_get_glyph_alternates (hb_face_t      *face,
380*2d1272b8SAndroid Build Coastguard Worker 					  unsigned        lookup_index,
381*2d1272b8SAndroid Build Coastguard Worker 					  hb_codepoint_t  glyph,
382*2d1272b8SAndroid Build Coastguard Worker 					  unsigned        start_offset,
383*2d1272b8SAndroid Build Coastguard Worker 					  unsigned       *alternate_count /* IN/OUT */,
384*2d1272b8SAndroid Build Coastguard Worker 					  hb_codepoint_t *alternate_glyphs /* OUT */);
385*2d1272b8SAndroid Build Coastguard Worker 
386*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
387*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
388*2d1272b8SAndroid Build Coastguard Worker 				      unsigned int          lookup_index,
389*2d1272b8SAndroid Build Coastguard Worker 				      const hb_codepoint_t *glyphs,
390*2d1272b8SAndroid Build Coastguard Worker 				      unsigned int          glyphs_length,
391*2d1272b8SAndroid Build Coastguard Worker 				      hb_bool_t             zero_context);
392*2d1272b8SAndroid Build Coastguard Worker 
393*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
394*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookup_substitute_closure (hb_face_t    *face,
395*2d1272b8SAndroid Build Coastguard Worker 					unsigned int  lookup_index,
396*2d1272b8SAndroid Build Coastguard Worker 					hb_set_t     *glyphs
397*2d1272b8SAndroid Build Coastguard Worker 					/*TODO , hb_bool_t  inclusive */);
398*2d1272b8SAndroid Build Coastguard Worker 
399*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
400*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookups_substitute_closure (hb_face_t      *face,
401*2d1272b8SAndroid Build Coastguard Worker 					 const hb_set_t *lookups,
402*2d1272b8SAndroid Build Coastguard Worker 					 hb_set_t       *glyphs);
403*2d1272b8SAndroid Build Coastguard Worker 
404*2d1272b8SAndroid Build Coastguard Worker 
405*2d1272b8SAndroid Build Coastguard Worker /*
406*2d1272b8SAndroid Build Coastguard Worker  * GPOS
407*2d1272b8SAndroid Build Coastguard Worker  */
408*2d1272b8SAndroid Build Coastguard Worker 
409*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
410*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_has_positioning (hb_face_t *face);
411*2d1272b8SAndroid Build Coastguard Worker 
412*2d1272b8SAndroid Build Coastguard Worker /* Optical 'size' feature info.  Returns true if found.
413*2d1272b8SAndroid Build Coastguard Worker  * https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
414*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
415*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_size_params (hb_face_t       *face,
416*2d1272b8SAndroid Build Coastguard Worker 			      unsigned int    *design_size,       /* OUT.  May be NULL */
417*2d1272b8SAndroid Build Coastguard Worker 			      unsigned int    *subfamily_id,      /* OUT.  May be NULL */
418*2d1272b8SAndroid Build Coastguard Worker 			      hb_ot_name_id_t *subfamily_name_id, /* OUT.  May be NULL */
419*2d1272b8SAndroid Build Coastguard Worker 			      unsigned int    *range_start,       /* OUT.  May be NULL */
420*2d1272b8SAndroid Build Coastguard Worker 			      unsigned int    *range_end          /* OUT.  May be NULL */);
421*2d1272b8SAndroid Build Coastguard Worker 
422*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_position_t
423*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_lookup_get_optical_bound (hb_font_t      *font,
424*2d1272b8SAndroid Build Coastguard Worker 				       unsigned        lookup_index,
425*2d1272b8SAndroid Build Coastguard Worker 				       hb_direction_t  direction,
426*2d1272b8SAndroid Build Coastguard Worker 				       hb_codepoint_t  glyph);
427*2d1272b8SAndroid Build Coastguard Worker 
428*2d1272b8SAndroid Build Coastguard Worker 
429*2d1272b8SAndroid Build Coastguard Worker /*
430*2d1272b8SAndroid Build Coastguard Worker  * GSUB/GPOS
431*2d1272b8SAndroid Build Coastguard Worker  */
432*2d1272b8SAndroid Build Coastguard Worker 
433*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
434*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_feature_get_name_ids (hb_face_t       *face,
435*2d1272b8SAndroid Build Coastguard Worker 				   hb_tag_t         table_tag,
436*2d1272b8SAndroid Build Coastguard Worker 				   unsigned int     feature_index,
437*2d1272b8SAndroid Build Coastguard Worker 				   hb_ot_name_id_t *label_id             /* OUT.  May be NULL */,
438*2d1272b8SAndroid Build Coastguard Worker 				   hb_ot_name_id_t *tooltip_id           /* OUT.  May be NULL */,
439*2d1272b8SAndroid Build Coastguard Worker 				   hb_ot_name_id_t *sample_id            /* OUT.  May be NULL */,
440*2d1272b8SAndroid Build Coastguard Worker 				   unsigned int    *num_named_parameters /* OUT.  May be NULL */,
441*2d1272b8SAndroid Build Coastguard Worker 				   hb_ot_name_id_t *first_param_id       /* OUT.  May be NULL */);
442*2d1272b8SAndroid Build Coastguard Worker 
443*2d1272b8SAndroid Build Coastguard Worker 
444*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN unsigned int
445*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_feature_get_characters (hb_face_t      *face,
446*2d1272b8SAndroid Build Coastguard Worker 				     hb_tag_t        table_tag,
447*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    feature_index,
448*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int    start_offset,
449*2d1272b8SAndroid Build Coastguard Worker 				     unsigned int   *char_count    /* IN/OUT.  May be NULL */,
450*2d1272b8SAndroid Build Coastguard Worker 				     hb_codepoint_t *characters    /* OUT.     May be NULL */);
451*2d1272b8SAndroid Build Coastguard Worker 
452*2d1272b8SAndroid Build Coastguard Worker 
453*2d1272b8SAndroid Build Coastguard Worker /*
454*2d1272b8SAndroid Build Coastguard Worker  * BASE
455*2d1272b8SAndroid Build Coastguard Worker  */
456*2d1272b8SAndroid Build Coastguard Worker 
457*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
458*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_font_extents (hb_font_t         *font,
459*2d1272b8SAndroid Build Coastguard Worker 			       hb_direction_t     direction,
460*2d1272b8SAndroid Build Coastguard Worker 			       hb_tag_t           script_tag,
461*2d1272b8SAndroid Build Coastguard Worker 			       hb_tag_t           language_tag,
462*2d1272b8SAndroid Build Coastguard Worker 			       hb_font_extents_t *extents);
463*2d1272b8SAndroid Build Coastguard Worker 
464*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
465*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_font_extents2 (hb_font_t         *font,
466*2d1272b8SAndroid Build Coastguard Worker 				hb_direction_t     direction,
467*2d1272b8SAndroid Build Coastguard Worker 				hb_script_t        script,
468*2d1272b8SAndroid Build Coastguard Worker 				hb_language_t      language,
469*2d1272b8SAndroid Build Coastguard Worker 				hb_font_extents_t *extents);
470*2d1272b8SAndroid Build Coastguard Worker 
471*2d1272b8SAndroid Build Coastguard Worker /**
472*2d1272b8SAndroid Build Coastguard Worker  * hb_ot_layout_baseline_tag_t:
473*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_ROMAN: The baseline used by alphabetic scripts such as Latin, Cyrillic and Greek.
474*2d1272b8SAndroid Build Coastguard Worker  * In vertical writing mode, the alphabetic baseline for characters rotated 90 degrees clockwise.
475*2d1272b8SAndroid Build Coastguard Worker  * (This would not apply to alphabetic characters that remain upright in vertical writing mode, since these
476*2d1272b8SAndroid Build Coastguard Worker  * characters are not rotated.)
477*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_HANGING: The hanging baseline. In horizontal direction, this is the horizontal
478*2d1272b8SAndroid Build Coastguard Worker  * line from which syllables seem, to hang in Tibetan and other similar scripts. In vertical writing mode,
479*2d1272b8SAndroid Build Coastguard Worker  * for Tibetan (or some other similar script) characters rotated 90 degrees clockwise.
480*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT: Ideographic character face bottom or left edge,
481*2d1272b8SAndroid Build Coastguard Worker  * if the direction is horizontal or vertical, respectively.
482*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: Ideographic character face top or right edge,
483*2d1272b8SAndroid Build Coastguard Worker  * if the direction is horizontal or vertical, respectively.
484*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL: The center of the ideographic character face. Since: 4.0.0
485*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: Ideographic em-box bottom or left edge,
486*2d1272b8SAndroid Build Coastguard Worker  * if the direction is horizontal or vertical, respectively.
487*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: Ideographic em-box top or right edge baseline,
488*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: 4.0.0
489*2d1272b8SAndroid Build Coastguard Worker  * if the direction is horizontal or vertical, respectively.
490*2d1272b8SAndroid Build Coastguard Worker  * @HB_OT_LAYOUT_BASELINE_TAG_MATH: The baseline about which mathematical characters are centered.
491*2d1272b8SAndroid Build Coastguard Worker  * In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.
492*2d1272b8SAndroid Build Coastguard Worker  *
493*2d1272b8SAndroid Build Coastguard Worker  * Baseline tags from [Baseline Tags](https://docs.microsoft.com/en-us/typography/opentype/spec/baselinetags) registry.
494*2d1272b8SAndroid Build Coastguard Worker  *
495*2d1272b8SAndroid Build Coastguard Worker  * Since: 2.6.0
496*2d1272b8SAndroid Build Coastguard Worker  */
497*2d1272b8SAndroid Build Coastguard Worker typedef enum {
498*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_ROMAN			= HB_TAG ('r','o','m','n'),
499*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_HANGING			= HB_TAG ('h','a','n','g'),
500*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT	= HB_TAG ('i','c','f','b'),
501*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT	= HB_TAG ('i','c','f','t'),
502*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL		= HB_TAG ('I','c','f','c'),
503*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT	= HB_TAG ('i','d','e','o'),
504*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT	= HB_TAG ('i','d','t','p'),
505*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL		= HB_TAG ('I','d','c','e'),
506*2d1272b8SAndroid Build Coastguard Worker   HB_OT_LAYOUT_BASELINE_TAG_MATH			= HB_TAG ('m','a','t','h'),
507*2d1272b8SAndroid Build Coastguard Worker 
508*2d1272b8SAndroid Build Coastguard Worker   /*< private >*/
509*2d1272b8SAndroid Build Coastguard Worker   _HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
510*2d1272b8SAndroid Build Coastguard Worker } hb_ot_layout_baseline_tag_t;
511*2d1272b8SAndroid Build Coastguard Worker 
512*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_ot_layout_baseline_tag_t
513*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script);
514*2d1272b8SAndroid Build Coastguard Worker 
515*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
516*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_baseline (hb_font_t                   *font,
517*2d1272b8SAndroid Build Coastguard Worker 			   hb_ot_layout_baseline_tag_t  baseline_tag,
518*2d1272b8SAndroid Build Coastguard Worker 			   hb_direction_t               direction,
519*2d1272b8SAndroid Build Coastguard Worker 			   hb_tag_t                     script_tag,
520*2d1272b8SAndroid Build Coastguard Worker 			   hb_tag_t                     language_tag,
521*2d1272b8SAndroid Build Coastguard Worker 			   hb_position_t               *coord        /* OUT.  May be NULL. */);
522*2d1272b8SAndroid Build Coastguard Worker 
523*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN hb_bool_t
524*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_baseline2 (hb_font_t                   *font,
525*2d1272b8SAndroid Build Coastguard Worker 			    hb_ot_layout_baseline_tag_t  baseline_tag,
526*2d1272b8SAndroid Build Coastguard Worker 			    hb_direction_t               direction,
527*2d1272b8SAndroid Build Coastguard Worker 			    hb_script_t                  script,
528*2d1272b8SAndroid Build Coastguard Worker 			    hb_language_t                language,
529*2d1272b8SAndroid Build Coastguard Worker 			    hb_position_t               *coord        /* OUT.  May be NULL. */);
530*2d1272b8SAndroid Build Coastguard Worker 
531*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
532*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_baseline_with_fallback (hb_font_t                   *font,
533*2d1272b8SAndroid Build Coastguard Worker 					 hb_ot_layout_baseline_tag_t  baseline_tag,
534*2d1272b8SAndroid Build Coastguard Worker 					 hb_direction_t               direction,
535*2d1272b8SAndroid Build Coastguard Worker 					 hb_tag_t                     script_tag,
536*2d1272b8SAndroid Build Coastguard Worker 					 hb_tag_t                     language_tag,
537*2d1272b8SAndroid Build Coastguard Worker 					 hb_position_t               *coord        /* OUT */);
538*2d1272b8SAndroid Build Coastguard Worker 
539*2d1272b8SAndroid Build Coastguard Worker HB_EXTERN void
540*2d1272b8SAndroid Build Coastguard Worker hb_ot_layout_get_baseline_with_fallback2 (hb_font_t                   *font,
541*2d1272b8SAndroid Build Coastguard Worker 					  hb_ot_layout_baseline_tag_t  baseline_tag,
542*2d1272b8SAndroid Build Coastguard Worker 					  hb_direction_t               direction,
543*2d1272b8SAndroid Build Coastguard Worker 					  hb_script_t                  script,
544*2d1272b8SAndroid Build Coastguard Worker 					  hb_language_t                language,
545*2d1272b8SAndroid Build Coastguard Worker 					  hb_position_t               *coord        /* OUT */);
546*2d1272b8SAndroid Build Coastguard Worker 
547*2d1272b8SAndroid Build Coastguard Worker HB_END_DECLS
548*2d1272b8SAndroid Build Coastguard Worker 
549*2d1272b8SAndroid Build Coastguard Worker #endif /* HB_OT_LAYOUT_H */
550