forked from SerenityOS/serenity
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwctype.cpp
214 lines (164 loc) · 3.41 KB
/
wctype.cpp
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
/*
* Copyright (c) 2021, the SerenityOS developers.
*
* SPDX-License-Identifier: BSD-2-Clause
*/
#include <AK/Format.h>
#include <string.h>
#include <wctype.h>
enum {
WCTYPE_INVALID = 0,
WCTYPE_ALNUM,
WCTYPE_ALPHA,
WCTYPE_BLANK,
WCTYPE_CNTRL,
WCTYPE_DIGIT,
WCTYPE_GRAPH,
WCTYPE_LOWER,
WCTYPE_PRINT,
WCTYPE_PUNCT,
WCTYPE_SPACE,
WCTYPE_UPPER,
WCTYPE_XDIGIT,
};
enum {
WCTRANS_INVALID = 0,
WCTRANS_TOLOWER,
WCTRANS_TOUPPER,
};
extern "C" {
int iswalnum(wint_t wc)
{
return __inline_isalnum(wc);
}
int iswalpha(wint_t wc)
{
return __inline_isalpha(wc);
}
int iswcntrl(wint_t wc)
{
return __inline_iscntrl(wc);
}
int iswdigit(wint_t wc)
{
return __inline_isdigit(wc);
}
int iswxdigit(wint_t wc)
{
return __inline_isxdigit(wc);
}
int iswspace(wint_t wc)
{
return __inline_isspace(wc);
}
int iswpunct(wint_t wc)
{
return __inline_ispunct(wc);
}
int iswprint(wint_t wc)
{
return __inline_isprint(wc);
}
int iswgraph(wint_t wc)
{
return __inline_isgraph(wc);
}
int iswlower(wint_t wc)
{
return __inline_islower(wc);
}
int iswupper(wint_t wc)
{
return __inline_isupper(wc);
}
int iswblank(wint_t wc)
{
return __inline_isblank(wc);
}
int iswctype(wint_t wc, wctype_t charclass)
{
switch (charclass) {
case WCTYPE_ALNUM:
return iswalnum(wc);
case WCTYPE_ALPHA:
return iswalpha(wc);
case WCTYPE_BLANK:
return iswblank(wc);
case WCTYPE_CNTRL:
return iswcntrl(wc);
case WCTYPE_DIGIT:
return iswdigit(wc);
case WCTYPE_GRAPH:
return iswgraph(wc);
case WCTYPE_LOWER:
return iswlower(wc);
case WCTYPE_PRINT:
return iswprint(wc);
case WCTYPE_PUNCT:
return iswpunct(wc);
case WCTYPE_SPACE:
return iswspace(wc);
case WCTYPE_UPPER:
return iswupper(wc);
case WCTYPE_XDIGIT:
return iswxdigit(wc);
default:
return 0;
}
}
wctype_t wctype(char const* property)
{
if (strcmp(property, "alnum") == 0)
return WCTYPE_ALNUM;
if (strcmp(property, "alpha") == 0)
return WCTYPE_ALPHA;
if (strcmp(property, "blank") == 0)
return WCTYPE_BLANK;
if (strcmp(property, "cntrl") == 0)
return WCTYPE_CNTRL;
if (strcmp(property, "digit") == 0)
return WCTYPE_DIGIT;
if (strcmp(property, "graph") == 0)
return WCTYPE_GRAPH;
if (strcmp(property, "lower") == 0)
return WCTYPE_LOWER;
if (strcmp(property, "print") == 0)
return WCTYPE_PRINT;
if (strcmp(property, "punct") == 0)
return WCTYPE_PUNCT;
if (strcmp(property, "space") == 0)
return WCTYPE_SPACE;
if (strcmp(property, "upper") == 0)
return WCTYPE_UPPER;
if (strcmp(property, "xdigit") == 0)
return WCTYPE_XDIGIT;
return WCTYPE_INVALID;
}
wint_t towlower(wint_t wc)
{
return __inline_tolower(wc);
}
wint_t towupper(wint_t wc)
{
return __inline_toupper(wc);
}
wint_t towctrans(wint_t wc, wctrans_t desc)
{
switch (desc) {
case WCTRANS_TOLOWER:
return towlower(wc);
case WCTRANS_TOUPPER:
return towupper(wc);
default:
return wc;
}
}
wctrans_t wctrans(char const* charclass)
{
if (strcmp(charclass, "tolower") == 0)
return WCTRANS_TOLOWER;
if (strcmp(charclass, "toupper") == 0)
return WCTRANS_TOUPPER;
return WCTRANS_INVALID;
}
}