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. (Also done in wchar.in.h.) */
64 #if !@HAVE_WINT_T@ && !defined wint_t
72 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
73 Linux libc5 has <wctype.h> and the functions but they are broken.
74 Assume all 12 functions are implemented the same way, or not at all. */
75 #if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
77 /* IRIX 5.3 has macros but no functions, its isw* macros refer to an
78 undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
79 refer to system functions like _iswctype that are not in the
80 standard C library. Rather than try to get ancient buggy
81 implementations like this to work, just disable them. */
97 /* Linux libc5 has <wctype.h> and the functions but they are broken. */
98 # if @REPLACE_ISWCNTRL@
99 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
100 # define iswalnum rpl_iswalnum
101 # define iswalpha rpl_iswalpha
102 # define iswblank rpl_iswblank
103 # define iswcntrl rpl_iswcntrl
104 # define iswdigit rpl_iswdigit
105 # define iswgraph rpl_iswgraph
106 # define iswlower rpl_iswlower
107 # define iswprint rpl_iswprint
108 # define iswpunct rpl_iswpunct
109 # define iswspace rpl_iswspace
110 # define iswupper rpl_iswupper
111 # define iswxdigit rpl_iswxdigit
112 # define towlower rpl_towlower
113 # define towupper rpl_towupper
118 # if @REPLACE_ISWCNTRL@
125 return ((wc >= '0' && wc <= '9')
126 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
130 # if @REPLACE_ISWCNTRL@
137 return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
141 # if @REPLACE_ISWCNTRL@
148 return wc == ' ' || wc == '\t';
152 # if @REPLACE_ISWCNTRL@
159 return (wc & ~0x1f) == 0 || wc == 0x7f;
163 # if @REPLACE_ISWCNTRL@
170 return wc >= '0' && wc <= '9';
174 # if @REPLACE_ISWCNTRL@
181 return wc >= '!' && wc <= '~';
185 # if @REPLACE_ISWCNTRL@
192 return wc >= 'a' && wc <= 'z';
196 # if @REPLACE_ISWCNTRL@
203 return wc >= ' ' && wc <= '~';
207 # if @REPLACE_ISWCNTRL@
214 return (wc >= '!' && wc <= '~'
215 && !((wc >= '0' && wc <= '9')
216 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
220 # if @REPLACE_ISWCNTRL@
227 return (wc == ' ' || wc == '\t'
228 || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
232 # if @REPLACE_ISWCNTRL@
239 return wc >= 'A' && wc <= 'Z';
243 # if @REPLACE_ISWCNTRL@
250 return ((wc >= '0' && wc <= '9')
251 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
255 # if @REPLACE_ISWCNTRL@
262 return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
266 # if @REPLACE_ISWCNTRL@
273 return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
276 #endif /* ! HAVE_ISWCNTRL || REPLACE_ISWCNTRL */
278 #if defined __MINGW32__
280 /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
281 The functions towlower and towupper are implemented in the MSVCRT library
282 to take a wchar_t argument and return a wchar_t result. mingw declares
283 these functions to take a wint_t argument and return a wint_t result.
285 1. When the user passes an argument outside the range 0x0000..0xFFFF, the
286 function will look only at the lower 16 bits. This is allowed according
288 2. The return value is returned in the lower 16 bits of the result register.
289 The upper 16 bits are random: whatever happened to be in that part of the
290 result register. We need to fix this by adding a zero-extend from
291 wchar_t to wint_t after the call. */
294 rpl_towlower (wint_t wc)
296 return (wint_t) (wchar_t) towlower (wc);
298 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
299 # define towlower rpl_towlower
303 rpl_towupper (wint_t wc)
305 return (wint_t) (wchar_t) towupper (wc);
307 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
308 # define towupper rpl_towupper
311 #endif /* __MINGW32__ */
313 #if @REPLACE_ISWCNTRL@
314 _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
315 _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
316 _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
317 _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
318 _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
319 _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
320 _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
321 _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
322 _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
323 _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
324 _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
325 _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
327 _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
328 _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
329 _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
330 _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
331 _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
332 _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
333 _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
334 _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
335 _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
336 _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
337 _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
338 _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
340 _GL_CXXALIASWARN (iswalnum);
341 _GL_CXXALIASWARN (iswalpha);
342 _GL_CXXALIASWARN (iswblank);
343 _GL_CXXALIASWARN (iswcntrl);
344 _GL_CXXALIASWARN (iswdigit);
345 _GL_CXXALIASWARN (iswgraph);
346 _GL_CXXALIASWARN (iswlower);
347 _GL_CXXALIASWARN (iswprint);
348 _GL_CXXALIASWARN (iswpunct);
349 _GL_CXXALIASWARN (iswspace);
350 _GL_CXXALIASWARN (iswupper);
351 _GL_CXXALIASWARN (iswxdigit);
353 #if @REPLACE_ISWCNTRL@ || defined __MINGW32__
354 _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
355 _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
357 _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
358 _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
360 _GL_CXXALIASWARN (towlower);
361 _GL_CXXALIASWARN (towupper);
364 #endif /* _GL_WCTYPE_H */
365 #endif /* _GL_WCTYPE_H */