Home | History | Annotate | Download | only in lib
      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.
      4 
      5    Copyright (C) 2006-2008 Free Software Foundation, Inc.
      6 
      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)
     10    any later version.
     11 
     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.
     16 
     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.  */
     20 
     21 /* Written by Bruno Haible and Paul Eggert.  */
     22 
     23 /*
     24  * ISO C 99 <wctype.h> for platforms that lack it.
     25  * <http://www.opengroup.org/susv3xbd/wctype.h.html>
     26  *
     27  * iswctype, towctrans, towlower, towupper, wctrans, wctype,
     28  * wctrans_t, and wctype_t are not yet implemented.
     29  */
     30 
     31 #ifndef _GL_WCTYPE_H
     32 
     33 #if __GNUC__ >= 3
     34 @PRAGMA_SYSTEM_HEADER@
     35 #endif
     36 
     37 #if @HAVE_WINT_T@
     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
     40    <wchar.h>.
     41    BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
     42    included before <wchar.h>.  */
     43 # include <stddef.h>
     44 # include <stdio.h>
     45 # include <time.h>
     46 # include <wchar.h>
     47 #endif
     48 
     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.  */
     52 #if @HAVE_WCTYPE_H@
     53 # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
     54 #endif
     55 
     56 #ifndef _GL_WCTYPE_H
     57 #define _GL_WCTYPE_H
     58 
     59 /* Define wint_t.  (Also done in wchar.in.h.)  */
     60 #if !@HAVE_WINT_T@ && !defined wint_t
     61 # define wint_t int
     62 # ifndef WEOF
     63 #  define WEOF -1
     64 # endif
     65 #endif
     66 
     67 /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
     68    Linux libc5 has <wctype.h> and the functions but they are broken.
     69    Assume all 12 functions are implemented the same way, or not at all.  */
     70 #if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
     71 
     72 /* IRIX 5.3 has macros but no functions, its isw* macros refer to an
     73    undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
     74    refer to system functions like _iswctype that are not in the
     75    standard C library.  Rather than try to get ancient buggy
     76    implementations like this to work, just disable them.  */
     77 #  undef iswalnum
     78 #  undef iswalpha
     79 #  undef iswblank
     80 #  undef iswcntrl
     81 #  undef iswdigit
     82 #  undef iswgraph
     83 #  undef iswlower
     84 #  undef iswprint
     85 #  undef iswpunct
     86 #  undef iswspace
     87 #  undef iswupper
     88 #  undef iswxdigit
     89 
     90 /* Linux libc5 has <wctype.h> and the functions but they are broken.  */
     91 #  if @REPLACE_ISWCNTRL@
     92 #   define iswalnum rpl_iswalnum
     93 #   define iswalpha rpl_iswalpha
     94 #   define iswblank rpl_iswblank
     95 #   define iswcntrl rpl_iswcntrl
     96 #   define iswdigit rpl_iswdigit
     97 #   define iswgraph rpl_iswgraph
     98 #   define iswlower rpl_iswlower
     99 #   define iswprint rpl_iswprint
    100 #   define iswpunct rpl_iswpunct
    101 #   define iswspace rpl_iswspace
    102 #   define iswupper rpl_iswupper
    103 #   define iswxdigit rpl_iswxdigit
    104 #  endif
    105 
    106 static inline int
    107 iswalnum (wint_t wc)
    108 {
    109   return ((wc >= '0' && wc <= '9')
    110 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
    111 }
    112 
    113 static inline int
    114 iswalpha (wint_t wc)
    115 {
    116   return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
    117 }
    118 
    119 static inline int
    120 iswblank (wint_t wc)
    121 {
    122   return wc == ' ' || wc == '\t';
    123 }
    124 
    125 static inline int
    126 iswcntrl (wint_t wc)
    127 {
    128   return (wc & ~0x1f) == 0 || wc == 0x7f;
    129 }
    130 
    131 static inline int
    132 iswdigit (wint_t wc)
    133 {
    134   return wc >= '0' && wc <= '9';
    135 }
    136 
    137 static inline int
    138 iswgraph (wint_t wc)
    139 {
    140   return wc >= '!' && wc <= '~';
    141 }
    142 
    143 static inline int
    144 iswlower (wint_t wc)
    145 {
    146   return wc >= 'a' && wc <= 'z';
    147 }
    148 
    149 static inline int
    150 iswprint (wint_t wc)
    151 {
    152   return wc >= ' ' && wc <= '~';
    153 }
    154 
    155 static inline int
    156 iswpunct (wint_t wc)
    157 {
    158   return (wc >= '!' && wc <= '~'
    159 	  && !((wc >= '0' && wc <= '9')
    160 	       || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
    161 }
    162 
    163 static inline int
    164 iswspace (wint_t wc)
    165 {
    166   return (wc == ' ' || wc == '\t'
    167 	  || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
    168 }
    169 
    170 static inline int
    171 iswupper (wint_t wc)
    172 {
    173   return wc >= 'A' && wc <= 'Z';
    174 }
    175 
    176 static inline int
    177 iswxdigit (wint_t wc)
    178 {
    179   return ((wc >= '0' && wc <= '9')
    180 	  || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
    181 }
    182 
    183 # endif /* ! HAVE_ISWCNTRL */
    184 
    185 #endif /* _GL_WCTYPE_H */
    186 #endif /* _GL_WCTYPE_H */
    187