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