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-2013 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, see <http://www.gnu.org/licenses/>. */
20 /* Written by Bruno Haible and Paul Eggert. */
23 * ISO C 99 <wctype.h> for platforms that lack it.
24 * <http://www.opengroup.org/susv3xbd/wctype.h.html>
26 * iswctype, towctrans, towlower, towupper, wctrans, wctype,
27 * wctrans_t, and wctype_t are not yet implemented.
30 #ifndef _@GUARD_PREFIX@_WCTYPE_H
33 @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 /* mingw has declarations of towupper and towlower in <ctype.h> as
50 well <wctype.h>. Include <ctype.h> in advance to avoid rpl_ prefix
51 being added to the declarations. */
56 /* Include the original <wctype.h> if it exists.
57 BeOS 5 has the functions but no <wctype.h>. */
58 /* The include_next requires a split double-inclusion guard. */
60 # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
63 #ifndef _@GUARD_PREFIX@_WCTYPE_H
64 #define _@GUARD_PREFIX@_WCTYPE_H
66 _GL_INLINE_HEADER_BEGIN
67 #ifndef _GL_WCTYPE_INLINE
68 # define _GL_WCTYPE_INLINE _GL_INLINE
71 /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */
73 /* The definition of _GL_WARN_ON_USE is copied here. */
75 /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
76 #defines a number of identifiers in the application namespace. Revert
88 /* Define wint_t and WEOF. (Also done in wchar.in.h.) */
89 #if !@HAVE_WINT_T@ && !defined wint_t
95 /* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
96 This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
97 "unchanged by default argument promotions". Override it. */
99 # if !GNULIB_defined_wint_t
100 # include <crtdefs.h>
101 typedef unsigned int rpl_wint_t;
103 # define wint_t rpl_wint_t
104 # define GNULIB_defined_wint_t 1
108 # define WEOF ((wint_t) -1)
113 #if !GNULIB_defined_wctype_functions
115 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
116 Linux libc5 has <wctype.h> and the functions but they are broken.
117 Assume all 11 functions (all isw* except iswblank) are implemented the
118 same way, or not at all. */
119 # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
121 /* IRIX 5.3 has macros but no functions, its isw* macros refer to an
122 undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
123 refer to system functions like _iswctype that are not in the
124 standard C library. Rather than try to get ancient buggy
125 implementations like this to work, just disable them. */
141 /* Linux libc5 has <wctype.h> and the functions but they are broken. */
142 # if @REPLACE_ISWCNTRL@
143 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
144 # define iswalnum rpl_iswalnum
145 # define iswalpha rpl_iswalpha
146 # define iswblank rpl_iswblank
147 # define iswcntrl rpl_iswcntrl
148 # define iswdigit rpl_iswdigit
149 # define iswgraph rpl_iswgraph
150 # define iswlower rpl_iswlower
151 # define iswprint rpl_iswprint
152 # define iswpunct rpl_iswpunct
153 # define iswspace rpl_iswspace
154 # define iswupper rpl_iswupper
155 # define iswxdigit rpl_iswxdigit
158 # if @REPLACE_TOWLOWER@
159 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
160 # define towlower rpl_towlower
161 # define towupper rpl_towupper
165 _GL_WCTYPE_INLINE int
166 # if @REPLACE_ISWCNTRL@
173 return ((wc >= '0' && wc <= '9')
174 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
177 _GL_WCTYPE_INLINE int
178 # if @REPLACE_ISWCNTRL@
185 return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
188 _GL_WCTYPE_INLINE int
189 # if @REPLACE_ISWCNTRL@
196 return wc == ' ' || wc == '\t';
199 _GL_WCTYPE_INLINE int
200 # if @REPLACE_ISWCNTRL@
207 return (wc & ~0x1f) == 0 || wc == 0x7f;
210 _GL_WCTYPE_INLINE int
211 # if @REPLACE_ISWCNTRL@
218 return wc >= '0' && wc <= '9';
221 _GL_WCTYPE_INLINE int
222 # if @REPLACE_ISWCNTRL@
229 return wc >= '!' && wc <= '~';
232 _GL_WCTYPE_INLINE int
233 # if @REPLACE_ISWCNTRL@
240 return wc >= 'a' && wc <= 'z';
243 _GL_WCTYPE_INLINE int
244 # if @REPLACE_ISWCNTRL@
251 return wc >= ' ' && wc <= '~';
254 _GL_WCTYPE_INLINE int
255 # if @REPLACE_ISWCNTRL@
262 return (wc >= '!' && wc <= '~'
263 && !((wc >= '0' && wc <= '9')
264 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
267 _GL_WCTYPE_INLINE int
268 # if @REPLACE_ISWCNTRL@
275 return (wc == ' ' || wc == '\t'
276 || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
279 _GL_WCTYPE_INLINE int
280 # if @REPLACE_ISWCNTRL@
287 return wc >= 'A' && wc <= 'Z';
290 _GL_WCTYPE_INLINE int
291 # if @REPLACE_ISWCNTRL@
298 return ((wc >= '0' && wc <= '9')
299 || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
302 _GL_WCTYPE_INLINE wint_t
303 # if @REPLACE_TOWLOWER@
310 return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
313 _GL_WCTYPE_INLINE wint_t
314 # if @REPLACE_TOWLOWER@
321 return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
324 # elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
325 /* Only the iswblank function is missing. */
327 # if @REPLACE_ISWBLANK@
328 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
329 # define iswblank rpl_iswblank
331 _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
333 _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
338 # if defined __MINGW32__
340 /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
341 The functions towlower and towupper are implemented in the MSVCRT library
342 to take a wchar_t argument and return a wchar_t result. mingw declares
343 these functions to take a wint_t argument and return a wint_t result.
345 1. When the user passes an argument outside the range 0x0000..0xFFFF, the
346 function will look only at the lower 16 bits. This is allowed according
348 2. The return value is returned in the lower 16 bits of the result register.
349 The upper 16 bits are random: whatever happened to be in that part of the
350 result register. We need to fix this by adding a zero-extend from
351 wchar_t to wint_t after the call. */
353 _GL_WCTYPE_INLINE wint_t
354 rpl_towlower (wint_t wc)
356 return (wint_t) (wchar_t) towlower (wc);
358 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
359 # define towlower rpl_towlower
362 _GL_WCTYPE_INLINE wint_t
363 rpl_towupper (wint_t wc)
365 return (wint_t) (wchar_t) towupper (wc);
367 # if !(defined __cplusplus && defined GNULIB_NAMESPACE)
368 # define towupper rpl_towupper
371 # endif /* __MINGW32__ */
373 # define GNULIB_defined_wctype_functions 1
376 #if @REPLACE_ISWCNTRL@
377 _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
378 _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
379 _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
380 _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
381 _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
382 _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
383 _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
384 _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
385 _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
386 _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
387 _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
389 _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
390 _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
391 _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
392 _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
393 _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
394 _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
395 _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
396 _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
397 _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
398 _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
399 _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
401 _GL_CXXALIASWARN (iswalnum);
402 _GL_CXXALIASWARN (iswalpha);
403 _GL_CXXALIASWARN (iswcntrl);
404 _GL_CXXALIASWARN (iswdigit);
405 _GL_CXXALIASWARN (iswgraph);
406 _GL_CXXALIASWARN (iswlower);
407 _GL_CXXALIASWARN (iswprint);
408 _GL_CXXALIASWARN (iswpunct);
409 _GL_CXXALIASWARN (iswspace);
410 _GL_CXXALIASWARN (iswupper);
411 _GL_CXXALIASWARN (iswxdigit);
413 #if @GNULIB_ISWBLANK@
414 # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
415 _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
417 _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
419 _GL_CXXALIASWARN (iswblank);
423 # if !GNULIB_defined_wctype_t
424 typedef void * wctype_t;
425 # define GNULIB_defined_wctype_t 1
429 /* Get a descriptor for a wide character property. */
431 # if !@HAVE_WCTYPE_T@
432 _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
434 _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
435 _GL_CXXALIASWARN (wctype);
436 #elif defined GNULIB_POSIXCHECK
438 # if HAVE_RAW_DECL_WCTYPE
439 _GL_WARN_ON_USE (wctype, "wctype is unportable - "
440 "use gnulib module wctype for portability");
444 /* Test whether a wide character has a given property.
445 The argument WC must be either a wchar_t value or WEOF.
446 The argument DESC must have been returned by the wctype() function. */
447 #if @GNULIB_ISWCTYPE@
448 # if !@HAVE_WCTYPE_T@
449 _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
451 _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
452 _GL_CXXALIASWARN (iswctype);
453 #elif defined GNULIB_POSIXCHECK
455 # if HAVE_RAW_DECL_ISWCTYPE
456 _GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
457 "use gnulib module iswctype for portability");
461 #if @REPLACE_TOWLOWER@ || defined __MINGW32__
462 _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
463 _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
465 _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
466 _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
468 _GL_CXXALIASWARN (towlower);
469 _GL_CXXALIASWARN (towupper);
471 #if !@HAVE_WCTRANS_T@
472 # if !GNULIB_defined_wctrans_t
473 typedef void * wctrans_t;
474 # define GNULIB_defined_wctrans_t 1
478 /* Get a descriptor for a wide character case conversion. */
480 # if !@HAVE_WCTRANS_T@
481 _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
483 _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
484 _GL_CXXALIASWARN (wctrans);
485 #elif defined GNULIB_POSIXCHECK
487 # if HAVE_RAW_DECL_WCTRANS
488 _GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
489 "use gnulib module wctrans for portability");
493 /* Perform a given case conversion on a wide character.
494 The argument WC must be either a wchar_t value or WEOF.
495 The argument DESC must have been returned by the wctrans() function. */
496 #if @GNULIB_TOWCTRANS@
497 # if !@HAVE_WCTRANS_T@
498 _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
500 _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
501 _GL_CXXALIASWARN (towctrans);
502 #elif defined GNULIB_POSIXCHECK
504 # if HAVE_RAW_DECL_TOWCTRANS
505 _GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
506 "use gnulib module towctrans for portability");
510 _GL_INLINE_HEADER_END
512 #endif /* _@GUARD_PREFIX@_WCTYPE_H */
513 #endif /* _@GUARD_PREFIX@_WCTYPE_H */