glibc (2.38)

(root)/
include/
bits/
wctype-wchar.h
       1  /* Copyright (C) 1996-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  /*
      19   *	ISO C99 Standard: 7.25
      20   *	Wide character classification and mapping utilities  <wctype.h>
      21   */
      22  
      23  #ifndef _BITS_WCTYPE_WCHAR_H
      24  #define _BITS_WCTYPE_WCHAR_H 1
      25  
      26  #if !defined _WCTYPE_H && !defined _WCHAR_H
      27  #error "Never include <bits/wctype-wchar.h> directly; include <wctype.h> or <wchar.h> instead."
      28  #endif
      29  
      30  #include <bits/types.h>
      31  #include <bits/types/wint_t.h>
      32  
      33  /* The definitions in this header are specified to appear in <wctype.h>
      34     in ISO C99, but in <wchar.h> in Unix98.  _GNU_SOURCE follows C99.  */
      35  
      36  /* Scalar type that can hold values which represent locale-specific
      37     character classifications.  */
      38  typedef unsigned long int wctype_t;
      39  
      40  # ifndef _ISwbit
      41  /* The characteristics are stored always in network byte order (big
      42     endian).  We define the bit value interpretations here dependent on the
      43     machine's byte order.  */
      44  
      45  #  include <bits/endian.h>
      46  #  if __BYTE_ORDER == __BIG_ENDIAN
      47  #   define _ISwbit(bit)	(1 << (bit))
      48  #  else /* __BYTE_ORDER == __LITTLE_ENDIAN */
      49  #   define _ISwbit(bit)	\
      50  	((bit) < 8 ? (int) ((1UL << (bit)) << 24)			      \
      51  	 : ((bit) < 16 ? (int) ((1UL << (bit)) << 8)			      \
      52  	    : ((bit) < 24 ? (int) ((1UL << (bit)) >> 8)			      \
      53  	       : (int) ((1UL << (bit)) >> 24))))
      54  #  endif
      55  
      56  enum
      57  {
      58    __ISwupper = 0,			/* UPPERCASE.  */
      59    __ISwlower = 1,			/* lowercase.  */
      60    __ISwalpha = 2,			/* Alphabetic.  */
      61    __ISwdigit = 3,			/* Numeric.  */
      62    __ISwxdigit = 4,			/* Hexadecimal numeric.  */
      63    __ISwspace = 5,			/* Whitespace.  */
      64    __ISwprint = 6,			/* Printing.  */
      65    __ISwgraph = 7,			/* Graphical.  */
      66    __ISwblank = 8,			/* Blank (usually SPC and TAB).  */
      67    __ISwcntrl = 9,			/* Control character.  */
      68    __ISwpunct = 10,			/* Punctuation.  */
      69    __ISwalnum = 11,			/* Alphanumeric.  */
      70  
      71    _ISwupper = _ISwbit (__ISwupper),	/* UPPERCASE.  */
      72    _ISwlower = _ISwbit (__ISwlower),	/* lowercase.  */
      73    _ISwalpha = _ISwbit (__ISwalpha),	/* Alphabetic.  */
      74    _ISwdigit = _ISwbit (__ISwdigit),	/* Numeric.  */
      75    _ISwxdigit = _ISwbit (__ISwxdigit),	/* Hexadecimal numeric.  */
      76    _ISwspace = _ISwbit (__ISwspace),	/* Whitespace.  */
      77    _ISwprint = _ISwbit (__ISwprint),	/* Printing.  */
      78    _ISwgraph = _ISwbit (__ISwgraph),	/* Graphical.  */
      79    _ISwblank = _ISwbit (__ISwblank),	/* Blank (usually SPC and TAB).  */
      80    _ISwcntrl = _ISwbit (__ISwcntrl),	/* Control character.  */
      81    _ISwpunct = _ISwbit (__ISwpunct),	/* Punctuation.  */
      82    _ISwalnum = _ISwbit (__ISwalnum)	/* Alphanumeric.  */
      83  };
      84  # endif /* Not _ISwbit  */
      85  
      86  
      87  __BEGIN_DECLS
      88  
      89  /*
      90   * Wide-character classification functions: 7.15.2.1.
      91   */
      92  
      93  /* Test for any wide character for which `iswalpha' or `iswdigit' is
      94     true.  */
      95  extern int iswalnum (wint_t __wc) __THROW;
      96  
      97  /* Test for any wide character for which `iswupper' or 'iswlower' is
      98     true, or any wide character that is one of a locale-specific set of
      99     wide-characters for which none of `iswcntrl', `iswdigit',
     100     `iswpunct', or `iswspace' is true.  */
     101  extern int iswalpha (wint_t __wc) __THROW;
     102  
     103  /* Test for any control wide character.  */
     104  extern int iswcntrl (wint_t __wc) __THROW;
     105  
     106  /* Test for any wide character that corresponds to a decimal-digit
     107     character.  */
     108  extern int iswdigit (wint_t __wc) __THROW;
     109  
     110  /* Test for any wide character for which `iswprint' is true and
     111     `iswspace' is false.  */
     112  extern int iswgraph (wint_t __wc) __THROW;
     113  
     114  /* Test for any wide character that corresponds to a lowercase letter
     115     or is one of a locale-specific set of wide characters for which
     116     none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
     117  extern int iswlower (wint_t __wc) __THROW;
     118  
     119  /* Test for any printing wide character.  */
     120  extern int iswprint (wint_t __wc) __THROW;
     121  
     122  /* Test for any printing wide character that is one of a
     123     locale-specific et of wide characters for which neither `iswspace'
     124     nor `iswalnum' is true.  */
     125  extern int iswpunct (wint_t __wc) __THROW;
     126  
     127  /* Test for any wide character that corresponds to a locale-specific
     128     set of wide characters for which none of `iswalnum', `iswgraph', or
     129     `iswpunct' is true.  */
     130  extern int iswspace (wint_t __wc) __THROW;
     131  
     132  /* Test for any wide character that corresponds to an uppercase letter
     133     or is one of a locale-specific set of wide character for which none
     134     of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true.  */
     135  extern int iswupper (wint_t __wc) __THROW;
     136  
     137  /* Test for any wide character that corresponds to a hexadecimal-digit
     138     character equivalent to that performed be the functions described
     139     in the previous subclause.  */
     140  extern int iswxdigit (wint_t __wc) __THROW;
     141  
     142  /* Test for any wide character that corresponds to a standard blank
     143     wide character or a locale-specific set of wide characters for
     144     which `iswalnum' is false.  */
     145  # ifdef __USE_ISOC99
     146  extern int iswblank (wint_t __wc) __THROW;
     147  # endif
     148  
     149  /*
     150   * Extensible wide-character classification functions: 7.15.2.2.
     151   */
     152  
     153  /* Construct value that describes a class of wide characters identified
     154     by the string argument PROPERTY.  */
     155  extern wctype_t wctype (const char *__property) __THROW;
     156  
     157  /* Determine whether the wide-character WC has the property described by
     158     DESC.  */
     159  extern int iswctype (wint_t __wc, wctype_t __desc) __THROW;
     160  
     161  /*
     162   * Wide-character case-mapping functions: 7.15.3.1.
     163   */
     164  
     165  /* Converts an uppercase letter to the corresponding lowercase letter.  */
     166  extern wint_t towlower (wint_t __wc) __THROW;
     167  
     168  /* Converts an lowercase letter to the corresponding uppercase letter.  */
     169  extern wint_t towupper (wint_t __wc) __THROW;
     170  
     171  __END_DECLS
     172  
     173  #endif /* bits/wctype-wchar.h.  */