1use super::ot_shape_complex_arabic::hb_arabic_joining_type_t::{
4 self, GroupAlaph as A, GroupDalathRish as DR, D, L, R, T, U, X,
5};
6
7#[rustfmt::skip]
8pub const JOINING_TABLE: &[hb_arabic_joining_type_t] = &[
9
10 U,U,U,U,U,U,X,X,U,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
13 D,U,R,R,R,R,D,R,D,R,D,D,D,D,D,R,R,R,R,D,D,D,D,D,D,D,D,D,D,D,D,D,
14 D,D,D,D,D,D,D,D,R,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
15 X,X,X,X,X,X,X,X,X,X,X,X,X,X,D,D,X,R,R,R,U,R,R,R,D,D,D,D,D,D,D,D,
16 D,D,D,D,D,D,D,D,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,D,D,D,D,D,D,
17 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
18 R,D,D,R,R,R,R,R,R,R,R,R,D,R,D,R,D,D,R,R,X,R,X,X,X,X,X,X,X,U,X,X,
19 X,X,X,X,X,X,X,X,X,X,X,X,X,X,R,R,X,X,X,X,X,X,X,X,X,X,D,D,D,X,X,D,
20
21 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,T,A,X,D,D,D,DR,DR,R,R,R,D,D,D,D,R,D,
24 D,D,D,D,D,D,D,D,R,D,DR,D,R,D,D,DR,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
25 X,X,X,X,X,X,X,X,X,X,X,X,X,R,D,D,
26
27 D,D,D,D,D,D,D,D,D,R,R,R,D,D,D,D,
30 D,D,D,D,D,D,D,D,D,D,D,R,R,D,D,D,D,R,D,R,R,D,D,D,R,R,D,D,D,D,D,D,
31
32 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
35 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
36
37 X,X,X,X,X,X,X,X,X,X,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
40 D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,D,X,X,X,X,X,
41
42 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
45 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
46
47 R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,R,R,R,X,X,X,X,X,X,X,
50
51 D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,
54
55 R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,R,
58 R,R,R,D,D,D,D,U,U,D,D,D,D,D,R,X,U,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
59
60 D,D,D,D,D,D,D,D,D,D,R,R,R,U,R,D,D,R,R,D,D,D,D,D,D,R,D,D,D,D,D,D,
63 D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
64 X,X,U,
65
66 U,D,X,X,D,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
69 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
70 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
71 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,X,X,X,X,X,X,X,
72 U,U,U,U,U,T,T,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
73 D,D,D,D,D,D,D,D,D,X,D,
74
75 U,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
78 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,U,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
79 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
80 X,X,X,X,X,X,U,U,U,U,
81
82 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
85 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,L,U,
86
87 D,D,D,D,D,R,U,R,U,R,R,U,U,L,R,R,R,R,R,D,D,D,D,L,D,D,D,D,D,R,D,D,
90 D,R,U,U,R,X,X,X,X,X,X,D,D,D,D,R,
91
92 D,R,D,R,R,R,D,D,D,R,D,D,R,D,R,R,D,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
95 X,X,X,X,X,X,X,X,X,R,R,R,R,D,D,U,
96
97 L,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
100 D,D,R,D,
101
102 D,D,D,R,D,D,D,D,D,D,D,D,D,D,D,D,
105 D,D,D,D,D,U,X,X,X,X,X,X,X,X,X,X,X,D,D,D,R,X,X,X,X,X,X,X,X,X,X,X,
106 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
107
108 D,D,D,D,R,R,D,D,D,D,D,D,D,D,D,D,
111 D,D,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
112 X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
113
114 D,U,D,D,R,R,R,U,D,R,R,D,D,R,D,D,
117 U,D,R,R,D,U,U,U,U,R,D,L,
118
119 U,X,X,
122 X,X,X,X,X,X,X,X,X,X,X,X,X,U,
123
124 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
127 D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
128 D,D,D,D,X,X,X,X,X,X,X,T,
129];
130
131const JOINING_OFFSET_0X0600: usize = 0;
132const JOINING_OFFSET_0X1806: usize = 739;
133const JOINING_OFFSET_0X200C: usize = 904;
134const JOINING_OFFSET_0XA840: usize = 998;
135const JOINING_OFFSET_0X10AC0: usize = 1050;
136const JOINING_OFFSET_0X10B80: usize = 1098;
137const JOINING_OFFSET_0X10D00: usize = 1146;
138const JOINING_OFFSET_0X10F30: usize = 1182;
139const JOINING_OFFSET_0X110BD: usize = 1338;
140const JOINING_OFFSET_0X1E900: usize = 1355;
141
142pub fn joining_type(u: char) -> hb_arabic_joining_type_t {
143 let u = u as u32;
144 match u >> 12 {
145 0x0 => {
146 if (0x0600..=0x08E2).contains(&u) {
147 return JOINING_TABLE[u as usize - 0x0600 + JOINING_OFFSET_0X0600];
148 }
149 }
150 0x1 => {
151 if (0x1806..=0x18AA).contains(&u) {
152 return JOINING_TABLE[u as usize - 0x1806 + JOINING_OFFSET_0X1806];
153 }
154 }
155 0x2 => {
156 if (0x200C..=0x2069).contains(&u) {
157 return JOINING_TABLE[u as usize - 0x200C + JOINING_OFFSET_0X200C];
158 }
159 }
160 0xA => {
161 if (0xA840..=0xA873).contains(&u) {
162 return JOINING_TABLE[u as usize - 0xA840 + JOINING_OFFSET_0XA840];
163 }
164 }
165 0x10 => {
166 if (0x10AC0..=0x10AEF).contains(&u) {
167 return JOINING_TABLE[u as usize - 0x10AC0 + JOINING_OFFSET_0X10AC0];
168 }
169 if (0x10B80..=0x10BAF).contains(&u) {
170 return JOINING_TABLE[u as usize - 0x10B80 + JOINING_OFFSET_0X10B80];
171 }
172 if (0x10D00..=0x10D23).contains(&u) {
173 return JOINING_TABLE[u as usize - 0x10D00 + JOINING_OFFSET_0X10D00];
174 }
175 if (0x10F30..=0x10FCB).contains(&u) {
176 return JOINING_TABLE[u as usize - 0x10F30 + JOINING_OFFSET_0X10F30];
177 }
178 }
179 0x11 => {
180 if (0x110BD..=0x110CD).contains(&u) {
181 return JOINING_TABLE[u as usize - 0x110BD + JOINING_OFFSET_0X110BD];
182 }
183 }
184 0x1E => {
185 if (0x1E900..=0x1E94B).contains(&u) {
186 return JOINING_TABLE[u as usize - 0x1E900 + JOINING_OFFSET_0X1E900];
187 }
188 }
189 _ => {}
190 }
191
192 X
193}