Skip to main content

harfrust/hb/
ot_shaper_use_machine.rs

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    // Please manually replace assignments of 0 to p, ts, and te
281    // to use p0 instead
282
283    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}