comparison mupdf-source/thirdparty/harfbuzz/src/hb-ot-layout.h @ 2:b50eed0cc0ef upstream

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