]>
Commit | Line | Data |
---|---|---|
19bc17a9 RM |
1 | /* Copyright (C) 1996 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 Library General Public License as | |
6 | published by the Free Software Foundation; either version 2 of the | |
7 | 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 | Library General Public License for more details. | |
13 | ||
14 | You should have received a copy of the GNU Library General Public | |
15 | License along with the GNU C Library; see the file COPYING.LIB. If | |
16 | not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, | |
17 | Boston, MA 02111-1307, USA. */ | |
18 | ||
19 | /* | |
20 | * ISO/IEC 9899:1990/Amendment 1:1995 7.15: | |
21 | * Wide-character classification and mapping utilities <wctype.h> | |
22 | */ | |
23 | ||
24 | #ifndef _WCTYPE_H | |
25 | ||
26 | #define _WCTYPE_H 1 | |
27 | #include <features.h> | |
28 | ||
29 | ||
30 | __BEGIN_DECLS | |
31 | ||
71a40c74 RM |
32 | /* We try to get wint_t from <stddef.h>, but not all GCC versions define it |
33 | there. So define it ourselves if it remains undefined. */ | |
19bc17a9 RM |
34 | #define __need_wint_t |
35 | #include <stddef.h> | |
71a40c74 | 36 | #ifndef _WINT_T |
19bc17a9 RM |
37 | /* Integral type unchanged by default argument promotions that can |
38 | hold any value corresponding to members of the extended character | |
39 | set, as well as at least one value that does not correspond to any | |
40 | member of the extended character set. */ | |
71a40c74 | 41 | #define _WINT_T |
19bc17a9 RM |
42 | typedef unsigned int wint_t; |
43 | #endif | |
44 | ||
45 | /* Scalar type that can hold values which represent locale-specific | |
46 | character mappings. */ | |
47 | typedef const unsigned int *wctrans_t; | |
48 | ||
49 | /* Scalar type that can hold values which represent locale-specific | |
50 | character classifications. */ | |
19bc17a9 | 51 | typedef unsigned long int wctype_t; |
19bc17a9 RM |
52 | |
53 | /* Constant expression of type `wint_t' whose value does not correspond | |
54 | to any member of the extended character set. */ | |
55 | #ifndef WEOF | |
56 | #define WEOF (0xffffffffu) | |
57 | #endif | |
58 | ||
59 | #ifndef _ISbit | |
60 | /* These are all the characteristics of characters. | |
61 | If there get to be more than 16 distinct characteristics, | |
62 | many things must be changed that use `unsigned short int's. | |
63 | ||
64 | The characteristics are stored always in network byte order (big | |
65 | endian). We define the bit value interpretations here dependent on the | |
66 | machine's byte order. */ | |
67 | ||
68 | #include <endian.h> | |
69 | #if __BYTE_ORDER == __BIG_ENDIAN | |
70 | #define _ISbit(bit) (1 << bit) | |
71 | #else /* __BYTE_ORDER == __LITTLE_ENDIAN */ | |
72 | #define _ISbit(bit) (bit < 8 ? ((1 << bit) << 8) : ((1 << bit) >> 8)) | |
73 | #endif | |
74 | ||
75 | enum | |
76 | { | |
77 | _ISupper = _ISbit (0), /* UPPERCASE. */ | |
78 | _ISlower = _ISbit (1), /* lowercase. */ | |
79 | _ISalpha = _ISbit (2), /* Alphabetic. */ | |
80 | _ISdigit = _ISbit (3), /* Numeric. */ | |
81 | _ISxdigit = _ISbit (4), /* Hexadecimal numeric. */ | |
82 | _ISspace = _ISbit (5), /* Whitespace. */ | |
83 | _ISprint = _ISbit (6), /* Printing. */ | |
84 | _ISgraph = _ISbit (7), /* Graphical. */ | |
85 | _ISblank = _ISbit (8), /* Blank (usually SPC and TAB). */ | |
86 | _IScntrl = _ISbit (9), /* Control character. */ | |
87 | _ISpunct = _ISbit (10), /* Punctuation. */ | |
88 | _ISalnum = _ISbit (11) /* Alphanumeric. */ | |
89 | }; | |
90 | #endif /* Not _ISbit */ | |
91 | ||
92 | ||
93 | /* | |
94 | * Wide-character classification functions: 7.15.2.1. | |
95 | */ | |
96 | ||
97 | /* Test for any wide character for which `iswalpha' or `iswdigit' is | |
98 | true. */ | |
99 | int iswalnum __P ((wint_t __wc)); | |
100 | ||
101 | /* Test for any wide character for which `iswupper' or 'iswlower' is | |
102 | true, or any wide character that is one of a locale-specific set of | |
103 | wide-characters for which none of `iswcntrl', `iswdigit', | |
104 | `iswpunct', or `iswspace' is true. */ | |
105 | int iswalpha __P ((wint_t __wc)); | |
106 | ||
107 | /* Test for any control wide character. */ | |
108 | int iswcntrl __P ((wint_t __wc)); | |
109 | ||
110 | /* Test for any wide character that corresponds to a decimal-digit | |
111 | character. */ | |
112 | int iswdigit __P ((wint_t __wc)); | |
113 | ||
114 | /* Test for any wide character for which `iswprint' is true and | |
115 | `iswspace' is false. */ | |
116 | int iswgraph __P ((wint_t __wc)); | |
117 | ||
118 | /* Test for any wide character that corresponds to a lowercase letter | |
119 | or is one of a locale-specific set of wide characters for which | |
120 | none of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ | |
121 | int iswlower __P ((wint_t __wc)); | |
122 | ||
123 | /* Test for any printing wide character. */ | |
124 | int iswprint __P ((wint_t __wc)); | |
125 | ||
126 | /* Test for any printing wide character that is one of a | |
127 | locale-specific et of wide characters for which neither `iswspace' | |
128 | nor `iswalnum' is true. */ | |
129 | int iswpunct __P ((wint_t __wc)); | |
130 | ||
131 | /* Test for any wide character that corresponds to a locale-specific | |
132 | set of wide characters for which none of `iswalnum', `iswgraph', or | |
133 | `iswpunct' is true. */ | |
134 | int iswspace __P ((wint_t __wc)); | |
135 | ||
136 | /* Test for any wide character that corresponds to an uppercase letter | |
137 | or is one of a locale-specific set of wide character for which none | |
138 | of `iswcntrl', `iswdigit', `iswpunct', or `iswspace' is true. */ | |
139 | int iswupper __P ((wint_t __wc)); | |
140 | ||
141 | /* Test for any wide character that corresponds to a hexadecimal-digit | |
142 | character equivalent to that performed be the functions described | |
143 | in the previous subclause. */ | |
144 | int iswxdigit __P ((wint_t __wc)); | |
145 | ||
146 | /* | |
147 | * Extensible wide-character classification functions: 7.15.2.2. | |
148 | */ | |
149 | ||
150 | /* Construct value that describes a class of wide characters identified | |
151 | by the string argument PROPERTY. */ | |
152 | wctype_t wctype __P ((__const char *__property)); | |
153 | ||
154 | /* Determine whether the wide-character WC has the property described by | |
155 | DESC. */ | |
156 | int iswctype __P ((wint_t __wc, wctype_t __desc)); | |
157 | ||
158 | ||
159 | /* | |
160 | * Wide-character case-mapping functions: 7.15.3.1. | |
161 | */ | |
162 | ||
163 | /* Converts an uppercase letter to the corresponding lowercase letter. */ | |
164 | wint_t towlower __P ((wint_t __wc)); | |
165 | ||
166 | /* Converts an lowercase letter to the corresponding uppercase letter. */ | |
167 | wint_t towupper __P ((wint_t __wc)); | |
168 | ||
169 | /* | |
170 | * Extensible wide-character mapping functions: 7.15.3.2. | |
171 | */ | |
172 | ||
173 | /* Construct value that describes a mapping between wide characters | |
174 | identified by the string argument PROPERTY. */ | |
175 | wctrans_t wctrans __P ((__const char *__property)); | |
176 | ||
177 | /* Map the wide character WC using the mapping described by DESC. */ | |
178 | wint_t towctrans __P ((wint_t __wc, wctrans_t __desc)); | |
179 | ||
180 | ||
181 | ||
182 | #ifndef __NO_WCTYPE | |
183 | #define iswalnum(wc) iswctype ((wc), _ISalnum) | |
184 | #define iswalpha(wc) iswctype ((wc), _ISalpha) | |
185 | #define iswcntrl(wc) iswctype ((wc), _IScntrl) | |
186 | #define iswdigit(wc) iswctype ((wc), _ISdigit) | |
187 | #define iswlower(wc) iswctype ((wc), _ISlower) | |
188 | #define iswgraph(wc) iswctype ((wc), _ISgraph) | |
189 | #define iswprint(wc) iswctype ((wc), _ISprint) | |
190 | #define iswpunct(wc) iswctype ((wc), _ISpunct) | |
191 | #define iswspace(wc) iswctype ((wc), _ISspace) | |
192 | #define iswupper(wc) iswctype ((wc), _ISupper) | |
193 | #define iswxdigit(wc) iswctype ((wc), _ISxdigit) | |
194 | ||
195 | #ifdef __USE_GNU | |
196 | #define iswblank(wc) iswctype ((wc), _ISblank) | |
197 | #endif | |
198 | ||
199 | /* Pointer to conversion tables. */ | |
200 | extern __const int *__ctype_tolower; /* Case conversions. */ | |
201 | extern __const int *__ctype_toupper; /* Case conversions. */ | |
202 | ||
203 | #define towlower(wc) towctrans (wc, __ctype_tolower) | |
204 | #define towupper(wc) towctrans (wc, __ctype_toupper) | |
205 | ||
206 | #endif /* Not __NO_WCTYPE. */ | |
207 | ||
208 | __END_DECLS | |
209 | ||
210 | #endif /* wctype.h */ |