1
/* -*- buffer-read-only: t -*- vi: set ro: */
2
/* DO NOT EDIT! GENERATED AUTOMATICALLY! */
3
/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
5
Copyright (C) 2006-2010 Free Software Foundation, Inc.
7
This program is free software; you can redistribute it and/or modify
8
it under the terms of the GNU General Public License as published by
9
the Free Software Foundation; either version 3, or (at your option)
12
This program is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
GNU General Public License for more details.
17
You should have received a copy of the GNU General Public License
18
along with this program; if not, write to the Free Software Foundation,
19
Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
21
/* Written by Bruno Haible and Paul Eggert. */
24
* ISO C 99 <wctype.h> for platforms that lack it.
25
* <http://www.opengroup.org/susv3xbd/wctype.h.html>
27
* iswctype, towctrans, towlower, towupper, wctrans, wctype,
28
* wctrans_t, and wctype_t are not yet implemented.
34
@PRAGMA_SYSTEM_HEADER@
38
/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
39
Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
41
BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
42
included before <wchar.h>. */
49
/* Include the original <wctype.h> if it exists.
50
BeOS 5 has the functions but no <wctype.h>. */
51
/* The include_next requires a split double-inclusion guard. */
53
# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
59
/* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
61
/* The definition of _GL_WARN_ON_USE is copied here. */
63
/* Define wint_t and WEOF. (Also done in wchar.in.h.) */
64
#if !@HAVE_WINT_T@ && !defined wint_t
71
# define WEOF ((wint_t) -1)
76
/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
77
Linux libc5 has <wctype.h> and the functions but they are broken.
78
Assume all 11 functions (all isw* except iswblank) are implemented the
79
same way, or not at all. */
80
#if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
82
/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
83
undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
84
refer to system functions like _iswctype that are not in the
85
standard C library. Rather than try to get ancient buggy
86
implementations like this to work, just disable them. */
102
/* Linux libc5 has <wctype.h> and the functions but they are broken. */
103
# if @REPLACE_ISWCNTRL@
104
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
105
# define iswalnum rpl_iswalnum
106
# define iswalpha rpl_iswalpha
107
# define iswblank rpl_iswblank
108
# define iswcntrl rpl_iswcntrl
109
# define iswdigit rpl_iswdigit
110
# define iswgraph rpl_iswgraph
111
# define iswlower rpl_iswlower
112
# define iswprint rpl_iswprint
113
# define iswpunct rpl_iswpunct
114
# define iswspace rpl_iswspace
115
# define iswupper rpl_iswupper
116
# define iswxdigit rpl_iswxdigit
117
# define towlower rpl_towlower
118
# define towupper rpl_towupper
123
# if @REPLACE_ISWCNTRL@
130
return ((wc >= '0' && wc <= '9')
131
|| ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
135
# if @REPLACE_ISWCNTRL@
142
return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
146
# if @REPLACE_ISWCNTRL@
153
return wc == ' ' || wc == '\t';
157
# if @REPLACE_ISWCNTRL@
164
return (wc & ~0x1f) == 0 || wc == 0x7f;
168
# if @REPLACE_ISWCNTRL@
175
return wc >= '0' && wc <= '9';
179
# if @REPLACE_ISWCNTRL@
186
return wc >= '!' && wc <= '~';
190
# if @REPLACE_ISWCNTRL@
197
return wc >= 'a' && wc <= 'z';
201
# if @REPLACE_ISWCNTRL@
208
return wc >= ' ' && wc <= '~';
212
# if @REPLACE_ISWCNTRL@
219
return (wc >= '!' && wc <= '~'
220
&& !((wc >= '0' && wc <= '9')
221
|| ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
225
# if @REPLACE_ISWCNTRL@
232
return (wc == ' ' || wc == '\t'
233
|| wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
237
# if @REPLACE_ISWCNTRL@
244
return wc >= 'A' && wc <= 'Z';
248
# if @REPLACE_ISWCNTRL@
255
return ((wc >= '0' && wc <= '9')
256
|| ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
260
# if @REPLACE_ISWCNTRL@
267
return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
271
# if @REPLACE_ISWCNTRL@
278
return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
281
#elif ! @HAVE_ISWBLANK@
282
/* Only the iswblank function is missing. */
287
return wc == ' ' || wc == '\t';
292
#if defined __MINGW32__
294
/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
295
The functions towlower and towupper are implemented in the MSVCRT library
296
to take a wchar_t argument and return a wchar_t result. mingw declares
297
these functions to take a wint_t argument and return a wint_t result.
299
1. When the user passes an argument outside the range 0x0000..0xFFFF, the
300
function will look only at the lower 16 bits. This is allowed according
302
2. The return value is returned in the lower 16 bits of the result register.
303
The upper 16 bits are random: whatever happened to be in that part of the
304
result register. We need to fix this by adding a zero-extend from
305
wchar_t to wint_t after the call. */
308
rpl_towlower (wint_t wc)
310
return (wint_t) (wchar_t) towlower (wc);
312
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
313
# define towlower rpl_towlower
317
rpl_towupper (wint_t wc)
319
return (wint_t) (wchar_t) towupper (wc);
321
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
322
# define towupper rpl_towupper
325
#endif /* __MINGW32__ */
327
#if @REPLACE_ISWCNTRL@
328
_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
329
_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
330
_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
331
_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
332
_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
333
_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
334
_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
335
_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
336
_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
337
_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
338
_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
339
_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
341
_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
342
_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
343
_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
344
_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
345
_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
346
_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
347
_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
348
_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
349
_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
350
_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
351
_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
352
_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
354
_GL_CXXALIASWARN (iswalnum);
355
_GL_CXXALIASWARN (iswalpha);
356
_GL_CXXALIASWARN (iswblank);
357
_GL_CXXALIASWARN (iswcntrl);
358
_GL_CXXALIASWARN (iswdigit);
359
_GL_CXXALIASWARN (iswgraph);
360
_GL_CXXALIASWARN (iswlower);
361
_GL_CXXALIASWARN (iswprint);
362
_GL_CXXALIASWARN (iswpunct);
363
_GL_CXXALIASWARN (iswspace);
364
_GL_CXXALIASWARN (iswupper);
365
_GL_CXXALIASWARN (iswxdigit);
367
#if @REPLACE_ISWCNTRL@ || defined __MINGW32__
368
_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
369
_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
371
_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
372
_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
374
_GL_CXXALIASWARN (towlower);
375
_GL_CXXALIASWARN (towupper);
378
#endif /* _GL_WCTYPE_H */
379
#endif /* _GL_WCTYPE_H */