-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathunicode_data.hpp
More file actions
556 lines (548 loc) · 43.6 KB
/
unicode_data.hpp
File metadata and controls
556 lines (548 loc) · 43.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
/**
* The MIT License
*
* Copyright (c) 2017 Fabio Massaioli
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* DATA EXTRACTED FROM UNICODE CHARACTER DATABASE v9.0.0
*
* Copyright (c) 1991-2017 Unicode, Inc. All rights reserved.
* Distributed under the Terms of Use in http://www.unicode.org/copyright.html.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of the Unicode data files and any associated documentation
* (the "Data Files") or Unicode software and any associated documentation
* (the "Software") to deal in the Data Files or Software
* without restriction, including without limitation the rights to use,
* copy, modify, merge, publish, distribute, and/or sell copies of
* the Data Files or Software, and to permit persons to whom the Data Files
* or Software are furnished to do so, provided that either
* (a) this copyright and permission notice appear with all copies
* of the Data Files or Software, or
* (b) this copyright and permission notice appear in associated
* Documentation.
*/
#pragma once
#include "unicode_structs.hpp"
namespace plot
{
namespace detail
{
// Template variables struct members should be linked only once
// though appearing in multiple translation units
template<typename = void>
struct unicode_tables {
static const unicode_interval_tree_t zero_width[];
static const unicode_interval_tree_t double_width[];
};
template<typename T>
const unicode_interval_tree_t unicode_tables<T>::zero_width[] = {
{ 0xa678, { 0xa674, 0xa67d }, &unicode_tables<T>::zero_width[1], &unicode_tables<T>::zero_width[183] },
{ 0xdca, { 0xdca, 0xdca }, &unicode_tables<T>::zero_width[2], &unicode_tables<T>::zero_width[92] },
{ 0x9fe, { 0x9fe, 0x9fe }, &unicode_tables<T>::zero_width[3], &unicode_tables<T>::zero_width[47] },
{ 0x7ab, { 0x7a6, 0x7b0 }, &unicode_tables<T>::zero_width[4], &unicode_tables<T>::zero_width[26] },
{ 0x615, { 0x610, 0x61a }, &unicode_tables<T>::zero_width[5], &unicode_tables<T>::zero_width[16] },
{ 0x5a7, { 0x591, 0x5bd }, &unicode_tables<T>::zero_width[6], &unicode_tables<T>::zero_width[11] },
{ 0xad, { 0xad, 0xad }, &unicode_tables<T>::zero_width[7], &unicode_tables<T>::zero_width[9] },
{ 0xf, { 0x0, 0x1f }, nullptr, &unicode_tables<T>::zero_width[8] },
{ 0x8f, { 0x7f, 0x9f }, nullptr, nullptr },
{ 0x486, { 0x483, 0x489 }, &unicode_tables<T>::zero_width[10], nullptr },
{ 0x337, { 0x300, 0x36f }, nullptr, nullptr },
{ 0x5c4, { 0x5c4, 0x5c5 }, &unicode_tables<T>::zero_width[12], &unicode_tables<T>::zero_width[14] },
{ 0x5c1, { 0x5c1, 0x5c2 }, &unicode_tables<T>::zero_width[13], nullptr },
{ 0x5bf, { 0x5bf, 0x5bf }, nullptr, nullptr },
{ 0x602, { 0x600, 0x605 }, &unicode_tables<T>::zero_width[15], nullptr },
{ 0x5c7, { 0x5c7, 0x5c7 }, nullptr, nullptr },
{ 0x6e7, { 0x6e7, 0x6e8 }, &unicode_tables<T>::zero_width[17], &unicode_tables<T>::zero_width[22] },
{ 0x670, { 0x670, 0x670 }, &unicode_tables<T>::zero_width[18], &unicode_tables<T>::zero_width[20] },
{ 0x655, { 0x64b, 0x65f }, &unicode_tables<T>::zero_width[19], nullptr },
{ 0x61c, { 0x61c, 0x61c }, nullptr, nullptr },
{ 0x6e1, { 0x6df, 0x6e4 }, &unicode_tables<T>::zero_width[21], nullptr },
{ 0x6d9, { 0x6d6, 0x6dd }, nullptr, nullptr },
{ 0x711, { 0x711, 0x711 }, &unicode_tables<T>::zero_width[23], &unicode_tables<T>::zero_width[25] },
{ 0x70f, { 0x70f, 0x70f }, &unicode_tables<T>::zero_width[24], nullptr },
{ 0x6eb, { 0x6ea, 0x6ed }, nullptr, nullptr },
{ 0x73d, { 0x730, 0x74a }, nullptr, nullptr },
{ 0x93a, { 0x93a, 0x93a }, &unicode_tables<T>::zero_width[27], &unicode_tables<T>::zero_width[37] },
{ 0x826, { 0x825, 0x827 }, &unicode_tables<T>::zero_width[28], &unicode_tables<T>::zero_width[32] },
{ 0x817, { 0x816, 0x819 }, &unicode_tables<T>::zero_width[29], &unicode_tables<T>::zero_width[31] },
{ 0x7ef, { 0x7eb, 0x7f3 }, nullptr, &unicode_tables<T>::zero_width[30] },
{ 0x7fd, { 0x7fd, 0x7fd }, nullptr, nullptr },
{ 0x81f, { 0x81b, 0x823 }, nullptr, nullptr },
{ 0x890, { 0x890, 0x891 }, &unicode_tables<T>::zero_width[33], &unicode_tables<T>::zero_width[35] },
{ 0x85a, { 0x859, 0x85b }, &unicode_tables<T>::zero_width[34], nullptr },
{ 0x82b, { 0x829, 0x82d }, nullptr, nullptr },
{ 0x89b, { 0x898, 0x89f }, nullptr, &unicode_tables<T>::zero_width[36] },
{ 0x8e6, { 0x8ca, 0x902 }, nullptr, nullptr },
{ 0x981, { 0x981, 0x981 }, &unicode_tables<T>::zero_width[38], &unicode_tables<T>::zero_width[43] },
{ 0x94d, { 0x94d, 0x94d }, &unicode_tables<T>::zero_width[39], &unicode_tables<T>::zero_width[41] },
{ 0x944, { 0x941, 0x948 }, &unicode_tables<T>::zero_width[40], nullptr },
{ 0x93c, { 0x93c, 0x93c }, nullptr, nullptr },
{ 0x954, { 0x951, 0x957 }, nullptr, &unicode_tables<T>::zero_width[42] },
{ 0x962, { 0x962, 0x963 }, nullptr, nullptr },
{ 0x9cd, { 0x9cd, 0x9cd }, &unicode_tables<T>::zero_width[44], &unicode_tables<T>::zero_width[46] },
{ 0x9bc, { 0x9bc, 0x9bc }, nullptr, &unicode_tables<T>::zero_width[45] },
{ 0x9c2, { 0x9c1, 0x9c4 }, nullptr, nullptr },
{ 0x9e2, { 0x9e2, 0x9e3 }, nullptr, nullptr },
{ 0xb82, { 0xb82, 0xb82 }, &unicode_tables<T>::zero_width[48], &unicode_tables<T>::zero_width[70] },
{ 0xac7, { 0xac7, 0xac8 }, &unicode_tables<T>::zero_width[49], &unicode_tables<T>::zero_width[60] },
{ 0xa51, { 0xa51, 0xa51 }, &unicode_tables<T>::zero_width[50], &unicode_tables<T>::zero_width[55] },
{ 0xa41, { 0xa41, 0xa42 }, &unicode_tables<T>::zero_width[51], &unicode_tables<T>::zero_width[53] },
{ 0xa01, { 0xa01, 0xa02 }, nullptr, &unicode_tables<T>::zero_width[52] },
{ 0xa3c, { 0xa3c, 0xa3c }, nullptr, nullptr },
{ 0xa47, { 0xa47, 0xa48 }, nullptr, &unicode_tables<T>::zero_width[54] },
{ 0xa4c, { 0xa4b, 0xa4d }, nullptr, nullptr },
{ 0xa81, { 0xa81, 0xa82 }, &unicode_tables<T>::zero_width[56], &unicode_tables<T>::zero_width[58] },
{ 0xa70, { 0xa70, 0xa71 }, nullptr, &unicode_tables<T>::zero_width[57] },
{ 0xa75, { 0xa75, 0xa75 }, nullptr, nullptr },
{ 0xac3, { 0xac1, 0xac5 }, &unicode_tables<T>::zero_width[59], nullptr },
{ 0xabc, { 0xabc, 0xabc }, nullptr, nullptr },
{ 0xb3c, { 0xb3c, 0xb3c }, &unicode_tables<T>::zero_width[61], &unicode_tables<T>::zero_width[65] },
{ 0xae2, { 0xae2, 0xae3 }, &unicode_tables<T>::zero_width[62], &unicode_tables<T>::zero_width[63] },
{ 0xacd, { 0xacd, 0xacd }, nullptr, nullptr },
{ 0xb01, { 0xb01, 0xb01 }, &unicode_tables<T>::zero_width[64], nullptr },
{ 0xafc, { 0xafa, 0xaff }, nullptr, nullptr },
{ 0xb4d, { 0xb4d, 0xb4d }, &unicode_tables<T>::zero_width[66], &unicode_tables<T>::zero_width[68] },
{ 0xb3f, { 0xb3f, 0xb3f }, nullptr, &unicode_tables<T>::zero_width[67] },
{ 0xb42, { 0xb41, 0xb44 }, nullptr, nullptr },
{ 0xb55, { 0xb55, 0xb56 }, nullptr, &unicode_tables<T>::zero_width[69] },
{ 0xb62, { 0xb62, 0xb63 }, nullptr, nullptr },
{ 0xcbc, { 0xcbc, 0xcbc }, &unicode_tables<T>::zero_width[71], &unicode_tables<T>::zero_width[82] },
{ 0xc3f, { 0xc3e, 0xc40 }, &unicode_tables<T>::zero_width[72], &unicode_tables<T>::zero_width[77] },
{ 0xc00, { 0xc00, 0xc00 }, &unicode_tables<T>::zero_width[73], &unicode_tables<T>::zero_width[75] },
{ 0xbc0, { 0xbc0, 0xbc0 }, nullptr, &unicode_tables<T>::zero_width[74] },
{ 0xbcd, { 0xbcd, 0xbcd }, nullptr, nullptr },
{ 0xc04, { 0xc04, 0xc04 }, nullptr, &unicode_tables<T>::zero_width[76] },
{ 0xc3c, { 0xc3c, 0xc3c }, nullptr, nullptr },
{ 0xc55, { 0xc55, 0xc56 }, &unicode_tables<T>::zero_width[78], &unicode_tables<T>::zero_width[80] },
{ 0xc47, { 0xc46, 0xc48 }, nullptr, &unicode_tables<T>::zero_width[79] },
{ 0xc4b, { 0xc4a, 0xc4d }, nullptr, nullptr },
{ 0xc81, { 0xc81, 0xc81 }, &unicode_tables<T>::zero_width[81], nullptr },
{ 0xc62, { 0xc62, 0xc63 }, nullptr, nullptr },
{ 0xd3b, { 0xd3b, 0xd3c }, &unicode_tables<T>::zero_width[83], &unicode_tables<T>::zero_width[88] },
{ 0xccc, { 0xccc, 0xccd }, &unicode_tables<T>::zero_width[84], &unicode_tables<T>::zero_width[86] },
{ 0xcbf, { 0xcbf, 0xcbf }, nullptr, &unicode_tables<T>::zero_width[85] },
{ 0xcc6, { 0xcc6, 0xcc6 }, nullptr, nullptr },
{ 0xce2, { 0xce2, 0xce3 }, nullptr, &unicode_tables<T>::zero_width[87] },
{ 0xd00, { 0xd00, 0xd01 }, nullptr, nullptr },
{ 0xd4d, { 0xd4d, 0xd4d }, &unicode_tables<T>::zero_width[89], &unicode_tables<T>::zero_width[90] },
{ 0xd42, { 0xd41, 0xd44 }, nullptr, nullptr },
{ 0xd81, { 0xd81, 0xd81 }, &unicode_tables<T>::zero_width[91], nullptr },
{ 0xd62, { 0xd62, 0xd63 }, nullptr, nullptr },
{ 0x1932, { 0x1932, 0x1932 }, &unicode_tables<T>::zero_width[93], &unicode_tables<T>::zero_width[138] },
{ 0x1058, { 0x1058, 0x1059 }, &unicode_tables<T>::zero_width[94], &unicode_tables<T>::zero_width[116] },
{ 0xf39, { 0xf39, 0xf39 }, &unicode_tables<T>::zero_width[95], &unicode_tables<T>::zero_width[106] },
{ 0xeb1, { 0xeb1, 0xeb1 }, &unicode_tables<T>::zero_width[96], &unicode_tables<T>::zero_width[101] },
{ 0xe31, { 0xe31, 0xe31 }, &unicode_tables<T>::zero_width[97], &unicode_tables<T>::zero_width[99] },
{ 0xdd6, { 0xdd6, 0xdd6 }, &unicode_tables<T>::zero_width[98], nullptr },
{ 0xdd3, { 0xdd2, 0xdd4 }, nullptr, nullptr },
{ 0xe37, { 0xe34, 0xe3a }, nullptr, &unicode_tables<T>::zero_width[100] },
{ 0xe4a, { 0xe47, 0xe4e }, nullptr, nullptr },
{ 0xf18, { 0xf18, 0xf19 }, &unicode_tables<T>::zero_width[102], &unicode_tables<T>::zero_width[104] },
{ 0xeb8, { 0xeb4, 0xebc }, nullptr, &unicode_tables<T>::zero_width[103] },
{ 0xecb, { 0xec8, 0xece }, nullptr, nullptr },
{ 0xf37, { 0xf37, 0xf37 }, &unicode_tables<T>::zero_width[105], nullptr },
{ 0xf35, { 0xf35, 0xf35 }, nullptr, nullptr },
{ 0xfc6, { 0xfc6, 0xfc6 }, &unicode_tables<T>::zero_width[107], &unicode_tables<T>::zero_width[112] },
{ 0xf86, { 0xf86, 0xf87 }, &unicode_tables<T>::zero_width[108], &unicode_tables<T>::zero_width[110] },
{ 0xf82, { 0xf80, 0xf84 }, &unicode_tables<T>::zero_width[109], nullptr },
{ 0xf77, { 0xf71, 0xf7e }, nullptr, nullptr },
{ 0xfaa, { 0xf99, 0xfbc }, &unicode_tables<T>::zero_width[111], nullptr },
{ 0xf92, { 0xf8d, 0xf97 }, nullptr, nullptr },
{ 0x1039, { 0x1039, 0x103a }, &unicode_tables<T>::zero_width[113], &unicode_tables<T>::zero_width[115] },
{ 0x1034, { 0x1032, 0x1037 }, &unicode_tables<T>::zero_width[114], nullptr },
{ 0x102e, { 0x102d, 0x1030 }, nullptr, nullptr },
{ 0x103d, { 0x103d, 0x103e }, nullptr, nullptr },
{ 0x1772, { 0x1772, 0x1773 }, &unicode_tables<T>::zero_width[117], &unicode_tables<T>::zero_width[128] },
{ 0x109d, { 0x109d, 0x109d }, &unicode_tables<T>::zero_width[118], &unicode_tables<T>::zero_width[123] },
{ 0x1082, { 0x1082, 0x1082 }, &unicode_tables<T>::zero_width[119], &unicode_tables<T>::zero_width[121] },
{ 0x105f, { 0x105e, 0x1060 }, nullptr, &unicode_tables<T>::zero_width[120] },
{ 0x1072, { 0x1071, 0x1074 }, nullptr, nullptr },
{ 0x108d, { 0x108d, 0x108d }, &unicode_tables<T>::zero_width[122], nullptr },
{ 0x1085, { 0x1085, 0x1086 }, nullptr, nullptr },
{ 0x1713, { 0x1712, 0x1714 }, &unicode_tables<T>::zero_width[124], &unicode_tables<T>::zero_width[126] },
{ 0x11af, { 0x1160, 0x11ff }, nullptr, &unicode_tables<T>::zero_width[125] },
{ 0x135e, { 0x135d, 0x135f }, nullptr, nullptr },
{ 0x1752, { 0x1752, 0x1753 }, &unicode_tables<T>::zero_width[127], nullptr },
{ 0x1732, { 0x1732, 0x1733 }, nullptr, nullptr },
{ 0x180d, { 0x180b, 0x180f }, &unicode_tables<T>::zero_width[129], &unicode_tables<T>::zero_width[134] },
{ 0x17c6, { 0x17c6, 0x17c6 }, &unicode_tables<T>::zero_width[130], &unicode_tables<T>::zero_width[132] },
{ 0x17b4, { 0x17b4, 0x17b5 }, nullptr, &unicode_tables<T>::zero_width[131] },
{ 0x17ba, { 0x17b7, 0x17bd }, nullptr, nullptr },
{ 0x17dd, { 0x17dd, 0x17dd }, &unicode_tables<T>::zero_width[133], nullptr },
{ 0x17ce, { 0x17c9, 0x17d3 }, nullptr, nullptr },
{ 0x18a9, { 0x18a9, 0x18a9 }, &unicode_tables<T>::zero_width[135], &unicode_tables<T>::zero_width[136] },
{ 0x1885, { 0x1885, 0x1886 }, nullptr, nullptr },
{ 0x1921, { 0x1920, 0x1922 }, nullptr, &unicode_tables<T>::zero_width[137] },
{ 0x1927, { 0x1927, 0x1928 }, nullptr, nullptr },
{ 0x1be8, { 0x1be8, 0x1be9 }, &unicode_tables<T>::zero_width[139], &unicode_tables<T>::zero_width[161] },
{ 0x1abf, { 0x1ab0, 0x1ace }, &unicode_tables<T>::zero_width[140], &unicode_tables<T>::zero_width[150] },
{ 0x1a5b, { 0x1a58, 0x1a5e }, &unicode_tables<T>::zero_width[141], &unicode_tables<T>::zero_width[145] },
{ 0x1a17, { 0x1a17, 0x1a18 }, &unicode_tables<T>::zero_width[142], &unicode_tables<T>::zero_width[143] },
{ 0x193a, { 0x1939, 0x193b }, nullptr, nullptr },
{ 0x1a56, { 0x1a56, 0x1a56 }, &unicode_tables<T>::zero_width[144], nullptr },
{ 0x1a1b, { 0x1a1b, 0x1a1b }, nullptr, nullptr },
{ 0x1a68, { 0x1a65, 0x1a6c }, &unicode_tables<T>::zero_width[146], &unicode_tables<T>::zero_width[148] },
{ 0x1a62, { 0x1a62, 0x1a62 }, &unicode_tables<T>::zero_width[147], nullptr },
{ 0x1a60, { 0x1a60, 0x1a60 }, nullptr, nullptr },
{ 0x1a7f, { 0x1a7f, 0x1a7f }, &unicode_tables<T>::zero_width[149], nullptr },
{ 0x1a77, { 0x1a73, 0x1a7c }, nullptr, nullptr },
{ 0x1b6f, { 0x1b6b, 0x1b73 }, &unicode_tables<T>::zero_width[151], &unicode_tables<T>::zero_width[156] },
{ 0x1b38, { 0x1b36, 0x1b3a }, &unicode_tables<T>::zero_width[152], &unicode_tables<T>::zero_width[154] },
{ 0x1b01, { 0x1b00, 0x1b03 }, nullptr, &unicode_tables<T>::zero_width[153] },
{ 0x1b34, { 0x1b34, 0x1b34 }, nullptr, nullptr },
{ 0x1b42, { 0x1b42, 0x1b42 }, &unicode_tables<T>::zero_width[155], nullptr },
{ 0x1b3c, { 0x1b3c, 0x1b3c }, nullptr, nullptr },
{ 0x1ba8, { 0x1ba8, 0x1ba9 }, &unicode_tables<T>::zero_width[157], &unicode_tables<T>::zero_width[159] },
{ 0x1b80, { 0x1b80, 0x1b81 }, nullptr, &unicode_tables<T>::zero_width[158] },
{ 0x1ba3, { 0x1ba2, 0x1ba5 }, nullptr, nullptr },
{ 0x1bac, { 0x1bab, 0x1bad }, nullptr, &unicode_tables<T>::zero_width[160] },
{ 0x1be6, { 0x1be6, 0x1be6 }, nullptr, nullptr },
{ 0x200d, { 0x200b, 0x200f }, &unicode_tables<T>::zero_width[162], &unicode_tables<T>::zero_width[173] },
{ 0x1cda, { 0x1cd4, 0x1ce0 }, &unicode_tables<T>::zero_width[163], &unicode_tables<T>::zero_width[168] },
{ 0x1c2f, { 0x1c2c, 0x1c33 }, &unicode_tables<T>::zero_width[164], &unicode_tables<T>::zero_width[166] },
{ 0x1bf0, { 0x1bef, 0x1bf1 }, &unicode_tables<T>::zero_width[165], nullptr },
{ 0x1bed, { 0x1bed, 0x1bed }, nullptr, nullptr },
{ 0x1cd1, { 0x1cd0, 0x1cd2 }, &unicode_tables<T>::zero_width[167], nullptr },
{ 0x1c36, { 0x1c36, 0x1c37 }, nullptr, nullptr },
{ 0x1cf4, { 0x1cf4, 0x1cf4 }, &unicode_tables<T>::zero_width[169], &unicode_tables<T>::zero_width[171] },
{ 0x1ce5, { 0x1ce2, 0x1ce8 }, nullptr, &unicode_tables<T>::zero_width[170] },
{ 0x1ced, { 0x1ced, 0x1ced }, nullptr, nullptr },
{ 0x1cf8, { 0x1cf8, 0x1cf9 }, nullptr, &unicode_tables<T>::zero_width[172] },
{ 0x1ddf, { 0x1dc0, 0x1dff }, nullptr, nullptr },
{ 0x2cf0, { 0x2cef, 0x2cf1 }, &unicode_tables<T>::zero_width[174], &unicode_tables<T>::zero_width[178] },
{ 0x2062, { 0x2060, 0x2064 }, &unicode_tables<T>::zero_width[175], &unicode_tables<T>::zero_width[176] },
{ 0x202b, { 0x2028, 0x202e }, nullptr, nullptr },
{ 0x206a, { 0x2066, 0x206f }, nullptr, &unicode_tables<T>::zero_width[177] },
{ 0x20e0, { 0x20d0, 0x20f0 }, nullptr, nullptr },
{ 0x302b, { 0x302a, 0x302d }, &unicode_tables<T>::zero_width[179], &unicode_tables<T>::zero_width[181] },
{ 0x2def, { 0x2de0, 0x2dff }, &unicode_tables<T>::zero_width[180], nullptr },
{ 0x2d7f, { 0x2d7f, 0x2d7f }, nullptr, nullptr },
{ 0xa670, { 0xa66f, 0xa672 }, &unicode_tables<T>::zero_width[182], nullptr },
{ 0x3099, { 0x3099, 0x309a }, nullptr, nullptr },
{ 0x114b5, { 0x114b3, 0x114b8 }, &unicode_tables<T>::zero_width[184], &unicode_tables<T>::zero_width[274] },
{ 0x10378, { 0x10376, 0x1037a }, &unicode_tables<T>::zero_width[185], &unicode_tables<T>::zero_width[229] },
{ 0xaa4c, { 0xaa4c, 0xaa4c }, &unicode_tables<T>::zero_width[186], &unicode_tables<T>::zero_width[207] },
{ 0xa929, { 0xa926, 0xa92d }, &unicode_tables<T>::zero_width[187], &unicode_tables<T>::zero_width[197] },
{ 0xa80b, { 0xa80b, 0xa80b }, &unicode_tables<T>::zero_width[188], &unicode_tables<T>::zero_width[192] },
{ 0xa6f0, { 0xa6f0, 0xa6f1 }, &unicode_tables<T>::zero_width[189], &unicode_tables<T>::zero_width[190] },
{ 0xa69e, { 0xa69e, 0xa69f }, nullptr, nullptr },
{ 0xa802, { 0xa802, 0xa802 }, nullptr, &unicode_tables<T>::zero_width[191] },
{ 0xa806, { 0xa806, 0xa806 }, nullptr, nullptr },
{ 0xa8c4, { 0xa8c4, 0xa8c5 }, &unicode_tables<T>::zero_width[193], &unicode_tables<T>::zero_width[195] },
{ 0xa82c, { 0xa82c, 0xa82c }, &unicode_tables<T>::zero_width[194], nullptr },
{ 0xa825, { 0xa825, 0xa826 }, nullptr, nullptr },
{ 0xa8e8, { 0xa8e0, 0xa8f1 }, nullptr, &unicode_tables<T>::zero_width[196] },
{ 0xa8ff, { 0xa8ff, 0xa8ff }, nullptr, nullptr },
{ 0xa9bc, { 0xa9bc, 0xa9bd }, &unicode_tables<T>::zero_width[198], &unicode_tables<T>::zero_width[202] },
{ 0xa981, { 0xa980, 0xa982 }, &unicode_tables<T>::zero_width[199], &unicode_tables<T>::zero_width[200] },
{ 0xa94c, { 0xa947, 0xa951 }, nullptr, nullptr },
{ 0xa9b7, { 0xa9b6, 0xa9b9 }, &unicode_tables<T>::zero_width[201], nullptr },
{ 0xa9b3, { 0xa9b3, 0xa9b3 }, nullptr, nullptr },
{ 0xaa31, { 0xaa31, 0xaa32 }, &unicode_tables<T>::zero_width[203], &unicode_tables<T>::zero_width[205] },
{ 0xaa2b, { 0xaa29, 0xaa2e }, &unicode_tables<T>::zero_width[204], nullptr },
{ 0xa9e5, { 0xa9e5, 0xa9e5 }, nullptr, nullptr },
{ 0xaa35, { 0xaa35, 0xaa36 }, nullptr, &unicode_tables<T>::zero_width[206] },
{ 0xaa43, { 0xaa43, 0xaa43 }, nullptr, nullptr },
{ 0xd800, { 0xd800, 0xd800 }, &unicode_tables<T>::zero_width[208], &unicode_tables<T>::zero_width[219] },
{ 0xaac1, { 0xaac1, 0xaac1 }, &unicode_tables<T>::zero_width[209], &unicode_tables<T>::zero_width[214] },
{ 0xaab3, { 0xaab2, 0xaab4 }, &unicode_tables<T>::zero_width[210], &unicode_tables<T>::zero_width[212] },
{ 0xaa7c, { 0xaa7c, 0xaa7c }, nullptr, &unicode_tables<T>::zero_width[211] },
{ 0xaab0, { 0xaab0, 0xaab0 }, nullptr, nullptr },
{ 0xaabe, { 0xaabe, 0xaabf }, &unicode_tables<T>::zero_width[213], nullptr },
{ 0xaab7, { 0xaab7, 0xaab8 }, nullptr, nullptr },
{ 0xabe5, { 0xabe5, 0xabe5 }, &unicode_tables<T>::zero_width[215], &unicode_tables<T>::zero_width[217] },
{ 0xaaf6, { 0xaaf6, 0xaaf6 }, &unicode_tables<T>::zero_width[216], nullptr },
{ 0xaaec, { 0xaaec, 0xaaed }, nullptr, nullptr },
{ 0xabe8, { 0xabe8, 0xabe8 }, nullptr, &unicode_tables<T>::zero_width[218] },
{ 0xabed, { 0xabed, 0xabed }, nullptr, nullptr },
{ 0xfe07, { 0xfe00, 0xfe0f }, &unicode_tables<T>::zero_width[220], &unicode_tables<T>::zero_width[224] },
{ 0xdbff, { 0xdbff, 0xdc00 }, &unicode_tables<T>::zero_width[221], &unicode_tables<T>::zero_width[222] },
{ 0xdb7f, { 0xdb7f, 0xdb80 }, nullptr, nullptr },
{ 0xdfff, { 0xdfff, 0xdfff }, nullptr, &unicode_tables<T>::zero_width[223] },
{ 0xfb1e, { 0xfb1e, 0xfb1e }, nullptr, nullptr },
{ 0xfffa, { 0xfff9, 0xfffb }, &unicode_tables<T>::zero_width[225], &unicode_tables<T>::zero_width[227] },
{ 0xfeff, { 0xfeff, 0xfeff }, &unicode_tables<T>::zero_width[226], nullptr },
{ 0xfe27, { 0xfe20, 0xfe2f }, nullptr, nullptr },
{ 0x102e0, { 0x102e0, 0x102e0 }, &unicode_tables<T>::zero_width[228], nullptr },
{ 0x101fd, { 0x101fd, 0x101fd }, nullptr, nullptr },
{ 0x11129, { 0x11127, 0x1112b }, &unicode_tables<T>::zero_width[230], &unicode_tables<T>::zero_width[252] },
{ 0x10f83, { 0x10f82, 0x10f85 }, &unicode_tables<T>::zero_width[231], &unicode_tables<T>::zero_width[241] },
{ 0x10a3f, { 0x10a3f, 0x10a3f }, &unicode_tables<T>::zero_width[232], &unicode_tables<T>::zero_width[236] },
{ 0x10a0d, { 0x10a0c, 0x10a0f }, &unicode_tables<T>::zero_width[233], &unicode_tables<T>::zero_width[235] },
{ 0x10a05, { 0x10a05, 0x10a06 }, &unicode_tables<T>::zero_width[234], nullptr },
{ 0x10a02, { 0x10a01, 0x10a03 }, nullptr, nullptr },
{ 0x10a39, { 0x10a38, 0x10a3a }, nullptr, nullptr },
{ 0x10eab, { 0x10eab, 0x10eac }, &unicode_tables<T>::zero_width[237], &unicode_tables<T>::zero_width[239] },
{ 0x10d25, { 0x10d24, 0x10d27 }, &unicode_tables<T>::zero_width[238], nullptr },
{ 0x10ae5, { 0x10ae5, 0x10ae6 }, nullptr, nullptr },
{ 0x10efe, { 0x10efd, 0x10eff }, nullptr, &unicode_tables<T>::zero_width[240] },
{ 0x10f4b, { 0x10f46, 0x10f50 }, nullptr, nullptr },
{ 0x110b4, { 0x110b3, 0x110b6 }, &unicode_tables<T>::zero_width[242], &unicode_tables<T>::zero_width[247] },
{ 0x11070, { 0x11070, 0x11070 }, &unicode_tables<T>::zero_width[243], &unicode_tables<T>::zero_width[245] },
{ 0x1103f, { 0x11038, 0x11046 }, &unicode_tables<T>::zero_width[244], nullptr },
{ 0x11001, { 0x11001, 0x11001 }, nullptr, nullptr },
{ 0x11080, { 0x1107f, 0x11081 }, &unicode_tables<T>::zero_width[246], nullptr },
{ 0x11073, { 0x11073, 0x11074 }, nullptr, nullptr },
{ 0x110c2, { 0x110c2, 0x110c2 }, &unicode_tables<T>::zero_width[248], &unicode_tables<T>::zero_width[250] },
{ 0x110bd, { 0x110bd, 0x110bd }, &unicode_tables<T>::zero_width[249], nullptr },
{ 0x110b9, { 0x110b9, 0x110ba }, nullptr, nullptr },
{ 0x11101, { 0x11100, 0x11102 }, &unicode_tables<T>::zero_width[251], nullptr },
{ 0x110cd, { 0x110cd, 0x110cd }, nullptr, nullptr },
{ 0x11241, { 0x11241, 0x11241 }, &unicode_tables<T>::zero_width[253], &unicode_tables<T>::zero_width[263] },
{ 0x111cf, { 0x111cf, 0x111cf }, &unicode_tables<T>::zero_width[254], &unicode_tables<T>::zero_width[259] },
{ 0x11180, { 0x11180, 0x11181 }, &unicode_tables<T>::zero_width[255], &unicode_tables<T>::zero_width[257] },
{ 0x11130, { 0x1112d, 0x11134 }, nullptr, &unicode_tables<T>::zero_width[256] },
{ 0x11173, { 0x11173, 0x11173 }, nullptr, nullptr },
{ 0x111ca, { 0x111c9, 0x111cc }, &unicode_tables<T>::zero_width[258], nullptr },
{ 0x111ba, { 0x111b6, 0x111be }, nullptr, nullptr },
{ 0x11234, { 0x11234, 0x11234 }, &unicode_tables<T>::zero_width[260], &unicode_tables<T>::zero_width[261] },
{ 0x11230, { 0x1122f, 0x11231 }, nullptr, nullptr },
{ 0x1123e, { 0x1123e, 0x1123e }, &unicode_tables<T>::zero_width[262], nullptr },
{ 0x11236, { 0x11236, 0x11237 }, nullptr, nullptr },
{ 0x11369, { 0x11366, 0x1136c }, &unicode_tables<T>::zero_width[264], &unicode_tables<T>::zero_width[269] },
{ 0x11300, { 0x11300, 0x11301 }, &unicode_tables<T>::zero_width[265], &unicode_tables<T>::zero_width[267] },
{ 0x112df, { 0x112df, 0x112df }, nullptr, &unicode_tables<T>::zero_width[266] },
{ 0x112e6, { 0x112e3, 0x112ea }, nullptr, nullptr },
{ 0x11340, { 0x11340, 0x11340 }, &unicode_tables<T>::zero_width[268], nullptr },
{ 0x1133b, { 0x1133b, 0x1133c }, nullptr, nullptr },
{ 0x11443, { 0x11442, 0x11444 }, &unicode_tables<T>::zero_width[270], &unicode_tables<T>::zero_width[272] },
{ 0x11372, { 0x11370, 0x11374 }, nullptr, &unicode_tables<T>::zero_width[271] },
{ 0x1143b, { 0x11438, 0x1143f }, nullptr, nullptr },
{ 0x1145e, { 0x1145e, 0x1145e }, &unicode_tables<T>::zero_width[273], nullptr },
{ 0x11446, { 0x11446, 0x11446 }, nullptr, nullptr },
{ 0x11d47, { 0x11d47, 0x11d47 }, &unicode_tables<T>::zero_width[275], &unicode_tables<T>::zero_width[319] },
{ 0x11943, { 0x11943, 0x11943 }, &unicode_tables<T>::zero_width[276], &unicode_tables<T>::zero_width[297] },
{ 0x116ab, { 0x116ab, 0x116ab }, &unicode_tables<T>::zero_width[277], &unicode_tables<T>::zero_width[287] },
{ 0x115bc, { 0x115bc, 0x115bd }, &unicode_tables<T>::zero_width[278], &unicode_tables<T>::zero_width[282] },
{ 0x114c2, { 0x114c2, 0x114c3 }, &unicode_tables<T>::zero_width[279], &unicode_tables<T>::zero_width[281] },
{ 0x114bf, { 0x114bf, 0x114c0 }, &unicode_tables<T>::zero_width[280], nullptr },
{ 0x114ba, { 0x114ba, 0x114ba }, nullptr, nullptr },
{ 0x115b3, { 0x115b2, 0x115b5 }, nullptr, nullptr },
{ 0x11636, { 0x11633, 0x1163a }, &unicode_tables<T>::zero_width[283], &unicode_tables<T>::zero_width[285] },
{ 0x115dc, { 0x115dc, 0x115dd }, &unicode_tables<T>::zero_width[284], nullptr },
{ 0x115bf, { 0x115bf, 0x115c0 }, nullptr, nullptr },
{ 0x1163d, { 0x1163d, 0x1163d }, nullptr, &unicode_tables<T>::zero_width[286] },
{ 0x1163f, { 0x1163f, 0x11640 }, nullptr, nullptr },
{ 0x11729, { 0x11727, 0x1172b }, &unicode_tables<T>::zero_width[288], &unicode_tables<T>::zero_width[293] },
{ 0x116b7, { 0x116b7, 0x116b7 }, &unicode_tables<T>::zero_width[289], &unicode_tables<T>::zero_width[291] },
{ 0x116ad, { 0x116ad, 0x116ad }, nullptr, &unicode_tables<T>::zero_width[290] },
{ 0x116b2, { 0x116b0, 0x116b5 }, nullptr, nullptr },
{ 0x11723, { 0x11722, 0x11725 }, &unicode_tables<T>::zero_width[292], nullptr },
{ 0x1171e, { 0x1171d, 0x1171f }, nullptr, nullptr },
{ 0x11839, { 0x11839, 0x1183a }, &unicode_tables<T>::zero_width[294], &unicode_tables<T>::zero_width[295] },
{ 0x11833, { 0x1182f, 0x11837 }, nullptr, nullptr },
{ 0x1193b, { 0x1193b, 0x1193c }, nullptr, &unicode_tables<T>::zero_width[296] },
{ 0x1193e, { 0x1193e, 0x1193e }, nullptr, nullptr },
{ 0x11c33, { 0x11c30, 0x11c36 }, &unicode_tables<T>::zero_width[298], &unicode_tables<T>::zero_width[309] },
{ 0x11a3c, { 0x11a3b, 0x11a3e }, &unicode_tables<T>::zero_width[299], &unicode_tables<T>::zero_width[304] },
{ 0x119e0, { 0x119e0, 0x119e0 }, &unicode_tables<T>::zero_width[300], &unicode_tables<T>::zero_width[302] },
{ 0x119d5, { 0x119d4, 0x119d7 }, nullptr, &unicode_tables<T>::zero_width[301] },
{ 0x119da, { 0x119da, 0x119db }, nullptr, nullptr },
{ 0x11a05, { 0x11a01, 0x11a0a }, nullptr, &unicode_tables<T>::zero_width[303] },
{ 0x11a35, { 0x11a33, 0x11a38 }, nullptr, nullptr },
{ 0x11a5a, { 0x11a59, 0x11a5b }, &unicode_tables<T>::zero_width[305], &unicode_tables<T>::zero_width[307] },
{ 0x11a47, { 0x11a47, 0x11a47 }, nullptr, &unicode_tables<T>::zero_width[306] },
{ 0x11a53, { 0x11a51, 0x11a56 }, nullptr, nullptr },
{ 0x11a98, { 0x11a98, 0x11a99 }, &unicode_tables<T>::zero_width[308], nullptr },
{ 0x11a90, { 0x11a8a, 0x11a96 }, nullptr, nullptr },
{ 0x11cb2, { 0x11cb2, 0x11cb3 }, &unicode_tables<T>::zero_width[310], &unicode_tables<T>::zero_width[314] },
{ 0x11c9c, { 0x11c92, 0x11ca7 }, &unicode_tables<T>::zero_width[311], &unicode_tables<T>::zero_width[313] },
{ 0x11c3a, { 0x11c38, 0x11c3d }, nullptr, &unicode_tables<T>::zero_width[312] },
{ 0x11c3f, { 0x11c3f, 0x11c3f }, nullptr, nullptr },
{ 0x11cad, { 0x11caa, 0x11cb0 }, nullptr, nullptr },
{ 0x11d3a, { 0x11d3a, 0x11d3a }, &unicode_tables<T>::zero_width[315], &unicode_tables<T>::zero_width[317] },
{ 0x11cb5, { 0x11cb5, 0x11cb6 }, nullptr, &unicode_tables<T>::zero_width[316] },
{ 0x11d33, { 0x11d31, 0x11d36 }, nullptr, nullptr },
{ 0x11d42, { 0x11d3f, 0x11d45 }, &unicode_tables<T>::zero_width[318], nullptr },
{ 0x11d3c, { 0x11d3c, 0x11d3d }, nullptr, nullptr },
{ 0x1d1ab, { 0x1d1aa, 0x1d1ad }, &unicode_tables<T>::zero_width[320], &unicode_tables<T>::zero_width[342] },
{ 0x16b33, { 0x16b30, 0x16b36 }, &unicode_tables<T>::zero_width[321], &unicode_tables<T>::zero_width[332] },
{ 0x11f38, { 0x11f36, 0x11f3a }, &unicode_tables<T>::zero_width[322], &unicode_tables<T>::zero_width[327] },
{ 0x11d97, { 0x11d97, 0x11d97 }, &unicode_tables<T>::zero_width[323], &unicode_tables<T>::zero_width[325] },
{ 0x11d95, { 0x11d95, 0x11d95 }, &unicode_tables<T>::zero_width[324], nullptr },
{ 0x11d90, { 0x11d90, 0x11d91 }, nullptr, nullptr },
{ 0x11ef3, { 0x11ef3, 0x11ef4 }, nullptr, &unicode_tables<T>::zero_width[326] },
{ 0x11f00, { 0x11f00, 0x11f01 }, nullptr, nullptr },
{ 0x13438, { 0x13430, 0x13440 }, &unicode_tables<T>::zero_width[328], &unicode_tables<T>::zero_width[330] },
{ 0x11f40, { 0x11f40, 0x11f40 }, nullptr, &unicode_tables<T>::zero_width[329] },
{ 0x11f42, { 0x11f42, 0x11f42 }, nullptr, nullptr },
{ 0x1344e, { 0x13447, 0x13455 }, nullptr, &unicode_tables<T>::zero_width[331] },
{ 0x16af2, { 0x16af0, 0x16af4 }, nullptr, nullptr },
{ 0x1cf16, { 0x1cf00, 0x1cf2d }, &unicode_tables<T>::zero_width[333], &unicode_tables<T>::zero_width[338] },
{ 0x16fe4, { 0x16fe4, 0x16fe4 }, &unicode_tables<T>::zero_width[334], &unicode_tables<T>::zero_width[336] },
{ 0x16f4f, { 0x16f4f, 0x16f4f }, nullptr, &unicode_tables<T>::zero_width[335] },
{ 0x16f90, { 0x16f8f, 0x16f92 }, nullptr, nullptr },
{ 0x1bc9d, { 0x1bc9d, 0x1bc9e }, nullptr, &unicode_tables<T>::zero_width[337] },
{ 0x1bca1, { 0x1bca0, 0x1bca3 }, nullptr, nullptr },
{ 0x1d17a, { 0x1d173, 0x1d182 }, &unicode_tables<T>::zero_width[339], &unicode_tables<T>::zero_width[341] },
{ 0x1d168, { 0x1d167, 0x1d169 }, &unicode_tables<T>::zero_width[340], nullptr },
{ 0x1cf3b, { 0x1cf30, 0x1cf46 }, nullptr, nullptr },
{ 0x1d188, { 0x1d185, 0x1d18b }, nullptr, nullptr },
{ 0x1e028, { 0x1e026, 0x1e02a }, &unicode_tables<T>::zero_width[343], &unicode_tables<T>::zero_width[354] },
{ 0x1da9d, { 0x1da9b, 0x1da9f }, &unicode_tables<T>::zero_width[344], &unicode_tables<T>::zero_width[349] },
{ 0x1da53, { 0x1da3b, 0x1da6c }, &unicode_tables<T>::zero_width[345], &unicode_tables<T>::zero_width[347] },
{ 0x1da1b, { 0x1da00, 0x1da36 }, &unicode_tables<T>::zero_width[346], nullptr },
{ 0x1d243, { 0x1d242, 0x1d244 }, nullptr, nullptr },
{ 0x1da75, { 0x1da75, 0x1da75 }, nullptr, &unicode_tables<T>::zero_width[348] },
{ 0x1da84, { 0x1da84, 0x1da84 }, nullptr, nullptr },
{ 0x1e010, { 0x1e008, 0x1e018 }, &unicode_tables<T>::zero_width[350], &unicode_tables<T>::zero_width[352] },
{ 0x1e003, { 0x1e000, 0x1e006 }, &unicode_tables<T>::zero_width[351], nullptr },
{ 0x1daa8, { 0x1daa1, 0x1daaf }, nullptr, nullptr },
{ 0x1e023, { 0x1e023, 0x1e024 }, &unicode_tables<T>::zero_width[353], nullptr },
{ 0x1e01e, { 0x1e01b, 0x1e021 }, nullptr, nullptr },
{ 0x1e4ed, { 0x1e4ec, 0x1e4ef }, &unicode_tables<T>::zero_width[355], &unicode_tables<T>::zero_width[359] },
{ 0x1e2ae, { 0x1e2ae, 0x1e2ae }, &unicode_tables<T>::zero_width[356], &unicode_tables<T>::zero_width[358] },
{ 0x1e08f, { 0x1e08f, 0x1e08f }, nullptr, &unicode_tables<T>::zero_width[357] },
{ 0x1e133, { 0x1e130, 0x1e136 }, nullptr, nullptr },
{ 0x1e2ed, { 0x1e2ec, 0x1e2ef }, nullptr, nullptr },
{ 0xe0001, { 0xe0001, 0xe0001 }, &unicode_tables<T>::zero_width[360], &unicode_tables<T>::zero_width[362] },
{ 0x1e8d3, { 0x1e8d0, 0x1e8d6 }, nullptr, &unicode_tables<T>::zero_width[361] },
{ 0x1e947, { 0x1e944, 0x1e94a }, nullptr, nullptr },
{ 0xe0177, { 0xe0100, 0xe01ef }, &unicode_tables<T>::zero_width[363], nullptr },
{ 0xe004f, { 0xe0020, 0xe007f }, nullptr, nullptr },
};
template<typename T>
const unicode_interval_tree_t unicode_tables<T>::double_width[] = {
{ 0x16ff0, { 0x16ff0, 0x16ff1 }, &unicode_tables<T>::double_width[1], &unicode_tables<T>::double_width[61] },
{ 0x2796, { 0x2795, 0x2797 }, &unicode_tables<T>::double_width[2], &unicode_tables<T>::double_width[31] },
{ 0x26c4, { 0x26c4, 0x26c5 }, &unicode_tables<T>::double_width[3], &unicode_tables<T>::double_width[17] },
{ 0x25fd, { 0x25fd, 0x25fe }, &unicode_tables<T>::double_width[4], &unicode_tables<T>::double_width[10] },
{ 0x2329, { 0x2329, 0x232a }, &unicode_tables<T>::double_width[5], &unicode_tables<T>::double_width[7] },
{ 0x231a, { 0x231a, 0x231b }, &unicode_tables<T>::double_width[6], nullptr },
{ 0x112f, { 0x1100, 0x115f }, nullptr, nullptr },
{ 0x23f0, { 0x23f0, 0x23f0 }, &unicode_tables<T>::double_width[8], &unicode_tables<T>::double_width[9] },
{ 0x23ea, { 0x23e9, 0x23ec }, nullptr, nullptr },
{ 0x23f3, { 0x23f3, 0x23f3 }, nullptr, nullptr },
{ 0x2693, { 0x2693, 0x2693 }, &unicode_tables<T>::double_width[11], &unicode_tables<T>::double_width[14] },
{ 0x264d, { 0x2648, 0x2653 }, &unicode_tables<T>::double_width[12], &unicode_tables<T>::double_width[13] },
{ 0x2614, { 0x2614, 0x2615 }, nullptr, nullptr },
{ 0x267f, { 0x267f, 0x267f }, nullptr, nullptr },
{ 0x26aa, { 0x26aa, 0x26ab }, &unicode_tables<T>::double_width[15], &unicode_tables<T>::double_width[16] },
{ 0x26a1, { 0x26a1, 0x26a1 }, nullptr, nullptr },
{ 0x26bd, { 0x26bd, 0x26be }, nullptr, nullptr },
{ 0x2705, { 0x2705, 0x2705 }, &unicode_tables<T>::double_width[18], &unicode_tables<T>::double_width[25] },
{ 0x26f2, { 0x26f2, 0x26f3 }, &unicode_tables<T>::double_width[19], &unicode_tables<T>::double_width[22] },
{ 0x26d4, { 0x26d4, 0x26d4 }, &unicode_tables<T>::double_width[20], &unicode_tables<T>::double_width[21] },
{ 0x26ce, { 0x26ce, 0x26ce }, nullptr, nullptr },
{ 0x26ea, { 0x26ea, 0x26ea }, nullptr, nullptr },
{ 0x26fa, { 0x26fa, 0x26fa }, &unicode_tables<T>::double_width[23], &unicode_tables<T>::double_width[24] },
{ 0x26f5, { 0x26f5, 0x26f5 }, nullptr, nullptr },
{ 0x26fd, { 0x26fd, 0x26fd }, nullptr, nullptr },
{ 0x274c, { 0x274c, 0x274c }, &unicode_tables<T>::double_width[26], &unicode_tables<T>::double_width[28] },
{ 0x270a, { 0x270a, 0x270b }, nullptr, &unicode_tables<T>::double_width[27] },
{ 0x2728, { 0x2728, 0x2728 }, nullptr, nullptr },
{ 0x2754, { 0x2753, 0x2755 }, &unicode_tables<T>::double_width[29], &unicode_tables<T>::double_width[30] },
{ 0x274e, { 0x274e, 0x274e }, nullptr, nullptr },
{ 0x2757, { 0x2757, 0x2757 }, nullptr, nullptr },
{ 0x31b9, { 0x3190, 0x31e3 }, &unicode_tables<T>::double_width[32], &unicode_tables<T>::double_width[46] },
{ 0x2f6a, { 0x2f00, 0x2fd5 }, &unicode_tables<T>::double_width[33], &unicode_tables<T>::double_width[40] },
{ 0x2b50, { 0x2b50, 0x2b50 }, &unicode_tables<T>::double_width[34], &unicode_tables<T>::double_width[37] },
{ 0x27bf, { 0x27bf, 0x27bf }, &unicode_tables<T>::double_width[35], &unicode_tables<T>::double_width[36] },
{ 0x27b0, { 0x27b0, 0x27b0 }, nullptr, nullptr },
{ 0x2b1b, { 0x2b1b, 0x2b1c }, nullptr, nullptr },
{ 0x2e8c, { 0x2e80, 0x2e99 }, &unicode_tables<T>::double_width[38], &unicode_tables<T>::double_width[39] },
{ 0x2b55, { 0x2b55, 0x2b55 }, nullptr, nullptr },
{ 0x2ec7, { 0x2e9b, 0x2ef3 }, nullptr, nullptr },
{ 0x306b, { 0x3041, 0x3096 }, &unicode_tables<T>::double_width[41], &unicode_tables<T>::double_width[43] },
{ 0x2ff5, { 0x2ff0, 0x2ffb }, nullptr, &unicode_tables<T>::double_width[42] },
{ 0x301f, { 0x3000, 0x303e }, nullptr, nullptr },
{ 0x311a, { 0x3105, 0x312f }, &unicode_tables<T>::double_width[44], &unicode_tables<T>::double_width[45] },
{ 0x30cc, { 0x3099, 0x30ff }, nullptr, nullptr },
{ 0x315f, { 0x3131, 0x318e }, nullptr, nullptr },
{ 0xf9ff, { 0xf900, 0xfaff }, &unicode_tables<T>::double_width[47], &unicode_tables<T>::double_width[54] },
{ 0x7946, { 0x4e00, 0xa48c }, &unicode_tables<T>::double_width[48], &unicode_tables<T>::double_width[51] },
{ 0x3233, { 0x3220, 0x3247 }, &unicode_tables<T>::double_width[49], &unicode_tables<T>::double_width[50] },
{ 0x3207, { 0x31f0, 0x321e }, nullptr, nullptr },
{ 0x4007, { 0x3250, 0x4dbf }, nullptr, nullptr },
{ 0xa96e, { 0xa960, 0xa97c }, &unicode_tables<T>::double_width[52], &unicode_tables<T>::double_width[53] },
{ 0xa4ab, { 0xa490, 0xa4c6 }, nullptr, nullptr },
{ 0xc1d1, { 0xac00, 0xd7a3 }, nullptr, nullptr },
{ 0xfe69, { 0xfe68, 0xfe6b }, &unicode_tables<T>::double_width[55], &unicode_tables<T>::double_width[58] },
{ 0xfe41, { 0xfe30, 0xfe52 }, &unicode_tables<T>::double_width[56], &unicode_tables<T>::double_width[57] },
{ 0xfe14, { 0xfe10, 0xfe19 }, nullptr, nullptr },
{ 0xfe5d, { 0xfe54, 0xfe66 }, nullptr, nullptr },
{ 0xffe3, { 0xffe0, 0xffe6 }, &unicode_tables<T>::double_width[59], &unicode_tables<T>::double_width[60] },
{ 0xff30, { 0xff01, 0xff60 }, nullptr, nullptr },
{ 0x16fe2, { 0x16fe0, 0x16fe4 }, nullptr, nullptr },
{ 0x1f440, { 0x1f440, 0x1f440 }, &unicode_tables<T>::double_width[62], &unicode_tables<T>::double_width[92] },
{ 0x1f18e, { 0x1f18e, 0x1f18e }, &unicode_tables<T>::double_width[63], &unicode_tables<T>::double_width[77] },
{ 0x1b091, { 0x1b000, 0x1b122 }, &unicode_tables<T>::double_width[64], &unicode_tables<T>::double_width[70] },
{ 0x18d04, { 0x18d00, 0x18d08 }, &unicode_tables<T>::double_width[65], &unicode_tables<T>::double_width[67] },
{ 0x18a6a, { 0x18800, 0x18cd5 }, &unicode_tables<T>::double_width[66], nullptr },
{ 0x17bfb, { 0x17000, 0x187f7 }, nullptr, nullptr },
{ 0x1aff8, { 0x1aff5, 0x1affb }, &unicode_tables<T>::double_width[68], &unicode_tables<T>::double_width[69] },
{ 0x1aff1, { 0x1aff0, 0x1aff3 }, nullptr, nullptr },
{ 0x1affd, { 0x1affd, 0x1affe }, nullptr, nullptr },
{ 0x1b165, { 0x1b164, 0x1b167 }, &unicode_tables<T>::double_width[71], &unicode_tables<T>::double_width[74] },
{ 0x1b151, { 0x1b150, 0x1b152 }, &unicode_tables<T>::double_width[72], &unicode_tables<T>::double_width[73] },
{ 0x1b132, { 0x1b132, 0x1b132 }, nullptr, nullptr },
{ 0x1b155, { 0x1b155, 0x1b155 }, nullptr, nullptr },
{ 0x1f004, { 0x1f004, 0x1f004 }, &unicode_tables<T>::double_width[75], &unicode_tables<T>::double_width[76] },
{ 0x1b235, { 0x1b170, 0x1b2fb }, nullptr, nullptr },
{ 0x1f0cf, { 0x1f0cf, 0x1f0cf }, nullptr, nullptr },
{ 0x1f331, { 0x1f32d, 0x1f335 }, &unicode_tables<T>::double_width[78], &unicode_tables<T>::double_width[85] },
{ 0x1f244, { 0x1f240, 0x1f248 }, &unicode_tables<T>::double_width[79], &unicode_tables<T>::double_width[82] },
{ 0x1f201, { 0x1f200, 0x1f202 }, &unicode_tables<T>::double_width[80], &unicode_tables<T>::double_width[81] },
{ 0x1f195, { 0x1f191, 0x1f19a }, nullptr, nullptr },
{ 0x1f225, { 0x1f210, 0x1f23b }, nullptr, nullptr },
{ 0x1f262, { 0x1f260, 0x1f265 }, &unicode_tables<T>::double_width[83], &unicode_tables<T>::double_width[84] },
{ 0x1f250, { 0x1f250, 0x1f251 }, nullptr, nullptr },
{ 0x1f310, { 0x1f300, 0x1f320 }, nullptr, nullptr },
{ 0x1f3d1, { 0x1f3cf, 0x1f3d3 }, &unicode_tables<T>::double_width[86], &unicode_tables<T>::double_width[89] },
{ 0x1f388, { 0x1f37e, 0x1f393 }, &unicode_tables<T>::double_width[87], &unicode_tables<T>::double_width[88] },
{ 0x1f359, { 0x1f337, 0x1f37c }, nullptr, nullptr },
{ 0x1f3b5, { 0x1f3a0, 0x1f3ca }, nullptr, nullptr },
{ 0x1f3f4, { 0x1f3f4, 0x1f3f4 }, &unicode_tables<T>::double_width[90], &unicode_tables<T>::double_width[91] },
{ 0x1f3e8, { 0x1f3e0, 0x1f3f0 }, nullptr, nullptr },
{ 0x1f41b, { 0x1f3f8, 0x1f43e }, nullptr, nullptr },
{ 0x1f6f8, { 0x1f6f4, 0x1f6fc }, &unicode_tables<T>::double_width[93], &unicode_tables<T>::double_width[107] },
{ 0x1f5a4, { 0x1f5a4, 0x1f5a4 }, &unicode_tables<T>::double_width[94], &unicode_tables<T>::double_width[100] },
{ 0x1f54c, { 0x1f54b, 0x1f54e }, &unicode_tables<T>::double_width[95], &unicode_tables<T>::double_width[97] },
{ 0x1f51e, { 0x1f4ff, 0x1f53d }, &unicode_tables<T>::double_width[96], nullptr },
{ 0x1f49f, { 0x1f442, 0x1f4fc }, nullptr, nullptr },
{ 0x1f57a, { 0x1f57a, 0x1f57a }, &unicode_tables<T>::double_width[98], &unicode_tables<T>::double_width[99] },
{ 0x1f55b, { 0x1f550, 0x1f567 }, nullptr, nullptr },
{ 0x1f595, { 0x1f595, 0x1f596 }, nullptr, nullptr },
{ 0x1f6d1, { 0x1f6d0, 0x1f6d2 }, &unicode_tables<T>::double_width[101], &unicode_tables<T>::double_width[104] },
{ 0x1f6a2, { 0x1f680, 0x1f6c5 }, &unicode_tables<T>::double_width[102], &unicode_tables<T>::double_width[103] },
{ 0x1f625, { 0x1f5fb, 0x1f64f }, nullptr, nullptr },
{ 0x1f6cc, { 0x1f6cc, 0x1f6cc }, nullptr, nullptr },
{ 0x1f6dd, { 0x1f6dc, 0x1f6df }, &unicode_tables<T>::double_width[105], &unicode_tables<T>::double_width[106] },
{ 0x1f6d6, { 0x1f6d5, 0x1f6d7 }, nullptr, nullptr },
{ 0x1f6eb, { 0x1f6eb, 0x1f6ec }, nullptr, nullptr },
{ 0x1fa84, { 0x1fa80, 0x1fa88 }, &unicode_tables<T>::double_width[108], &unicode_tables<T>::double_width[114] },
{ 0x1f940, { 0x1f93c, 0x1f945 }, &unicode_tables<T>::double_width[109], &unicode_tables<T>::double_width[112] },
{ 0x1f7f0, { 0x1f7f0, 0x1f7f0 }, &unicode_tables<T>::double_width[110], &unicode_tables<T>::double_width[111] },
{ 0x1f7e5, { 0x1f7e0, 0x1f7eb }, nullptr, nullptr },
{ 0x1f923, { 0x1f90c, 0x1f93a }, nullptr, nullptr },
{ 0x1fa76, { 0x1fa70, 0x1fa7c }, &unicode_tables<T>::double_width[113], nullptr },
{ 0x1f9a3, { 0x1f947, 0x1f9ff }, nullptr, nullptr },
{ 0x1fae4, { 0x1fae0, 0x1fae8 }, &unicode_tables<T>::double_width[115], &unicode_tables<T>::double_width[118] },
{ 0x1fac2, { 0x1fabf, 0x1fac5 }, &unicode_tables<T>::double_width[116], &unicode_tables<T>::double_width[117] },
{ 0x1faa6, { 0x1fa90, 0x1fabd }, nullptr, nullptr },
{ 0x1fad4, { 0x1face, 0x1fadb }, nullptr, nullptr },
{ 0x27ffe, { 0x20000, 0x2fffd }, &unicode_tables<T>::double_width[119], &unicode_tables<T>::double_width[120] },
{ 0x1faf4, { 0x1faf0, 0x1faf8 }, nullptr, nullptr },
{ 0x37ffe, { 0x30000, 0x3fffd }, nullptr, nullptr },
};
} /* namespace detail */
} /* namespace plot */