lib/filigree/src/shape/joining.zig
daab053ee43316e1809a84551d573ddd1e5bf3d2
1 const std = @import("std");
2
3 pub const JoiningType = enum {
4 non_joining,
5 left_joining,
6 right_joining,
7 dual_joining,
8 join_causing,
9 transparent,
10 };
11
12 const JoiningTypeRange = struct {
13 start: u21,
14 end: u21,
15 joining_type: JoiningType,
16 };
17
18 const joining_type_ranges = [_]JoiningTypeRange{
19 .{ .start = 0xad, .end = 0xae, .joining_type = .transparent },
20 .{ .start = 0x300, .end = 0x370, .joining_type = .transparent },
21 .{ .start = 0x483, .end = 0x48a, .joining_type = .transparent },
22 .{ .start = 0x591, .end = 0x5be, .joining_type = .transparent },
23 .{ .start = 0x5bf, .end = 0x5c0, .joining_type = .transparent },
24 .{ .start = 0x5c1, .end = 0x5c3, .joining_type = .transparent },
25 .{ .start = 0x5c4, .end = 0x5c6, .joining_type = .transparent },
26 .{ .start = 0x5c7, .end = 0x5c8, .joining_type = .transparent },
27 .{ .start = 0x610, .end = 0x61b, .joining_type = .transparent },
28 .{ .start = 0x61c, .end = 0x61d, .joining_type = .transparent },
29 .{ .start = 0x620, .end = 0x621, .joining_type = .dual_joining },
30 .{ .start = 0x622, .end = 0x626, .joining_type = .right_joining },
31 .{ .start = 0x626, .end = 0x627, .joining_type = .dual_joining },
32 .{ .start = 0x627, .end = 0x628, .joining_type = .right_joining },
33 .{ .start = 0x628, .end = 0x629, .joining_type = .dual_joining },
34 .{ .start = 0x629, .end = 0x62a, .joining_type = .right_joining },
35 .{ .start = 0x62a, .end = 0x62f, .joining_type = .dual_joining },
36 .{ .start = 0x62f, .end = 0x633, .joining_type = .right_joining },
37 .{ .start = 0x633, .end = 0x640, .joining_type = .dual_joining },
38 .{ .start = 0x640, .end = 0x641, .joining_type = .join_causing },
39 .{ .start = 0x641, .end = 0x648, .joining_type = .dual_joining },
40 .{ .start = 0x648, .end = 0x649, .joining_type = .right_joining },
41 .{ .start = 0x649, .end = 0x64b, .joining_type = .dual_joining },
42 .{ .start = 0x64b, .end = 0x660, .joining_type = .transparent },
43 .{ .start = 0x66e, .end = 0x670, .joining_type = .dual_joining },
44 .{ .start = 0x670, .end = 0x671, .joining_type = .transparent },
45 .{ .start = 0x671, .end = 0x674, .joining_type = .right_joining },
46 .{ .start = 0x675, .end = 0x678, .joining_type = .right_joining },
47 .{ .start = 0x678, .end = 0x688, .joining_type = .dual_joining },
48 .{ .start = 0x688, .end = 0x69a, .joining_type = .right_joining },
49 .{ .start = 0x69a, .end = 0x6c0, .joining_type = .dual_joining },
50 .{ .start = 0x6c0, .end = 0x6c1, .joining_type = .right_joining },
51 .{ .start = 0x6c1, .end = 0x6c3, .joining_type = .dual_joining },
52 .{ .start = 0x6c3, .end = 0x6cc, .joining_type = .right_joining },
53 .{ .start = 0x6cc, .end = 0x6cd, .joining_type = .dual_joining },
54 .{ .start = 0x6cd, .end = 0x6ce, .joining_type = .right_joining },
55 .{ .start = 0x6ce, .end = 0x6cf, .joining_type = .dual_joining },
56 .{ .start = 0x6cf, .end = 0x6d0, .joining_type = .right_joining },
57 .{ .start = 0x6d0, .end = 0x6d2, .joining_type = .dual_joining },
58 .{ .start = 0x6d2, .end = 0x6d4, .joining_type = .right_joining },
59 .{ .start = 0x6d5, .end = 0x6d6, .joining_type = .right_joining },
60 .{ .start = 0x6d6, .end = 0x6dd, .joining_type = .transparent },
61 .{ .start = 0x6df, .end = 0x6e5, .joining_type = .transparent },
62 .{ .start = 0x6e7, .end = 0x6e9, .joining_type = .transparent },
63 .{ .start = 0x6ea, .end = 0x6ee, .joining_type = .transparent },
64 .{ .start = 0x6ee, .end = 0x6f0, .joining_type = .right_joining },
65 .{ .start = 0x6fa, .end = 0x6fd, .joining_type = .dual_joining },
66 .{ .start = 0x6ff, .end = 0x700, .joining_type = .dual_joining },
67 .{ .start = 0x70f, .end = 0x710, .joining_type = .transparent },
68 .{ .start = 0x710, .end = 0x711, .joining_type = .right_joining },
69 .{ .start = 0x711, .end = 0x712, .joining_type = .transparent },
70 .{ .start = 0x712, .end = 0x715, .joining_type = .dual_joining },
71 .{ .start = 0x715, .end = 0x71a, .joining_type = .right_joining },
72 .{ .start = 0x71a, .end = 0x71e, .joining_type = .dual_joining },
73 .{ .start = 0x71e, .end = 0x71f, .joining_type = .right_joining },
74 .{ .start = 0x71f, .end = 0x728, .joining_type = .dual_joining },
75 .{ .start = 0x728, .end = 0x729, .joining_type = .right_joining },
76 .{ .start = 0x729, .end = 0x72a, .joining_type = .dual_joining },
77 .{ .start = 0x72a, .end = 0x72b, .joining_type = .right_joining },
78 .{ .start = 0x72b, .end = 0x72c, .joining_type = .dual_joining },
79 .{ .start = 0x72c, .end = 0x72d, .joining_type = .right_joining },
80 .{ .start = 0x72d, .end = 0x72f, .joining_type = .dual_joining },
81 .{ .start = 0x72f, .end = 0x730, .joining_type = .right_joining },
82 .{ .start = 0x730, .end = 0x74b, .joining_type = .transparent },
83 .{ .start = 0x74d, .end = 0x74e, .joining_type = .right_joining },
84 .{ .start = 0x74e, .end = 0x759, .joining_type = .dual_joining },
85 .{ .start = 0x759, .end = 0x75c, .joining_type = .right_joining },
86 .{ .start = 0x75c, .end = 0x76b, .joining_type = .dual_joining },
87 .{ .start = 0x76b, .end = 0x76d, .joining_type = .right_joining },
88 .{ .start = 0x76d, .end = 0x771, .joining_type = .dual_joining },
89 .{ .start = 0x771, .end = 0x772, .joining_type = .right_joining },
90 .{ .start = 0x772, .end = 0x773, .joining_type = .dual_joining },
91 .{ .start = 0x773, .end = 0x775, .joining_type = .right_joining },
92 .{ .start = 0x775, .end = 0x778, .joining_type = .dual_joining },
93 .{ .start = 0x778, .end = 0x77a, .joining_type = .right_joining },
94 .{ .start = 0x77a, .end = 0x780, .joining_type = .dual_joining },
95 .{ .start = 0x7a6, .end = 0x7b1, .joining_type = .transparent },
96 .{ .start = 0x7ca, .end = 0x7eb, .joining_type = .dual_joining },
97 .{ .start = 0x7eb, .end = 0x7f4, .joining_type = .transparent },
98 .{ .start = 0x7fa, .end = 0x7fb, .joining_type = .join_causing },
99 .{ .start = 0x7fd, .end = 0x7fe, .joining_type = .transparent },
100 .{ .start = 0x816, .end = 0x81a, .joining_type = .transparent },
101 .{ .start = 0x81b, .end = 0x824, .joining_type = .transparent },
102 .{ .start = 0x825, .end = 0x828, .joining_type = .transparent },
103 .{ .start = 0x829, .end = 0x82e, .joining_type = .transparent },
104 .{ .start = 0x840, .end = 0x841, .joining_type = .right_joining },
105 .{ .start = 0x841, .end = 0x846, .joining_type = .dual_joining },
106 .{ .start = 0x846, .end = 0x848, .joining_type = .right_joining },
107 .{ .start = 0x848, .end = 0x849, .joining_type = .dual_joining },
108 .{ .start = 0x849, .end = 0x84a, .joining_type = .right_joining },
109 .{ .start = 0x84a, .end = 0x854, .joining_type = .dual_joining },
110 .{ .start = 0x854, .end = 0x855, .joining_type = .right_joining },
111 .{ .start = 0x855, .end = 0x856, .joining_type = .dual_joining },
112 .{ .start = 0x856, .end = 0x859, .joining_type = .right_joining },
113 .{ .start = 0x859, .end = 0x85c, .joining_type = .transparent },
114 .{ .start = 0x860, .end = 0x861, .joining_type = .dual_joining },
115 .{ .start = 0x862, .end = 0x866, .joining_type = .dual_joining },
116 .{ .start = 0x867, .end = 0x868, .joining_type = .right_joining },
117 .{ .start = 0x868, .end = 0x869, .joining_type = .dual_joining },
118 .{ .start = 0x869, .end = 0x86b, .joining_type = .right_joining },
119 .{ .start = 0x870, .end = 0x883, .joining_type = .right_joining },
120 .{ .start = 0x883, .end = 0x886, .joining_type = .join_causing },
121 .{ .start = 0x886, .end = 0x887, .joining_type = .dual_joining },
122 .{ .start = 0x889, .end = 0x88e, .joining_type = .dual_joining },
123 .{ .start = 0x88e, .end = 0x88f, .joining_type = .right_joining },
124 .{ .start = 0x88f, .end = 0x890, .joining_type = .dual_joining },
125 .{ .start = 0x897, .end = 0x8a0, .joining_type = .transparent },
126 .{ .start = 0x8a0, .end = 0x8aa, .joining_type = .dual_joining },
127 .{ .start = 0x8aa, .end = 0x8ad, .joining_type = .right_joining },
128 .{ .start = 0x8ae, .end = 0x8af, .joining_type = .right_joining },
129 .{ .start = 0x8af, .end = 0x8b1, .joining_type = .dual_joining },
130 .{ .start = 0x8b1, .end = 0x8b3, .joining_type = .right_joining },
131 .{ .start = 0x8b3, .end = 0x8b9, .joining_type = .dual_joining },
132 .{ .start = 0x8b9, .end = 0x8ba, .joining_type = .right_joining },
133 .{ .start = 0x8ba, .end = 0x8c9, .joining_type = .dual_joining },
134 .{ .start = 0x8ca, .end = 0x8e2, .joining_type = .transparent },
135 .{ .start = 0x8e3, .end = 0x903, .joining_type = .transparent },
136 .{ .start = 0x93a, .end = 0x93b, .joining_type = .transparent },
137 .{ .start = 0x93c, .end = 0x93d, .joining_type = .transparent },
138 .{ .start = 0x941, .end = 0x949, .joining_type = .transparent },
139 .{ .start = 0x94d, .end = 0x94e, .joining_type = .transparent },
140 .{ .start = 0x951, .end = 0x958, .joining_type = .transparent },
141 .{ .start = 0x962, .end = 0x964, .joining_type = .transparent },
142 .{ .start = 0x981, .end = 0x982, .joining_type = .transparent },
143 .{ .start = 0x9bc, .end = 0x9bd, .joining_type = .transparent },
144 .{ .start = 0x9c1, .end = 0x9c5, .joining_type = .transparent },
145 .{ .start = 0x9cd, .end = 0x9ce, .joining_type = .transparent },
146 .{ .start = 0x9e2, .end = 0x9e4, .joining_type = .transparent },
147 .{ .start = 0x9fe, .end = 0x9ff, .joining_type = .transparent },
148 .{ .start = 0xa01, .end = 0xa03, .joining_type = .transparent },
149 .{ .start = 0xa3c, .end = 0xa3d, .joining_type = .transparent },
150 .{ .start = 0xa41, .end = 0xa43, .joining_type = .transparent },
151 .{ .start = 0xa47, .end = 0xa49, .joining_type = .transparent },
152 .{ .start = 0xa4b, .end = 0xa4e, .joining_type = .transparent },
153 .{ .start = 0xa51, .end = 0xa52, .joining_type = .transparent },
154 .{ .start = 0xa70, .end = 0xa72, .joining_type = .transparent },
155 .{ .start = 0xa75, .end = 0xa76, .joining_type = .transparent },
156 .{ .start = 0xa81, .end = 0xa83, .joining_type = .transparent },
157 .{ .start = 0xabc, .end = 0xabd, .joining_type = .transparent },
158 .{ .start = 0xac1, .end = 0xac6, .joining_type = .transparent },
159 .{ .start = 0xac7, .end = 0xac9, .joining_type = .transparent },
160 .{ .start = 0xacd, .end = 0xace, .joining_type = .transparent },
161 .{ .start = 0xae2, .end = 0xae4, .joining_type = .transparent },
162 .{ .start = 0xafa, .end = 0xb00, .joining_type = .transparent },
163 .{ .start = 0xb01, .end = 0xb02, .joining_type = .transparent },
164 .{ .start = 0xb3c, .end = 0xb3d, .joining_type = .transparent },
165 .{ .start = 0xb3f, .end = 0xb40, .joining_type = .transparent },
166 .{ .start = 0xb41, .end = 0xb45, .joining_type = .transparent },
167 .{ .start = 0xb4d, .end = 0xb4e, .joining_type = .transparent },
168 .{ .start = 0xb55, .end = 0xb57, .joining_type = .transparent },
169 .{ .start = 0xb62, .end = 0xb64, .joining_type = .transparent },
170 .{ .start = 0xb82, .end = 0xb83, .joining_type = .transparent },
171 .{ .start = 0xbc0, .end = 0xbc1, .joining_type = .transparent },
172 .{ .start = 0xbcd, .end = 0xbce, .joining_type = .transparent },
173 .{ .start = 0xc00, .end = 0xc01, .joining_type = .transparent },
174 .{ .start = 0xc04, .end = 0xc05, .joining_type = .transparent },
175 .{ .start = 0xc3c, .end = 0xc3d, .joining_type = .transparent },
176 .{ .start = 0xc3e, .end = 0xc41, .joining_type = .transparent },
177 .{ .start = 0xc46, .end = 0xc49, .joining_type = .transparent },
178 .{ .start = 0xc4a, .end = 0xc4e, .joining_type = .transparent },
179 .{ .start = 0xc55, .end = 0xc57, .joining_type = .transparent },
180 .{ .start = 0xc62, .end = 0xc64, .joining_type = .transparent },
181 .{ .start = 0xc81, .end = 0xc82, .joining_type = .transparent },
182 .{ .start = 0xcbc, .end = 0xcbd, .joining_type = .transparent },
183 .{ .start = 0xcbf, .end = 0xcc0, .joining_type = .transparent },
184 .{ .start = 0xcc6, .end = 0xcc7, .joining_type = .transparent },
185 .{ .start = 0xccc, .end = 0xcce, .joining_type = .transparent },
186 .{ .start = 0xce2, .end = 0xce4, .joining_type = .transparent },
187 .{ .start = 0xd00, .end = 0xd02, .joining_type = .transparent },
188 .{ .start = 0xd3b, .end = 0xd3d, .joining_type = .transparent },
189 .{ .start = 0xd41, .end = 0xd45, .joining_type = .transparent },
190 .{ .start = 0xd4d, .end = 0xd4e, .joining_type = .transparent },
191 .{ .start = 0xd62, .end = 0xd64, .joining_type = .transparent },
192 .{ .start = 0xd81, .end = 0xd82, .joining_type = .transparent },
193 .{ .start = 0xdca, .end = 0xdcb, .joining_type = .transparent },
194 .{ .start = 0xdd2, .end = 0xdd5, .joining_type = .transparent },
195 .{ .start = 0xdd6, .end = 0xdd7, .joining_type = .transparent },
196 .{ .start = 0xe31, .end = 0xe32, .joining_type = .transparent },
197 .{ .start = 0xe34, .end = 0xe3b, .joining_type = .transparent },
198 .{ .start = 0xe47, .end = 0xe4f, .joining_type = .transparent },
199 .{ .start = 0xeb1, .end = 0xeb2, .joining_type = .transparent },
200 .{ .start = 0xeb4, .end = 0xebd, .joining_type = .transparent },
201 .{ .start = 0xec8, .end = 0xecf, .joining_type = .transparent },
202 .{ .start = 0xf18, .end = 0xf1a, .joining_type = .transparent },
203 .{ .start = 0xf35, .end = 0xf36, .joining_type = .transparent },
204 .{ .start = 0xf37, .end = 0xf38, .joining_type = .transparent },
205 .{ .start = 0xf39, .end = 0xf3a, .joining_type = .transparent },
206 .{ .start = 0xf71, .end = 0xf7f, .joining_type = .transparent },
207 .{ .start = 0xf80, .end = 0xf85, .joining_type = .transparent },
208 .{ .start = 0xf86, .end = 0xf88, .joining_type = .transparent },
209 .{ .start = 0xf8d, .end = 0xf98, .joining_type = .transparent },
210 .{ .start = 0xf99, .end = 0xfbd, .joining_type = .transparent },
211 .{ .start = 0xfc6, .end = 0xfc7, .joining_type = .transparent },
212 .{ .start = 0x102d, .end = 0x1031, .joining_type = .transparent },
213 .{ .start = 0x1032, .end = 0x1038, .joining_type = .transparent },
214 .{ .start = 0x1039, .end = 0x103b, .joining_type = .transparent },
215 .{ .start = 0x103d, .end = 0x103f, .joining_type = .transparent },
216 .{ .start = 0x1058, .end = 0x105a, .joining_type = .transparent },
217 .{ .start = 0x105e, .end = 0x1061, .joining_type = .transparent },
218 .{ .start = 0x1071, .end = 0x1075, .joining_type = .transparent },
219 .{ .start = 0x1082, .end = 0x1083, .joining_type = .transparent },
220 .{ .start = 0x1085, .end = 0x1087, .joining_type = .transparent },
221 .{ .start = 0x108d, .end = 0x108e, .joining_type = .transparent },
222 .{ .start = 0x109d, .end = 0x109e, .joining_type = .transparent },
223 .{ .start = 0x135d, .end = 0x1360, .joining_type = .transparent },
224 .{ .start = 0x1712, .end = 0x1715, .joining_type = .transparent },
225 .{ .start = 0x1732, .end = 0x1734, .joining_type = .transparent },
226 .{ .start = 0x1752, .end = 0x1754, .joining_type = .transparent },
227 .{ .start = 0x1772, .end = 0x1774, .joining_type = .transparent },
228 .{ .start = 0x17b4, .end = 0x17b6, .joining_type = .transparent },
229 .{ .start = 0x17b7, .end = 0x17be, .joining_type = .transparent },
230 .{ .start = 0x17c6, .end = 0x17c7, .joining_type = .transparent },
231 .{ .start = 0x17c9, .end = 0x17d4, .joining_type = .transparent },
232 .{ .start = 0x17dd, .end = 0x17de, .joining_type = .transparent },
233 .{ .start = 0x1807, .end = 0x1808, .joining_type = .dual_joining },
234 .{ .start = 0x180a, .end = 0x180b, .joining_type = .join_causing },
235 .{ .start = 0x180b, .end = 0x180e, .joining_type = .transparent },
236 .{ .start = 0x180f, .end = 0x1810, .joining_type = .transparent },
237 .{ .start = 0x1820, .end = 0x1879, .joining_type = .dual_joining },
238 .{ .start = 0x1885, .end = 0x1887, .joining_type = .transparent },
239 .{ .start = 0x1887, .end = 0x18a9, .joining_type = .dual_joining },
240 .{ .start = 0x18a9, .end = 0x18aa, .joining_type = .transparent },
241 .{ .start = 0x18aa, .end = 0x18ab, .joining_type = .dual_joining },
242 .{ .start = 0x1920, .end = 0x1923, .joining_type = .transparent },
243 .{ .start = 0x1927, .end = 0x1929, .joining_type = .transparent },
244 .{ .start = 0x1932, .end = 0x1933, .joining_type = .transparent },
245 .{ .start = 0x1939, .end = 0x193c, .joining_type = .transparent },
246 .{ .start = 0x1a17, .end = 0x1a19, .joining_type = .transparent },
247 .{ .start = 0x1a1b, .end = 0x1a1c, .joining_type = .transparent },
248 .{ .start = 0x1a56, .end = 0x1a57, .joining_type = .transparent },
249 .{ .start = 0x1a58, .end = 0x1a5f, .joining_type = .transparent },
250 .{ .start = 0x1a60, .end = 0x1a61, .joining_type = .transparent },
251 .{ .start = 0x1a62, .end = 0x1a63, .joining_type = .transparent },
252 .{ .start = 0x1a65, .end = 0x1a6d, .joining_type = .transparent },
253 .{ .start = 0x1a73, .end = 0x1a7d, .joining_type = .transparent },
254 .{ .start = 0x1a7f, .end = 0x1a80, .joining_type = .transparent },
255 .{ .start = 0x1ab0, .end = 0x1ade, .joining_type = .transparent },
256 .{ .start = 0x1ae0, .end = 0x1aec, .joining_type = .transparent },
257 .{ .start = 0x1b00, .end = 0x1b04, .joining_type = .transparent },
258 .{ .start = 0x1b34, .end = 0x1b35, .joining_type = .transparent },
259 .{ .start = 0x1b36, .end = 0x1b3b, .joining_type = .transparent },
260 .{ .start = 0x1b3c, .end = 0x1b3d, .joining_type = .transparent },
261 .{ .start = 0x1b42, .end = 0x1b43, .joining_type = .transparent },
262 .{ .start = 0x1b6b, .end = 0x1b74, .joining_type = .transparent },
263 .{ .start = 0x1b80, .end = 0x1b82, .joining_type = .transparent },
264 .{ .start = 0x1ba2, .end = 0x1ba6, .joining_type = .transparent },
265 .{ .start = 0x1ba8, .end = 0x1baa, .joining_type = .transparent },
266 .{ .start = 0x1bab, .end = 0x1bae, .joining_type = .transparent },
267 .{ .start = 0x1be6, .end = 0x1be7, .joining_type = .transparent },
268 .{ .start = 0x1be8, .end = 0x1bea, .joining_type = .transparent },
269 .{ .start = 0x1bed, .end = 0x1bee, .joining_type = .transparent },
270 .{ .start = 0x1bef, .end = 0x1bf2, .joining_type = .transparent },
271 .{ .start = 0x1c2c, .end = 0x1c34, .joining_type = .transparent },
272 .{ .start = 0x1c36, .end = 0x1c38, .joining_type = .transparent },
273 .{ .start = 0x1cd0, .end = 0x1cd3, .joining_type = .transparent },
274 .{ .start = 0x1cd4, .end = 0x1ce1, .joining_type = .transparent },
275 .{ .start = 0x1ce2, .end = 0x1ce9, .joining_type = .transparent },
276 .{ .start = 0x1ced, .end = 0x1cee, .joining_type = .transparent },
277 .{ .start = 0x1cf4, .end = 0x1cf5, .joining_type = .transparent },
278 .{ .start = 0x1cf8, .end = 0x1cfa, .joining_type = .transparent },
279 .{ .start = 0x1dc0, .end = 0x1e00, .joining_type = .transparent },
280 .{ .start = 0x200b, .end = 0x200c, .joining_type = .transparent },
281 .{ .start = 0x200d, .end = 0x200e, .joining_type = .join_causing },
282 .{ .start = 0x200e, .end = 0x2010, .joining_type = .transparent },
283 .{ .start = 0x202a, .end = 0x202f, .joining_type = .transparent },
284 .{ .start = 0x2060, .end = 0x2065, .joining_type = .transparent },
285 .{ .start = 0x206a, .end = 0x2070, .joining_type = .transparent },
286 .{ .start = 0x20d0, .end = 0x20f1, .joining_type = .transparent },
287 .{ .start = 0x2cef, .end = 0x2cf2, .joining_type = .transparent },
288 .{ .start = 0x2d7f, .end = 0x2d80, .joining_type = .transparent },
289 .{ .start = 0x2de0, .end = 0x2e00, .joining_type = .transparent },
290 .{ .start = 0x302a, .end = 0x302e, .joining_type = .transparent },
291 .{ .start = 0x3099, .end = 0x309b, .joining_type = .transparent },
292 .{ .start = 0xa66f, .end = 0xa673, .joining_type = .transparent },
293 .{ .start = 0xa674, .end = 0xa67e, .joining_type = .transparent },
294 .{ .start = 0xa69e, .end = 0xa6a0, .joining_type = .transparent },
295 .{ .start = 0xa6f0, .end = 0xa6f2, .joining_type = .transparent },
296 .{ .start = 0xa802, .end = 0xa803, .joining_type = .transparent },
297 .{ .start = 0xa806, .end = 0xa807, .joining_type = .transparent },
298 .{ .start = 0xa80b, .end = 0xa80c, .joining_type = .transparent },
299 .{ .start = 0xa825, .end = 0xa827, .joining_type = .transparent },
300 .{ .start = 0xa82c, .end = 0xa82d, .joining_type = .transparent },
301 .{ .start = 0xa840, .end = 0xa872, .joining_type = .dual_joining },
302 .{ .start = 0xa872, .end = 0xa873, .joining_type = .left_joining },
303 .{ .start = 0xa8c4, .end = 0xa8c6, .joining_type = .transparent },
304 .{ .start = 0xa8e0, .end = 0xa8f2, .joining_type = .transparent },
305 .{ .start = 0xa8ff, .end = 0xa900, .joining_type = .transparent },
306 .{ .start = 0xa926, .end = 0xa92e, .joining_type = .transparent },
307 .{ .start = 0xa947, .end = 0xa952, .joining_type = .transparent },
308 .{ .start = 0xa980, .end = 0xa983, .joining_type = .transparent },
309 .{ .start = 0xa9b3, .end = 0xa9b4, .joining_type = .transparent },
310 .{ .start = 0xa9b6, .end = 0xa9ba, .joining_type = .transparent },
311 .{ .start = 0xa9bc, .end = 0xa9be, .joining_type = .transparent },
312 .{ .start = 0xa9e5, .end = 0xa9e6, .joining_type = .transparent },
313 .{ .start = 0xaa29, .end = 0xaa2f, .joining_type = .transparent },
314 .{ .start = 0xaa31, .end = 0xaa33, .joining_type = .transparent },
315 .{ .start = 0xaa35, .end = 0xaa37, .joining_type = .transparent },
316 .{ .start = 0xaa43, .end = 0xaa44, .joining_type = .transparent },
317 .{ .start = 0xaa4c, .end = 0xaa4d, .joining_type = .transparent },
318 .{ .start = 0xaa7c, .end = 0xaa7d, .joining_type = .transparent },
319 .{ .start = 0xaab0, .end = 0xaab1, .joining_type = .transparent },
320 .{ .start = 0xaab2, .end = 0xaab5, .joining_type = .transparent },
321 .{ .start = 0xaab7, .end = 0xaab9, .joining_type = .transparent },
322 .{ .start = 0xaabe, .end = 0xaac0, .joining_type = .transparent },
323 .{ .start = 0xaac1, .end = 0xaac2, .joining_type = .transparent },
324 .{ .start = 0xaaec, .end = 0xaaee, .joining_type = .transparent },
325 .{ .start = 0xaaf6, .end = 0xaaf7, .joining_type = .transparent },
326 .{ .start = 0xabe5, .end = 0xabe6, .joining_type = .transparent },
327 .{ .start = 0xabe8, .end = 0xabe9, .joining_type = .transparent },
328 .{ .start = 0xabed, .end = 0xabee, .joining_type = .transparent },
329 .{ .start = 0xfb1e, .end = 0xfb1f, .joining_type = .transparent },
330 .{ .start = 0xfe00, .end = 0xfe10, .joining_type = .transparent },
331 .{ .start = 0xfe20, .end = 0xfe30, .joining_type = .transparent },
332 .{ .start = 0xfeff, .end = 0xff00, .joining_type = .transparent },
333 .{ .start = 0xfff9, .end = 0xfffc, .joining_type = .transparent },
334 .{ .start = 0x101fd, .end = 0x101fe, .joining_type = .transparent },
335 .{ .start = 0x102e0, .end = 0x102e1, .joining_type = .transparent },
336 .{ .start = 0x10376, .end = 0x1037b, .joining_type = .transparent },
337 .{ .start = 0x10a01, .end = 0x10a04, .joining_type = .transparent },
338 .{ .start = 0x10a05, .end = 0x10a07, .joining_type = .transparent },
339 .{ .start = 0x10a0c, .end = 0x10a10, .joining_type = .transparent },
340 .{ .start = 0x10a38, .end = 0x10a3b, .joining_type = .transparent },
341 .{ .start = 0x10a3f, .end = 0x10a40, .joining_type = .transparent },
342 .{ .start = 0x10ac0, .end = 0x10ac5, .joining_type = .dual_joining },
343 .{ .start = 0x10ac5, .end = 0x10ac6, .joining_type = .right_joining },
344 .{ .start = 0x10ac7, .end = 0x10ac8, .joining_type = .right_joining },
345 .{ .start = 0x10ac9, .end = 0x10acb, .joining_type = .right_joining },
346 .{ .start = 0x10acd, .end = 0x10ace, .joining_type = .left_joining },
347 .{ .start = 0x10ace, .end = 0x10ad3, .joining_type = .right_joining },
348 .{ .start = 0x10ad3, .end = 0x10ad7, .joining_type = .dual_joining },
349 .{ .start = 0x10ad7, .end = 0x10ad8, .joining_type = .left_joining },
350 .{ .start = 0x10ad8, .end = 0x10add, .joining_type = .dual_joining },
351 .{ .start = 0x10add, .end = 0x10ade, .joining_type = .right_joining },
352 .{ .start = 0x10ade, .end = 0x10ae1, .joining_type = .dual_joining },
353 .{ .start = 0x10ae1, .end = 0x10ae2, .joining_type = .right_joining },
354 .{ .start = 0x10ae4, .end = 0x10ae5, .joining_type = .right_joining },
355 .{ .start = 0x10ae5, .end = 0x10ae7, .joining_type = .transparent },
356 .{ .start = 0x10aeb, .end = 0x10aef, .joining_type = .dual_joining },
357 .{ .start = 0x10aef, .end = 0x10af0, .joining_type = .right_joining },
358 .{ .start = 0x10b80, .end = 0x10b81, .joining_type = .dual_joining },
359 .{ .start = 0x10b81, .end = 0x10b82, .joining_type = .right_joining },
360 .{ .start = 0x10b82, .end = 0x10b83, .joining_type = .dual_joining },
361 .{ .start = 0x10b83, .end = 0x10b86, .joining_type = .right_joining },
362 .{ .start = 0x10b86, .end = 0x10b89, .joining_type = .dual_joining },
363 .{ .start = 0x10b89, .end = 0x10b8a, .joining_type = .right_joining },
364 .{ .start = 0x10b8a, .end = 0x10b8c, .joining_type = .dual_joining },
365 .{ .start = 0x10b8c, .end = 0x10b8d, .joining_type = .right_joining },
366 .{ .start = 0x10b8d, .end = 0x10b8e, .joining_type = .dual_joining },
367 .{ .start = 0x10b8e, .end = 0x10b90, .joining_type = .right_joining },
368 .{ .start = 0x10b90, .end = 0x10b91, .joining_type = .dual_joining },
369 .{ .start = 0x10b91, .end = 0x10b92, .joining_type = .right_joining },
370 .{ .start = 0x10ba9, .end = 0x10bad, .joining_type = .right_joining },
371 .{ .start = 0x10bad, .end = 0x10baf, .joining_type = .dual_joining },
372 .{ .start = 0x10d00, .end = 0x10d01, .joining_type = .left_joining },
373 .{ .start = 0x10d01, .end = 0x10d22, .joining_type = .dual_joining },
374 .{ .start = 0x10d22, .end = 0x10d23, .joining_type = .right_joining },
375 .{ .start = 0x10d23, .end = 0x10d24, .joining_type = .dual_joining },
376 .{ .start = 0x10d24, .end = 0x10d28, .joining_type = .transparent },
377 .{ .start = 0x10d69, .end = 0x10d6e, .joining_type = .transparent },
378 .{ .start = 0x10eab, .end = 0x10ead, .joining_type = .transparent },
379 .{ .start = 0x10ec2, .end = 0x10ec3, .joining_type = .right_joining },
380 .{ .start = 0x10ec3, .end = 0x10ec5, .joining_type = .dual_joining },
381 .{ .start = 0x10ec6, .end = 0x10ec8, .joining_type = .dual_joining },
382 .{ .start = 0x10efa, .end = 0x10f00, .joining_type = .transparent },
383 .{ .start = 0x10f30, .end = 0x10f33, .joining_type = .dual_joining },
384 .{ .start = 0x10f33, .end = 0x10f34, .joining_type = .right_joining },
385 .{ .start = 0x10f34, .end = 0x10f45, .joining_type = .dual_joining },
386 .{ .start = 0x10f46, .end = 0x10f51, .joining_type = .transparent },
387 .{ .start = 0x10f51, .end = 0x10f54, .joining_type = .dual_joining },
388 .{ .start = 0x10f54, .end = 0x10f55, .joining_type = .right_joining },
389 .{ .start = 0x10f70, .end = 0x10f74, .joining_type = .dual_joining },
390 .{ .start = 0x10f74, .end = 0x10f76, .joining_type = .right_joining },
391 .{ .start = 0x10f76, .end = 0x10f82, .joining_type = .dual_joining },
392 .{ .start = 0x10f82, .end = 0x10f86, .joining_type = .transparent },
393 .{ .start = 0x10fb0, .end = 0x10fb1, .joining_type = .dual_joining },
394 .{ .start = 0x10fb2, .end = 0x10fb4, .joining_type = .dual_joining },
395 .{ .start = 0x10fb4, .end = 0x10fb7, .joining_type = .right_joining },
396 .{ .start = 0x10fb8, .end = 0x10fb9, .joining_type = .dual_joining },
397 .{ .start = 0x10fb9, .end = 0x10fbb, .joining_type = .right_joining },
398 .{ .start = 0x10fbb, .end = 0x10fbd, .joining_type = .dual_joining },
399 .{ .start = 0x10fbd, .end = 0x10fbe, .joining_type = .right_joining },
400 .{ .start = 0x10fbe, .end = 0x10fc0, .joining_type = .dual_joining },
401 .{ .start = 0x10fc1, .end = 0x10fc2, .joining_type = .dual_joining },
402 .{ .start = 0x10fc2, .end = 0x10fc4, .joining_type = .right_joining },
403 .{ .start = 0x10fc4, .end = 0x10fc5, .joining_type = .dual_joining },
404 .{ .start = 0x10fc9, .end = 0x10fca, .joining_type = .right_joining },
405 .{ .start = 0x10fca, .end = 0x10fcb, .joining_type = .dual_joining },
406 .{ .start = 0x10fcb, .end = 0x10fcc, .joining_type = .left_joining },
407 .{ .start = 0x11001, .end = 0x11002, .joining_type = .transparent },
408 .{ .start = 0x11038, .end = 0x11047, .joining_type = .transparent },
409 .{ .start = 0x11070, .end = 0x11071, .joining_type = .transparent },
410 .{ .start = 0x11073, .end = 0x11075, .joining_type = .transparent },
411 .{ .start = 0x1107f, .end = 0x11082, .joining_type = .transparent },
412 .{ .start = 0x110b3, .end = 0x110b7, .joining_type = .transparent },
413 .{ .start = 0x110b9, .end = 0x110bb, .joining_type = .transparent },
414 .{ .start = 0x110c2, .end = 0x110c3, .joining_type = .transparent },
415 .{ .start = 0x11100, .end = 0x11103, .joining_type = .transparent },
416 .{ .start = 0x11127, .end = 0x1112c, .joining_type = .transparent },
417 .{ .start = 0x1112d, .end = 0x11135, .joining_type = .transparent },
418 .{ .start = 0x11173, .end = 0x11174, .joining_type = .transparent },
419 .{ .start = 0x11180, .end = 0x11182, .joining_type = .transparent },
420 .{ .start = 0x111b6, .end = 0x111bf, .joining_type = .transparent },
421 .{ .start = 0x111c9, .end = 0x111cd, .joining_type = .transparent },
422 .{ .start = 0x111cf, .end = 0x111d0, .joining_type = .transparent },
423 .{ .start = 0x1122f, .end = 0x11232, .joining_type = .transparent },
424 .{ .start = 0x11234, .end = 0x11235, .joining_type = .transparent },
425 .{ .start = 0x11236, .end = 0x11238, .joining_type = .transparent },
426 .{ .start = 0x1123e, .end = 0x1123f, .joining_type = .transparent },
427 .{ .start = 0x11241, .end = 0x11242, .joining_type = .transparent },
428 .{ .start = 0x112df, .end = 0x112e0, .joining_type = .transparent },
429 .{ .start = 0x112e3, .end = 0x112eb, .joining_type = .transparent },
430 .{ .start = 0x11300, .end = 0x11302, .joining_type = .transparent },
431 .{ .start = 0x1133b, .end = 0x1133d, .joining_type = .transparent },
432 .{ .start = 0x11340, .end = 0x11341, .joining_type = .transparent },
433 .{ .start = 0x11366, .end = 0x1136d, .joining_type = .transparent },
434 .{ .start = 0x11370, .end = 0x11375, .joining_type = .transparent },
435 .{ .start = 0x113bb, .end = 0x113c1, .joining_type = .transparent },
436 .{ .start = 0x113ce, .end = 0x113cf, .joining_type = .transparent },
437 .{ .start = 0x113d0, .end = 0x113d1, .joining_type = .transparent },
438 .{ .start = 0x113d2, .end = 0x113d3, .joining_type = .transparent },
439 .{ .start = 0x113e1, .end = 0x113e3, .joining_type = .transparent },
440 .{ .start = 0x11438, .end = 0x11440, .joining_type = .transparent },
441 .{ .start = 0x11442, .end = 0x11445, .joining_type = .transparent },
442 .{ .start = 0x11446, .end = 0x11447, .joining_type = .transparent },
443 .{ .start = 0x1145e, .end = 0x1145f, .joining_type = .transparent },
444 .{ .start = 0x114b3, .end = 0x114b9, .joining_type = .transparent },
445 .{ .start = 0x114ba, .end = 0x114bb, .joining_type = .transparent },
446 .{ .start = 0x114bf, .end = 0x114c1, .joining_type = .transparent },
447 .{ .start = 0x114c2, .end = 0x114c4, .joining_type = .transparent },
448 .{ .start = 0x115b2, .end = 0x115b6, .joining_type = .transparent },
449 .{ .start = 0x115bc, .end = 0x115be, .joining_type = .transparent },
450 .{ .start = 0x115bf, .end = 0x115c1, .joining_type = .transparent },
451 .{ .start = 0x115dc, .end = 0x115de, .joining_type = .transparent },
452 .{ .start = 0x11633, .end = 0x1163b, .joining_type = .transparent },
453 .{ .start = 0x1163d, .end = 0x1163e, .joining_type = .transparent },
454 .{ .start = 0x1163f, .end = 0x11641, .joining_type = .transparent },
455 .{ .start = 0x116ab, .end = 0x116ac, .joining_type = .transparent },
456 .{ .start = 0x116ad, .end = 0x116ae, .joining_type = .transparent },
457 .{ .start = 0x116b0, .end = 0x116b6, .joining_type = .transparent },
458 .{ .start = 0x116b7, .end = 0x116b8, .joining_type = .transparent },
459 .{ .start = 0x1171d, .end = 0x1171e, .joining_type = .transparent },
460 .{ .start = 0x1171f, .end = 0x11720, .joining_type = .transparent },
461 .{ .start = 0x11722, .end = 0x11726, .joining_type = .transparent },
462 .{ .start = 0x11727, .end = 0x1172c, .joining_type = .transparent },
463 .{ .start = 0x1182f, .end = 0x11838, .joining_type = .transparent },
464 .{ .start = 0x11839, .end = 0x1183b, .joining_type = .transparent },
465 .{ .start = 0x1193b, .end = 0x1193d, .joining_type = .transparent },
466 .{ .start = 0x1193e, .end = 0x1193f, .joining_type = .transparent },
467 .{ .start = 0x11943, .end = 0x11944, .joining_type = .transparent },
468 .{ .start = 0x119d4, .end = 0x119d8, .joining_type = .transparent },
469 .{ .start = 0x119da, .end = 0x119dc, .joining_type = .transparent },
470 .{ .start = 0x119e0, .end = 0x119e1, .joining_type = .transparent },
471 .{ .start = 0x11a01, .end = 0x11a0b, .joining_type = .transparent },
472 .{ .start = 0x11a33, .end = 0x11a39, .joining_type = .transparent },
473 .{ .start = 0x11a3b, .end = 0x11a3f, .joining_type = .transparent },
474 .{ .start = 0x11a47, .end = 0x11a48, .joining_type = .transparent },
475 .{ .start = 0x11a51, .end = 0x11a57, .joining_type = .transparent },
476 .{ .start = 0x11a59, .end = 0x11a5c, .joining_type = .transparent },
477 .{ .start = 0x11a8a, .end = 0x11a97, .joining_type = .transparent },
478 .{ .start = 0x11a98, .end = 0x11a9a, .joining_type = .transparent },
479 .{ .start = 0x11b60, .end = 0x11b61, .joining_type = .transparent },
480 .{ .start = 0x11b62, .end = 0x11b65, .joining_type = .transparent },
481 .{ .start = 0x11b66, .end = 0x11b67, .joining_type = .transparent },
482 .{ .start = 0x11c30, .end = 0x11c37, .joining_type = .transparent },
483 .{ .start = 0x11c38, .end = 0x11c3e, .joining_type = .transparent },
484 .{ .start = 0x11c3f, .end = 0x11c40, .joining_type = .transparent },
485 .{ .start = 0x11c92, .end = 0x11ca8, .joining_type = .transparent },
486 .{ .start = 0x11caa, .end = 0x11cb1, .joining_type = .transparent },
487 .{ .start = 0x11cb2, .end = 0x11cb4, .joining_type = .transparent },
488 .{ .start = 0x11cb5, .end = 0x11cb7, .joining_type = .transparent },
489 .{ .start = 0x11d31, .end = 0x11d37, .joining_type = .transparent },
490 .{ .start = 0x11d3a, .end = 0x11d3b, .joining_type = .transparent },
491 .{ .start = 0x11d3c, .end = 0x11d3e, .joining_type = .transparent },
492 .{ .start = 0x11d3f, .end = 0x11d46, .joining_type = .transparent },
493 .{ .start = 0x11d47, .end = 0x11d48, .joining_type = .transparent },
494 .{ .start = 0x11d90, .end = 0x11d92, .joining_type = .transparent },
495 .{ .start = 0x11d95, .end = 0x11d96, .joining_type = .transparent },
496 .{ .start = 0x11d97, .end = 0x11d98, .joining_type = .transparent },
497 .{ .start = 0x11ef3, .end = 0x11ef5, .joining_type = .transparent },
498 .{ .start = 0x11f00, .end = 0x11f02, .joining_type = .transparent },
499 .{ .start = 0x11f36, .end = 0x11f3b, .joining_type = .transparent },
500 .{ .start = 0x11f40, .end = 0x11f41, .joining_type = .transparent },
501 .{ .start = 0x11f42, .end = 0x11f43, .joining_type = .transparent },
502 .{ .start = 0x11f5a, .end = 0x11f5b, .joining_type = .transparent },
503 .{ .start = 0x13430, .end = 0x13441, .joining_type = .transparent },
504 .{ .start = 0x13447, .end = 0x13456, .joining_type = .transparent },
505 .{ .start = 0x1611e, .end = 0x1612a, .joining_type = .transparent },
506 .{ .start = 0x1612d, .end = 0x16130, .joining_type = .transparent },
507 .{ .start = 0x16af0, .end = 0x16af5, .joining_type = .transparent },
508 .{ .start = 0x16b30, .end = 0x16b37, .joining_type = .transparent },
509 .{ .start = 0x16f4f, .end = 0x16f50, .joining_type = .transparent },
510 .{ .start = 0x16f8f, .end = 0x16f93, .joining_type = .transparent },
511 .{ .start = 0x16fe4, .end = 0x16fe5, .joining_type = .transparent },
512 .{ .start = 0x1bc9d, .end = 0x1bc9f, .joining_type = .transparent },
513 .{ .start = 0x1bca0, .end = 0x1bca4, .joining_type = .transparent },
514 .{ .start = 0x1cf00, .end = 0x1cf2e, .joining_type = .transparent },
515 .{ .start = 0x1cf30, .end = 0x1cf47, .joining_type = .transparent },
516 .{ .start = 0x1d167, .end = 0x1d16a, .joining_type = .transparent },
517 .{ .start = 0x1d173, .end = 0x1d183, .joining_type = .transparent },
518 .{ .start = 0x1d185, .end = 0x1d18c, .joining_type = .transparent },
519 .{ .start = 0x1d1aa, .end = 0x1d1ae, .joining_type = .transparent },
520 .{ .start = 0x1d242, .end = 0x1d245, .joining_type = .transparent },
521 .{ .start = 0x1da00, .end = 0x1da37, .joining_type = .transparent },
522 .{ .start = 0x1da3b, .end = 0x1da6d, .joining_type = .transparent },
523 .{ .start = 0x1da75, .end = 0x1da76, .joining_type = .transparent },
524 .{ .start = 0x1da84, .end = 0x1da85, .joining_type = .transparent },
525 .{ .start = 0x1da9b, .end = 0x1daa0, .joining_type = .transparent },
526 .{ .start = 0x1daa1, .end = 0x1dab0, .joining_type = .transparent },
527 .{ .start = 0x1e000, .end = 0x1e007, .joining_type = .transparent },
528 .{ .start = 0x1e008, .end = 0x1e019, .joining_type = .transparent },
529 .{ .start = 0x1e01b, .end = 0x1e022, .joining_type = .transparent },
530 .{ .start = 0x1e023, .end = 0x1e025, .joining_type = .transparent },
531 .{ .start = 0x1e026, .end = 0x1e02b, .joining_type = .transparent },
532 .{ .start = 0x1e08f, .end = 0x1e090, .joining_type = .transparent },
533 .{ .start = 0x1e130, .end = 0x1e137, .joining_type = .transparent },
534 .{ .start = 0x1e2ae, .end = 0x1e2af, .joining_type = .transparent },
535 .{ .start = 0x1e2ec, .end = 0x1e2f0, .joining_type = .transparent },
536 .{ .start = 0x1e4ec, .end = 0x1e4f0, .joining_type = .transparent },
537 .{ .start = 0x1e5ee, .end = 0x1e5f0, .joining_type = .transparent },
538 .{ .start = 0x1e6e3, .end = 0x1e6e4, .joining_type = .transparent },
539 .{ .start = 0x1e6e6, .end = 0x1e6e7, .joining_type = .transparent },
540 .{ .start = 0x1e6ee, .end = 0x1e6f0, .joining_type = .transparent },
541 .{ .start = 0x1e6f5, .end = 0x1e6f6, .joining_type = .transparent },
542 .{ .start = 0x1e8d0, .end = 0x1e8d7, .joining_type = .transparent },
543 .{ .start = 0x1e900, .end = 0x1e944, .joining_type = .dual_joining },
544 .{ .start = 0x1e944, .end = 0x1e94c, .joining_type = .transparent },
545 .{ .start = 0xe0001, .end = 0xe0002, .joining_type = .transparent },
546 .{ .start = 0xe0020, .end = 0xe0080, .joining_type = .transparent },
547 .{ .start = 0xe0100, .end = 0xe01f0, .joining_type = .transparent },
548 };
549
550 pub fn joiningType(codepoint: u21) JoiningType {
551 var low: usize = 0;
552 var high: usize = joining_type_ranges.len;
553 while (low < high) {
554 const mid = low + (high - low) / 2;
555 const range = joining_type_ranges[mid];
556 if (codepoint < range.start) {
557 high = mid;
558 } else if (codepoint >= range.end) {
559 low = mid + 1;
560 } else {
561 return range.joining_type;
562 }
563 }
564 return .non_joining;
565 }
566
567 pub fn joiningTypesConnect(previous: JoiningType, next: JoiningType) bool {
568 return joinsForward(previous) and acceptsPreviousJoin(next);
569 }
570
571 fn joinsForward(joining_type: JoiningType) bool {
572 return switch (joining_type) {
573 .left_joining, .dual_joining, .join_causing => true,
574 .right_joining, .non_joining, .transparent => false,
575 };
576 }
577
578 fn acceptsPreviousJoin(joining_type: JoiningType) bool {
579 return switch (joining_type) {
580 .right_joining, .dual_joining, .join_causing => true,
581 .left_joining, .non_joining, .transparent => false,
582 };
583 }
584
585 test "joiningType classifies Unicode joining types" {
586 try std.testing.expectEqual(JoiningType.dual_joining, joiningType(0x0628));
587 try std.testing.expectEqual(JoiningType.right_joining, joiningType(0x0627));
588 try std.testing.expectEqual(JoiningType.join_causing, joiningType(0x0640));
589 try std.testing.expectEqual(JoiningType.join_causing, joiningType(0x200d));
590 try std.testing.expectEqual(JoiningType.transparent, joiningType(0x064e));
591 try std.testing.expectEqual(JoiningType.non_joining, joiningType(0x200c));
592 try std.testing.expectEqual(JoiningType.transparent, joiningType(0x070f));
593 try std.testing.expectEqual(JoiningType.dual_joining, joiningType(0x0712));
594 try std.testing.expectEqual(JoiningType.join_causing, joiningType(0x180a));
595 try std.testing.expectEqual(JoiningType.left_joining, joiningType(0xa872));
596 try std.testing.expectEqual(JoiningType.right_joining, joiningType(0x10ac5));
597 try std.testing.expectEqual(JoiningType.dual_joining, joiningType(0x1e900));
598 try std.testing.expectEqual(JoiningType.transparent, joiningType(0xe007f));
599 }