blob: 85938ba123e4aba118b94cd27b204d416953dcf6 [file] [log] [blame]
Behdad Esfahbod64aef3a2008-01-23 16:14:38 -05001/*
Behdad Esfahbod2409d5f2011-04-21 17:14:28 -04002 * Copyright © 2007,2008,2009 Red Hat, Inc.
Behdad Esfahbod64aef3a2008-01-23 16:14:38 -05003 *
Behdad Esfahbodc755cb32010-04-22 00:11:43 -04004 * This is part of HarfBuzz, a text shaping library.
Behdad Esfahbod64aef3a2008-01-23 16:14:38 -05005 *
6 * Permission is hereby granted, without written agreement and without
7 * license or royalty fees, to use, copy, modify, and distribute this
8 * software and its documentation for any purpose, provided that the
9 * above copyright notice and the following two paragraphs appear in
10 * all copies of this software.
11 *
12 * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
13 * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
14 * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
15 * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
16 * DAMAGE.
17 *
18 * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
19 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
20 * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
21 * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
22 * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
23 *
24 * Red Hat Author(s): Behdad Esfahbod
25 */
26
Behdad Esfahbodd1c9eb42012-04-12 13:17:44 -040027#ifndef HB_OT_H_IN
28#error "Include <hb-ot.h> instead."
29#endif
30
Behdad Esfahbodfd92a3d2008-01-24 03:11:09 -050031#ifndef HB_OT_LAYOUT_H
32#define HB_OT_LAYOUT_H
Behdad Esfahbod12c45682006-12-28 06:10:59 -050033
Behdad Esfahbodd1c9eb42012-04-12 13:17:44 -040034#include "hb.h"
Behdad Esfahbod12c45682006-12-28 06:10:59 -050035
Behdad Esfahbod8a3511a2009-11-04 19:45:39 -050036#include "hb-ot-tag.h"
37
Behdad Esfahbodf96ffd42009-05-24 15:01:16 -040038HB_BEGIN_DECLS
Behdad Esfahbod12c45682006-12-28 06:10:59 -050039
Behdad Esfahbodacdba3f2010-07-23 15:11:18 -040040
Behdad Esfahbod551fa2d2018-02-25 16:32:17 -080041#define HB_OT_TAG_BASE HB_TAG('B','A','S','E')
Behdad Esfahbod0ead4812009-08-02 17:41:36 -040042#define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
43#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
44#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
Behdad Esfahbod6c48f202013-09-09 15:43:10 -040045#define HB_OT_TAG_JSTF HB_TAG('J','S','T','F')
Behdad Esfahbodfd92a3d2008-01-24 03:11:09 -050046
Behdad Esfahbodcfe98822012-07-27 03:06:30 -040047
Behdad Esfahbod590d55c2008-01-24 19:13:50 -050048/*
49 * GDEF
50 */
51
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080052HB_EXTERN hb_bool_t
Behdad Esfahbodb4b42722009-11-06 17:46:33 -050053hb_ot_layout_has_glyph_classes (hb_face_t *face);
Behdad Esfahbod590d55c2008-01-24 19:13:50 -050054
Behdad Esfahbodf3064102012-11-15 18:39:46 -080055typedef enum {
Behdad Esfahbod5a08ecf2012-11-16 13:34:29 -080056 HB_OT_LAYOUT_GLYPH_CLASS_UNCLASSIFIED = 0,
57 HB_OT_LAYOUT_GLYPH_CLASS_BASE_GLYPH = 1,
58 HB_OT_LAYOUT_GLYPH_CLASS_LIGATURE = 2,
59 HB_OT_LAYOUT_GLYPH_CLASS_MARK = 3,
60 HB_OT_LAYOUT_GLYPH_CLASS_COMPONENT = 4
Behdad Esfahbodf3064102012-11-15 18:39:46 -080061} hb_ot_layout_glyph_class_t;
62
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080063HB_EXTERN hb_ot_layout_glyph_class_t
Behdad Esfahbod5a08ecf2012-11-16 13:34:29 -080064hb_ot_layout_get_glyph_class (hb_face_t *face,
Behdad Esfahbodf3064102012-11-15 18:39:46 -080065 hb_codepoint_t glyph);
Behdad Esfahbodf3064102012-11-15 18:39:46 -080066
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080067HB_EXTERN void
Behdad Esfahbod89ca8ee2012-11-16 13:53:40 -080068hb_ot_layout_get_glyphs_in_class (hb_face_t *face,
Behdad Esfahbodf3064102012-11-15 18:39:46 -080069 hb_ot_layout_glyph_class_t klass,
70 hb_set_t *glyphs /* OUT */);
Behdad Esfahbodf3064102012-11-15 18:39:46 -080071
72
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -040073/* Not that useful. Provides list of attach points for a glyph that a
74 * client may want to cache */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080075HB_EXTERN unsigned int
Behdad Esfahbod0ead4812009-08-02 17:41:36 -040076hb_ot_layout_get_attach_points (hb_face_t *face,
Behdad Esfahbod79420ad2009-05-26 12:24:16 -040077 hb_codepoint_t glyph,
Behdad Esfahbode21899b2009-11-04 16:36:14 -050078 unsigned int start_offset,
Behdad Esfahbod79420ad2009-05-26 12:24:16 -040079 unsigned int *point_count /* IN/OUT */,
80 unsigned int *point_array /* OUT */);
81
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -040082/* Ligature caret positions */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +080083HB_EXTERN unsigned int
Behdad Esfahbode2046742010-10-27 12:32:02 -040084hb_ot_layout_get_ligature_carets (hb_font_t *font,
Behdad Esfahbode2046742010-10-27 12:32:02 -040085 hb_direction_t direction,
86 hb_codepoint_t glyph,
87 unsigned int start_offset,
88 unsigned int *caret_count /* IN/OUT */,
Behdad Esfahbod60fbb362011-05-19 18:46:15 -040089 hb_position_t *caret_array /* OUT */);
Behdad Esfahbod62964af2009-05-26 12:40:10 -040090
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -040091
Behdad Esfahbod706ab252008-01-28 05:58:50 -050092/*
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -040093 * GSUB/GPOS feature query and enumeration interface
Behdad Esfahbod706ab252008-01-28 05:58:50 -050094 */
95
Behdad Esfahbod76271002014-07-11 14:54:42 -040096#define HB_OT_LAYOUT_NO_SCRIPT_INDEX 0xFFFFu
97#define HB_OT_LAYOUT_NO_FEATURE_INDEX 0xFFFFu
98#define HB_OT_LAYOUT_DEFAULT_LANGUAGE_INDEX 0xFFFFu
Behdad Esfahbod30c42b62016-09-10 03:32:39 -070099#define HB_OT_LAYOUT_NO_VARIATIONS_INDEX 0xFFFFFFFFu
Behdad Esfahbod706ab252008-01-28 05:58:50 -0500100
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800101HB_EXTERN unsigned int
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400102hb_ot_layout_table_get_script_tags (hb_face_t *face,
103 hb_tag_t table_tag,
Behdad Esfahbode21899b2009-11-04 16:36:14 -0500104 unsigned int start_offset,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400105 unsigned int *script_count /* IN/OUT */,
106 hb_tag_t *script_tags /* OUT */);
Behdad Esfahbod706ab252008-01-28 05:58:50 -0500107
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800108HB_EXTERN hb_bool_t
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400109hb_ot_layout_table_find_script (hb_face_t *face,
110 hb_tag_t table_tag,
111 hb_tag_t script_tag,
112 unsigned int *script_index);
Behdad Esfahbod706ab252008-01-28 05:58:50 -0500113
Behdad Esfahbod2014b8d2009-12-20 20:58:26 +0100114/* Like find_script, but takes zero-terminated array of scripts to test */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800115HB_EXTERN hb_bool_t
Behdad Esfahbod2014b8d2009-12-20 20:58:26 +0100116hb_ot_layout_table_choose_script (hb_face_t *face,
117 hb_tag_t table_tag,
118 const hb_tag_t *script_tags,
Behdad Esfahbodc47a31f2011-07-30 20:57:01 -0400119 unsigned int *script_index,
120 hb_tag_t *chosen_script);
Behdad Esfahbod2014b8d2009-12-20 20:58:26 +0100121
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800122HB_EXTERN unsigned int
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400123hb_ot_layout_table_get_feature_tags (hb_face_t *face,
124 hb_tag_t table_tag,
Behdad Esfahbode21899b2009-11-04 16:36:14 -0500125 unsigned int start_offset,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400126 unsigned int *feature_count /* IN/OUT */,
127 hb_tag_t *feature_tags /* OUT */);
Behdad Esfahbod706ab252008-01-28 05:58:50 -0500128
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800129HB_EXTERN unsigned int
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400130hb_ot_layout_script_get_language_tags (hb_face_t *face,
131 hb_tag_t table_tag,
132 unsigned int script_index,
Behdad Esfahbode21899b2009-11-04 16:36:14 -0500133 unsigned int start_offset,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400134 unsigned int *language_count /* IN/OUT */,
135 hb_tag_t *language_tags /* OUT */);
Behdad Esfahbod4a26ea42008-01-28 07:40:10 -0500136
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800137HB_EXTERN hb_bool_t
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400138hb_ot_layout_script_find_language (hb_face_t *face,
139 hb_tag_t table_tag,
140 unsigned int script_index,
141 hb_tag_t language_tag,
142 unsigned int *language_index);
Behdad Esfahbodc4473352008-02-18 21:14:23 -0500143
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800144HB_EXTERN hb_bool_t
Behdad Esfahbod911ca382014-06-24 10:20:36 -0600145hb_ot_layout_language_get_required_feature_index (hb_face_t *face,
146 hb_tag_t table_tag,
147 unsigned int script_index,
148 unsigned int language_index,
149 unsigned int *feature_index);
150
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800151HB_EXTERN hb_bool_t
Jonathan Kewda132932014-04-27 14:05:24 +0100152hb_ot_layout_language_get_required_feature (hb_face_t *face,
153 hb_tag_t table_tag,
154 unsigned int script_index,
155 unsigned int language_index,
156 unsigned int *feature_index,
157 hb_tag_t *feature_tag);
Behdad Esfahbodc4473352008-02-18 21:14:23 -0500158
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800159HB_EXTERN unsigned int
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400160hb_ot_layout_language_get_feature_indexes (hb_face_t *face,
161 hb_tag_t table_tag,
162 unsigned int script_index,
163 unsigned int language_index,
Behdad Esfahbode21899b2009-11-04 16:36:14 -0500164 unsigned int start_offset,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400165 unsigned int *feature_count /* IN/OUT */,
166 unsigned int *feature_indexes /* OUT */);
Behdad Esfahbod4a26ea42008-01-28 07:40:10 -0500167
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800168HB_EXTERN unsigned int
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400169hb_ot_layout_language_get_feature_tags (hb_face_t *face,
170 hb_tag_t table_tag,
171 unsigned int script_index,
172 unsigned int language_index,
Behdad Esfahbode21899b2009-11-04 16:36:14 -0500173 unsigned int start_offset,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400174 unsigned int *feature_count /* IN/OUT */,
175 hb_tag_t *feature_tags /* OUT */);
Behdad Esfahbod4a26ea42008-01-28 07:40:10 -0500176
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800177HB_EXTERN hb_bool_t
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400178hb_ot_layout_language_find_feature (hb_face_t *face,
179 hb_tag_t table_tag,
180 unsigned int script_index,
181 unsigned int language_index,
182 hb_tag_t feature_tag,
183 unsigned int *feature_index);
Behdad Esfahbodc4473352008-02-18 21:14:23 -0500184
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800185HB_EXTERN unsigned int
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800186hb_ot_layout_feature_get_lookups (hb_face_t *face,
187 hb_tag_t table_tag,
188 unsigned int feature_index,
189 unsigned int start_offset,
190 unsigned int *lookup_count /* IN/OUT */,
191 unsigned int *lookup_indexes /* OUT */);
192
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800193HB_EXTERN unsigned int
Behdad Esfahbod27674b42013-10-03 14:54:50 -0400194hb_ot_layout_table_get_lookup_count (hb_face_t *face,
195 hb_tag_t table_tag);
196
197
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800198HB_EXTERN void
Behdad Esfahboda88e7162012-11-24 02:31:02 -0500199hb_ot_layout_collect_lookups (hb_face_t *face,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800200 hb_tag_t table_tag,
201 const hb_tag_t *scripts,
202 const hb_tag_t *languages,
203 const hb_tag_t *features,
204 hb_set_t *lookup_indexes /* OUT */);
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800205
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800206HB_EXTERN void
Behdad Esfahbode8cfdd72012-11-16 19:07:06 -0800207hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800208 hb_tag_t table_tag,
209 unsigned int lookup_index,
210 hb_set_t *glyphs_before, /* OUT. May be NULL */
211 hb_set_t *glyphs_input, /* OUT. May be NULL */
212 hb_set_t *glyphs_after, /* OUT. May be NULL */
213 hb_set_t *glyphs_output /* OUT. May be NULL */);
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800214
215#ifdef HB_NOT_IMPLEMENTED
216typedef struct
217{
218 const hb_codepoint_t *before,
219 unsigned int before_length,
220 const hb_codepoint_t *input,
221 unsigned int input_length,
222 const hb_codepoint_t *after,
223 unsigned int after_length,
224} hb_ot_layout_glyph_sequence_t;
225
226typedef hb_bool_t
227(*hb_ot_layout_glyph_sequence_func_t) (hb_font_t *font,
228 hb_tag_t table_tag,
229 unsigned int lookup_index,
230 const hb_ot_layout_glyph_sequence_t *sequence,
231 void *user_data);
232
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800233HB_EXTERN void
Behdad Esfahbod977f1742012-11-16 13:10:07 -0800234Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t *face,
Behdad Esfahbodbff3c0f2009-08-07 19:46:30 -0400235 hb_tag_t table_tag,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800236 unsigned int lookup_index,
237 hb_ot_layout_glyph_sequence_func_t callback,
238 void *user_data);
239#endif
Behdad Esfahbodc4473352008-02-18 21:14:23 -0500240
Behdad Esfahbod30c42b62016-09-10 03:32:39 -0700241/* Variations support */
242
243HB_EXTERN hb_bool_t
244hb_ot_layout_table_find_feature_variations (hb_face_t *face,
245 hb_tag_t table_tag,
246 const int *coords,
247 unsigned int num_coords,
248 unsigned int *variations_index /* out */);
249
Behdad Esfahbodec87ba92016-09-10 03:53:11 -0700250HB_EXTERN unsigned int
251hb_ot_layout_feature_with_variations_get_lookups (hb_face_t *face,
252 hb_tag_t table_tag,
253 unsigned int feature_index,
254 unsigned int variations_index,
255 unsigned int start_offset,
256 unsigned int *lookup_count /* IN/OUT */,
257 unsigned int *lookup_indexes /* OUT */);
258
Behdad Esfahbod706ab252008-01-28 05:58:50 -0500259
Behdad Esfahbod2d15e722009-04-15 19:50:16 -0400260/*
261 * GSUB
262 */
263
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800264HB_EXTERN hb_bool_t
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400265hb_ot_layout_has_substitution (hb_face_t *face);
Behdad Esfahbodf9cd1012009-07-28 15:43:34 -0400266
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800267HB_EXTERN hb_bool_t
Behdad Esfahbod362a9902012-11-15 14:57:31 -0800268hb_ot_layout_lookup_would_substitute (hb_face_t *face,
Behdad Esfahbodd9b204d2012-08-23 16:22:28 -0400269 unsigned int lookup_index,
Behdad Esfahbode72b3602012-07-19 14:35:23 -0400270 const hb_codepoint_t *glyphs,
271 unsigned int glyphs_length,
Behdad Esfahbodd9b204d2012-08-23 16:22:28 -0400272 hb_bool_t zero_context);
Behdad Esfahbode72b3602012-07-19 14:35:23 -0400273
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800274HB_EXTERN void
Behdad Esfahbod362a9902012-11-15 14:57:31 -0800275hb_ot_layout_lookup_substitute_closure (hb_face_t *face,
Behdad Esfahbodd9b204d2012-08-23 16:22:28 -0400276 unsigned int lookup_index,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800277 hb_set_t *glyphs
278 /*TODO , hb_bool_t inclusive */);
279
280#ifdef HB_NOT_IMPLEMENTED
281/* Note: You better have GDEF when using this API, or marks won't do much. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800282HB_EXTERN hb_bool_t
Behdad Esfahbod977f1742012-11-16 13:10:07 -0800283Xhb_ot_layout_lookup_substitute (hb_font_t *font,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800284 unsigned int lookup_index,
285 const hb_ot_layout_glyph_sequence_t *sequence,
286 unsigned int out_size,
287 hb_codepoint_t *glyphs_out, /* OUT */
288 unsigned int *clusters_out, /* OUT */
289 unsigned int *out_length /* OUT */);
290#endif
291
Behdad Esfahbod3e32cd92012-04-23 13:20:52 -0400292
Behdad Esfahbodf9cd1012009-07-28 15:43:34 -0400293/*
294 * GPOS
295 */
296
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800297HB_EXTERN hb_bool_t
Behdad Esfahbod0ead4812009-08-02 17:41:36 -0400298hb_ot_layout_has_positioning (hb_face_t *face);
Behdad Esfahbodf9cd1012009-07-28 15:43:34 -0400299
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800300#ifdef HB_NOT_IMPLEMENTED
301/* Note: You better have GDEF when using this API, or marks won't do much. */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800302HB_EXTERN hb_bool_t
Behdad Esfahbod977f1742012-11-16 13:10:07 -0800303Xhb_ot_layout_lookup_position (hb_font_t *font,
Behdad Esfahbodf3064102012-11-15 18:39:46 -0800304 unsigned int lookup_index,
305 const hb_ot_layout_glyph_sequence_t *sequence,
306 hb_glyph_position_t *positions /* IN / OUT */);
307#endif
308
Behdad Esfahbode9ad71d2012-11-30 08:10:26 +0200309/* Optical 'size' feature info. Returns true if found.
Behdad Esfahbod4ab99fb2012-11-30 15:02:04 +0200310 * http://www.microsoft.com/typography/otspec/features_pt.htm#size */
Chun-wei Fan835bbdc2015-11-19 18:34:12 +0800311HB_EXTERN hb_bool_t
Behdad Esfahbod875a5cb2012-12-11 14:17:01 -0500312hb_ot_layout_get_size_params (hb_face_t *face,
313 unsigned int *design_size, /* OUT. May be NULL */
314 unsigned int *subfamily_id, /* OUT. May be NULL */
315 unsigned int *subfamily_name_id, /* OUT. May be NULL */
316 unsigned int *range_start, /* OUT. May be NULL */
317 unsigned int *range_end /* OUT. May be NULL */);
Behdad Esfahbodf54cce32012-11-26 14:02:31 +0200318
Behdad Esfahbod2d15e722009-04-15 19:50:16 -0400319
Behdad Esfahbod790a1172018-03-07 15:31:15 +0100320/*
321 * BASE
322 */
323#if 0
324
325#define HB_OT_TAG_BASE_HANG HB_TAG('h','a','n','g')
326#define HB_OT_TAG_BASE_ICFB HB_TAG('i','c','f','b')
327#define HB_OT_TAG_BASE_ICFT HB_TAG('i','c','f','t')
328#define HB_OT_TAG_BASE_IDEO HB_TAG('i','d','e','o')
329#define HB_OT_TAG_BASE_IDTB HB_TAG('i','d','t','b')
330#define HB_OT_TAG_BASE_MATH HB_TAG('m','a','t','h')
331#define HB_OT_TAG_BASE_ROMN HB_TAG('r','o','m','n')
332
333#endif
334
335
Behdad Esfahbodf96ffd42009-05-24 15:01:16 -0400336HB_END_DECLS
Behdad Esfahbod12c45682006-12-28 06:10:59 -0500337
Behdad Esfahbodfd92a3d2008-01-24 03:11:09 -0500338#endif /* HB_OT_LAYOUT_H */