1#![allow(
2 dead_code,
3 non_upper_case_globals,
4 unused_assignments,
5 unused_parens,
6 while_true,
7 clippy::assign_op_pattern,
8 clippy::collapsible_if,
9 clippy::comparison_chain,
10 clippy::double_parens,
11 clippy::unnecessary_cast,
12 clippy::single_match,
13 clippy::never_loop
14)]
15
16use core::cell::Cell;
17
18use super::buffer::{hb_buffer_t, HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE};
19use super::machine_cursor::MachineCursor;
20use super::ot_shaper_use::category;
21use super::GlyphInfo;
22
23static _use_syllable_machine_trans_keys: [u8; 256] = [
24 35, 37, 0, 42, 5, 42, 5, 42, 1, 39, 8, 34, 8, 33, 8, 33, 8, 33, 8, 32, 8, 32, 8, 8, 8, 34, 8,
25 34, 8, 34, 1, 8, 8, 34, 8, 39, 8, 39, 8, 39, 8, 39, 6, 39, 8, 39, 6, 39, 6, 39, 6, 39, 5, 42,
26 1, 8, 1, 34, 8, 28, 8, 28, 5, 42, 1, 39, 8, 34, 8, 33, 8, 33, 8, 33, 8, 32, 8, 32, 8, 8, 8, 34,
27 8, 34, 8, 34, 1, 8, 8, 34, 8, 39, 8, 39, 8, 39, 8, 39, 6, 39, 8, 39, 6, 39, 6, 39, 6, 39, 5,
28 42, 1, 8, 1, 8, 1, 34, 8, 8, 7, 8, 3, 8, 5, 42, 5, 42, 1, 39, 8, 34, 8, 33, 8, 33, 8, 33, 8,
29 32, 8, 32, 8, 8, 8, 34, 8, 34, 8, 34, 1, 8, 8, 34, 8, 39, 8, 39, 8, 39, 8, 39, 6, 39, 8, 39, 6,
30 39, 6, 39, 6, 39, 5, 42, 1, 8, 1, 8, 1, 34, 8, 8, 5, 42, 1, 39, 8, 34, 8, 33, 8, 33, 8, 33, 8,
31 32, 8, 32, 8, 8, 8, 34, 8, 34, 8, 34, 1, 8, 8, 34, 8, 39, 8, 39, 8, 39, 8, 39, 6, 39, 8, 39, 6,
32 39, 6, 39, 6, 39, 5, 42, 1, 8, 1, 34, 3, 8, 7, 8, 1, 42, 8, 28, 8, 28, 1, 4, 8, 41, 8, 37, 8,
33 38, 8, 40, 5, 42, 0, 0,
34];
35static _use_syllable_machine_char_class: [i8; 59] = [
36 0, 1, 2, 2, 3, 4, 2, 2, 2, 2, 2, 5, 6, 7, 8, 2, 2, 2, 9, 2, 2, 2, 10, 11, 12, 13, 14, 15, 16,
37 17, 18, 19, 20, 21, 22, 23, 2, 24, 25, 26, 2, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
38 39, 40, 41, 42, 0, 0,
39];
40static _use_syllable_machine_index_offsets: [i16; 129] = [
41 0, 3, 46, 84, 122, 161, 188, 214, 240, 266, 291, 316, 317, 344, 371, 398, 406, 433, 465, 497,
42 529, 561, 595, 627, 661, 695, 729, 767, 775, 809, 830, 851, 889, 928, 955, 981, 1007, 1033,
43 1058, 1083, 1084, 1111, 1138, 1165, 1173, 1200, 1232, 1264, 1296, 1328, 1362, 1394, 1428, 1462,
44 1496, 1534, 1542, 1550, 1584, 1585, 1587, 1593, 1631, 1669, 1708, 1735, 1761, 1787, 1813, 1838,
45 1863, 1864, 1891, 1918, 1945, 1953, 1980, 2012, 2044, 2076, 2108, 2142, 2174, 2208, 2242, 2276,
46 2314, 2322, 2330, 2364, 2365, 2403, 2442, 2469, 2495, 2521, 2547, 2572, 2597, 2598, 2625, 2652,
47 2679, 2687, 2714, 2746, 2778, 2810, 2842, 2876, 2908, 2942, 2976, 3010, 3048, 3056, 3090, 3096,
48 3098, 3140, 3161, 3182, 3186, 3220, 3250, 3281, 3314, 0, 0,
49];
50static _use_syllable_machine_indices: [i16; 3354] = [
51 1, 0, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 9, 23, 24, 25,
52 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 33, 1, 6, 37, 6, 38, 6, 6, 39, 41, 42, 40, 43, 40,
53 44, 45, 46, 47, 48, 49, 50, 51, 52, 41, 53, 54, 55, 56, 57, 58, 59, 60, 61, 40, 62, 63, 64, 65,
54 62, 40, 40, 40, 40, 66, 40, 40, 65, 41, 42, 40, 43, 40, 44, 45, 46, 47, 48, 49, 50, 51, 52, 41,
55 53, 54, 55, 56, 57, 58, 59, 40, 40, 40, 62, 63, 64, 65, 62, 40, 40, 40, 40, 66, 40, 40, 65, 41,
56 40, 40, 40, 40, 40, 40, 43, 40, 40, 45, 46, 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 58,
57 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 43, 40, 40, 45, 46, 47, 48, 40, 40, 40,
58 40, 40, 40, 40, 40, 40, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 43, 40, 40, 40, 46, 47, 48,
59 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 63, 64, 65, 43, 40, 40, 40, 40,
60 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 63, 64, 65, 43, 40, 40,
61 40, 40, 40, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 63, 64, 65, 43,
62 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 63, 64,
63 43, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
64 64, 43, 43, 40, 40, 40, 46, 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 57, 58, 59, 40, 40, 40,
65 40, 63, 64, 65, 67, 43, 40, 40, 40, 46, 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 58, 59,
66 40, 40, 40, 40, 63, 64, 65, 67, 43, 40, 40, 40, 46, 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40,
67 40, 40, 59, 40, 40, 40, 40, 63, 64, 65, 67, 68, 40, 40, 40, 40, 40, 40, 43, 43, 40, 40, 40, 46,
68 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 63, 64, 65, 67, 43, 40,
69 44, 45, 46, 47, 48, 40, 40, 40, 40, 40, 40, 54, 55, 56, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65,
70 67, 40, 40, 40, 40, 45, 43, 40, 40, 45, 46, 47, 48, 40, 40, 40, 40, 40, 40, 54, 55, 56, 57, 58,
71 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 43, 40, 40, 45, 46, 47, 48, 40, 40, 40,
72 40, 40, 40, 40, 55, 56, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 43, 40,
73 40, 45, 46, 47, 48, 40, 40, 40, 40, 40, 40, 40, 40, 56, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65,
74 67, 40, 40, 40, 40, 45, 69, 40, 43, 40, 44, 45, 46, 47, 48, 40, 50, 51, 40, 40, 40, 54, 55, 56,
75 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 43, 40, 40, 45, 46, 47, 48, 40,
76 40, 40, 40, 40, 40, 40, 40, 40, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45,
77 69, 40, 43, 40, 44, 45, 46, 47, 48, 40, 40, 51, 40, 40, 40, 54, 55, 56, 57, 58, 59, 40, 40, 40,
78 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 69, 40, 43, 40, 44, 45, 46, 47, 48, 40, 40, 40, 40, 40,
79 40, 54, 55, 56, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 40, 40, 40, 40, 45, 69, 40, 43, 40,
80 44, 45, 46, 47, 48, 49, 50, 51, 40, 40, 40, 54, 55, 56, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65,
81 67, 40, 40, 40, 40, 45, 41, 42, 40, 43, 40, 44, 45, 46, 47, 48, 49, 50, 51, 52, 40, 53, 54, 55,
82 56, 57, 58, 59, 40, 40, 40, 62, 63, 64, 65, 62, 40, 40, 40, 40, 66, 40, 40, 65, 41, 40, 40, 40,
83 40, 40, 40, 43, 41, 40, 40, 40, 40, 40, 40, 43, 40, 40, 45, 46, 47, 48, 40, 40, 40, 40, 40, 40,
84 40, 40, 40, 57, 58, 59, 40, 40, 40, 40, 63, 64, 65, 67, 43, 40, 40, 40, 40, 40, 40, 40, 40, 40,
85 40, 40, 40, 40, 40, 40, 40, 40, 40, 60, 61, 43, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
86 40, 40, 40, 40, 40, 40, 40, 61, 5, 71, 70, 72, 70, 73, 74, 75, 76, 77, 78, 79, 80, 81, 5, 82,
87 83, 84, 85, 86, 87, 88, 70, 70, 70, 89, 90, 91, 92, 93, 70, 70, 70, 70, 94, 70, 70, 95, 5, 70,
88 70, 70, 70, 70, 70, 72, 70, 70, 74, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 86, 87, 88,
89 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 72, 70, 70, 74, 75, 76, 77, 70, 70, 70, 70,
90 70, 70, 70, 70, 70, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96, 72, 70, 70, 70, 75, 76, 77, 70,
91 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 90, 91, 92, 72, 70, 70, 70, 70, 76,
92 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 90, 91, 92, 72, 70, 70, 70,
93 70, 70, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 90, 91, 92, 72, 70,
94 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 90, 91, 72,
95 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 91,
96 72, 72, 70, 70, 70, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 86, 87, 88, 70, 70, 70, 70,
97 90, 91, 92, 96, 72, 70, 70, 70, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 87, 88, 70,
98 70, 70, 70, 90, 91, 92, 96, 72, 70, 70, 70, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
99 70, 88, 70, 70, 70, 70, 90, 91, 92, 96, 98, 97, 97, 97, 97, 97, 97, 99, 72, 70, 70, 70, 75, 76,
100 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 90, 91, 92, 96, 72, 70, 73,
101 74, 75, 76, 77, 70, 70, 70, 70, 70, 70, 83, 84, 85, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96,
102 70, 70, 70, 70, 74, 72, 70, 70, 74, 75, 76, 77, 70, 70, 70, 70, 70, 70, 83, 84, 85, 86, 87, 88,
103 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 72, 70, 70, 74, 75, 76, 77, 70, 70, 70, 70,
104 70, 70, 70, 84, 85, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 72, 70, 70,
105 74, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 85, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96,
106 70, 70, 70, 70, 74, 100, 70, 72, 70, 73, 74, 75, 76, 77, 70, 79, 80, 70, 70, 70, 83, 84, 85,
107 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 72, 70, 70, 74, 75, 76, 77, 70,
108 70, 70, 70, 70, 70, 70, 70, 70, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74,
109 100, 70, 72, 70, 73, 74, 75, 76, 77, 70, 70, 80, 70, 70, 70, 83, 84, 85, 86, 87, 88, 70, 70,
110 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 100, 70, 72, 70, 73, 74, 75, 76, 77, 70, 70, 70,
111 70, 70, 70, 83, 84, 85, 86, 87, 88, 70, 70, 70, 70, 90, 91, 92, 96, 70, 70, 70, 70, 74, 100,
112 70, 72, 70, 73, 74, 75, 76, 77, 78, 79, 80, 70, 70, 70, 83, 84, 85, 86, 87, 88, 70, 70, 70, 70,
113 90, 91, 92, 96, 70, 70, 70, 70, 74, 5, 71, 70, 72, 70, 73, 74, 75, 76, 77, 78, 79, 80, 81, 70,
114 82, 83, 84, 85, 86, 87, 88, 70, 70, 70, 89, 90, 91, 92, 93, 70, 70, 70, 70, 94, 70, 70, 95, 5,
115 101, 101, 101, 101, 101, 101, 102, 5, 97, 97, 97, 97, 97, 97, 99, 5, 70, 70, 70, 70, 70, 70,
116 72, 70, 70, 74, 75, 76, 77, 70, 70, 70, 70, 70, 70, 70, 70, 70, 86, 87, 88, 70, 70, 70, 70, 90,
117 91, 92, 96, 102, 104, 105, 7, 106, 106, 106, 106, 107, 108, 109, 70, 72, 70, 110, 111, 112,
118 113, 114, 115, 116, 117, 118, 108, 119, 120, 121, 122, 123, 124, 125, 60, 61, 70, 126, 127,
119 128, 129, 130, 70, 70, 70, 70, 131, 70, 70, 132, 108, 109, 70, 72, 70, 110, 111, 112, 113, 114,
120 115, 116, 117, 118, 108, 119, 120, 121, 122, 123, 124, 125, 70, 70, 70, 126, 127, 128, 129,
121 130, 70, 70, 70, 70, 131, 70, 70, 132, 108, 70, 70, 70, 70, 70, 70, 72, 70, 70, 111, 112, 113,
122 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70,
123 70, 70, 70, 111, 72, 70, 70, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 123, 124,
124 125, 70, 70, 70, 70, 127, 128, 129, 133, 72, 70, 70, 70, 112, 113, 114, 70, 70, 70, 70, 70, 70,
125 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 127, 128, 129, 72, 70, 70, 70, 70, 113, 114, 70, 70,
126 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 127, 128, 129, 72, 70, 70, 70, 70, 70,
127 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 127, 128, 129, 72, 70, 70,
128 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 127, 128, 72,
129 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
130 128, 72, 72, 70, 70, 70, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 123, 124, 125, 70,
131 70, 70, 70, 127, 128, 129, 133, 72, 70, 70, 70, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70,
132 70, 70, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 72, 70, 70, 70, 112, 113, 114, 70, 70,
133 70, 70, 70, 70, 70, 70, 70, 70, 70, 125, 70, 70, 70, 70, 127, 128, 129, 133, 134, 97, 97, 97,
134 97, 97, 97, 99, 72, 70, 70, 70, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
135 70, 70, 70, 70, 127, 128, 129, 133, 72, 70, 110, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70,
136 120, 121, 122, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70, 70, 70, 70, 111, 72, 70,
137 70, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70, 120, 121, 122, 123, 124, 125, 70, 70, 70, 70,
138 127, 128, 129, 133, 70, 70, 70, 70, 111, 72, 70, 70, 111, 112, 113, 114, 70, 70, 70, 70, 70,
139 70, 70, 121, 122, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70, 70, 70, 70, 111, 72,
140 70, 70, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70, 122, 123, 124, 125, 70, 70, 70, 70,
141 127, 128, 129, 133, 70, 70, 70, 70, 111, 135, 70, 72, 70, 110, 111, 112, 113, 114, 70, 116,
142 117, 70, 70, 70, 120, 121, 122, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70, 70, 70,
143 70, 111, 72, 70, 70, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70, 70, 70, 70, 123, 124, 125, 70,
144 70, 70, 70, 127, 128, 129, 133, 70, 70, 70, 70, 111, 135, 70, 72, 70, 110, 111, 112, 113, 114,
145 70, 70, 117, 70, 70, 70, 120, 121, 122, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70,
146 70, 70, 70, 111, 135, 70, 72, 70, 110, 111, 112, 113, 114, 70, 70, 70, 70, 70, 70, 120, 121,
147 122, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 70, 70, 70, 70, 111, 135, 70, 72, 70,
148 110, 111, 112, 113, 114, 115, 116, 117, 70, 70, 70, 120, 121, 122, 123, 124, 125, 70, 70, 70,
149 70, 127, 128, 129, 133, 70, 70, 70, 70, 111, 108, 109, 70, 72, 70, 110, 111, 112, 113, 114,
150 115, 116, 117, 118, 70, 119, 120, 121, 122, 123, 124, 125, 70, 70, 70, 126, 127, 128, 129, 130,
151 70, 70, 70, 70, 131, 70, 70, 132, 108, 101, 101, 101, 101, 101, 101, 102, 108, 97, 97, 97, 97,
152 97, 97, 99, 108, 70, 70, 70, 70, 70, 70, 72, 70, 70, 111, 112, 113, 114, 70, 70, 70, 70, 70,
153 70, 70, 70, 70, 123, 124, 125, 70, 70, 70, 70, 127, 128, 129, 133, 102, 9, 10, 136, 12, 136,
154 14, 15, 16, 17, 18, 19, 20, 21, 22, 9, 23, 24, 25, 26, 27, 28, 29, 136, 136, 136, 33, 34, 35,
155 39, 33, 136, 136, 136, 136, 38, 136, 136, 39, 9, 136, 136, 136, 136, 136, 136, 12, 136, 136,
156 15, 16, 17, 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 27, 28, 29, 136, 136, 136, 136,
157 34, 35, 39, 137, 136, 136, 136, 136, 15, 12, 136, 136, 15, 16, 17, 18, 136, 136, 136, 136, 136,
158 136, 136, 136, 136, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 12, 136, 136, 136, 16, 17,
159 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 34, 35, 39,
160 12, 136, 136, 136, 136, 17, 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
161 136, 136, 136, 136, 34, 35, 39, 12, 136, 136, 136, 136, 136, 18, 136, 136, 136, 136, 136, 136,
162 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 34, 35, 39, 12, 136, 136, 136, 136, 136, 136,
163 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 34, 35, 12,
164 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
165 136, 136, 136, 136, 35, 12, 12, 136, 136, 136, 16, 17, 18, 136, 136, 136, 136, 136, 136, 136,
166 136, 136, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 12, 136, 136, 136, 16, 17, 18, 136,
167 136, 136, 136, 136, 136, 136, 136, 136, 136, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 12,
168 136, 136, 136, 16, 17, 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 29, 136, 136,
169 136, 136, 34, 35, 39, 137, 139, 136, 136, 136, 136, 136, 136, 12, 12, 136, 136, 136, 16, 17,
170 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 34, 35, 39,
171 137, 12, 136, 14, 15, 16, 17, 18, 136, 136, 136, 136, 136, 136, 24, 25, 26, 27, 28, 29, 136,
172 136, 136, 136, 34, 35, 39, 137, 136, 136, 136, 136, 15, 12, 136, 136, 15, 16, 17, 18, 136, 136,
173 136, 136, 136, 136, 24, 25, 26, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 136, 136, 136,
174 136, 15, 12, 136, 136, 15, 16, 17, 18, 136, 136, 136, 136, 136, 136, 136, 25, 26, 27, 28, 29,
175 136, 136, 136, 136, 34, 35, 39, 137, 136, 136, 136, 136, 15, 12, 136, 136, 15, 16, 17, 18, 136,
176 136, 136, 136, 136, 136, 136, 136, 26, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 136,
177 136, 136, 136, 15, 140, 136, 12, 136, 14, 15, 16, 17, 18, 136, 20, 21, 136, 136, 136, 24, 25,
178 26, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 136, 136, 136, 136, 15, 12, 136, 136, 15,
179 16, 17, 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 27, 28, 29, 136, 136, 136, 136, 34,
180 35, 39, 137, 136, 136, 136, 136, 15, 140, 136, 12, 136, 14, 15, 16, 17, 18, 136, 136, 21, 136,
181 136, 136, 24, 25, 26, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137, 136, 136, 136, 136, 15,
182 140, 136, 12, 136, 14, 15, 16, 17, 18, 136, 136, 136, 136, 136, 136, 24, 25, 26, 27, 28, 29,
183 136, 136, 136, 136, 34, 35, 39, 137, 136, 136, 136, 136, 15, 140, 136, 12, 136, 14, 15, 16, 17,
184 18, 19, 20, 21, 136, 136, 136, 24, 25, 26, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39, 137,
185 136, 136, 136, 136, 15, 9, 10, 136, 12, 136, 14, 15, 16, 17, 18, 19, 20, 21, 22, 136, 23, 24,
186 25, 26, 27, 28, 29, 136, 136, 136, 33, 34, 35, 39, 33, 136, 136, 136, 136, 38, 136, 136, 39, 9,
187 136, 136, 136, 136, 136, 136, 12, 9, 136, 136, 136, 136, 136, 136, 12, 136, 136, 15, 16, 17,
188 18, 136, 136, 136, 136, 136, 136, 136, 136, 136, 27, 28, 29, 136, 136, 136, 136, 34, 35, 39,
189 137, 141, 136, 136, 136, 136, 12, 11, 12, 5, 136, 136, 5, 9, 10, 11, 12, 136, 14, 15, 16, 17,
190 18, 19, 20, 21, 22, 9, 23, 24, 25, 26, 27, 28, 29, 30, 31, 136, 33, 34, 35, 39, 33, 136, 136,
191 136, 136, 38, 136, 136, 39, 12, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
192 136, 136, 136, 136, 136, 136, 30, 31, 12, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
193 136, 136, 136, 136, 136, 136, 136, 136, 136, 31, 5, 142, 142, 5, 144, 143, 143, 143, 143, 143,
194 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
195 143, 143, 143, 145, 143, 146, 143, 146, 147, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143,
196 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 1, 145,
197 145, 144, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
198 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 145, 143, 146, 144, 143, 143, 143, 143, 143,
199 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143, 143,
200 143, 143, 143, 145, 143, 146, 143, 146, 41, 42, 40, 43, 40, 44, 45, 46, 47, 48, 49, 50, 51, 52,
201 41, 53, 54, 55, 56, 57, 58, 59, 60, 61, 40, 62, 63, 64, 65, 62, 1, 40, 2, 40, 66, 40, 40, 65,
202 0, 0,
203];
204static _use_syllable_machine_index_defaults: [i16; 129] = [
205 0, 6, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
206 40, 40, 40, 40, 40, 40, 40, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 97, 70, 70, 70, 70,
207 70, 70, 70, 70, 70, 70, 70, 101, 97, 70, 101, 103, 106, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
208 70, 70, 70, 97, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 70, 101, 97, 70, 101, 136, 136, 136,
209 136, 136, 136, 136, 136, 138, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136,
210 136, 136, 136, 136, 136, 136, 136, 136, 136, 142, 143, 143, 143, 143, 40, 0, 0,
211];
212static _use_syllable_machine_cond_targs: [i8; 150] = [
213 1, 122, 0, 1, 2, 31, 1, 59, 61, 90, 91, 116, 1, 118, 104, 92, 93, 94, 95, 108, 110, 111, 112,
214 113, 105, 106, 107, 99, 100, 101, 119, 120, 121, 114, 96, 97, 98, 126, 115, 98, 1, 3, 4, 1, 17,
215 5, 6, 7, 8, 21, 23, 24, 25, 26, 18, 19, 20, 12, 13, 14, 29, 30, 27, 9, 10, 11, 28, 15, 16, 22,
216 1, 32, 1, 45, 33, 34, 35, 36, 49, 51, 52, 53, 54, 46, 47, 48, 40, 41, 42, 55, 37, 38, 39, 56,
217 57, 58, 43, 1, 44, 1, 50, 1, 1, 1, 60, 1, 1, 1, 62, 63, 76, 64, 65, 66, 67, 80, 82, 83, 84, 85,
218 77, 78, 79, 71, 72, 73, 86, 68, 69, 70, 87, 88, 89, 74, 75, 81, 1, 102, 1, 103, 109, 117, 1, 1,
219 1, 123, 124, 125, 0, 0,
220];
221static _use_syllable_machine_cond_actions: [i8; 150] = [
222 1, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
223 0, 0, 0, 0, 6, 7, 0, 8, 9, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
224 0, 0, 0, 0, 0, 0, 0, 11, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
225 0, 0, 0, 13, 0, 14, 0, 15, 16, 17, 0, 18, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 0, 22, 0, 0, 0, 23, 24, 25, 0, 0, 0, 0, 0,
227];
228static _use_syllable_machine_to_state_actions: [i8; 129] = [
229 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
230 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
231 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
233 0,
234];
235static _use_syllable_machine_from_state_actions: [i8; 129] = [
236 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
238 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
239 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
240 0,
241];
242static _use_syllable_machine_eof_trans: [i16; 129] = [
243 1, 4, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41,
244 41, 41, 41, 41, 41, 41, 41, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 98, 71, 71, 71, 71,
245 71, 71, 71, 71, 71, 71, 71, 102, 98, 71, 102, 104, 107, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71,
246 71, 71, 71, 98, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 71, 102, 98, 71, 102, 137, 137, 137,
247 137, 137, 137, 137, 137, 139, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, 137,
248 137, 137, 137, 137, 137, 137, 137, 137, 137, 143, 144, 144, 144, 144, 41, 0, 0,
249];
250static use_syllable_machine_start: i32 = 1;
251static use_syllable_machine_first_final: i32 = 1;
252static use_syllable_machine_error: i32 = -1;
253static use_syllable_machine_en_main: i32 = 1;
254#[derive(Clone, Copy)]
255pub enum SyllableType {
256 IndependentCluster,
257 ViramaTerminatedCluster,
258 SakotTerminatedCluster,
259 StandardCluster,
260 NumberJoinerTerminatedCluster,
261 NumeralCluster,
262 SymbolCluster,
263 HieroglyphCluster,
264 BrokenCluster,
265 NonCluster,
266}
267
268pub fn find_syllables(buffer: &mut hb_buffer_t) {
269 let mut cs = 0;
270 let infos = Cell::as_slice_of_cells(Cell::from_mut(&mut buffer.info));
271 let p0 = MachineCursor::new(infos, included);
272 let mut p = p0;
273 let mut ts = p0;
274 let mut te = p0;
275 let mut act = 0;
276 let pe = p.end();
277 let eof = p.end();
278 let mut syllable_serial = 1u8;
279
280 macro_rules! found_syllable {
284 ($kind:expr) => {{
285 found_syllable(ts.index(), te.index(), &mut syllable_serial, $kind, infos);
286 }};
287 }
288
289 {
290 cs = (use_syllable_machine_start) as i32;
291 ts = p0;
292 te = p0;
293 act = 0;
294 }
295
296 {
297 let mut _trans = 0;
298 let mut _keys: i32 = 0;
299 let mut _inds: i32 = 0;
300 let mut _ic = 0;
301 '_resume: while (p != pe || p == eof) {
302 '_again: while (true) {
303 match (_use_syllable_machine_from_state_actions[(cs) as usize]) {
304 3 => {
305 ts = p;
306 }
307
308 _ => {}
309 }
310 if (p == eof) {
311 {
312 if (_use_syllable_machine_eof_trans[(cs) as usize] > 0) {
313 {
314 _trans =
315 (_use_syllable_machine_eof_trans)[(cs) as usize] as u32 - 1;
316 }
317 }
318 }
319 } else {
320 {
321 _keys = (cs << 1) as i32;
322 _inds = (_use_syllable_machine_index_offsets[(cs) as usize]) as i32;
323 if ((infos[p.index()].get().use_category() as u8) <= 56) {
324 {
325 _ic = (_use_syllable_machine_char_class)[((infos[p.index()]
326 .get()
327 .use_category()
328 as u8)
329 as i32
330 - 0)
331 as usize] as i32;
332 if (_ic
333 <= (_use_syllable_machine_trans_keys[(_keys + 1) as usize])
334 as i32
335 && _ic
336 >= (_use_syllable_machine_trans_keys[(_keys) as usize])
337 as i32)
338 {
339 _trans = (_use_syllable_machine_indices[(_inds
340 + (_ic
341 - (_use_syllable_machine_trans_keys[(_keys) as usize])
342 as i32)
343 as i32)
344 as usize])
345 as u32;
346 } else {
347 _trans = (_use_syllable_machine_index_defaults)[(cs) as usize]
348 as u32;
349 }
350 }
351 } else {
352 {
353 _trans =
354 (_use_syllable_machine_index_defaults)[(cs) as usize] as u32;
355 }
356 }
357 }
358 }
359 cs = (_use_syllable_machine_cond_targs)[(_trans) as usize] as i32;
360 if (_use_syllable_machine_cond_actions[(_trans) as usize] != 0) {
361 {
362 match (_use_syllable_machine_cond_actions[(_trans) as usize]) {
363 7 => {
364 te = p + 1;
365 }
366 16 => {
367 te = p + 1;
368 {
369 found_syllable!(SyllableType::ViramaTerminatedCluster);
370 }
371 }
372 14 => {
373 te = p + 1;
374 {
375 found_syllable!(SyllableType::SakotTerminatedCluster);
376 }
377 }
378 12 => {
379 te = p + 1;
380 {
381 found_syllable!(SyllableType::StandardCluster);
382 }
383 }
384 20 => {
385 te = p + 1;
386 {
387 found_syllable!(SyllableType::NumberJoinerTerminatedCluster);
388 }
389 }
390 18 => {
391 te = p + 1;
392 {
393 found_syllable!(SyllableType::NumeralCluster);
394 }
395 }
396 10 => {
397 te = p + 1;
398 {
399 found_syllable!(SyllableType::SymbolCluster);
400 }
401 }
402 25 => {
403 te = p + 1;
404 {
405 found_syllable!(SyllableType::HieroglyphCluster);
406 }
407 }
408 5 => {
409 te = p + 1;
410 {
411 found_syllable!(SyllableType::BrokenCluster);
412 buffer.scratch_flags |=
413 HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
414 }
415 }
416 4 => {
417 te = p + 1;
418 {
419 found_syllable!(SyllableType::NonCluster);
420 }
421 }
422 15 => {
423 te = p;
424 p = p - 1;
425 {
426 found_syllable!(SyllableType::ViramaTerminatedCluster);
427 }
428 }
429 13 => {
430 te = p;
431 p = p - 1;
432 {
433 found_syllable!(SyllableType::SakotTerminatedCluster);
434 }
435 }
436 11 => {
437 te = p;
438 p = p - 1;
439 {
440 found_syllable!(SyllableType::StandardCluster);
441 }
442 }
443 19 => {
444 te = p;
445 p = p - 1;
446 {
447 found_syllable!(SyllableType::NumberJoinerTerminatedCluster);
448 }
449 }
450 17 => {
451 te = p;
452 p = p - 1;
453 {
454 found_syllable!(SyllableType::NumeralCluster);
455 }
456 }
457 9 => {
458 te = p;
459 p = p - 1;
460 {
461 found_syllable!(SyllableType::SymbolCluster);
462 }
463 }
464 24 => {
465 te = p;
466 p = p - 1;
467 {
468 found_syllable!(SyllableType::HieroglyphCluster);
469 }
470 }
471 21 => {
472 te = p;
473 p = p - 1;
474 {
475 found_syllable!(SyllableType::BrokenCluster);
476 buffer.scratch_flags |=
477 HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
478 }
479 }
480 23 => {
481 te = p;
482 p = p - 1;
483 {
484 found_syllable!(SyllableType::NonCluster);
485 }
486 }
487 1 => {
488 p = (te) - 1;
489 {
490 found_syllable!(SyllableType::SymbolCluster);
491 }
492 }
493 22 => match (act) {
494 8 => {
495 p = (te) - 1;
496 {
497 found_syllable!(SyllableType::NonCluster);
498 }
499 }
500 9 => {
501 p = (te) - 1;
502 {
503 found_syllable!(SyllableType::BrokenCluster);
504 buffer.scratch_flags |=
505 HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
506 }
507 }
508
509 _ => {}
510 },
511 6 => {
512 {
513 {
514 te = p + 1;
515 }
516 }
517 {
518 {
519 act = 8;
520 }
521 }
522 }
523 8 => {
524 {
525 {
526 te = p + 1;
527 }
528 }
529 {
530 {
531 act = 9;
532 }
533 }
534 }
535
536 _ => {}
537 }
538 }
539 }
540 break '_again;
541 }
542 if (p == eof) {
543 {
544 if (cs >= 1) {
545 break '_resume;
546 }
547 }
548 } else {
549 {
550 match (_use_syllable_machine_to_state_actions[(cs) as usize]) {
551 2 => {
552 ts = p0;
553 }
554
555 _ => {}
556 }
557 p += 1;
558 continue '_resume;
559 }
560 }
561 break '_resume;
562 }
563 }
564}
565
566#[inline]
567fn found_syllable(
568 start: usize,
569 end: usize,
570 syllable_serial: &mut u8,
571 kind: SyllableType,
572 buffer: &[Cell<GlyphInfo>],
573) {
574 for i in start..end {
575 let mut glyph = buffer[i].get();
576 glyph.set_syllable((*syllable_serial << 4) | kind as u8);
577 buffer[i].set(glyph);
578 }
579
580 *syllable_serial += 1;
581
582 if *syllable_serial == 16 {
583 *syllable_serial = 1;
584 }
585}
586
587fn not_ccs_default_ignorable(i: &GlyphInfo) -> bool {
588 i.use_category() != category::CGJ
589}
590
591fn included(infos: &[Cell<GlyphInfo>], i: usize) -> bool {
592 let glyph = infos[i].get();
593 if !not_ccs_default_ignorable(&glyph) {
594 return false;
595 }
596 if glyph.use_category() == category::ZWNJ {
597 for glyph2 in &infos[i + 1..] {
598 if not_ccs_default_ignorable(&glyph2.get()) {
599 return !glyph2.get().is_unicode_mark();
600 }
601 }
602 }
603 true
604}