core/unicode/
printable.rs

1// NOTE: The following code was generated by "library/core/src/unicode/printable.py",
2//       do not edit directly!
3
4fn check(x: u16, singletonuppers: &[(u8, u8)], singletonlowers: &[u8], normal: &[u8]) -> bool {
5    let xupper = (x >> 8) as u8;
6    let mut lowerstart = 0;
7    for &(upper, lowercount) in singletonuppers {
8        let lowerend = lowerstart + lowercount as usize;
9        if xupper == upper {
10            for &lower in &singletonlowers[lowerstart..lowerend] {
11                if lower == x as u8 {
12                    return false;
13                }
14            }
15        } else if xupper < upper {
16            break;
17        }
18        lowerstart = lowerend;
19    }
20
21    let mut x = x as i32;
22    let mut normal = normal.iter().cloned();
23    let mut current = true;
24    while let Some(v) = normal.next() {
25        let len = if v & 0x80 != 0 {
26            ((v & 0x7f) as i32) << 8 | normal.next().unwrap() as i32
27        } else {
28            v as i32
29        };
30        x -= len;
31        if x < 0 {
32            break;
33        }
34        current = !current;
35    }
36    current
37}
38
39pub(crate) fn is_printable(x: char) -> bool {
40    let x = x as u32;
41    let lower = x as u16;
42
43    if x < 32 {
44        // ASCII fast path
45        false
46    } else if x < 127 {
47        // ASCII fast path
48        true
49    } else if x < 0x10000 {
50        check(lower, SINGLETONS0U, SINGLETONS0L, NORMAL0)
51    } else if x < 0x20000 {
52        check(lower, SINGLETONS1U, SINGLETONS1L, NORMAL1)
53    } else {
54        if 0x2a6e0 <= x && x < 0x2a700 {
55            return false;
56        }
57        if 0x2b73a <= x && x < 0x2b740 {
58            return false;
59        }
60        if 0x2b81e <= x && x < 0x2b820 {
61            return false;
62        }
63        if 0x2cea2 <= x && x < 0x2ceb0 {
64            return false;
65        }
66        if 0x2ebe1 <= x && x < 0x2ebf0 {
67            return false;
68        }
69        if 0x2ee5e <= x && x < 0x2f800 {
70            return false;
71        }
72        if 0x2fa1e <= x && x < 0x30000 {
73            return false;
74        }
75        if 0x3134b <= x && x < 0x31350 {
76            return false;
77        }
78        if 0x323b0 <= x && x < 0xe0100 {
79            return false;
80        }
81        if 0xe01f0 <= x && x < 0x110000 {
82            return false;
83        }
84        true
85    }
86}
87
88#[rustfmt::skip]
89const SINGLETONS0U: &[(u8, u8)] = &[
90    (0x00, 1),
91    (0x03, 5),
92    (0x05, 6),
93    (0x06, 2),
94    (0x07, 6),
95    (0x08, 7),
96    (0x09, 17),
97    (0x0a, 28),
98    (0x0b, 25),
99    (0x0c, 26),
100    (0x0d, 16),
101    (0x0e, 12),
102    (0x0f, 4),
103    (0x10, 3),
104    (0x12, 18),
105    (0x13, 9),
106    (0x16, 1),
107    (0x17, 4),
108    (0x18, 1),
109    (0x19, 3),
110    (0x1a, 7),
111    (0x1b, 1),
112    (0x1c, 2),
113    (0x1f, 22),
114    (0x20, 3),
115    (0x2b, 3),
116    (0x2d, 11),
117    (0x2e, 1),
118    (0x30, 4),
119    (0x31, 2),
120    (0x32, 1),
121    (0xa7, 4),
122    (0xa9, 2),
123    (0xaa, 4),
124    (0xab, 8),
125    (0xfa, 2),
126    (0xfb, 5),
127    (0xfd, 2),
128    (0xfe, 3),
129    (0xff, 9),
130];
131#[rustfmt::skip]
132const SINGLETONS0L: &[u8] = &[
133    0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57,
134    0x58, 0x8b, 0x8c, 0x90, 0x1c, 0xdd, 0x0e, 0x0f,
135    0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f, 0x5c,
136    0x5d, 0x5f, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92,
137    0xa9, 0xb1, 0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca,
138    0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04, 0x11, 0x12,
139    0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49,
140    0x4a, 0x5d, 0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4,
141    0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf, 0xe4, 0xe5,
142    0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31,
143    0x34, 0x3a, 0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e,
144    0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d, 0xc9, 0xce,
145    0xcf, 0x0d, 0x11, 0x29, 0x3a, 0x3b, 0x45, 0x49,
146    0x57, 0x5b, 0x5c, 0x5e, 0x5f, 0x64, 0x65, 0x8d,
147    0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf,
148    0xe4, 0xe5, 0xf0, 0x0d, 0x11, 0x45, 0x49, 0x64,
149    0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5,
150    0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6,
151    0xbe, 0xbf, 0xc5, 0xc7, 0xcf, 0xda, 0xdb, 0x48,
152    0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49, 0x4e,
153    0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f,
154    0xb1, 0xb6, 0xb7, 0xbf, 0xc1, 0xc6, 0xc7, 0xd7,
155    0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7, 0xfe,
156    0xff, 0x80, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x1f,
157    0x6e, 0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae,
158    0xaf, 0x4d, 0xbb, 0xbc, 0x16, 0x17, 0x1e, 0x1f,
159    0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e,
160    0x7e, 0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0,
161    0xf1, 0xf5, 0x72, 0x73, 0x8f, 0x74, 0x75, 0x96,
162    0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf, 0xc7,
163    0xcf, 0xd7, 0xdf, 0x9a, 0x00, 0x40, 0x97, 0x98,
164    0x30, 0x8f, 0x1f, 0xce, 0xcf, 0xd2, 0xd4, 0xce,
165    0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f,
166    0x10, 0x27, 0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37,
167    0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91, 0x53, 0x67,
168    0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7,
169    0xfe, 0xff,
170];
171#[rustfmt::skip]
172const SINGLETONS1U: &[(u8, u8)] = &[
173    (0x00, 6),
174    (0x01, 1),
175    (0x03, 1),
176    (0x04, 2),
177    (0x05, 7),
178    (0x07, 2),
179    (0x08, 8),
180    (0x09, 2),
181    (0x0a, 5),
182    (0x0b, 2),
183    (0x0e, 4),
184    (0x10, 1),
185    (0x11, 2),
186    (0x12, 5),
187    (0x13, 28),
188    (0x14, 1),
189    (0x15, 2),
190    (0x17, 2),
191    (0x19, 13),
192    (0x1c, 5),
193    (0x1d, 8),
194    (0x1f, 1),
195    (0x24, 1),
196    (0x6a, 4),
197    (0x6b, 2),
198    (0xaf, 3),
199    (0xb1, 2),
200    (0xbc, 2),
201    (0xcf, 2),
202    (0xd1, 2),
203    (0xd4, 12),
204    (0xd5, 9),
205    (0xd6, 2),
206    (0xd7, 2),
207    (0xda, 1),
208    (0xe0, 5),
209    (0xe1, 2),
210    (0xe7, 4),
211    (0xe8, 2),
212    (0xee, 32),
213    (0xf0, 4),
214    (0xf8, 2),
215    (0xfa, 4),
216    (0xfb, 1),
217];
218#[rustfmt::skip]
219const SINGLETONS1L: &[u8] = &[
220    0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e,
221    0x9e, 0x9f, 0x7b, 0x8b, 0x93, 0x96, 0xa2, 0xb2,
222    0xba, 0x86, 0xb1, 0x06, 0x07, 0x09, 0x36, 0x3d,
223    0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18,
224    0x36, 0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf,
225    0xbd, 0x35, 0xe0, 0x12, 0x87, 0x89, 0x8e, 0x9e,
226    0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34,
227    0x3a, 0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64,
228    0x65, 0x8a, 0x8c, 0x8d, 0x8f, 0xb6, 0xc1, 0xc3,
229    0xc4, 0xc6, 0xcb, 0xd6, 0x5c, 0xb6, 0xb7, 0x1b,
230    0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36,
231    0x39, 0x3a, 0xa8, 0xa9, 0xd8, 0xd9, 0x09, 0x37,
232    0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66,
233    0x69, 0x8f, 0x92, 0x11, 0x6f, 0x5f, 0xbf, 0xee,
234    0xef, 0x5a, 0x62, 0xf4, 0xfc, 0xff, 0x53, 0x54,
235    0x9a, 0x9b, 0x2e, 0x2f, 0x27, 0x28, 0x55, 0x9d,
236    0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba,
237    0xbc, 0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a,
238    0x3f, 0x45, 0x51, 0xa6, 0xa7, 0xcc, 0xcd, 0xa0,
239    0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xe7,
240    0xec, 0xef, 0xff, 0xc5, 0xc6, 0x04, 0x20, 0x23,
241    0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a,
242    0x4c, 0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c,
243    0x5e, 0x60, 0x63, 0x65, 0x66, 0x6b, 0x73, 0x78,
244    0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0,
245    0xd0, 0xae, 0xaf, 0x6e, 0x6f, 0xdd, 0xde, 0x93,
246];
247#[rustfmt::skip]
248const NORMAL0: &[u8] = &[
249    0x00, 0x20,
250    0x5f, 0x22,
251    0x82, 0xdf, 0x04,
252    0x82, 0x44, 0x08,
253    0x1b, 0x04,
254    0x06, 0x11,
255    0x81, 0xac, 0x0e,
256    0x80, 0xab, 0x05,
257    0x1f, 0x08,
258    0x81, 0x1c, 0x03,
259    0x19, 0x08,
260    0x01, 0x04,
261    0x2f, 0x04,
262    0x34, 0x04,
263    0x07, 0x03,
264    0x01, 0x07,
265    0x06, 0x07,
266    0x11, 0x0a,
267    0x50, 0x0f,
268    0x12, 0x07,
269    0x55, 0x07,
270    0x03, 0x04,
271    0x1c, 0x0a,
272    0x09, 0x03,
273    0x08, 0x03,
274    0x07, 0x03,
275    0x02, 0x03,
276    0x03, 0x03,
277    0x0c, 0x04,
278    0x05, 0x03,
279    0x0b, 0x06,
280    0x01, 0x0e,
281    0x15, 0x05,
282    0x4e, 0x07,
283    0x1b, 0x07,
284    0x57, 0x07,
285    0x02, 0x06,
286    0x17, 0x0c,
287    0x50, 0x04,
288    0x43, 0x03,
289    0x2d, 0x03,
290    0x01, 0x04,
291    0x11, 0x06,
292    0x0f, 0x0c,
293    0x3a, 0x04,
294    0x1d, 0x25,
295    0x5f, 0x20,
296    0x6d, 0x04,
297    0x6a, 0x25,
298    0x80, 0xc8, 0x05,
299    0x82, 0xb0, 0x03,
300    0x1a, 0x06,
301    0x82, 0xfd, 0x03,
302    0x59, 0x07,
303    0x16, 0x09,
304    0x18, 0x09,
305    0x14, 0x0c,
306    0x14, 0x0c,
307    0x6a, 0x06,
308    0x0a, 0x06,
309    0x1a, 0x06,
310    0x59, 0x07,
311    0x2b, 0x05,
312    0x46, 0x0a,
313    0x2c, 0x04,
314    0x0c, 0x04,
315    0x01, 0x03,
316    0x31, 0x0b,
317    0x2c, 0x04,
318    0x1a, 0x06,
319    0x0b, 0x03,
320    0x80, 0xac, 0x06,
321    0x0a, 0x06,
322    0x2f, 0x31,
323    0x80, 0xf4, 0x08,
324    0x3c, 0x03,
325    0x0f, 0x03,
326    0x3e, 0x05,
327    0x38, 0x08,
328    0x2b, 0x05,
329    0x82, 0xff, 0x11,
330    0x18, 0x08,
331    0x2f, 0x11,
332    0x2d, 0x03,
333    0x21, 0x0f,
334    0x21, 0x0f,
335    0x80, 0x8c, 0x04,
336    0x82, 0x9a, 0x16,
337    0x0b, 0x15,
338    0x88, 0x94, 0x05,
339    0x2f, 0x05,
340    0x3b, 0x07,
341    0x02, 0x0e,
342    0x18, 0x09,
343    0x80, 0xbe, 0x22,
344    0x74, 0x0c,
345    0x80, 0xd6, 0x1a,
346    0x81, 0x10, 0x05,
347    0x80, 0xe1, 0x09,
348    0xf2, 0x9e, 0x03,
349    0x37, 0x09,
350    0x81, 0x5c, 0x14,
351    0x80, 0xb8, 0x08,
352    0x80, 0xdd, 0x15,
353    0x3b, 0x03,
354    0x0a, 0x06,
355    0x38, 0x08,
356    0x46, 0x08,
357    0x0c, 0x06,
358    0x74, 0x0b,
359    0x1e, 0x03,
360    0x5a, 0x04,
361    0x59, 0x09,
362    0x80, 0x83, 0x18,
363    0x1c, 0x0a,
364    0x16, 0x09,
365    0x4c, 0x04,
366    0x80, 0x8a, 0x06,
367    0xab, 0xa4, 0x0c,
368    0x17, 0x04,
369    0x31, 0xa1, 0x04,
370    0x81, 0xda, 0x26,
371    0x07, 0x0c,
372    0x05, 0x05,
373    0x80, 0xa6, 0x10,
374    0x81, 0xf5, 0x07,
375    0x01, 0x20,
376    0x2a, 0x06,
377    0x4c, 0x04,
378    0x80, 0x8d, 0x04,
379    0x80, 0xbe, 0x03,
380    0x1b, 0x03,
381    0x0f, 0x0d,
382];
383#[rustfmt::skip]
384const NORMAL1: &[u8] = &[
385    0x5e, 0x22,
386    0x7b, 0x05,
387    0x03, 0x04,
388    0x2d, 0x03,
389    0x66, 0x03,
390    0x01, 0x2f,
391    0x2e, 0x80, 0x82,
392    0x1d, 0x03,
393    0x31, 0x0f,
394    0x1c, 0x04,
395    0x24, 0x09,
396    0x1e, 0x05,
397    0x2b, 0x05,
398    0x44, 0x04,
399    0x0e, 0x2a,
400    0x80, 0xaa, 0x06,
401    0x24, 0x04,
402    0x24, 0x04,
403    0x28, 0x08,
404    0x34, 0x0b,
405    0x4e, 0x03,
406    0x34, 0x0c,
407    0x81, 0x37, 0x09,
408    0x16, 0x0a,
409    0x08, 0x18,
410    0x3b, 0x45,
411    0x39, 0x03,
412    0x63, 0x08,
413    0x09, 0x30,
414    0x16, 0x05,
415    0x21, 0x03,
416    0x1b, 0x05,
417    0x01, 0x40,
418    0x38, 0x04,
419    0x4b, 0x05,
420    0x2f, 0x04,
421    0x0a, 0x07,
422    0x09, 0x07,
423    0x40, 0x20,
424    0x27, 0x04,
425    0x0c, 0x09,
426    0x36, 0x03,
427    0x3a, 0x05,
428    0x1a, 0x07,
429    0x04, 0x0c,
430    0x07, 0x50,
431    0x49, 0x37,
432    0x33, 0x0d,
433    0x33, 0x07,
434    0x2e, 0x08,
435    0x0a, 0x06,
436    0x26, 0x03,
437    0x1d, 0x08,
438    0x02, 0x80, 0xd0,
439    0x52, 0x10,
440    0x03, 0x37,
441    0x2c, 0x08,
442    0x2a, 0x16,
443    0x1a, 0x26,
444    0x1c, 0x14,
445    0x17, 0x09,
446    0x4e, 0x04,
447    0x24, 0x09,
448    0x44, 0x0d,
449    0x19, 0x07,
450    0x0a, 0x06,
451    0x48, 0x08,
452    0x27, 0x09,
453    0x75, 0x0b,
454    0x42, 0x3e,
455    0x2a, 0x06,
456    0x3b, 0x05,
457    0x0a, 0x06,
458    0x51, 0x06,
459    0x01, 0x05,
460    0x10, 0x03,
461    0x05, 0x0b,
462    0x59, 0x08,
463    0x02, 0x1d,
464    0x62, 0x1e,
465    0x48, 0x08,
466    0x0a, 0x80, 0xa6,
467    0x5e, 0x22,
468    0x45, 0x0b,
469    0x0a, 0x06,
470    0x0d, 0x13,
471    0x3a, 0x06,
472    0x0a, 0x06,
473    0x14, 0x1c,
474    0x2c, 0x04,
475    0x17, 0x80, 0xb9,
476    0x3c, 0x64,
477    0x53, 0x0c,
478    0x48, 0x09,
479    0x0a, 0x46,
480    0x45, 0x1b,
481    0x48, 0x08,
482    0x53, 0x0d,
483    0x49, 0x07,
484    0x0a, 0x80, 0xb6,
485    0x22, 0x0e,
486    0x0a, 0x06,
487    0x46, 0x0a,
488    0x1d, 0x03,
489    0x47, 0x49,
490    0x37, 0x03,
491    0x0e, 0x08,
492    0x0a, 0x06,
493    0x39, 0x07,
494    0x0a, 0x81, 0x36,
495    0x19, 0x07,
496    0x3b, 0x03,
497    0x1d, 0x55,
498    0x01, 0x0f,
499    0x32, 0x0d,
500    0x83, 0x9b, 0x66,
501    0x75, 0x0b,
502    0x80, 0xc4, 0x8a, 0x4c,
503    0x63, 0x0d,
504    0x84, 0x30, 0x10,
505    0x16, 0x0a,
506    0x8f, 0x9b, 0x05,
507    0x82, 0x47, 0x9a, 0xb9,
508    0x3a, 0x86, 0xc6,
509    0x82, 0x39, 0x07,
510    0x2a, 0x04,
511    0x5c, 0x06,
512    0x26, 0x0a,
513    0x46, 0x0a,
514    0x28, 0x05,
515    0x13, 0x81, 0xb0,
516    0x3a, 0x80, 0xc6,
517    0x5b, 0x65,
518    0x4b, 0x04,
519    0x39, 0x07,
520    0x11, 0x40,
521    0x05, 0x0b,
522    0x02, 0x0e,
523    0x97, 0xf8, 0x08,
524    0x84, 0xd6, 0x29,
525    0x0a, 0xa2, 0xe7,
526    0x81, 0x33, 0x0f,
527    0x01, 0x1d,
528    0x06, 0x0e,
529    0x04, 0x08,
530    0x81, 0x8c, 0x89, 0x04,
531    0x6b, 0x05,
532    0x0d, 0x03,
533    0x09, 0x07,
534    0x10, 0x8f, 0x60,
535    0x80, 0xfa, 0x06,
536    0x81, 0xb4, 0x4c,
537    0x47, 0x09,
538    0x74, 0x3c,
539    0x80, 0xf6, 0x0a,
540    0x73, 0x08,
541    0x70, 0x15,
542    0x46, 0x7a,
543    0x14, 0x0c,
544    0x14, 0x0c,
545    0x57, 0x09,
546    0x19, 0x80, 0x87,
547    0x81, 0x47, 0x03,
548    0x85, 0x42, 0x0f,
549    0x15, 0x84, 0x50,
550    0x1f, 0x06,
551    0x06, 0x80, 0xd5,
552    0x2b, 0x05,
553    0x3e, 0x21,
554    0x01, 0x70,
555    0x2d, 0x03,
556    0x1a, 0x04,
557    0x02, 0x81, 0x40,
558    0x1f, 0x11,
559    0x3a, 0x05,
560    0x01, 0x81, 0xd0,
561    0x2a, 0x80, 0xd6,
562    0x2b, 0x04,
563    0x01, 0x81, 0xe0,
564    0x80, 0xf7, 0x29,
565    0x4c, 0x04,
566    0x0a, 0x04,
567    0x02, 0x83, 0x11,
568    0x44, 0x4c,
569    0x3d, 0x80, 0xc2,
570    0x3c, 0x06,
571    0x01, 0x04,
572    0x55, 0x05,
573    0x1b, 0x34,
574    0x02, 0x81, 0x0e,
575    0x2c, 0x04,
576    0x64, 0x0c,
577    0x56, 0x0a,
578    0x80, 0xae, 0x38,
579    0x1d, 0x0d,
580    0x2c, 0x04,
581    0x09, 0x07,
582    0x02, 0x0e,
583    0x06, 0x80, 0x9a,
584    0x83, 0xd8, 0x04,
585    0x11, 0x03,
586    0x0d, 0x03,
587    0x77, 0x04,
588    0x5f, 0x06,
589    0x0c, 0x04,
590    0x01, 0x0f,
591    0x0c, 0x04,
592    0x38, 0x08,
593    0x0a, 0x06,
594    0x28, 0x08,
595    0x2c, 0x04,
596    0x02, 0x3e,
597    0x81, 0x54, 0x0c,
598    0x1d, 0x03,
599    0x0a, 0x05,
600    0x38, 0x07,
601    0x1c, 0x06,
602    0x09, 0x07,
603    0x80, 0xfa, 0x84, 0x06,
604];