1#![allow(dead_code)]
2
3use super::map;
4use super::{layout_kerx_table, layout_morx_table, layout_trak_table};
5use crate::hb::aat::layout_common::{AatApplyContext, HB_BUFFER_SCRATCH_FLAG_AAT_HAS_DELETED};
6use crate::hb::{
7 buffer::hb_buffer_t, face::Scale, hb_font_t, hb_tag_t, ot_shape_plan::hb_ot_shape_plan_t,
8 GlyphInfo,
9};
10use crate::Feature;
11
12pub type FeatureType = u8;
13
14pub const FEATURE_TYPE_INVALID: u8 = 0xFF;
15pub const FEATURE_TYPE_ALL_TYPOGRAPHIC: u8 = 0;
16pub const FEATURE_TYPE_LIGATURES: u8 = 1;
17pub const FEATURE_TYPE_CURSIVE_CONNECTION: u8 = 2;
18pub const FEATURE_TYPE_LETTER_CASE: u8 = 3;
19pub const FEATURE_TYPE_VERTICAL_SUBSTITUTION: u8 = 4;
20pub const FEATURE_TYPE_LINGUISTIC_REARRANGEMENT: u8 = 5;
21pub const FEATURE_TYPE_NUMBER_SPACING: u8 = 6;
22pub const FEATURE_TYPE_SMART_SWASH_TYPE: u8 = 8;
23pub const FEATURE_TYPE_DIACRITICS_TYPE: u8 = 9;
24pub const FEATURE_TYPE_VERTICAL_POSITION: u8 = 10;
25pub const FEATURE_TYPE_FRACTIONS: u8 = 11;
26pub const FEATURE_TYPE_OVERLAPPING_CHARACTERS_TYPE: u8 = 13;
27pub const FEATURE_TYPE_TYPOGRAPHIC_EXTRAS: u8 = 14;
28pub const FEATURE_TYPE_MATHEMATICAL_EXTRAS: u8 = 15;
29pub const FEATURE_TYPE_ORNAMENT_SETS_TYPE: u8 = 16;
30pub const FEATURE_TYPE_CHARACTER_ALTERNATIVES: u8 = 17;
31pub const FEATURE_TYPE_DESIGN_COMPLEXITY_TYPE: u8 = 18;
32pub const FEATURE_TYPE_STYLE_OPTIONS: u8 = 19;
33pub const FEATURE_TYPE_CHARACTER_SHAPE: u8 = 20;
34pub const FEATURE_TYPE_NUMBER_CASE: u8 = 21;
35pub const FEATURE_TYPE_TEXT_SPACING: u8 = 22;
36pub const FEATURE_TYPE_TRANSLITERATION: u8 = 23;
37pub const FEATURE_TYPE_ANNOTATION_TYPE: u8 = 24;
38pub const FEATURE_TYPE_KANA_SPACING_TYPE: u8 = 25;
39pub const FEATURE_TYPE_IDEOGRAPHIC_SPACING_TYPE: u8 = 26;
40pub const FEATURE_TYPE_UNICODE_DECOMPOSITION_TYPE: u8 = 27;
41pub const FEATURE_TYPE_RUBY_KANA: u8 = 28;
42pub const FEATURE_TYPE_CJK_SYMBOL_ALTERNATIVES_TYPE: u8 = 29;
43pub const FEATURE_TYPE_IDEOGRAPHIC_ALTERNATIVES_TYPE: u8 = 30;
44pub const FEATURE_TYPE_CJK_VERTICAL_ROMAN_PLACEMENT_TYPE: u8 = 31;
45pub const FEATURE_TYPE_ITALIC_CJK_ROMAN: u8 = 32;
46pub const FEATURE_TYPE_CASE_SENSITIVE_LAYOUT: u8 = 33;
47pub const FEATURE_TYPE_ALTERNATE_KANA: u8 = 34;
48pub const FEATURE_TYPE_STYLISTIC_ALTERNATIVES: u8 = 35;
49pub const FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES: u8 = 36;
50pub const FEATURE_TYPE_LOWER_CASE: u8 = 37;
51pub const FEATURE_TYPE_UPPER_CASE: u8 = 38;
52pub const FEATURE_TYPE_LANGUAGE_TAG_TYPE: u8 = 39;
53pub const FEATURE_TYPE_CJK_ROMAN_SPACING_TYPE: u8 = 103;
54
55pub type FeatureSelector = u8;
56
57pub const FEATURE_SELECTOR_INVALID: u8 = 0xFF;
58
59pub const FEATURE_SELECTOR_ALL_TYPE_FEATURES_ON: u8 = 0;
61pub const FEATURE_SELECTOR_ALL_TYPE_FEATURES_OFF: u8 = 1;
62
63pub const FEATURE_SELECTOR_REQUIRED_LIGATURES_ON: u8 = 0;
65pub const FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF: u8 = 1;
66pub const FEATURE_SELECTOR_COMMON_LIGATURES_ON: u8 = 2;
67pub const FEATURE_SELECTOR_COMMON_LIGATURES_OFF: u8 = 3;
68pub const FEATURE_SELECTOR_RARE_LIGATURES_ON: u8 = 4;
69pub const FEATURE_SELECTOR_RARE_LIGATURES_OFF: u8 = 5;
70pub const FEATURE_SELECTOR_LOGOS_ON: u8 = 6;
71pub const FEATURE_SELECTOR_LOGOS_OFF: u8 = 7;
72pub const FEATURE_SELECTOR_REBUS_PICTURES_ON: u8 = 8;
73pub const FEATURE_SELECTOR_REBUS_PICTURES_OFF: u8 = 9;
74pub const FEATURE_SELECTOR_DIPHTHONG_LIGATURES_ON: u8 = 10;
75pub const FEATURE_SELECTOR_DIPHTHONG_LIGATURES_OFF: u8 = 11;
76pub const FEATURE_SELECTOR_SQUARED_LIGATURES_ON: u8 = 12;
77pub const FEATURE_SELECTOR_SQUARED_LIGATURES_OFF: u8 = 13;
78pub const FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_ON: u8 = 14;
79pub const FEATURE_SELECTOR_ABBREV_SQUARED_LIGATURES_OFF: u8 = 15;
80pub const FEATURE_SELECTOR_SYMBOL_LIGATURES_ON: u8 = 16;
81pub const FEATURE_SELECTOR_SYMBOL_LIGATURES_OFF: u8 = 17;
82pub const FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON: u8 = 18;
83pub const FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF: u8 = 19;
84pub const FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON: u8 = 20;
85pub const FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF: u8 = 21;
86
87pub const FEATURE_SELECTOR_UNCONNECTED: u8 = 0;
89pub const FEATURE_SELECTOR_PARTIALLY_CONNECTED: u8 = 1;
90pub const FEATURE_SELECTOR_CURSIVE: u8 = 2;
91
92pub const FEATURE_SELECTOR_UPPER_AND_LOWER_CASE: u8 = 0; pub const FEATURE_SELECTOR_ALL_CAPS: u8 = 1; pub const FEATURE_SELECTOR_ALL_LOWER_CASE: u8 = 2; pub const FEATURE_SELECTOR_SMALL_CAPS: u8 = 3; pub const FEATURE_SELECTOR_INITIAL_CAPS: u8 = 4; pub const FEATURE_SELECTOR_INITIAL_CAPS_AND_SMALL_CAPS: u8 = 5; pub const FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON: u8 = 0;
102pub const FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF: u8 = 1;
103
104pub const FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_ON: u8 = 0;
106pub const FEATURE_SELECTOR_LINGUISTIC_REARRANGEMENT_OFF: u8 = 1;
107
108pub const FEATURE_SELECTOR_MONOSPACED_NUMBERS: u8 = 0;
110pub const FEATURE_SELECTOR_PROPORTIONAL_NUMBERS: u8 = 1;
111pub const FEATURE_SELECTOR_THIRD_WIDTH_NUMBERS: u8 = 2;
112pub const FEATURE_SELECTOR_QUARTER_WIDTH_NUMBERS: u8 = 3;
113
114pub const FEATURE_SELECTOR_WORD_INITIAL_SWASHES_ON: u8 = 0;
116pub const FEATURE_SELECTOR_WORD_INITIAL_SWASHES_OFF: u8 = 1;
117pub const FEATURE_SELECTOR_WORD_FINAL_SWASHES_ON: u8 = 2;
118pub const FEATURE_SELECTOR_WORD_FINAL_SWASHES_OFF: u8 = 3;
119pub const FEATURE_SELECTOR_LINE_INITIAL_SWASHES_ON: u8 = 4;
120pub const FEATURE_SELECTOR_LINE_INITIAL_SWASHES_OFF: u8 = 5;
121pub const FEATURE_SELECTOR_LINE_FINAL_SWASHES_ON: u8 = 6;
122pub const FEATURE_SELECTOR_LINE_FINAL_SWASHES_OFF: u8 = 7;
123pub const FEATURE_SELECTOR_NON_FINAL_SWASHES_ON: u8 = 8;
124pub const FEATURE_SELECTOR_NON_FINAL_SWASHES_OFF: u8 = 9;
125
126pub const FEATURE_SELECTOR_SHOW_DIACRITICS: u8 = 0;
128pub const FEATURE_SELECTOR_HIDE_DIACRITICS: u8 = 1;
129pub const FEATURE_SELECTOR_DECOMPOSE_DIACRITICS: u8 = 2;
130
131pub const FEATURE_SELECTOR_NORMAL_POSITION: u8 = 0;
133pub const FEATURE_SELECTOR_SUPERIORS: u8 = 1;
134pub const FEATURE_SELECTOR_INFERIORS: u8 = 2;
135pub const FEATURE_SELECTOR_ORDINALS: u8 = 3;
136pub const FEATURE_SELECTOR_SCIENTIFIC_INFERIORS: u8 = 4;
137
138pub const FEATURE_SELECTOR_NO_FRACTIONS: u8 = 0;
140pub const FEATURE_SELECTOR_VERTICAL_FRACTIONS: u8 = 1;
141pub const FEATURE_SELECTOR_DIAGONAL_FRACTIONS: u8 = 2;
142
143pub const FEATURE_SELECTOR_PREVENT_OVERLAP_ON: u8 = 0;
145pub const FEATURE_SELECTOR_PREVENT_OVERLAP_OFF: u8 = 1;
146
147pub const FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_ON: u8 = 0;
149pub const FEATURE_SELECTOR_HYPHENS_TO_EM_DASH_OFF: u8 = 1;
150pub const FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_ON: u8 = 2;
151pub const FEATURE_SELECTOR_HYPHEN_TO_EN_DASH_OFF: u8 = 3;
152pub const FEATURE_SELECTOR_SLASHED_ZERO_ON: u8 = 4;
153pub const FEATURE_SELECTOR_SLASHED_ZERO_OFF: u8 = 5;
154pub const FEATURE_SELECTOR_FORM_INTERROBANG_ON: u8 = 6;
155pub const FEATURE_SELECTOR_FORM_INTERROBANG_OFF: u8 = 7;
156pub const FEATURE_SELECTOR_SMART_QUOTES_ON: u8 = 8;
157pub const FEATURE_SELECTOR_SMART_QUOTES_OFF: u8 = 9;
158pub const FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_ON: u8 = 10;
159pub const FEATURE_SELECTOR_PERIODS_TO_ELLIPSIS_OFF: u8 = 11;
160
161pub const FEATURE_SELECTOR_HYPHEN_TO_MINUS_ON: u8 = 0;
163pub const FEATURE_SELECTOR_HYPHEN_TO_MINUS_OFF: u8 = 1;
164pub const FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_ON: u8 = 2;
165pub const FEATURE_SELECTOR_ASTERISK_TO_MULTIPLY_OFF: u8 = 3;
166pub const FEATURE_SELECTOR_SLASH_TO_DIVIDE_ON: u8 = 4;
167pub const FEATURE_SELECTOR_SLASH_TO_DIVIDE_OFF: u8 = 5;
168pub const FEATURE_SELECTOR_INEQUALITY_LIGATURES_ON: u8 = 6;
169pub const FEATURE_SELECTOR_INEQUALITY_LIGATURES_OFF: u8 = 7;
170pub const FEATURE_SELECTOR_EXPONENTS_ON: u8 = 8;
171pub const FEATURE_SELECTOR_EXPONENTS_OFF: u8 = 9;
172pub const FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON: u8 = 10;
173pub const FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF: u8 = 11;
174
175pub const FEATURE_SELECTOR_NO_ORNAMENTS: u8 = 0;
177pub const FEATURE_SELECTOR_DINGBATS: u8 = 1;
178pub const FEATURE_SELECTOR_PI_CHARACTERS: u8 = 2;
179pub const FEATURE_SELECTOR_FLEURONS: u8 = 3;
180pub const FEATURE_SELECTOR_DECORATIVE_BORDERS: u8 = 4;
181pub const FEATURE_SELECTOR_INTERNATIONAL_SYMBOLS: u8 = 5;
182pub const FEATURE_SELECTOR_MATH_SYMBOLS: u8 = 6;
183
184pub const FEATURE_SELECTOR_NO_ALTERNATES: u8 = 0;
186
187pub const FEATURE_SELECTOR_DESIGN_LEVEL1: u8 = 0;
189pub const FEATURE_SELECTOR_DESIGN_LEVEL2: u8 = 1;
190pub const FEATURE_SELECTOR_DESIGN_LEVEL3: u8 = 2;
191pub const FEATURE_SELECTOR_DESIGN_LEVEL4: u8 = 3;
192pub const FEATURE_SELECTOR_DESIGN_LEVEL5: u8 = 4;
193
194pub const FEATURE_SELECTOR_NO_STYLE_OPTIONS: u8 = 0;
196pub const FEATURE_SELECTOR_DISPLAY_TEXT: u8 = 1;
197pub const FEATURE_SELECTOR_ENGRAVED_TEXT: u8 = 2;
198pub const FEATURE_SELECTOR_ILLUMINATED_CAPS: u8 = 3;
199pub const FEATURE_SELECTOR_TITLING_CAPS: u8 = 4;
200pub const FEATURE_SELECTOR_TALL_CAPS: u8 = 5;
201
202pub const FEATURE_SELECTOR_TRADITIONAL_CHARACTERS: u8 = 0;
204pub const FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS: u8 = 1;
205pub const FEATURE_SELECTOR_JIS1978_CHARACTERS: u8 = 2;
206pub const FEATURE_SELECTOR_JIS1983_CHARACTERS: u8 = 3;
207pub const FEATURE_SELECTOR_JIS1990_CHARACTERS: u8 = 4;
208pub const FEATURE_SELECTOR_TRADITIONAL_ALT_ONE: u8 = 5;
209pub const FEATURE_SELECTOR_TRADITIONAL_ALT_TWO: u8 = 6;
210pub const FEATURE_SELECTOR_TRADITIONAL_ALT_THREE: u8 = 7;
211pub const FEATURE_SELECTOR_TRADITIONAL_ALT_FOUR: u8 = 8;
212pub const FEATURE_SELECTOR_TRADITIONAL_ALT_FIVE: u8 = 9;
213pub const FEATURE_SELECTOR_EXPERT_CHARACTERS: u8 = 10;
214pub const FEATURE_SELECTOR_JIS2004_CHARACTERS: u8 = 11;
215pub const FEATURE_SELECTOR_HOJO_CHARACTERS: u8 = 12;
216pub const FEATURE_SELECTOR_NLCCHARACTERS: u8 = 13;
217pub const FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS: u8 = 14;
218
219pub const FEATURE_SELECTOR_LOWER_CASE_NUMBERS: u8 = 0;
221pub const FEATURE_SELECTOR_UPPER_CASE_NUMBERS: u8 = 1;
222
223pub const FEATURE_SELECTOR_PROPORTIONAL_TEXT: u8 = 0;
225pub const FEATURE_SELECTOR_MONOSPACED_TEXT: u8 = 1;
226pub const FEATURE_SELECTOR_HALF_WIDTH_TEXT: u8 = 2;
227pub const FEATURE_SELECTOR_THIRD_WIDTH_TEXT: u8 = 3;
228pub const FEATURE_SELECTOR_QUARTER_WIDTH_TEXT: u8 = 4;
229pub const FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT: u8 = 5;
230pub const FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT: u8 = 6;
231
232pub const FEATURE_SELECTOR_NO_TRANSLITERATION: u8 = 0;
234pub const FEATURE_SELECTOR_HANJA_TO_HANGUL: u8 = 1;
235pub const FEATURE_SELECTOR_HIRAGANA_TO_KATAKANA: u8 = 2;
236pub const FEATURE_SELECTOR_KATAKANA_TO_HIRAGANA: u8 = 3;
237pub const FEATURE_SELECTOR_KANA_TO_ROMANIZATION: u8 = 4;
238pub const FEATURE_SELECTOR_ROMANIZATION_TO_HIRAGANA: u8 = 5;
239pub const FEATURE_SELECTOR_ROMANIZATION_TO_KATAKANA: u8 = 6;
240pub const FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_ONE: u8 = 7;
241pub const FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_TWO: u8 = 8;
242pub const FEATURE_SELECTOR_HANJA_TO_HANGUL_ALT_THREE: u8 = 9;
243
244pub const FEATURE_SELECTOR_NO_ANNOTATION: u8 = 0;
246pub const FEATURE_SELECTOR_BOX_ANNOTATION: u8 = 1;
247pub const FEATURE_SELECTOR_ROUNDED_BOX_ANNOTATION: u8 = 2;
248pub const FEATURE_SELECTOR_CIRCLE_ANNOTATION: u8 = 3;
249pub const FEATURE_SELECTOR_INVERTED_CIRCLE_ANNOTATION: u8 = 4;
250pub const FEATURE_SELECTOR_PARENTHESIS_ANNOTATION: u8 = 5;
251pub const FEATURE_SELECTOR_PERIOD_ANNOTATION: u8 = 6;
252pub const FEATURE_SELECTOR_ROMAN_NUMERAL_ANNOTATION: u8 = 7;
253pub const FEATURE_SELECTOR_DIAMOND_ANNOTATION: u8 = 8;
254pub const FEATURE_SELECTOR_INVERTED_BOX_ANNOTATION: u8 = 9;
255pub const FEATURE_SELECTOR_INVERTED_ROUNDED_BOX_ANNOTATION: u8 = 10;
256
257pub const FEATURE_SELECTOR_FULL_WIDTH_KANA: u8 = 0;
259pub const FEATURE_SELECTOR_PROPORTIONAL_KANA: u8 = 1;
260
261pub const FEATURE_SELECTOR_FULL_WIDTH_IDEOGRAPHS: u8 = 0;
263pub const FEATURE_SELECTOR_PROPORTIONAL_IDEOGRAPHS: u8 = 1;
264pub const FEATURE_SELECTOR_HALF_WIDTH_IDEOGRAPHS: u8 = 2;
265
266pub const FEATURE_SELECTOR_CANONICAL_COMPOSITION_ON: u8 = 0;
268pub const FEATURE_SELECTOR_CANONICAL_COMPOSITION_OFF: u8 = 1;
269pub const FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_ON: u8 = 2;
270pub const FEATURE_SELECTOR_COMPATIBILITY_COMPOSITION_OFF: u8 = 3;
271pub const FEATURE_SELECTOR_TRANSCODING_COMPOSITION_ON: u8 = 4;
272pub const FEATURE_SELECTOR_TRANSCODING_COMPOSITION_OFF: u8 = 5;
273
274pub const FEATURE_SELECTOR_NO_RUBY_KANA: u8 = 0; pub const FEATURE_SELECTOR_RUBY_KANA: u8 = 1; pub const FEATURE_SELECTOR_RUBY_KANA_ON: u8 = 2;
278pub const FEATURE_SELECTOR_RUBY_KANA_OFF: u8 = 3;
279
280pub const FEATURE_SELECTOR_NO_CJK_SYMBOL_ALTERNATIVES: u8 = 0;
282pub const FEATURE_SELECTOR_CJK_SYMBOL_ALT_ONE: u8 = 1;
283pub const FEATURE_SELECTOR_CJK_SYMBOL_ALT_TWO: u8 = 2;
284pub const FEATURE_SELECTOR_CJK_SYMBOL_ALT_THREE: u8 = 3;
285pub const FEATURE_SELECTOR_CJK_SYMBOL_ALT_FOUR: u8 = 4;
286pub const FEATURE_SELECTOR_CJK_SYMBOL_ALT_FIVE: u8 = 5;
287
288pub const FEATURE_SELECTOR_NO_IDEOGRAPHIC_ALTERNATIVES: u8 = 0;
290pub const FEATURE_SELECTOR_IDEOGRAPHIC_ALT_ONE: u8 = 1;
291pub const FEATURE_SELECTOR_IDEOGRAPHIC_ALT_TWO: u8 = 2;
292pub const FEATURE_SELECTOR_IDEOGRAPHIC_ALT_THREE: u8 = 3;
293pub const FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FOUR: u8 = 4;
294pub const FEATURE_SELECTOR_IDEOGRAPHIC_ALT_FIVE: u8 = 5;
295
296pub const FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_CENTERED: u8 = 0;
298pub const FEATURE_SELECTOR_CJK_VERTICAL_ROMAN_HBASELINE: u8 = 1;
299
300pub const FEATURE_SELECTOR_NO_CJK_ITALIC_ROMAN: u8 = 0; pub const FEATURE_SELECTOR_CJK_ITALIC_ROMAN: u8 = 1; pub const FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON: u8 = 2;
304pub const FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF: u8 = 3;
305
306pub const FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON: u8 = 0;
308pub const FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF: u8 = 1;
309pub const FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON: u8 = 2;
310pub const FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF: u8 = 3;
311
312pub const FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON: u8 = 0;
314pub const FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF: u8 = 1;
315pub const FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON: u8 = 2;
316pub const FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF: u8 = 3;
317
318pub const FEATURE_SELECTOR_NO_STYLISTIC_ALTERNATES: u8 = 0;
320pub const FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON: u8 = 2;
321pub const FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF: u8 = 3;
322pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON: u8 = 4;
323pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF: u8 = 5;
324pub const FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON: u8 = 6;
325pub const FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF: u8 = 7;
326pub const FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON: u8 = 8;
327pub const FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF: u8 = 9;
328pub const FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON: u8 = 10;
329pub const FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF: u8 = 11;
330pub const FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON: u8 = 12;
331pub const FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF: u8 = 13;
332pub const FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON: u8 = 14;
333pub const FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF: u8 = 15;
334pub const FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON: u8 = 16;
335pub const FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF: u8 = 17;
336pub const FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON: u8 = 18;
337pub const FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF: u8 = 19;
338pub const FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON: u8 = 20;
339pub const FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF: u8 = 21;
340pub const FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON: u8 = 22;
341pub const FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF: u8 = 23;
342pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON: u8 = 24;
343pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF: u8 = 25;
344pub const FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON: u8 = 26;
345pub const FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF: u8 = 27;
346pub const FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON: u8 = 28;
347pub const FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF: u8 = 29;
348pub const FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON: u8 = 30;
349pub const FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF: u8 = 31;
350pub const FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON: u8 = 32;
351pub const FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF: u8 = 33;
352pub const FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON: u8 = 34;
353pub const FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF: u8 = 35;
354pub const FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON: u8 = 36;
355pub const FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF: u8 = 37;
356pub const FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON: u8 = 38;
357pub const FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF: u8 = 39;
358pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON: u8 = 40;
359pub const FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF: u8 = 41;
360
361pub const FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON: u8 = 0;
363pub const FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF: u8 = 1;
364pub const FEATURE_SELECTOR_SWASH_ALTERNATES_ON: u8 = 2;
365pub const FEATURE_SELECTOR_SWASH_ALTERNATES_OFF: u8 = 3;
366pub const FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON: u8 = 4;
367pub const FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF: u8 = 5;
368
369pub const FEATURE_SELECTOR_DEFAULT_LOWER_CASE: u8 = 0;
371pub const FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS: u8 = 1;
372pub const FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS: u8 = 2;
373
374pub const FEATURE_SELECTOR_DEFAULT_UPPER_CASE: u8 = 0;
376pub const FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS: u8 = 1;
377pub const FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS: u8 = 2;
378
379pub const FEATURE_SELECTOR_HALF_WIDTH_CJK_ROMAN: u8 = 0;
381pub const FEATURE_SELECTOR_PROPORTIONAL_CJK_ROMAN: u8 = 1;
382pub const FEATURE_SELECTOR_DEFAULT_CJK_ROMAN: u8 = 2;
383pub const FEATURE_SELECTOR_FULL_WIDTH_CJK_ROMAN: u8 = 3;
384
385pub struct FeatureMapping {
389 pub ot_feature_tag: hb_tag_t,
390 pub aat_feature_type: FeatureType,
391 pub selector_to_enable: u8,
392 pub selector_to_disable: u8,
393}
394
395impl FeatureMapping {
396 const fn new(
397 ot_feature_tag: &[u8; 4],
398 aat_feature_type: FeatureType,
399 selector_to_enable: u8,
400 selector_to_disable: u8,
401 ) -> Self {
402 FeatureMapping {
403 ot_feature_tag: hb_tag_t::new(ot_feature_tag),
404 aat_feature_type,
405 selector_to_enable,
406 selector_to_disable,
407 }
408 }
409}
410
411#[rustfmt::skip]
416pub static feature_mappings: &[FeatureMapping] = &[
417 FeatureMapping::new(b"afrc", FEATURE_TYPE_FRACTIONS, FEATURE_SELECTOR_VERTICAL_FRACTIONS, FEATURE_SELECTOR_NO_FRACTIONS),
418 FeatureMapping::new(b"c2pc", FEATURE_TYPE_UPPER_CASE, FEATURE_SELECTOR_UPPER_CASE_PETITE_CAPS, FEATURE_SELECTOR_DEFAULT_UPPER_CASE),
419 FeatureMapping::new(b"c2sc", FEATURE_TYPE_UPPER_CASE, FEATURE_SELECTOR_UPPER_CASE_SMALL_CAPS, FEATURE_SELECTOR_DEFAULT_UPPER_CASE),
420 FeatureMapping::new(b"calt", FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_ON, FEATURE_SELECTOR_CONTEXTUAL_ALTERNATES_OFF),
421 FeatureMapping::new(b"case", FEATURE_TYPE_CASE_SENSITIVE_LAYOUT, FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_ON, FEATURE_SELECTOR_CASE_SENSITIVE_LAYOUT_OFF),
422 FeatureMapping::new(b"clig", FEATURE_TYPE_LIGATURES, FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_ON, FEATURE_SELECTOR_CONTEXTUAL_LIGATURES_OFF),
423 FeatureMapping::new(b"cpsp", FEATURE_TYPE_CASE_SENSITIVE_LAYOUT, FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_ON, FEATURE_SELECTOR_CASE_SENSITIVE_SPACING_OFF),
424 FeatureMapping::new(b"cswh", FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_ON, FEATURE_SELECTOR_CONTEXTUAL_SWASH_ALTERNATES_OFF),
425 FeatureMapping::new(b"dlig", FEATURE_TYPE_LIGATURES, FEATURE_SELECTOR_RARE_LIGATURES_ON, FEATURE_SELECTOR_RARE_LIGATURES_OFF),
426 FeatureMapping::new(b"expt", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_EXPERT_CHARACTERS, 16),
427 FeatureMapping::new(b"frac", FEATURE_TYPE_FRACTIONS, FEATURE_SELECTOR_DIAGONAL_FRACTIONS, FEATURE_SELECTOR_NO_FRACTIONS),
428 FeatureMapping::new(b"fwid", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_MONOSPACED_TEXT, 7),
429 FeatureMapping::new(b"halt", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT, 7),
430 FeatureMapping::new(b"hist", 40, 0, 1),
431 FeatureMapping::new(b"hkna", FEATURE_TYPE_ALTERNATE_KANA, FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_ON, FEATURE_SELECTOR_ALTERNATE_HORIZ_KANA_OFF),
432 FeatureMapping::new(b"hlig", FEATURE_TYPE_LIGATURES, FEATURE_SELECTOR_HISTORICAL_LIGATURES_ON, FEATURE_SELECTOR_HISTORICAL_LIGATURES_OFF),
433 FeatureMapping::new(b"hngl", FEATURE_TYPE_TRANSLITERATION, FEATURE_SELECTOR_HANJA_TO_HANGUL, FEATURE_SELECTOR_NO_TRANSLITERATION),
434 FeatureMapping::new(b"hojo", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_HOJO_CHARACTERS, 16),
435 FeatureMapping::new(b"hwid", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_HALF_WIDTH_TEXT, 7),
436 FeatureMapping::new(b"ital", FEATURE_TYPE_ITALIC_CJK_ROMAN, FEATURE_SELECTOR_CJK_ITALIC_ROMAN_ON, FEATURE_SELECTOR_CJK_ITALIC_ROMAN_OFF),
437 FeatureMapping::new(b"jp04", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_JIS2004_CHARACTERS, 16),
438 FeatureMapping::new(b"jp78", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_JIS1978_CHARACTERS, 16),
439 FeatureMapping::new(b"jp83", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_JIS1983_CHARACTERS, 16),
440 FeatureMapping::new(b"jp90", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_JIS1990_CHARACTERS, 16),
441 FeatureMapping::new(b"liga", FEATURE_TYPE_LIGATURES, FEATURE_SELECTOR_COMMON_LIGATURES_ON, FEATURE_SELECTOR_COMMON_LIGATURES_OFF),
442 FeatureMapping::new(b"lnum", FEATURE_TYPE_NUMBER_CASE, FEATURE_SELECTOR_UPPER_CASE_NUMBERS, 2),
443 FeatureMapping::new(b"mgrk", FEATURE_TYPE_MATHEMATICAL_EXTRAS, FEATURE_SELECTOR_MATHEMATICAL_GREEK_ON, FEATURE_SELECTOR_MATHEMATICAL_GREEK_OFF),
444 FeatureMapping::new(b"nlck", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_NLCCHARACTERS, 16),
445 FeatureMapping::new(b"onum", FEATURE_TYPE_NUMBER_CASE, FEATURE_SELECTOR_LOWER_CASE_NUMBERS, 2),
446 FeatureMapping::new(b"ordn", FEATURE_TYPE_VERTICAL_POSITION, FEATURE_SELECTOR_ORDINALS, FEATURE_SELECTOR_NORMAL_POSITION),
447 FeatureMapping::new(b"palt", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, 7),
448 FeatureMapping::new(b"pcap", FEATURE_TYPE_LOWER_CASE, FEATURE_SELECTOR_LOWER_CASE_PETITE_CAPS, FEATURE_SELECTOR_DEFAULT_LOWER_CASE),
449 FeatureMapping::new(b"pkna", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_PROPORTIONAL_TEXT, 7),
450 FeatureMapping::new(b"pnum", FEATURE_TYPE_NUMBER_SPACING, FEATURE_SELECTOR_PROPORTIONAL_NUMBERS, 4),
451 FeatureMapping::new(b"pwid", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_PROPORTIONAL_TEXT, 7),
452 FeatureMapping::new(b"qwid", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_QUARTER_WIDTH_TEXT, 7),
453 FeatureMapping::new(b"rlig", FEATURE_TYPE_LIGATURES, FEATURE_SELECTOR_REQUIRED_LIGATURES_ON, FEATURE_SELECTOR_REQUIRED_LIGATURES_OFF),
454 FeatureMapping::new(b"ruby", FEATURE_TYPE_RUBY_KANA, FEATURE_SELECTOR_RUBY_KANA_ON, FEATURE_SELECTOR_RUBY_KANA_OFF),
455 FeatureMapping::new(b"sinf", FEATURE_TYPE_VERTICAL_POSITION, FEATURE_SELECTOR_SCIENTIFIC_INFERIORS, FEATURE_SELECTOR_NORMAL_POSITION),
456 FeatureMapping::new(b"smcp", FEATURE_TYPE_LOWER_CASE, FEATURE_SELECTOR_LOWER_CASE_SMALL_CAPS, FEATURE_SELECTOR_DEFAULT_LOWER_CASE),
457 FeatureMapping::new(b"smpl", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_SIMPLIFIED_CHARACTERS, 16),
458 FeatureMapping::new(b"ss01", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_ONE_ON, FEATURE_SELECTOR_STYLISTIC_ALT_ONE_OFF),
459 FeatureMapping::new(b"ss02", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_TWO_ON, FEATURE_SELECTOR_STYLISTIC_ALT_TWO_OFF),
460 FeatureMapping::new(b"ss03", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_THREE_ON, FEATURE_SELECTOR_STYLISTIC_ALT_THREE_OFF),
461 FeatureMapping::new(b"ss04", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_ON, FEATURE_SELECTOR_STYLISTIC_ALT_FOUR_OFF),
462 FeatureMapping::new(b"ss05", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_ON, FEATURE_SELECTOR_STYLISTIC_ALT_FIVE_OFF),
463 FeatureMapping::new(b"ss06", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_SIX_ON, FEATURE_SELECTOR_STYLISTIC_ALT_SIX_OFF),
464 FeatureMapping::new(b"ss07", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_SEVEN_OFF),
465 FeatureMapping::new(b"ss08", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_ON, FEATURE_SELECTOR_STYLISTIC_ALT_EIGHT_OFF),
466 FeatureMapping::new(b"ss09", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_NINE_ON, FEATURE_SELECTOR_STYLISTIC_ALT_NINE_OFF),
467 FeatureMapping::new(b"ss10", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_TEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_TEN_OFF),
468 FeatureMapping::new(b"ss11", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_ELEVEN_OFF),
469 FeatureMapping::new(b"ss12", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_ON, FEATURE_SELECTOR_STYLISTIC_ALT_TWELVE_OFF),
470 FeatureMapping::new(b"ss13", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_THIRTEEN_OFF),
471 FeatureMapping::new(b"ss14", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_FOURTEEN_OFF),
472 FeatureMapping::new(b"ss15", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_FIFTEEN_OFF),
473 FeatureMapping::new(b"ss16", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_SIXTEEN_OFF),
474 FeatureMapping::new(b"ss17", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_SEVENTEEN_OFF),
475 FeatureMapping::new(b"ss18", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_EIGHTEEN_OFF),
476 FeatureMapping::new(b"ss19", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_ON, FEATURE_SELECTOR_STYLISTIC_ALT_NINETEEN_OFF),
477 FeatureMapping::new(b"ss20", FEATURE_TYPE_STYLISTIC_ALTERNATIVES, FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_ON, FEATURE_SELECTOR_STYLISTIC_ALT_TWENTY_OFF),
478 FeatureMapping::new(b"subs", FEATURE_TYPE_VERTICAL_POSITION, FEATURE_SELECTOR_INFERIORS, FEATURE_SELECTOR_NORMAL_POSITION),
479 FeatureMapping::new(b"sups", FEATURE_TYPE_VERTICAL_POSITION, FEATURE_SELECTOR_SUPERIORS, FEATURE_SELECTOR_NORMAL_POSITION),
480 FeatureMapping::new(b"swsh", FEATURE_TYPE_CONTEXTUAL_ALTERNATIVES, FEATURE_SELECTOR_SWASH_ALTERNATES_ON, FEATURE_SELECTOR_SWASH_ALTERNATES_OFF),
481 FeatureMapping::new(b"titl", FEATURE_TYPE_STYLE_OPTIONS, FEATURE_SELECTOR_TITLING_CAPS, FEATURE_SELECTOR_NO_STYLE_OPTIONS),
482 FeatureMapping::new(b"tnam", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_TRADITIONAL_NAMES_CHARACTERS, 16),
483 FeatureMapping::new(b"tnum", FEATURE_TYPE_NUMBER_SPACING, FEATURE_SELECTOR_MONOSPACED_NUMBERS, 4),
484 FeatureMapping::new(b"trad", FEATURE_TYPE_CHARACTER_SHAPE, FEATURE_SELECTOR_TRADITIONAL_CHARACTERS, 16),
485 FeatureMapping::new(b"twid", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_THIRD_WIDTH_TEXT, 7),
486 FeatureMapping::new(b"unic", FEATURE_TYPE_LETTER_CASE, 14, 15),
487 FeatureMapping::new(b"valt", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, 7),
488 FeatureMapping::new(b"vert", FEATURE_TYPE_VERTICAL_SUBSTITUTION, FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON, FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF),
489 FeatureMapping::new(b"vhal", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_ALT_HALF_WIDTH_TEXT, 7),
490 FeatureMapping::new(b"vkna", FEATURE_TYPE_ALTERNATE_KANA, FEATURE_SELECTOR_ALTERNATE_VERT_KANA_ON, FEATURE_SELECTOR_ALTERNATE_VERT_KANA_OFF),
491 FeatureMapping::new(b"vpal", FEATURE_TYPE_TEXT_SPACING, FEATURE_SELECTOR_ALT_PROPORTIONAL_TEXT, 7),
492 FeatureMapping::new(b"vrt2", FEATURE_TYPE_VERTICAL_SUBSTITUTION, FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_ON, FEATURE_SELECTOR_SUBSTITUTE_VERTICAL_FORMS_OFF),
493 FeatureMapping::new(b"vrtr", FEATURE_TYPE_VERTICAL_SUBSTITUTION, 2, 3),
494 FeatureMapping::new(b"zero", FEATURE_TYPE_TYPOGRAPHIC_EXTRAS, FEATURE_SELECTOR_SLASHED_ZERO_ON, FEATURE_SELECTOR_SLASHED_ZERO_OFF),
495];
496
497pub const DELETED_GLYPH: u32 = 0xFFFF;
498
499#[doc(alias = "hb_aat_layout_substitute")]
503pub fn substitute(
504 plan: &hb_ot_shape_plan_t,
505 face: &hb_font_t,
506 buffer: &mut hb_buffer_t,
507 features: &[Feature],
508) {
509 let mut aat_map = map::AatMap::default();
510 if !features.is_empty() {
511 let mut builder = map::AatMapBuilder::default();
512 for feature in features {
513 builder.add_feature(face, feature);
514 }
515 builder.compile(face, &mut aat_map);
516 }
517
518 let mut c = AatApplyContext::new(plan, face, Scale::default(), buffer);
519 layout_morx_table::apply(
520 &mut c,
521 if features.is_empty() {
522 &plan.aat_map
523 } else {
524 &aat_map
525 },
526 );
527}
528
529fn is_deleted_glyph(info: &GlyphInfo) -> bool {
530 info.is_aat_deleted()
531}
532
533#[doc(alias = "hb_aat_layout_remove_deleted_glyphs")]
537pub fn remove_deleted_glyphs(buffer: &mut hb_buffer_t) {
538 if (buffer.scratch_flags & HB_BUFFER_SCRATCH_FLAG_AAT_HAS_DELETED) != 0 {
539 buffer.delete_glyphs_inplace(is_deleted_glyph);
540 }
541}
542
543#[doc(alias = "hb_aat_layout_position")]
547pub fn position(
548 plan: &hb_ot_shape_plan_t,
549 face: &hb_font_t,
550 scale: Scale,
551 buffer: &mut hb_buffer_t,
552) {
553 let mut c = AatApplyContext::new(plan, face, scale, buffer);
554 layout_kerx_table::apply(&mut c);
555}
556
557#[doc(alias = "hb_aat_layout_track")]
561pub fn track(
562 plan: &hb_ot_shape_plan_t,
563 face: &hb_font_t,
564 scale: Scale,
565 point_size: Option<f32>,
566 buffer: &mut hb_buffer_t,
567) {
568 layout_trak_table::apply(plan, face, scale, point_size, buffer);
569}