1
/* Character handling in C locale.
3
Copyright 2000, 2001, 2002, 2003, 2006, 2009 Free Software
6
This program is free software; you can redistribute it and/or modify
7
it under the terms of the GNU General Public License as published by
8
the Free Software Foundation; either version 3 of the License, or
9
(at your option) any later version.
11
This program is distributed in the hope that it will be useful,
12
but WITHOUT ANY WARRANTY; without even the implied warranty of
13
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
GNU General Public License for more details.
16
You should have received a copy of the GNU General Public License
17
along with this program; if not, write to the Free Software Foundation,
18
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
23
#define NO_C_CTYPE_MACROS
26
/* The function isascii is not locale dependent. Its use in EBCDIC is
31
return (c >= 0x00 && c <= 0x7f);
37
#if C_CTYPE_CONSECUTIVE_DIGITS \
38
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
40
return ((c >= '0' && c <= '9')
41
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z'));
43
return ((c >= '0' && c <= '9')
44
|| (c >= 'A' && c <= 'Z')
45
|| (c >= 'a' && c <= 'z'));
50
case '0': case '1': case '2': case '3': case '4': case '5':
51
case '6': case '7': case '8': case '9':
52
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
53
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
54
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
55
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
57
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
58
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
59
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
60
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
72
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
74
return ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z');
76
return ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z'));
81
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
82
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
83
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
84
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
86
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
87
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
88
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
89
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
101
return (c == ' ' || c == '\t');
108
return ((c & ~0x1f) == 0 || c == 0x7f);
112
case ' ': case '!': case '"': case '#': case '$': case '%':
113
case '&': case '\'': case '(': case ')': case '*': case '+':
114
case ',': case '-': case '.': case '/':
115
case '0': case '1': case '2': case '3': case '4': case '5':
116
case '6': case '7': case '8': case '9':
117
case ':': case ';': case '<': case '=': case '>': case '?':
119
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
120
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
121
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
122
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
124
case '[': case '\\': case ']': case '^': case '_': case '`':
125
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
126
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
127
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
128
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
130
case '{': case '|': case '}': case '~':
141
#if C_CTYPE_CONSECUTIVE_DIGITS
142
return (c >= '0' && c <= '9');
146
case '0': case '1': case '2': case '3': case '4': case '5':
147
case '6': case '7': case '8': case '9':
158
#if C_CTYPE_CONSECUTIVE_LOWERCASE
159
return (c >= 'a' && c <= 'z');
163
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
164
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
165
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
166
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
179
return (c >= '!' && c <= '~');
183
case '!': case '"': case '#': case '$': case '%': case '&':
184
case '\'': case '(': case ')': case '*': case '+': case ',':
185
case '-': case '.': case '/':
186
case '0': case '1': case '2': case '3': case '4': case '5':
187
case '6': case '7': case '8': case '9':
188
case ':': case ';': case '<': case '=': case '>': case '?':
190
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
191
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
192
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
193
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
195
case '[': case '\\': case ']': case '^': case '_': case '`':
196
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
197
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
198
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
199
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
201
case '{': case '|': case '}': case '~':
213
return (c >= ' ' && c <= '~');
217
case ' ': case '!': case '"': case '#': case '$': case '%':
218
case '&': case '\'': case '(': case ')': case '*': case '+':
219
case ',': case '-': case '.': case '/':
220
case '0': case '1': case '2': case '3': case '4': case '5':
221
case '6': case '7': case '8': case '9':
222
case ':': case ';': case '<': case '=': case '>': case '?':
224
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
225
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
226
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
227
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
229
case '[': case '\\': case ']': case '^': case '_': case '`':
230
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
231
case 'g': case 'h': case 'i': case 'j': case 'k': case 'l':
232
case 'm': case 'n': case 'o': case 'p': case 'q': case 'r':
233
case 's': case 't': case 'u': case 'v': case 'w': case 'x':
235
case '{': case '|': case '}': case '~':
247
return ((c >= '!' && c <= '~')
248
&& !((c >= '0' && c <= '9')
249
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'Z')));
253
case '!': case '"': case '#': case '$': case '%': case '&':
254
case '\'': case '(': case ')': case '*': case '+': case ',':
255
case '-': case '.': case '/':
256
case ':': case ';': case '<': case '=': case '>': case '?':
258
case '[': case '\\': case ']': case '^': case '_': case '`':
259
case '{': case '|': case '}': case '~':
270
return (c == ' ' || c == '\t'
271
|| c == '\n' || c == '\v' || c == '\f' || c == '\r');
277
#if C_CTYPE_CONSECUTIVE_UPPERCASE
278
return (c >= 'A' && c <= 'Z');
282
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
283
case 'G': case 'H': case 'I': case 'J': case 'K': case 'L':
284
case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R':
285
case 'S': case 'T': case 'U': case 'V': case 'W': case 'X':
297
#if C_CTYPE_CONSECUTIVE_DIGITS \
298
&& C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
300
return ((c >= '0' && c <= '9')
301
|| ((c & ~0x20) >= 'A' && (c & ~0x20) <= 'F'));
303
return ((c >= '0' && c <= '9')
304
|| (c >= 'A' && c <= 'F')
305
|| (c >= 'a' && c <= 'f'));
310
case '0': case '1': case '2': case '3': case '4': case '5':
311
case '6': case '7': case '8': case '9':
312
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F':
313
case 'a': case 'b': case 'c': case 'd': case 'e': case 'f':
324
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
325
return (c >= 'A' && c <= 'Z' ? c - 'A' + 'a' : c);
329
case 'A': return 'a';
330
case 'B': return 'b';
331
case 'C': return 'c';
332
case 'D': return 'd';
333
case 'E': return 'e';
334
case 'F': return 'f';
335
case 'G': return 'g';
336
case 'H': return 'h';
337
case 'I': return 'i';
338
case 'J': return 'j';
339
case 'K': return 'k';
340
case 'L': return 'l';
341
case 'M': return 'm';
342
case 'N': return 'n';
343
case 'O': return 'o';
344
case 'P': return 'p';
345
case 'Q': return 'q';
346
case 'R': return 'r';
347
case 'S': return 's';
348
case 'T': return 't';
349
case 'U': return 'u';
350
case 'V': return 'v';
351
case 'W': return 'w';
352
case 'X': return 'x';
353
case 'Y': return 'y';
354
case 'Z': return 'z';
363
#if C_CTYPE_CONSECUTIVE_UPPERCASE && C_CTYPE_CONSECUTIVE_LOWERCASE
364
return (c >= 'a' && c <= 'z' ? c - 'a' + 'A' : c);
368
case 'a': return 'A';
369
case 'b': return 'B';
370
case 'c': return 'C';
371
case 'd': return 'D';
372
case 'e': return 'E';
373
case 'f': return 'F';
374
case 'g': return 'G';
375
case 'h': return 'H';
376
case 'i': return 'I';
377
case 'j': return 'J';
378
case 'k': return 'K';
379
case 'l': return 'L';
380
case 'm': return 'M';
381
case 'n': return 'N';
382
case 'o': return 'O';
383
case 'p': return 'P';
384
case 'q': return 'Q';
385
case 'r': return 'R';
386
case 's': return 'S';
387
case 't': return 'T';
388
case 'u': return 'U';
389
case 'v': return 'V';
390
case 'w': return 'W';
391
case 'x': return 'X';
392
case 'y': return 'Y';
393
case 'z': return 'Z';