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 }