agent-sanitizer 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,616 @@
1
+ /**
2
+ * GENERATED by scripts/gen-joining-type.mjs from ucd-full@17.0.0 — DO NOT EDIT.
3
+ *
4
+ * Unicode Joining_Type and Indic virama range tables backing the ZWNJ/ZWJ
5
+ * carve-out in invisible.mjs. Regenerate with `pnpm gen:joining-type`;
6
+ * test/joining-type.test.mjs fails if this drifts from the pinned UCD.
7
+ */
8
+
9
+ export const UNICODE_VERSION = "17.0.0";
10
+
11
+ // The two range tables below are GENERATED UCD data, not hand-written logic.
12
+ // Their correctness is pinned by the SSOT round-trip in
13
+ // test/joining-type.test.mjs (re-derive from the vendored slices, then assert
14
+ // every covered code point and range boundary matches) — a far stronger and
15
+ // faster guard than mutation. Mutating ~550 numeric literals is pathologically
16
+ // slow (the shard was cancelled at ~19 min) and redundant, so Stryker skips
17
+ // them; the lookup logic below is still mutated normally.
18
+ // Stryker disable all
19
+ // [start, end, Joining_Type] sorted by start, non-overlapping. Types present:
20
+ // C (join-causing), D (dual), R (right), L (left), T (transparent). Any code
21
+ // point absent here has Joining_Type U (non-joining) — the default.
22
+ /** @type {Array<[number, number, string]>} */
23
+ const JOINING_RANGES = [
24
+ [0xad, 0xad, "T"],
25
+ [0x300, 0x36f, "T"],
26
+ [0x483, 0x489, "T"],
27
+ [0x591, 0x5bd, "T"],
28
+ [0x5bf, 0x5bf, "T"],
29
+ [0x5c1, 0x5c2, "T"],
30
+ [0x5c4, 0x5c5, "T"],
31
+ [0x5c7, 0x5c7, "T"],
32
+ [0x610, 0x61a, "T"],
33
+ [0x61c, 0x61c, "T"],
34
+ [0x620, 0x620, "D"],
35
+ [0x622, 0x625, "R"],
36
+ [0x626, 0x626, "D"],
37
+ [0x627, 0x627, "R"],
38
+ [0x628, 0x628, "D"],
39
+ [0x629, 0x629, "R"],
40
+ [0x62a, 0x62e, "D"],
41
+ [0x62f, 0x632, "R"],
42
+ [0x633, 0x63f, "D"],
43
+ [0x640, 0x640, "C"],
44
+ [0x641, 0x647, "D"],
45
+ [0x648, 0x648, "R"],
46
+ [0x649, 0x64a, "D"],
47
+ [0x64b, 0x65f, "T"],
48
+ [0x66e, 0x66f, "D"],
49
+ [0x670, 0x670, "T"],
50
+ [0x671, 0x673, "R"],
51
+ [0x675, 0x677, "R"],
52
+ [0x678, 0x687, "D"],
53
+ [0x688, 0x699, "R"],
54
+ [0x69a, 0x6bf, "D"],
55
+ [0x6c0, 0x6c0, "R"],
56
+ [0x6c1, 0x6c2, "D"],
57
+ [0x6c3, 0x6cb, "R"],
58
+ [0x6cc, 0x6cc, "D"],
59
+ [0x6cd, 0x6cd, "R"],
60
+ [0x6ce, 0x6ce, "D"],
61
+ [0x6cf, 0x6cf, "R"],
62
+ [0x6d0, 0x6d1, "D"],
63
+ [0x6d2, 0x6d3, "R"],
64
+ [0x6d5, 0x6d5, "R"],
65
+ [0x6d6, 0x6dc, "T"],
66
+ [0x6df, 0x6e4, "T"],
67
+ [0x6e7, 0x6e8, "T"],
68
+ [0x6ea, 0x6ed, "T"],
69
+ [0x6ee, 0x6ef, "R"],
70
+ [0x6fa, 0x6fc, "D"],
71
+ [0x6ff, 0x6ff, "D"],
72
+ [0x70f, 0x70f, "T"],
73
+ [0x710, 0x710, "R"],
74
+ [0x711, 0x711, "T"],
75
+ [0x712, 0x714, "D"],
76
+ [0x715, 0x719, "R"],
77
+ [0x71a, 0x71d, "D"],
78
+ [0x71e, 0x71e, "R"],
79
+ [0x71f, 0x727, "D"],
80
+ [0x728, 0x728, "R"],
81
+ [0x729, 0x729, "D"],
82
+ [0x72a, 0x72a, "R"],
83
+ [0x72b, 0x72b, "D"],
84
+ [0x72c, 0x72c, "R"],
85
+ [0x72d, 0x72e, "D"],
86
+ [0x72f, 0x72f, "R"],
87
+ [0x730, 0x74a, "T"],
88
+ [0x74d, 0x74d, "R"],
89
+ [0x74e, 0x758, "D"],
90
+ [0x759, 0x75b, "R"],
91
+ [0x75c, 0x76a, "D"],
92
+ [0x76b, 0x76c, "R"],
93
+ [0x76d, 0x770, "D"],
94
+ [0x771, 0x771, "R"],
95
+ [0x772, 0x772, "D"],
96
+ [0x773, 0x774, "R"],
97
+ [0x775, 0x777, "D"],
98
+ [0x778, 0x779, "R"],
99
+ [0x77a, 0x77f, "D"],
100
+ [0x7a6, 0x7b0, "T"],
101
+ [0x7ca, 0x7ea, "D"],
102
+ [0x7eb, 0x7f3, "T"],
103
+ [0x7fa, 0x7fa, "C"],
104
+ [0x7fd, 0x7fd, "T"],
105
+ [0x816, 0x819, "T"],
106
+ [0x81b, 0x823, "T"],
107
+ [0x825, 0x827, "T"],
108
+ [0x829, 0x82d, "T"],
109
+ [0x840, 0x840, "R"],
110
+ [0x841, 0x845, "D"],
111
+ [0x846, 0x847, "R"],
112
+ [0x848, 0x848, "D"],
113
+ [0x849, 0x849, "R"],
114
+ [0x84a, 0x853, "D"],
115
+ [0x854, 0x854, "R"],
116
+ [0x855, 0x855, "D"],
117
+ [0x856, 0x858, "R"],
118
+ [0x859, 0x85b, "T"],
119
+ [0x860, 0x860, "D"],
120
+ [0x862, 0x865, "D"],
121
+ [0x867, 0x867, "R"],
122
+ [0x868, 0x868, "D"],
123
+ [0x869, 0x86a, "R"],
124
+ [0x870, 0x882, "R"],
125
+ [0x883, 0x885, "C"],
126
+ [0x886, 0x886, "D"],
127
+ [0x889, 0x88d, "D"],
128
+ [0x88e, 0x88e, "R"],
129
+ [0x897, 0x89f, "T"],
130
+ [0x8a0, 0x8a9, "D"],
131
+ [0x8aa, 0x8ac, "R"],
132
+ [0x8ae, 0x8ae, "R"],
133
+ [0x8af, 0x8b0, "D"],
134
+ [0x8b1, 0x8b2, "R"],
135
+ [0x8b3, 0x8b8, "D"],
136
+ [0x8b9, 0x8b9, "R"],
137
+ [0x8ba, 0x8c8, "D"],
138
+ [0x8ca, 0x8e1, "T"],
139
+ [0x8e3, 0x902, "T"],
140
+ [0x93a, 0x93a, "T"],
141
+ [0x93c, 0x93c, "T"],
142
+ [0x941, 0x948, "T"],
143
+ [0x94d, 0x94d, "T"],
144
+ [0x951, 0x957, "T"],
145
+ [0x962, 0x963, "T"],
146
+ [0x981, 0x981, "T"],
147
+ [0x9bc, 0x9bc, "T"],
148
+ [0x9c1, 0x9c4, "T"],
149
+ [0x9cd, 0x9cd, "T"],
150
+ [0x9e2, 0x9e3, "T"],
151
+ [0x9fe, 0x9fe, "T"],
152
+ [0xa01, 0xa02, "T"],
153
+ [0xa3c, 0xa3c, "T"],
154
+ [0xa41, 0xa42, "T"],
155
+ [0xa47, 0xa48, "T"],
156
+ [0xa4b, 0xa4d, "T"],
157
+ [0xa51, 0xa51, "T"],
158
+ [0xa70, 0xa71, "T"],
159
+ [0xa75, 0xa75, "T"],
160
+ [0xa81, 0xa82, "T"],
161
+ [0xabc, 0xabc, "T"],
162
+ [0xac1, 0xac5, "T"],
163
+ [0xac7, 0xac8, "T"],
164
+ [0xacd, 0xacd, "T"],
165
+ [0xae2, 0xae3, "T"],
166
+ [0xafa, 0xaff, "T"],
167
+ [0xb01, 0xb01, "T"],
168
+ [0xb3c, 0xb3c, "T"],
169
+ [0xb3f, 0xb3f, "T"],
170
+ [0xb41, 0xb44, "T"],
171
+ [0xb4d, 0xb4d, "T"],
172
+ [0xb55, 0xb56, "T"],
173
+ [0xb62, 0xb63, "T"],
174
+ [0xb82, 0xb82, "T"],
175
+ [0xbc0, 0xbc0, "T"],
176
+ [0xbcd, 0xbcd, "T"],
177
+ [0xc00, 0xc00, "T"],
178
+ [0xc04, 0xc04, "T"],
179
+ [0xc3c, 0xc3c, "T"],
180
+ [0xc3e, 0xc40, "T"],
181
+ [0xc46, 0xc48, "T"],
182
+ [0xc4a, 0xc4d, "T"],
183
+ [0xc55, 0xc56, "T"],
184
+ [0xc62, 0xc63, "T"],
185
+ [0xc81, 0xc81, "T"],
186
+ [0xcbc, 0xcbc, "T"],
187
+ [0xcbf, 0xcbf, "T"],
188
+ [0xcc6, 0xcc6, "T"],
189
+ [0xccc, 0xccd, "T"],
190
+ [0xce2, 0xce3, "T"],
191
+ [0xd00, 0xd01, "T"],
192
+ [0xd3b, 0xd3c, "T"],
193
+ [0xd41, 0xd44, "T"],
194
+ [0xd4d, 0xd4d, "T"],
195
+ [0xd62, 0xd63, "T"],
196
+ [0xd81, 0xd81, "T"],
197
+ [0xdca, 0xdca, "T"],
198
+ [0xdd2, 0xdd4, "T"],
199
+ [0xdd6, 0xdd6, "T"],
200
+ [0xe31, 0xe31, "T"],
201
+ [0xe34, 0xe3a, "T"],
202
+ [0xe47, 0xe4e, "T"],
203
+ [0xeb1, 0xeb1, "T"],
204
+ [0xeb4, 0xebc, "T"],
205
+ [0xec8, 0xece, "T"],
206
+ [0xf18, 0xf19, "T"],
207
+ [0xf35, 0xf35, "T"],
208
+ [0xf37, 0xf37, "T"],
209
+ [0xf39, 0xf39, "T"],
210
+ [0xf71, 0xf7e, "T"],
211
+ [0xf80, 0xf84, "T"],
212
+ [0xf86, 0xf87, "T"],
213
+ [0xf8d, 0xf97, "T"],
214
+ [0xf99, 0xfbc, "T"],
215
+ [0xfc6, 0xfc6, "T"],
216
+ [0x102d, 0x1030, "T"],
217
+ [0x1032, 0x1037, "T"],
218
+ [0x1039, 0x103a, "T"],
219
+ [0x103d, 0x103e, "T"],
220
+ [0x1058, 0x1059, "T"],
221
+ [0x105e, 0x1060, "T"],
222
+ [0x1071, 0x1074, "T"],
223
+ [0x1082, 0x1082, "T"],
224
+ [0x1085, 0x1086, "T"],
225
+ [0x108d, 0x108d, "T"],
226
+ [0x109d, 0x109d, "T"],
227
+ [0x135d, 0x135f, "T"],
228
+ [0x1712, 0x1714, "T"],
229
+ [0x1732, 0x1733, "T"],
230
+ [0x1752, 0x1753, "T"],
231
+ [0x1772, 0x1773, "T"],
232
+ [0x17b4, 0x17b5, "T"],
233
+ [0x17b7, 0x17bd, "T"],
234
+ [0x17c6, 0x17c6, "T"],
235
+ [0x17c9, 0x17d3, "T"],
236
+ [0x17dd, 0x17dd, "T"],
237
+ [0x1807, 0x1807, "D"],
238
+ [0x180a, 0x180a, "C"],
239
+ [0x180b, 0x180d, "T"],
240
+ [0x180f, 0x180f, "T"],
241
+ [0x1820, 0x1878, "D"],
242
+ [0x1885, 0x1886, "T"],
243
+ [0x1887, 0x18a8, "D"],
244
+ [0x18a9, 0x18a9, "T"],
245
+ [0x18aa, 0x18aa, "D"],
246
+ [0x1920, 0x1922, "T"],
247
+ [0x1927, 0x1928, "T"],
248
+ [0x1932, 0x1932, "T"],
249
+ [0x1939, 0x193b, "T"],
250
+ [0x1a17, 0x1a18, "T"],
251
+ [0x1a1b, 0x1a1b, "T"],
252
+ [0x1a56, 0x1a56, "T"],
253
+ [0x1a58, 0x1a5e, "T"],
254
+ [0x1a60, 0x1a60, "T"],
255
+ [0x1a62, 0x1a62, "T"],
256
+ [0x1a65, 0x1a6c, "T"],
257
+ [0x1a73, 0x1a7c, "T"],
258
+ [0x1a7f, 0x1a7f, "T"],
259
+ [0x1ab0, 0x1ace, "T"],
260
+ [0x1b00, 0x1b03, "T"],
261
+ [0x1b34, 0x1b34, "T"],
262
+ [0x1b36, 0x1b3a, "T"],
263
+ [0x1b3c, 0x1b3c, "T"],
264
+ [0x1b42, 0x1b42, "T"],
265
+ [0x1b6b, 0x1b73, "T"],
266
+ [0x1b80, 0x1b81, "T"],
267
+ [0x1ba2, 0x1ba5, "T"],
268
+ [0x1ba8, 0x1ba9, "T"],
269
+ [0x1bab, 0x1bad, "T"],
270
+ [0x1be6, 0x1be6, "T"],
271
+ [0x1be8, 0x1be9, "T"],
272
+ [0x1bed, 0x1bed, "T"],
273
+ [0x1bef, 0x1bf1, "T"],
274
+ [0x1c2c, 0x1c33, "T"],
275
+ [0x1c36, 0x1c37, "T"],
276
+ [0x1cd0, 0x1cd2, "T"],
277
+ [0x1cd4, 0x1ce0, "T"],
278
+ [0x1ce2, 0x1ce8, "T"],
279
+ [0x1ced, 0x1ced, "T"],
280
+ [0x1cf4, 0x1cf4, "T"],
281
+ [0x1cf8, 0x1cf9, "T"],
282
+ [0x1dc0, 0x1dff, "T"],
283
+ [0x200b, 0x200b, "T"],
284
+ [0x200d, 0x200d, "C"],
285
+ [0x200e, 0x200f, "T"],
286
+ [0x202a, 0x202e, "T"],
287
+ [0x2060, 0x2064, "T"],
288
+ [0x206a, 0x206f, "T"],
289
+ [0x20d0, 0x20f0, "T"],
290
+ [0x2cef, 0x2cf1, "T"],
291
+ [0x2d7f, 0x2d7f, "T"],
292
+ [0x2de0, 0x2dff, "T"],
293
+ [0x302a, 0x302d, "T"],
294
+ [0x3099, 0x309a, "T"],
295
+ [0xa66f, 0xa672, "T"],
296
+ [0xa674, 0xa67d, "T"],
297
+ [0xa69e, 0xa69f, "T"],
298
+ [0xa6f0, 0xa6f1, "T"],
299
+ [0xa802, 0xa802, "T"],
300
+ [0xa806, 0xa806, "T"],
301
+ [0xa80b, 0xa80b, "T"],
302
+ [0xa825, 0xa826, "T"],
303
+ [0xa82c, 0xa82c, "T"],
304
+ [0xa840, 0xa871, "D"],
305
+ [0xa872, 0xa872, "L"],
306
+ [0xa8c4, 0xa8c5, "T"],
307
+ [0xa8e0, 0xa8f1, "T"],
308
+ [0xa8ff, 0xa8ff, "T"],
309
+ [0xa926, 0xa92d, "T"],
310
+ [0xa947, 0xa951, "T"],
311
+ [0xa980, 0xa982, "T"],
312
+ [0xa9b3, 0xa9b3, "T"],
313
+ [0xa9b6, 0xa9b9, "T"],
314
+ [0xa9bc, 0xa9bd, "T"],
315
+ [0xa9e5, 0xa9e5, "T"],
316
+ [0xaa29, 0xaa2e, "T"],
317
+ [0xaa31, 0xaa32, "T"],
318
+ [0xaa35, 0xaa36, "T"],
319
+ [0xaa43, 0xaa43, "T"],
320
+ [0xaa4c, 0xaa4c, "T"],
321
+ [0xaa7c, 0xaa7c, "T"],
322
+ [0xaab0, 0xaab0, "T"],
323
+ [0xaab2, 0xaab4, "T"],
324
+ [0xaab7, 0xaab8, "T"],
325
+ [0xaabe, 0xaabf, "T"],
326
+ [0xaac1, 0xaac1, "T"],
327
+ [0xaaec, 0xaaed, "T"],
328
+ [0xaaf6, 0xaaf6, "T"],
329
+ [0xabe5, 0xabe5, "T"],
330
+ [0xabe8, 0xabe8, "T"],
331
+ [0xabed, 0xabed, "T"],
332
+ [0xfb1e, 0xfb1e, "T"],
333
+ [0xfe00, 0xfe0f, "T"],
334
+ [0xfe20, 0xfe2f, "T"],
335
+ [0xfeff, 0xfeff, "T"],
336
+ [0xfff9, 0xfffb, "T"],
337
+ [0x101fd, 0x101fd, "T"],
338
+ [0x102e0, 0x102e0, "T"],
339
+ [0x10376, 0x1037a, "T"],
340
+ [0x10a01, 0x10a03, "T"],
341
+ [0x10a05, 0x10a06, "T"],
342
+ [0x10a0c, 0x10a0f, "T"],
343
+ [0x10a38, 0x10a3a, "T"],
344
+ [0x10a3f, 0x10a3f, "T"],
345
+ [0x10ac0, 0x10ac4, "D"],
346
+ [0x10ac5, 0x10ac5, "R"],
347
+ [0x10ac7, 0x10ac7, "R"],
348
+ [0x10ac9, 0x10aca, "R"],
349
+ [0x10acd, 0x10acd, "L"],
350
+ [0x10ace, 0x10ad2, "R"],
351
+ [0x10ad3, 0x10ad6, "D"],
352
+ [0x10ad7, 0x10ad7, "L"],
353
+ [0x10ad8, 0x10adc, "D"],
354
+ [0x10add, 0x10add, "R"],
355
+ [0x10ade, 0x10ae0, "D"],
356
+ [0x10ae1, 0x10ae1, "R"],
357
+ [0x10ae4, 0x10ae4, "R"],
358
+ [0x10ae5, 0x10ae6, "T"],
359
+ [0x10aeb, 0x10aee, "D"],
360
+ [0x10aef, 0x10aef, "R"],
361
+ [0x10b80, 0x10b80, "D"],
362
+ [0x10b81, 0x10b81, "R"],
363
+ [0x10b82, 0x10b82, "D"],
364
+ [0x10b83, 0x10b85, "R"],
365
+ [0x10b86, 0x10b88, "D"],
366
+ [0x10b89, 0x10b89, "R"],
367
+ [0x10b8a, 0x10b8b, "D"],
368
+ [0x10b8c, 0x10b8c, "R"],
369
+ [0x10b8d, 0x10b8d, "D"],
370
+ [0x10b8e, 0x10b8f, "R"],
371
+ [0x10b90, 0x10b90, "D"],
372
+ [0x10b91, 0x10b91, "R"],
373
+ [0x10ba9, 0x10bac, "R"],
374
+ [0x10bad, 0x10bae, "D"],
375
+ [0x10d00, 0x10d00, "L"],
376
+ [0x10d01, 0x10d21, "D"],
377
+ [0x10d22, 0x10d22, "R"],
378
+ [0x10d23, 0x10d23, "D"],
379
+ [0x10d24, 0x10d27, "T"],
380
+ [0x10d69, 0x10d6d, "T"],
381
+ [0x10eab, 0x10eac, "T"],
382
+ [0x10ec2, 0x10ec2, "R"],
383
+ [0x10ec3, 0x10ec4, "D"],
384
+ [0x10efc, 0x10eff, "T"],
385
+ [0x10f30, 0x10f32, "D"],
386
+ [0x10f33, 0x10f33, "R"],
387
+ [0x10f34, 0x10f44, "D"],
388
+ [0x10f46, 0x10f50, "T"],
389
+ [0x10f51, 0x10f53, "D"],
390
+ [0x10f54, 0x10f54, "R"],
391
+ [0x10f70, 0x10f73, "D"],
392
+ [0x10f74, 0x10f75, "R"],
393
+ [0x10f76, 0x10f81, "D"],
394
+ [0x10f82, 0x10f85, "T"],
395
+ [0x10fb0, 0x10fb0, "D"],
396
+ [0x10fb2, 0x10fb3, "D"],
397
+ [0x10fb4, 0x10fb6, "R"],
398
+ [0x10fb8, 0x10fb8, "D"],
399
+ [0x10fb9, 0x10fba, "R"],
400
+ [0x10fbb, 0x10fbc, "D"],
401
+ [0x10fbd, 0x10fbd, "R"],
402
+ [0x10fbe, 0x10fbf, "D"],
403
+ [0x10fc1, 0x10fc1, "D"],
404
+ [0x10fc2, 0x10fc3, "R"],
405
+ [0x10fc4, 0x10fc4, "D"],
406
+ [0x10fc9, 0x10fc9, "R"],
407
+ [0x10fca, 0x10fca, "D"],
408
+ [0x10fcb, 0x10fcb, "L"],
409
+ [0x11001, 0x11001, "T"],
410
+ [0x11038, 0x11046, "T"],
411
+ [0x11070, 0x11070, "T"],
412
+ [0x11073, 0x11074, "T"],
413
+ [0x1107f, 0x11081, "T"],
414
+ [0x110b3, 0x110b6, "T"],
415
+ [0x110b9, 0x110ba, "T"],
416
+ [0x110c2, 0x110c2, "T"],
417
+ [0x11100, 0x11102, "T"],
418
+ [0x11127, 0x1112b, "T"],
419
+ [0x1112d, 0x11134, "T"],
420
+ [0x11173, 0x11173, "T"],
421
+ [0x11180, 0x11181, "T"],
422
+ [0x111b6, 0x111be, "T"],
423
+ [0x111c9, 0x111cc, "T"],
424
+ [0x111cf, 0x111cf, "T"],
425
+ [0x1122f, 0x11231, "T"],
426
+ [0x11234, 0x11234, "T"],
427
+ [0x11236, 0x11237, "T"],
428
+ [0x1123e, 0x1123e, "T"],
429
+ [0x11241, 0x11241, "T"],
430
+ [0x112df, 0x112df, "T"],
431
+ [0x112e3, 0x112ea, "T"],
432
+ [0x11300, 0x11301, "T"],
433
+ [0x1133b, 0x1133c, "T"],
434
+ [0x11340, 0x11340, "T"],
435
+ [0x11366, 0x1136c, "T"],
436
+ [0x11370, 0x11374, "T"],
437
+ [0x113bb, 0x113c0, "T"],
438
+ [0x113ce, 0x113ce, "T"],
439
+ [0x113d0, 0x113d0, "T"],
440
+ [0x113d2, 0x113d2, "T"],
441
+ [0x113e1, 0x113e2, "T"],
442
+ [0x11438, 0x1143f, "T"],
443
+ [0x11442, 0x11444, "T"],
444
+ [0x11446, 0x11446, "T"],
445
+ [0x1145e, 0x1145e, "T"],
446
+ [0x114b3, 0x114b8, "T"],
447
+ [0x114ba, 0x114ba, "T"],
448
+ [0x114bf, 0x114c0, "T"],
449
+ [0x114c2, 0x114c3, "T"],
450
+ [0x115b2, 0x115b5, "T"],
451
+ [0x115bc, 0x115bd, "T"],
452
+ [0x115bf, 0x115c0, "T"],
453
+ [0x115dc, 0x115dd, "T"],
454
+ [0x11633, 0x1163a, "T"],
455
+ [0x1163d, 0x1163d, "T"],
456
+ [0x1163f, 0x11640, "T"],
457
+ [0x116ab, 0x116ab, "T"],
458
+ [0x116ad, 0x116ad, "T"],
459
+ [0x116b0, 0x116b5, "T"],
460
+ [0x116b7, 0x116b7, "T"],
461
+ [0x1171d, 0x1171d, "T"],
462
+ [0x1171f, 0x1171f, "T"],
463
+ [0x11722, 0x11725, "T"],
464
+ [0x11727, 0x1172b, "T"],
465
+ [0x1182f, 0x11837, "T"],
466
+ [0x11839, 0x1183a, "T"],
467
+ [0x1193b, 0x1193c, "T"],
468
+ [0x1193e, 0x1193e, "T"],
469
+ [0x11943, 0x11943, "T"],
470
+ [0x119d4, 0x119d7, "T"],
471
+ [0x119da, 0x119db, "T"],
472
+ [0x119e0, 0x119e0, "T"],
473
+ [0x11a01, 0x11a0a, "T"],
474
+ [0x11a33, 0x11a38, "T"],
475
+ [0x11a3b, 0x11a3e, "T"],
476
+ [0x11a47, 0x11a47, "T"],
477
+ [0x11a51, 0x11a56, "T"],
478
+ [0x11a59, 0x11a5b, "T"],
479
+ [0x11a8a, 0x11a96, "T"],
480
+ [0x11a98, 0x11a99, "T"],
481
+ [0x11c30, 0x11c36, "T"],
482
+ [0x11c38, 0x11c3d, "T"],
483
+ [0x11c3f, 0x11c3f, "T"],
484
+ [0x11c92, 0x11ca7, "T"],
485
+ [0x11caa, 0x11cb0, "T"],
486
+ [0x11cb2, 0x11cb3, "T"],
487
+ [0x11cb5, 0x11cb6, "T"],
488
+ [0x11d31, 0x11d36, "T"],
489
+ [0x11d3a, 0x11d3a, "T"],
490
+ [0x11d3c, 0x11d3d, "T"],
491
+ [0x11d3f, 0x11d45, "T"],
492
+ [0x11d47, 0x11d47, "T"],
493
+ [0x11d90, 0x11d91, "T"],
494
+ [0x11d95, 0x11d95, "T"],
495
+ [0x11d97, 0x11d97, "T"],
496
+ [0x11ef3, 0x11ef4, "T"],
497
+ [0x11f00, 0x11f01, "T"],
498
+ [0x11f36, 0x11f3a, "T"],
499
+ [0x11f40, 0x11f40, "T"],
500
+ [0x11f42, 0x11f42, "T"],
501
+ [0x11f5a, 0x11f5a, "T"],
502
+ [0x13430, 0x13440, "T"],
503
+ [0x13447, 0x13455, "T"],
504
+ [0x1611e, 0x16129, "T"],
505
+ [0x1612d, 0x1612f, "T"],
506
+ [0x16af0, 0x16af4, "T"],
507
+ [0x16b30, 0x16b36, "T"],
508
+ [0x16f4f, 0x16f4f, "T"],
509
+ [0x16f8f, 0x16f92, "T"],
510
+ [0x16fe4, 0x16fe4, "T"],
511
+ [0x1bc9d, 0x1bc9e, "T"],
512
+ [0x1bca0, 0x1bca3, "T"],
513
+ [0x1cf00, 0x1cf2d, "T"],
514
+ [0x1cf30, 0x1cf46, "T"],
515
+ [0x1d167, 0x1d169, "T"],
516
+ [0x1d173, 0x1d182, "T"],
517
+ [0x1d185, 0x1d18b, "T"],
518
+ [0x1d1aa, 0x1d1ad, "T"],
519
+ [0x1d242, 0x1d244, "T"],
520
+ [0x1da00, 0x1da36, "T"],
521
+ [0x1da3b, 0x1da6c, "T"],
522
+ [0x1da75, 0x1da75, "T"],
523
+ [0x1da84, 0x1da84, "T"],
524
+ [0x1da9b, 0x1da9f, "T"],
525
+ [0x1daa1, 0x1daaf, "T"],
526
+ [0x1e000, 0x1e006, "T"],
527
+ [0x1e008, 0x1e018, "T"],
528
+ [0x1e01b, 0x1e021, "T"],
529
+ [0x1e023, 0x1e024, "T"],
530
+ [0x1e026, 0x1e02a, "T"],
531
+ [0x1e08f, 0x1e08f, "T"],
532
+ [0x1e130, 0x1e136, "T"],
533
+ [0x1e2ae, 0x1e2ae, "T"],
534
+ [0x1e2ec, 0x1e2ef, "T"],
535
+ [0x1e4ec, 0x1e4ef, "T"],
536
+ [0x1e5ee, 0x1e5ef, "T"],
537
+ [0x1e8d0, 0x1e8d6, "T"],
538
+ [0x1e900, 0x1e943, "D"],
539
+ [0x1e944, 0x1e94b, "T"],
540
+ [0xe0001, 0xe0001, "T"],
541
+ [0xe0020, 0xe007f, "T"],
542
+ [0xe0100, 0xe01ef, "T"],
543
+ ];
544
+
545
+ // [start, end] Indic_Syllabic_Category = Virama ranges, sorted by start.
546
+ /** @type {Array<[number, number]>} */
547
+ const VIRAMA_RANGES = [
548
+ [0x94d, 0x94d],
549
+ [0x9cd, 0x9cd],
550
+ [0xa4d, 0xa4d],
551
+ [0xacd, 0xacd],
552
+ [0xb4d, 0xb4d],
553
+ [0xbcd, 0xbcd],
554
+ [0xc4d, 0xc4d],
555
+ [0xccd, 0xccd],
556
+ [0xd4d, 0xd4d],
557
+ [0xdca, 0xdca],
558
+ [0x1b44, 0x1b44],
559
+ [0xa806, 0xa806],
560
+ [0xa8c4, 0xa8c4],
561
+ [0xa9c0, 0xa9c0],
562
+ [0x11046, 0x11046],
563
+ [0x110b9, 0x110b9],
564
+ [0x111c0, 0x111c0],
565
+ [0x11235, 0x11235],
566
+ [0x1134d, 0x1134d],
567
+ [0x11442, 0x11442],
568
+ [0x114c2, 0x114c2],
569
+ [0x115bf, 0x115bf],
570
+ [0x1163f, 0x1163f],
571
+ [0x116b6, 0x116b6],
572
+ [0x11839, 0x11839],
573
+ [0x119e0, 0x119e0],
574
+ [0x11c3f, 0x11c3f],
575
+ ];
576
+ // Stryker restore all
577
+
578
+ /**
579
+ * Binary search: the tag of the range containing `cp`, or `fallback`.
580
+ * @param {Array<[number, number, string?]>} ranges
581
+ * @param {number} cp
582
+ * @param {string|boolean} fallback
583
+ * @returns {string|boolean}
584
+ */
585
+ function lookup(ranges, cp, fallback) {
586
+ let lo = 0;
587
+ let hi = ranges.length - 1;
588
+ while (lo <= hi) {
589
+ const mid = (lo + hi) >> 1;
590
+ const [start, end, tag] = ranges[mid];
591
+ if (cp < start) hi = mid - 1;
592
+ else if (cp > end) lo = mid + 1;
593
+ else return tag ?? true;
594
+ }
595
+ return fallback;
596
+ }
597
+
598
+ /**
599
+ * The Unicode Joining_Type of a code point: "C", "D", "R", "L", "T", or "U"
600
+ * (the non-joining default) for anything not in the cursive tables.
601
+ * @param {number} cp
602
+ * @returns {string}
603
+ */
604
+ export function joiningType(cp) {
605
+ return /** @type {string} */ (lookup(JOINING_RANGES, cp, "U"));
606
+ }
607
+
608
+ /**
609
+ * True when `cp` is an Indic virama (the only position where a ZWNJ/ZWJ is
610
+ * linguistically meaningful in Brahmic scripts).
611
+ * @param {number} cp
612
+ * @returns {boolean}
613
+ */
614
+ export function isVirama(cp) {
615
+ return /** @type {boolean} */ (lookup(VIRAMA_RANGES, cp, false));
616
+ }