rustybuzz/hb/
ot_shaper_indic_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::comparison_chain,
9    clippy::double_parens,
10    clippy::unnecessary_cast,
11    clippy::single_match,
12    clippy::never_loop
13)]
14
15use super::buffer::{hb_buffer_t, HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE};
16
17static _indic_syllable_machine_actions: [i8; 44] = [
18    0, 1, 0, 1, 1, 1, 2, 1, 6, 1, 7, 1, 8, 1, 9, 1, 10, 1, 11, 1, 12, 1, 13, 1, 14, 1, 15, 1, 16,
19    1, 17, 1, 18, 2, 2, 3, 2, 2, 4, 2, 2, 5, 0, 0,
20];
21static _indic_syllable_machine_key_offsets: [i16; 140] = [
22    0, 1, 7, 12, 17, 18, 24, 31, 37, 38, 43, 48, 49, 55, 62, 69, 76, 77, 82, 87, 88, 94, 100, 107,
23    108, 113, 118, 119, 125, 131, 136, 137, 155, 165, 174, 182, 188, 192, 195, 196, 198, 205, 211,
24    217, 225, 232, 238, 242, 249, 253, 258, 262, 271, 281, 291, 300, 308, 314, 324, 333, 341, 347,
25    350, 351, 353, 360, 366, 374, 381, 387, 391, 398, 402, 406, 411, 415, 424, 434, 440, 449, 458,
26    466, 472, 482, 488, 491, 492, 494, 501, 507, 515, 522, 528, 532, 541, 548, 552, 556, 561, 565,
27    575, 582, 588, 598, 607, 615, 621, 631, 637, 640, 641, 643, 650, 656, 664, 671, 677, 681, 690,
28    697, 701, 705, 710, 714, 729, 739, 753, 761, 765, 769, 770, 772, 782, 787, 791, 794, 795, 797,
29    0, 0,
30];
31static _indic_syllable_machine_trans_keys: [u8; 802] = [
32    8, 4, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6, 13, 4, 7, 8, 13, 5, 6, 4, 7, 8, 12, 13,
33    5, 6, 4, 7, 8, 13, 5, 6, 8, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6, 13, 4, 7, 8, 13, 5, 6, 4, 7, 8, 12,
34    13, 5, 6, 4, 7, 8, 12, 13, 5, 6, 4, 7, 8, 12, 13, 5, 6, 8, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6, 13,
35    4, 7, 8, 13, 5, 6, 4, 7, 8, 13, 5, 6, 4, 7, 8, 12, 13, 5, 6, 8, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6,
36    13, 4, 7, 8, 13, 5, 6, 4, 7, 8, 13, 5, 6, 7, 8, 13, 5, 6, 8, 1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 13,
37    14, 15, 16, 17, 18, 10, 11, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 3, 4, 7, 8, 9, 13, 16, 5, 6, 4, 7,
38    8, 9, 13, 16, 5, 6, 1, 5, 6, 8, 9, 15, 8, 9, 5, 6, 5, 8, 9, 9, 5, 9, 1, 3, 8, 9, 15, 5, 6, 1,
39    8, 9, 15, 5, 6, 1, 5, 6, 8, 9, 15, 3, 4, 7, 8, 9, 13, 5, 6, 4, 7, 8, 9, 13, 5, 6, 7, 8, 9, 13,
40    5, 6, 5, 8, 9, 13, 4, 7, 8, 9, 13, 5, 6, 5, 6, 8, 9, 3, 8, 9, 5, 6, 5, 6, 8, 9, 3, 4, 7, 8, 9,
41    13, 16, 5, 6, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 3, 4, 5, 6, 7,
42    8, 9, 13, 16, 4, 5, 6, 7, 8, 9, 13, 16, 1, 5, 6, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 3,
43    4, 7, 8, 9, 13, 16, 5, 6, 4, 7, 8, 9, 13, 16, 5, 6, 1, 5, 6, 8, 9, 15, 5, 8, 9, 9, 5, 9, 1, 3,
44    8, 9, 15, 5, 6, 1, 8, 9, 15, 5, 6, 3, 4, 7, 8, 9, 13, 5, 6, 4, 7, 8, 9, 13, 5, 6, 7, 8, 9, 13,
45    5, 6, 5, 8, 9, 13, 4, 7, 8, 9, 13, 5, 6, 5, 6, 8, 9, 8, 9, 5, 6, 3, 8, 9, 5, 6, 5, 6, 8, 9, 3,
46    4, 7, 8, 9, 13, 16, 5, 6, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 4, 7, 8, 13, 5, 6, 3, 4, 5, 6, 7, 8,
47    9, 13, 16, 3, 4, 7, 8, 9, 13, 16, 5, 6, 4, 7, 8, 9, 13, 16, 5, 6, 1, 5, 6, 8, 9, 15, 3, 4, 5,
48    6, 7, 8, 9, 12, 13, 16, 1, 5, 6, 8, 9, 15, 5, 8, 9, 9, 5, 9, 1, 3, 8, 9, 15, 5, 6, 1, 8, 9, 15,
49    5, 6, 3, 4, 7, 8, 9, 13, 5, 6, 4, 7, 8, 9, 13, 5, 6, 7, 8, 9, 13, 5, 6, 5, 8, 9, 13, 3, 4, 7,
50    8, 9, 13, 16, 5, 6, 4, 7, 8, 9, 13, 5, 6, 5, 6, 8, 9, 8, 9, 5, 6, 3, 8, 9, 5, 6, 5, 6, 8, 9, 3,
51    4, 5, 6, 7, 8, 9, 12, 13, 16, 4, 7, 8, 12, 13, 5, 6, 4, 7, 8, 13, 5, 6, 3, 4, 5, 6, 7, 8, 9,
52    12, 13, 16, 3, 4, 7, 8, 9, 13, 16, 5, 6, 4, 7, 8, 9, 13, 16, 5, 6, 1, 5, 6, 8, 9, 15, 3, 4, 5,
53    6, 7, 8, 9, 12, 13, 16, 1, 5, 6, 8, 9, 15, 5, 8, 9, 9, 5, 9, 1, 3, 8, 9, 15, 5, 6, 1, 8, 9, 15,
54    5, 6, 3, 4, 7, 8, 9, 13, 5, 6, 4, 7, 8, 9, 13, 5, 6, 7, 8, 9, 13, 5, 6, 5, 8, 9, 13, 3, 4, 7,
55    8, 9, 13, 16, 5, 6, 4, 7, 8, 9, 13, 5, 6, 5, 6, 8, 9, 8, 9, 5, 6, 3, 8, 9, 5, 6, 5, 6, 8, 9, 1,
56    2, 3, 4, 5, 6, 7, 8, 9, 12, 13, 15, 16, 10, 11, 3, 4, 5, 6, 7, 8, 9, 12, 13, 16, 1, 2, 3, 4, 5,
57    6, 7, 8, 9, 11, 12, 13, 15, 16, 4, 7, 8, 9, 12, 13, 5, 6, 5, 8, 9, 13, 5, 8, 9, 13, 9, 5, 9, 1,
58    3, 4, 7, 8, 9, 13, 15, 5, 6, 3, 8, 9, 5, 6, 8, 9, 5, 6, 5, 8, 9, 9, 5, 9, 1, 10, 15, 0, 0,
59];
60static _indic_syllable_machine_single_lengths: [i8; 140] = [
61    1, 4, 3, 3, 1, 4, 5, 4, 1, 3, 3, 1, 4, 5, 5, 5, 1, 3, 3, 1, 4, 4, 5, 1, 3, 3, 1, 4, 4, 3, 1,
62    16, 10, 7, 6, 6, 2, 3, 1, 2, 5, 4, 6, 6, 5, 4, 4, 5, 4, 3, 4, 7, 10, 10, 9, 8, 6, 10, 7, 6, 6,
63    3, 1, 2, 5, 4, 6, 5, 4, 4, 5, 4, 2, 3, 4, 7, 10, 4, 9, 7, 6, 6, 10, 6, 3, 1, 2, 5, 4, 6, 5, 4,
64    4, 7, 5, 4, 2, 3, 4, 10, 5, 4, 10, 7, 6, 6, 10, 6, 3, 1, 2, 5, 4, 6, 5, 4, 4, 7, 5, 4, 2, 3, 4,
65    13, 10, 14, 6, 4, 4, 1, 2, 8, 3, 2, 3, 1, 2, 3, 0, 0,
66];
67static _indic_syllable_machine_range_lengths: [i8; 140] = [
68    0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1,
69    0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0,
70    1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0,
71    1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0,
72    0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0,
73];
74static _indic_syllable_machine_index_offsets: [i16; 140] = [
75    0, 2, 8, 13, 18, 20, 26, 33, 39, 41, 46, 51, 53, 59, 66, 73, 80, 82, 87, 92, 94, 100, 106, 113,
76    115, 120, 125, 127, 133, 139, 144, 146, 164, 175, 184, 192, 199, 203, 207, 209, 212, 219, 225,
77    232, 240, 247, 253, 258, 265, 270, 275, 280, 289, 300, 311, 321, 330, 337, 348, 357, 365, 372,
78    376, 378, 381, 388, 394, 402, 409, 415, 420, 427, 432, 436, 441, 446, 455, 466, 472, 482, 491,
79    499, 506, 517, 524, 528, 530, 533, 540, 546, 554, 561, 567, 572, 581, 588, 593, 597, 602, 607,
80    618, 625, 631, 642, 651, 659, 666, 677, 684, 688, 690, 693, 700, 706, 714, 721, 727, 732, 741,
81    748, 753, 757, 762, 767, 782, 793, 808, 816, 821, 826, 828, 831, 841, 846, 850, 854, 856, 859,
82    0, 0,
83];
84static _indic_syllable_machine_cond_targs: [i16; 1003] = [
85    37, 31, 42, 43, 46, 43, 2, 31, 43, 4, 43, 2, 31, 43, 46, 43, 2, 31, 43, 31, 50, 43, 46, 43, 2,
86    31, 42, 43, 46, 51, 43, 2, 31, 60, 66, 69, 66, 9, 31, 61, 31, 66, 11, 66, 9, 31, 66, 69, 66, 9,
87    31, 66, 31, 74, 66, 69, 66, 9, 31, 60, 66, 69, 75, 66, 9, 31, 60, 66, 69, 78, 66, 9, 31, 83,
88    89, 92, 93, 89, 17, 31, 84, 31, 89, 19, 89, 17, 31, 89, 92, 89, 17, 31, 89, 31, 83, 89, 92, 89,
89    17, 31, 98, 89, 92, 89, 17, 31, 107, 113, 116, 117, 113, 24, 31, 108, 31, 113, 26, 113, 24, 31,
90    113, 116, 113, 24, 31, 113, 31, 107, 113, 116, 113, 24, 31, 122, 113, 116, 113, 24, 31, 89,
91    127, 89, 17, 31, 134, 31, 32, 53, 79, 81, 100, 101, 89, 92, 85, 93, 89, 123, 124, 94, 132, 137,
92    102, 31, 33, 35, 6, 52, 43, 46, 38, 51, 43, 47, 31, 34, 35, 43, 46, 38, 43, 47, 1, 31, 35, 43,
93    46, 38, 43, 47, 1, 31, 32, 36, 40, 37, 38, 32, 31, 37, 38, 0, 31, 38, 39, 38, 31, 38, 31, 38,
94    38, 31, 32, 41, 37, 38, 32, 0, 31, 32, 37, 38, 32, 0, 31, 32, 0, 40, 37, 38, 32, 31, 44, 45,
95    43, 46, 38, 43, 3, 31, 45, 43, 46, 38, 43, 3, 31, 43, 46, 38, 43, 3, 31, 38, 39, 38, 43, 31,
96    48, 43, 46, 38, 43, 5, 31, 36, 49, 37, 38, 31, 36, 37, 38, 0, 31, 0, 49, 37, 38, 31, 33, 35,
97    43, 46, 38, 43, 47, 1, 31, 33, 35, 6, 1, 43, 46, 38, 51, 43, 47, 31, 54, 56, 14, 77, 66, 69,
98    62, 78, 66, 70, 31, 55, 56, 7, 77, 66, 69, 62, 66, 70, 31, 56, 7, 77, 66, 69, 62, 66, 70, 31,
99    57, 72, 64, 61, 62, 57, 31, 58, 56, 13, 76, 66, 69, 62, 75, 66, 70, 31, 59, 56, 66, 69, 62, 66,
100    70, 7, 31, 56, 66, 69, 62, 66, 70, 7, 31, 57, 8, 64, 61, 62, 57, 31, 62, 63, 62, 31, 62, 31,
101    62, 62, 31, 57, 65, 61, 62, 57, 8, 31, 57, 61, 62, 57, 8, 31, 67, 68, 66, 69, 62, 66, 10, 31,
102    68, 66, 69, 62, 66, 10, 31, 66, 69, 62, 66, 10, 31, 62, 63, 62, 66, 31, 71, 66, 69, 62, 66, 12,
103    31, 72, 73, 61, 62, 31, 61, 62, 8, 31, 72, 61, 62, 8, 31, 8, 73, 61, 62, 31, 58, 56, 66, 69,
104    62, 66, 70, 7, 31, 58, 56, 13, 7, 66, 69, 62, 75, 66, 70, 31, 60, 66, 69, 66, 9, 31, 54, 56, 7,
105    77, 66, 69, 62, 66, 70, 31, 80, 81, 89, 92, 85, 89, 94, 20, 31, 81, 89, 92, 85, 89, 94, 20, 31,
106    82, 96, 87, 84, 85, 82, 31, 79, 81, 15, 99, 89, 92, 85, 93, 89, 94, 31, 82, 16, 87, 84, 85, 82,
107    31, 85, 86, 85, 31, 85, 31, 85, 85, 31, 82, 88, 84, 85, 82, 16, 31, 82, 84, 85, 82, 16, 31, 90,
108    91, 89, 92, 85, 89, 18, 31, 91, 89, 92, 85, 89, 18, 31, 89, 92, 85, 89, 18, 31, 85, 86, 85, 89,
109    31, 79, 81, 89, 92, 85, 89, 94, 20, 31, 95, 89, 92, 85, 89, 21, 31, 96, 97, 84, 85, 31, 84, 85,
110    16, 31, 96, 84, 85, 16, 31, 16, 97, 84, 85, 31, 79, 81, 15, 20, 89, 92, 85, 93, 89, 94, 31, 83,
111    89, 92, 93, 89, 17, 31, 83, 89, 92, 89, 17, 31, 103, 105, 22, 27, 113, 116, 109, 117, 113, 118,
112    31, 104, 105, 113, 116, 109, 113, 118, 27, 31, 105, 113, 116, 109, 113, 118, 27, 31, 106, 120,
113    111, 108, 109, 106, 31, 103, 105, 22, 102, 113, 116, 109, 117, 113, 118, 31, 106, 23, 111, 108,
114    109, 106, 31, 109, 110, 109, 31, 109, 31, 109, 109, 31, 106, 112, 108, 109, 106, 23, 31, 106,
115    108, 109, 106, 23, 31, 114, 115, 113, 116, 109, 113, 25, 31, 115, 113, 116, 109, 113, 25, 31,
116    113, 116, 109, 113, 25, 31, 109, 110, 109, 113, 31, 103, 105, 113, 116, 109, 113, 118, 27, 31,
117    119, 113, 116, 109, 113, 28, 31, 120, 121, 108, 109, 31, 108, 109, 23, 31, 120, 108, 109, 23,
118    31, 23, 121, 108, 109, 31, 32, 53, 79, 81, 15, 20, 89, 92, 85, 93, 89, 32, 94, 102, 31, 33,
119    125, 6, 52, 43, 46, 38, 51, 43, 47, 31, 32, 53, 79, 81, 126, 131, 89, 128, 129, 102, 93, 89,
120    32, 94, 31, 83, 89, 128, 38, 93, 89, 29, 31, 38, 39, 38, 89, 31, 129, 130, 129, 89, 31, 129,
121    31, 129, 129, 31, 32, 41, 83, 89, 128, 38, 89, 32, 29, 31, 133, 134, 135, 30, 31, 134, 135, 30,
122    31, 135, 136, 135, 31, 135, 31, 135, 135, 31, 32, 102, 32, 31, 31, 31, 31, 31, 31, 31, 31, 31,
123    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
124    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
125    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
126    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
127    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
128    31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
129];
130static _indic_syllable_machine_cond_actions: [i8; 1003] = [
131    0, 21, 5, 5, 0, 5, 0, 21, 5, 0, 5, 0, 21, 5, 0, 5, 0, 21, 5, 21, 5, 5, 0, 5, 0, 21, 5, 5, 0, 5,
132    5, 0, 21, 5, 5, 0, 5, 0, 23, 0, 23, 5, 0, 5, 0, 23, 5, 0, 5, 0, 23, 5, 23, 5, 5, 0, 5, 0, 23,
133    5, 5, 0, 5, 5, 0, 23, 5, 5, 0, 5, 5, 0, 23, 5, 36, 0, 36, 36, 0, 29, 0, 29, 36, 0, 36, 0, 31,
134    36, 0, 36, 0, 29, 36, 31, 5, 36, 0, 36, 0, 29, 5, 36, 0, 36, 0, 29, 5, 5, 0, 5, 5, 0, 25, 0,
135    25, 5, 0, 5, 0, 25, 5, 0, 5, 0, 25, 5, 25, 5, 5, 0, 5, 0, 25, 5, 5, 0, 5, 0, 25, 36, 0, 36, 0,
136    21, 0, 27, 5, 5, 36, 0, 39, 39, 36, 0, 0, 36, 36, 36, 5, 36, 5, 0, 5, 7, 5, 0, 0, 5, 5, 0, 0,
137    5, 5, 5, 9, 5, 0, 5, 0, 0, 5, 5, 0, 9, 0, 5, 0, 0, 5, 5, 0, 9, 5, 5, 5, 0, 0, 5, 9, 0, 0, 0, 9,
138    0, 0, 0, 9, 0, 9, 0, 0, 9, 5, 5, 0, 0, 5, 0, 9, 5, 0, 0, 5, 0, 9, 5, 0, 5, 0, 0, 5, 9, 5, 5, 5,
139    0, 0, 5, 0, 9, 5, 5, 0, 0, 5, 0, 9, 5, 0, 0, 5, 0, 9, 0, 0, 0, 5, 9, 0, 5, 0, 0, 5, 0, 9, 5, 5,
140    0, 0, 9, 5, 0, 0, 0, 9, 0, 5, 0, 0, 9, 5, 0, 5, 0, 0, 5, 5, 0, 9, 5, 0, 0, 0, 5, 0, 0, 5, 5, 5,
141    9, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 11, 5, 0, 0, 5, 5, 0, 0, 5, 5, 11, 0, 0, 5, 5, 0, 0, 5, 5, 11,
142    5, 5, 5, 0, 0, 5, 11, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 11, 5, 0, 5, 0, 0, 5, 5, 0, 11, 0, 5, 0, 0,
143    5, 5, 0, 11, 5, 0, 5, 0, 0, 5, 11, 0, 0, 0, 11, 0, 11, 0, 0, 11, 5, 5, 0, 0, 5, 0, 11, 5, 0, 0,
144    5, 0, 11, 5, 5, 5, 0, 0, 5, 0, 11, 5, 5, 0, 0, 5, 0, 11, 5, 0, 0, 5, 0, 11, 0, 0, 0, 5, 11, 0,
145    5, 0, 0, 5, 0, 11, 5, 5, 0, 0, 11, 0, 0, 0, 11, 5, 0, 0, 0, 11, 0, 5, 0, 0, 11, 5, 0, 5, 0, 0,
146    5, 5, 0, 11, 5, 0, 0, 0, 5, 0, 0, 5, 5, 5, 11, 5, 5, 0, 5, 0, 11, 5, 0, 0, 5, 5, 0, 0, 5, 5,
147    11, 36, 0, 36, 0, 0, 36, 36, 0, 17, 0, 36, 0, 0, 36, 36, 0, 17, 36, 5, 5, 0, 0, 36, 17, 36, 0,
148    0, 36, 36, 0, 0, 36, 36, 36, 17, 36, 0, 5, 0, 0, 36, 17, 0, 0, 0, 17, 0, 17, 0, 0, 17, 36, 5,
149    0, 0, 36, 0, 17, 36, 0, 0, 36, 0, 17, 36, 36, 36, 0, 0, 36, 0, 17, 36, 36, 0, 0, 36, 0, 17, 36,
150    0, 0, 36, 0, 17, 0, 0, 0, 36, 17, 36, 0, 36, 0, 0, 36, 36, 0, 17, 0, 36, 0, 0, 36, 0, 17, 5, 5,
151    0, 0, 17, 0, 0, 0, 17, 5, 0, 0, 0, 17, 0, 5, 0, 0, 17, 36, 0, 0, 0, 36, 0, 0, 36, 36, 36, 17,
152    5, 36, 0, 36, 36, 0, 19, 5, 36, 0, 36, 0, 19, 5, 0, 0, 0, 5, 0, 0, 5, 5, 5, 13, 5, 0, 5, 0, 0,
153    5, 5, 0, 13, 0, 5, 0, 0, 5, 5, 0, 13, 5, 5, 5, 0, 0, 5, 13, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 13,
154    5, 0, 5, 0, 0, 5, 13, 0, 0, 0, 13, 0, 13, 0, 0, 13, 5, 5, 0, 0, 5, 0, 13, 5, 0, 0, 5, 0, 13, 5,
155    5, 5, 0, 0, 5, 0, 13, 5, 5, 0, 0, 5, 0, 13, 5, 0, 0, 5, 0, 13, 0, 0, 0, 5, 13, 5, 0, 5, 0, 0,
156    5, 5, 0, 13, 0, 5, 0, 0, 5, 0, 13, 5, 5, 0, 0, 13, 0, 0, 0, 13, 5, 0, 0, 0, 13, 0, 5, 0, 0, 13,
157    5, 5, 36, 0, 0, 0, 36, 0, 0, 36, 36, 5, 36, 5, 17, 5, 0, 0, 5, 5, 0, 0, 5, 5, 5, 9, 5, 5, 36,
158    0, 33, 33, 36, 0, 0, 5, 36, 36, 5, 36, 9, 5, 36, 0, 0, 36, 36, 0, 9, 0, 0, 0, 36, 9, 0, 0, 0,
159    36, 9, 0, 9, 0, 0, 9, 5, 5, 5, 36, 0, 0, 36, 5, 0, 9, 5, 0, 0, 0, 15, 0, 0, 0, 15, 0, 0, 0, 15,
160    0, 15, 0, 0, 15, 5, 5, 5, 19, 21, 21, 21, 21, 21, 21, 21, 23, 23, 23, 23, 23, 23, 23, 23, 29,
161    29, 31, 29, 31, 29, 29, 25, 25, 25, 25, 25, 25, 25, 21, 27, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
162    9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
163    11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
164    17, 17, 17, 17, 17, 17, 17, 19, 19, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13,
165    13, 13, 13, 13, 13, 13, 17, 9, 9, 9, 9, 9, 9, 9, 9, 15, 15, 15, 15, 15, 19, 0, 0,
166];
167static _indic_syllable_machine_to_state_actions: [i8; 140] = [
168    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, 1,
169    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,
170    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,
171    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,
172    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
173];
174static _indic_syllable_machine_from_state_actions: [i8; 140] = [
175    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, 3,
176    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,
177    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,
178    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,
179    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
180];
181static _indic_syllable_machine_eof_trans: [i16; 140] = [
182    864, 865, 866, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 877, 878, 879, 880, 881, 882,
183    883, 884, 885, 886, 887, 888, 889, 890, 891, 892, 893, 894, 895, 896, 897, 898, 899, 900, 901,
184    902, 903, 904, 905, 906, 907, 908, 909, 910, 911, 912, 913, 914, 915, 916, 917, 918, 919, 920,
185    921, 922, 923, 924, 925, 926, 927, 928, 929, 930, 931, 932, 933, 934, 935, 936, 937, 938, 939,
186    940, 941, 942, 943, 944, 945, 946, 947, 948, 949, 950, 951, 952, 953, 954, 955, 956, 957, 958,
187    959, 960, 961, 962, 963, 964, 965, 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, 976, 977,
188    978, 979, 980, 981, 982, 983, 984, 985, 986, 987, 988, 989, 990, 991, 992, 993, 994, 995, 996,
189    997, 998, 999, 1000, 1001, 0, 0,
190];
191static indic_syllable_machine_start: i32 = 31;
192static indic_syllable_machine_first_final: i32 = 31;
193static indic_syllable_machine_error: i32 = -1;
194static indic_syllable_machine_en_main: i32 = 31;
195#[derive(Clone, Copy)]
196pub enum SyllableType {
197    ConsonantSyllable = 0,
198    VowelSyllable,
199    StandaloneCluster,
200    SymbolCluster,
201    BrokenCluster,
202    NonIndicCluster,
203}
204
205pub fn find_syllables_indic(buffer: &mut hb_buffer_t) {
206    let mut cs = 0;
207    let mut ts = 0;
208    let mut te = 0;
209    let mut act = 0;
210    let mut p = 0;
211    let pe = buffer.len;
212    let eof = buffer.len;
213    let mut syllable_serial = 1u8;
214
215    macro_rules! found_syllable {
216        ($kind:expr) => {{
217            found_syllable(ts, te, &mut syllable_serial, $kind, buffer)
218        }};
219    }
220
221    {
222        cs = (indic_syllable_machine_start) as i32;
223        ts = 0;
224        te = 0;
225        act = 0;
226    }
227
228    {
229        let mut _klen = 0;
230        let mut _trans = 0;
231        let mut _keys: i32 = 0;
232        let mut _acts: i32 = 0;
233        let mut _nacts = 0;
234        let mut __have = 0;
235        '_resume: while (p != pe || p == eof) {
236            '_again: while (true) {
237                _acts = (_indic_syllable_machine_from_state_actions[(cs) as usize]) as i32;
238                _nacts = (_indic_syllable_machine_actions[(_acts) as usize]) as u32;
239                _acts += 1;
240                while (_nacts > 0) {
241                    match (_indic_syllable_machine_actions[(_acts) as usize]) {
242                        1 => {
243                            ts = p;
244                        }
245
246                        _ => {}
247                    }
248                    _nacts -= 1;
249                    _acts += 1;
250                }
251                if (p == eof) {
252                    {
253                        if (_indic_syllable_machine_eof_trans[(cs) as usize] > 0) {
254                            {
255                                _trans =
256                                    (_indic_syllable_machine_eof_trans[(cs) as usize]) as u32 - 1;
257                            }
258                        }
259                    }
260                } else {
261                    {
262                        _keys = (_indic_syllable_machine_key_offsets[(cs) as usize]) as i32;
263                        _trans = (_indic_syllable_machine_index_offsets[(cs) as usize]) as u32;
264                        _klen = (_indic_syllable_machine_single_lengths[(cs) as usize]) as i32;
265                        __have = 0;
266                        if (_klen > 0) {
267                            {
268                                let mut _lower: i32 = _keys;
269                                let mut _upper: i32 = _keys + _klen - 1;
270                                let mut _mid: i32 = 0;
271                                while (true) {
272                                    if (_upper < _lower) {
273                                        {
274                                            _keys += _klen;
275                                            _trans += (_klen) as u32;
276                                            break;
277                                        }
278                                    }
279                                    _mid = _lower + ((_upper - _lower) >> 1);
280                                    if ((buffer.info[p].indic_category() as u8)
281                                        < _indic_syllable_machine_trans_keys[(_mid) as usize])
282                                    {
283                                        _upper = _mid - 1;
284                                    } else if ((buffer.info[p].indic_category() as u8)
285                                        > _indic_syllable_machine_trans_keys[(_mid) as usize])
286                                    {
287                                        _lower = _mid + 1;
288                                    } else {
289                                        {
290                                            __have = 1;
291                                            _trans += (_mid - _keys) as u32;
292                                            break;
293                                        }
294                                    }
295                                }
296                            }
297                        }
298                        _klen = (_indic_syllable_machine_range_lengths[(cs) as usize]) as i32;
299                        if (__have == 0 && _klen > 0) {
300                            {
301                                let mut _lower: i32 = _keys;
302                                let mut _upper: i32 = _keys + (_klen << 1) - 2;
303                                let mut _mid: i32 = 0;
304                                while (true) {
305                                    if (_upper < _lower) {
306                                        {
307                                            _trans += (_klen) as u32;
308                                            break;
309                                        }
310                                    }
311                                    _mid = _lower + (((_upper - _lower) >> 1) & !1);
312                                    if ((buffer.info[p].indic_category() as u8)
313                                        < _indic_syllable_machine_trans_keys[(_mid) as usize])
314                                    {
315                                        _upper = _mid - 2;
316                                    } else if ((buffer.info[p].indic_category() as u8)
317                                        > _indic_syllable_machine_trans_keys[(_mid + 1) as usize])
318                                    {
319                                        _lower = _mid + 2;
320                                    } else {
321                                        {
322                                            _trans += ((_mid - _keys) >> 1) as u32;
323                                            break;
324                                        }
325                                    }
326                                }
327                            }
328                        }
329                    }
330                }
331                cs = (_indic_syllable_machine_cond_targs[(_trans) as usize]) as i32;
332                if (_indic_syllable_machine_cond_actions[(_trans) as usize] != 0) {
333                    {
334                        _acts = (_indic_syllable_machine_cond_actions[(_trans) as usize]) as i32;
335                        _nacts = (_indic_syllable_machine_actions[(_acts) as usize]) as u32;
336                        _acts += 1;
337                        while (_nacts > 0) {
338                            match (_indic_syllable_machine_actions[(_acts) as usize]) {
339                                2 => {
340                                    te = p + 1;
341                                }
342                                3 => {
343                                    act = 1;
344                                }
345                                4 => {
346                                    act = 5;
347                                }
348                                5 => {
349                                    act = 6;
350                                }
351                                6 => {
352                                    te = p + 1;
353                                    {
354                                        found_syllable!(SyllableType::NonIndicCluster);
355                                    }
356                                }
357                                7 => {
358                                    te = p;
359                                    p = p - 1;
360                                    {
361                                        found_syllable!(SyllableType::ConsonantSyllable);
362                                    }
363                                }
364                                8 => {
365                                    te = p;
366                                    p = p - 1;
367                                    {
368                                        found_syllable!(SyllableType::VowelSyllable);
369                                    }
370                                }
371                                9 => {
372                                    te = p;
373                                    p = p - 1;
374                                    {
375                                        found_syllable!(SyllableType::StandaloneCluster);
376                                    }
377                                }
378                                10 => {
379                                    te = p;
380                                    p = p - 1;
381                                    {
382                                        found_syllable!(SyllableType::SymbolCluster);
383                                    }
384                                }
385                                11 => {
386                                    te = p;
387                                    p = p - 1;
388                                    {
389                                        found_syllable!(SyllableType::BrokenCluster);
390                                        buffer.scratch_flags |=
391                                            HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
392                                    }
393                                }
394                                12 => {
395                                    te = p;
396                                    p = p - 1;
397                                    {
398                                        found_syllable!(SyllableType::NonIndicCluster);
399                                    }
400                                }
401                                13 => {
402                                    p = (te) - 1;
403                                    {
404                                        found_syllable!(SyllableType::ConsonantSyllable);
405                                    }
406                                }
407                                14 => {
408                                    p = (te) - 1;
409                                    {
410                                        found_syllable!(SyllableType::VowelSyllable);
411                                    }
412                                }
413                                15 => {
414                                    p = (te) - 1;
415                                    {
416                                        found_syllable!(SyllableType::StandaloneCluster);
417                                    }
418                                }
419                                16 => {
420                                    p = (te) - 1;
421                                    {
422                                        found_syllable!(SyllableType::SymbolCluster);
423                                    }
424                                }
425                                17 => {
426                                    p = (te) - 1;
427                                    {
428                                        found_syllable!(SyllableType::BrokenCluster);
429                                        buffer.scratch_flags |=
430                                            HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
431                                    }
432                                }
433                                18 => match (act) {
434                                    1 => {
435                                        p = (te) - 1;
436                                        {
437                                            found_syllable!(SyllableType::ConsonantSyllable);
438                                        }
439                                    }
440                                    5 => {
441                                        p = (te) - 1;
442                                        {
443                                            found_syllable!(SyllableType::BrokenCluster);
444                                            buffer.scratch_flags |=
445                                                HB_BUFFER_SCRATCH_FLAG_HAS_BROKEN_SYLLABLE;
446                                        }
447                                    }
448                                    6 => {
449                                        p = (te) - 1;
450                                        {
451                                            found_syllable!(SyllableType::NonIndicCluster);
452                                        }
453                                    }
454
455                                    _ => {}
456                                },
457
458                                _ => {}
459                            }
460                            _nacts -= 1;
461                            _acts += 1;
462                        }
463                    }
464                }
465                break '_again;
466            }
467            if (p == eof) {
468                {
469                    if (cs >= 31) {
470                        break '_resume;
471                    }
472                }
473            } else {
474                {
475                    _acts = (_indic_syllable_machine_to_state_actions[(cs) as usize]) as i32;
476                    _nacts = (_indic_syllable_machine_actions[(_acts) as usize]) as u32;
477                    _acts += 1;
478                    while (_nacts > 0) {
479                        match (_indic_syllable_machine_actions[(_acts) as usize]) {
480                            0 => {
481                                ts = 0;
482                            }
483
484                            _ => {}
485                        }
486                        _nacts -= 1;
487                        _acts += 1;
488                    }
489                    p += 1;
490                    continue '_resume;
491                }
492            }
493            break '_resume;
494        }
495    }
496}
497
498#[inline]
499fn found_syllable(
500    start: usize,
501    end: usize,
502    syllable_serial: &mut u8,
503    kind: SyllableType,
504    buffer: &mut hb_buffer_t,
505) {
506    for i in start..end {
507        buffer.info[i].set_syllable((*syllable_serial << 4) | kind as u8);
508    }
509
510    *syllable_serial += 1;
511
512    if *syllable_serial == 16 {
513        *syllable_serial = 1;
514    }
515}