remove ugly prng from mk*temp and just re-poll time on retry
[musl] / src / ctype / iswpunct.c
1 #include <wctype.h>
2 #include <inttypes.h>
3
4 /* The below data is derived from classes (P.|Sm) plus Pattern_Syntax */
5
6 #define R(a,b) { (b), (b)-(a) }
7
8 static const struct range {
9         uint32_t base:20;
10         uint32_t len:12;
11 } ranges[] = {
12 R(0x21, 0x2f),
13 R(0x3a, 0x40),
14 R(0x5b, 0x60),
15 R(0x7b, 0x7e),
16 R(0xa1, 0xa7),
17 R(0xa9, 0xa9),
18 R(0xab, 0xac),
19 R(0xae, 0xae),
20 R(0xb0, 0xb1),
21 R(0xb6, 0xb7),
22 R(0xbb, 0xbb),
23 R(0xbf, 0xbf),
24 R(0xd7, 0xd7),
25 R(0xf7, 0xf7),
26 R(0x37e, 0x37e),
27 R(0x387, 0x387),
28 R(0x3f6, 0x3f6),
29 R(0x55a, 0x55f),
30 R(0x589, 0x58a),
31 R(0x5be, 0x5be),
32 R(0x5c0, 0x5c0),
33 R(0x5c3, 0x5c3),
34 R(0x5c6, 0x5c6),
35 R(0x5f3, 0x5f4),
36 R(0x606, 0x60a),
37 R(0x60c, 0x60d),
38 R(0x61b, 0x61b),
39 R(0x61e, 0x61f),
40 R(0x66a, 0x66d),
41 R(0x6d4, 0x6d4),
42 R(0x700, 0x70d),
43 R(0x7f7, 0x7f9),
44 R(0x964, 0x965),
45 R(0x970, 0x970),
46 R(0xdf4, 0xdf4),
47 R(0xe4f, 0xe4f),
48 R(0xe5a, 0xe5b),
49 R(0xf04, 0xf12),
50 R(0xf3a, 0xf3d),
51 R(0xf85, 0xf85),
52 R(0xfd0, 0xfd4),
53 R(0x104a, 0x104f),
54 R(0x10fb, 0x10fb),
55 R(0x1361, 0x1368),
56 R(0x166d, 0x166e),
57 R(0x1680, 0x1680),
58 R(0x169b, 0x169c),
59 R(0x16eb, 0x16ed),
60 R(0x1735, 0x1736),
61 R(0x17d4, 0x17d6),
62 R(0x17d8, 0x17da),
63 R(0x1800, 0x180a),
64 R(0x180e, 0x180e),
65 R(0x1944, 0x1945),
66 R(0x19de, 0x19df),
67 R(0x1a1e, 0x1a1f),
68 R(0x1b5a, 0x1b60),
69 R(0x1c3b, 0x1c3f),
70 R(0x1c7e, 0x1c7f),
71 R(0x2010, 0x2027),
72 R(0x2030, 0x205e),
73 R(0x207a, 0x207e),
74 R(0x208a, 0x208e),
75 R(0x2140, 0x2144),
76 R(0x214b, 0x214b),
77 R(0x2190, 0x245f),
78 R(0x2500, 0x2775),
79 R(0x2794, 0x2bff),
80 R(0x2cf9, 0x2cfc),
81 R(0x2cfe, 0x2cff),
82 R(0x2e00, 0x2e7f),
83 R(0x3001, 0x3003),
84 R(0x3008, 0x3020),
85 R(0x3030, 0x3030),
86 R(0x303d, 0x303d),
87 R(0x30a0, 0x30a0),
88 R(0x30fb, 0x30fb),
89 R(0xa60d, 0xa60f),
90 R(0xa874, 0xa877),
91 R(0xa8ce, 0xa8cf),
92 R(0xa92e, 0xa92f),
93 R(0xa95f, 0xa95f),
94 R(0xfb29, 0xfb29),
95 R(0xfd3e, 0xfd3f),
96 R(0xfe10, 0xfe19),
97 R(0xfe30, 0xfe52),
98 R(0xfe54, 0xfe66),
99 R(0xfe68, 0xfe68),
100 R(0xfe6a, 0xfe6b),
101 R(0xff01, 0xff03),
102 R(0xff05, 0xff0f),
103 R(0xff1a, 0xff20),
104 R(0xff3b, 0xff3d),
105 R(0xff3f, 0xff3f),
106 R(0xff5b, 0xff65),
107 R(0xffe2, 0xffe2),
108 R(0xffe9, 0xffec),
109 R(0x10100, 0x10101),
110 R(0x1039f, 0x1039f),
111 R(0x103d0, 0x103d0),
112 R(0x1091f, 0x1091f),
113 R(0x1093f, 0x1093f),
114 R(0x10a50, 0x10a58),
115 R(0x12470, 0x12473),
116 R(0x1d6c1, 0x1d6c1),
117 R(0x1d6db, 0x1d6db),
118 R(0x1d6fb, 0x1d6fb),
119 R(0x1d715, 0x1d715),
120 R(0x1d735, 0x1d735),
121 R(0x1d74f, 0x1d74f),
122 R(0x1d76f, 0x1d76f),
123 R(0x1d789, 0x1d789),
124 R(0x1d7a9, 0x1d7a9),
125 R(0x1d7c3, 0x1d7c3),
126 };
127
128 int iswpunct(wint_t wc)
129 {
130         unsigned c = wc;
131         int a = 0;
132         int n = sizeof ranges / sizeof ranges[0];
133         do {
134                 n >>= 1;
135                 a += n+1 & (signed)(ranges[a+n].base-c)>>31;
136         } while (n);
137         return ranges[a].base-c <= ranges[a].len;
138 }