1 /** @file 2 Wide character classification and mapping utilities. 3 4 The following macros are defined in this file:<BR> 5 @verbatim 6 WEOF Wide char version of end-of-file. 7 @endverbatim 8 9 The following types are defined in this file:<BR> 10 @verbatim 11 wint_t Type capable of holding all wchar_t values and WEOF. 12 wctrans_t A type for holding locale-specific character mappings. 13 wctype_t Type for holding locale-specific character classifications. 14 @endverbatim 15 16 The following functions are declared in this file:<BR> 17 @verbatim 18 ############### Wide Character Classification Functions 19 int iswalnum (wint_t); 20 int iswalpha (wint_t); 21 int iswcntrl (wint_t); 22 int iswdigit (wint_t); 23 int iswgraph (wint_t); 24 int iswlower (wint_t); 25 int iswprint (wint_t); 26 int iswpunct (wint_t); 27 int iswblank (wint_t); 28 int iswspace (wint_t); 29 int iswupper (wint_t); 30 int iswxdigit (wint_t); 31 32 ############### Extensible Wide Character Classification Functions 33 wctype_t wctype (const char *); 34 int iswctype (wint_t, wctype_t); 35 36 ############### Wide Character Case Mapping Utilities 37 wint_t towlower (wint_t); 38 wint_t towupper (wint_t); 39 40 ############### Extensible Wide Character Case Mapping Utilities 41 wctrans_t wctrans (const char *); 42 wint_t towctrans (wint_t, wctrans_t); 43 @endverbatim 44 45 Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR> 46 This program and the accompanying materials are licensed and made available under 47 the terms and conditions of the BSD License that accompanies this distribution. 48 The full text of the license may be found at 49 http://opensource.org/licenses/bsd-license. 50 51 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 52 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 53 54 * Copyright (c)1999 Citrus Project, 55 * All rights reserved. 56 * 57 * Redistribution and use in source and binary forms, with or without 58 * modification, are permitted provided that the following conditions 59 * are met: 60 * 1. Redistributions of source code must retain the above copyright 61 * notice, this list of conditions and the following disclaimer. 62 * 2. Redistributions in binary form must reproduce the above copyright 63 * notice, this list of conditions and the following disclaimer in the 64 * documentation and/or other materials provided with the distribution. 65 * 66 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 67 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 68 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 69 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 70 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 71 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 72 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 73 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 74 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 75 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 76 * SUCH DAMAGE. 77 * 78 * citrus Id: wctype.h,v 1.4 2000/12/21 01:50:21 itojun Exp 79 80 NetBSD: wctype.h,v 1.6 2005/02/03 04:39:32 perry Exp 81 **/ 82 #ifndef _WCTYPE_H_ 83 #define _WCTYPE_H_ 84 85 #include <sys/EfiCdefs.h> 86 #include <machine/ansi.h> 87 88 #ifdef _EFI_WINT_T 89 /** wint_t is an integer type unchanged by default argument promotions that can 90 hold any value corresponding to members of the extended character set, as 91 well as at least one value that does not correspond to any member of the 92 extended character set: WEOF. 93 */ 94 typedef _EFI_WINT_T wint_t; 95 #undef _BSD_WINT_T_ 96 #undef _EFI_WINT_T 97 #endif 98 99 #ifdef _BSD_WCTRANS_T_ 100 /** A scalar type for holding locale-specific character mappings. */ 101 typedef wint_t (*wctrans_t)(wint_t); 102 #undef _BSD_WCTRANS_T_ 103 #endif 104 105 #ifdef _BSD_WCTYPE_T_ 106 /** A scalar type capable of holding values representing locale-specific 107 character classifications. */ 108 typedef _BSD_WCTYPE_T_ wctype_t; 109 #undef _BSD_WCTYPE_T_ 110 #endif 111 112 #ifndef WEOF 113 /** WEOF expands to a constant expression of type wint_t whose value does not 114 correspond to any member of the extended character set. It is accepted 115 (and returned) by several functions, declared in this file, to indicate 116 end-of-file, that is, no more input from a stream. It is also used as a 117 wide character value that does not correspond to any member of the 118 extended character set. 119 */ 120 #define WEOF ((wint_t)-1) 121 #endif 122 123 __BEGIN_DECLS 124 /** Test for any wide character for which iswalpha or iswdigit is TRUE. 125 126 @param[in] WC The wide character to be classified. 127 128 @return Returns non-zero (TRUE) if and only if the value of WC conforms 129 to the classification described for this function. 130 */ 131 int iswalnum (wint_t WC); 132 133 /** Test for any wide character for which iswupper or iswlower is TRUE, 134 OR, a locale-specific character where none of iswcntrl, iswdigit, 135 iswpunct, or iswspace is TRUE. 136 137 @param[in] WC The wide character to be classified. 138 139 @return Returns non-zero (TRUE) if and only if the value of WC conforms 140 to the classification described for this function. 141 */ 142 int iswalpha (wint_t WC); 143 144 /** Test for any wide control character. 145 146 @param[in] WC The wide character to be classified. 147 148 @return Returns non-zero (TRUE) if and only if the value of WC conforms 149 to the classification described for this function. 150 */ 151 int iswcntrl (wint_t WC); 152 153 /** Test if the value of WC is a wide character that corresponds to a decimal digit. 154 155 @param[in] WC The wide character to be classified. 156 157 @return Returns non-zero (TRUE) if and only if the value of WC conforms 158 to the classification described for this function. 159 */ 160 int iswdigit (wint_t WC); 161 162 /** Test for wide characters for which iswprint is TRUE and iswspace is FALSE. 163 164 @param[in] WC The wide character to be classified. 165 166 @return Returns non-zero (TRUE) if and only if the value of WC conforms 167 to the classification described for this function. 168 */ 169 int iswgraph (wint_t WC); 170 171 /** The iswlower function tests for any wide character that corresponds to a 172 lowercase letter or is one of a locale-specific set of wide characters 173 for which none of iswcntrl, iswdigit, iswpunct, or iswspace is TRUE. 174 175 @param[in] WC The wide character to be classified. 176 177 @return Returns non-zero (TRUE) if and only if the value of WC conforms 178 to the classification described for this function. 179 */ 180 int iswlower (wint_t WC); 181 182 /** Test for any printing wide character. 183 184 @param[in] WC The wide character to be classified. 185 186 @return Returns non-zero (TRUE) if and only if the value of WC conforms 187 to the classification described for this function. 188 */ 189 int iswprint (wint_t WC); 190 191 /** The iswpunct function tests for any printing wide character that is one 192 of a locale-specific set of punctuation wide characters for which 193 neither iswspace nor iswalnum is TRUE. 194 195 @param[in] WC The wide character to be classified. 196 197 @return Returns non-zero (TRUE) if and only if the value of WC conforms 198 to the classification described for this function. 199 */ 200 int iswpunct (wint_t WC); 201 202 /** Test for standard blank characters or locale-specific characters 203 for which iswspace is TRUE and are used to separate words within a line 204 of text. In the "C" locale, iswblank only returns TRUE for the standard 205 blank characters space (L' ') and horizontal tab (L'\t'). 206 207 @param[in] WC The wide character to be classified. 208 209 @return Returns non-zero (TRUE) if and only if the value of WC conforms 210 to the classification described for this function. 211 */ 212 int iswblank (wint_t WC); 213 214 /** The iswspace function tests for any wide character that corresponds to a 215 locale-specific set of white-space wide characters for which none of 216 iswalnum, iswgraph, or iswpunct is TRUE. 217 218 @param[in] WC The wide character to be classified. 219 220 @return Returns non-zero (TRUE) if and only if the value of WC conforms 221 to the classification described for this function. 222 */ 223 int iswspace (wint_t WC); 224 225 /** Tests for any wide character that corresponds to an uppercase letter or 226 is one of a locale-specific set of wide characters for which none of 227 iswcntrl, iswdigit, iswpunct, or iswspace is TRUE. 228 229 @param[in] WC The wide character to be classified. 230 231 @return Returns non-zero (TRUE) if and only if the value of WC conforms 232 to the classification described for this function. 233 */ 234 int iswupper (wint_t WC); 235 236 /** The iswxdigit function tests for any wide character that corresponds to a 237 hexadecimal-digit character. 238 239 @param[in] WC The wide character to be classified. 240 241 @return Returns non-zero (TRUE) if and only if the value of WC conforms 242 to the classification described for this function. 243 */ 244 int iswxdigit (wint_t WC); 245 246 /** Construct a value that describes a class of wide characters, identified 247 by the string pointed to by Desc. The constructed value is suitable for 248 use as the second argument to the iswctype function. 249 250 The following strings name classes of wide characters that the iswctype 251 function is able to test against. These strings are valid in all locales 252 as Desc arguments to wctype(). 253 - "alnum" 254 - "alpha" 255 - "blank" 256 - "cntrl" 257 - "digit" 258 - "graph" 259 - "lower" 260 - "print" 261 - "punct" 262 - "space" 263 - "upper" 264 - "xdigit 265 266 @param[in] Desc A pointer to a multibyte character string naming a 267 class of wide characters. 268 269 @return If Desc identifies a valid class of wide characters in the 270 current locale, the wctype function returns a nonzero value that 271 is valid as the second argument to the iswctype function; 272 otherwise, it returns zero. 273 */ 274 wctype_t wctype (const char *Desc); 275 276 /** Determine whether the wide character WC has the property described by Wct. 277 278 @param[in] WC The wide character to be classified. 279 @param[in] Wct A value describing a class of wide characters. 280 281 @return The iswctype function returns nonzero (TRUE) if and only if the 282 value of the wide character WC has the property described by Wct. 283 */ 284 int iswctype (wint_t WC, wctype_t Wct); 285 286 /** Convert an uppercase letter to a corresponding lowercase letter. 287 288 @param[in] WC The wide character to be converted. 289 290 @return If the argument is a wide character for which iswupper is TRUE 291 and there are one or more corresponding wide characters, as 292 specified by the current locale, for which iswlower is TRUE, the 293 towlower function returns one of the corresponding wide 294 characters (always the same one for any given locale); otherwise, 295 the argument is returned unchanged. 296 */ 297 wint_t towlower (wint_t WC); 298 299 /** Convert a lowercase letter to a corresponding uppercase letter. 300 301 @param[in] WC The wide character to be converted. 302 303 @return If the argument is a wide character for which iswlower is TRUE 304 and there are one or more corresponding wide characters, as 305 specified by the current locale, for which iswupper is TRUE, the 306 towupper function returns one of the corresponding wide 307 characters (always the same one for any given locale); otherwise, 308 the argument is returned unchanged. 309 */ 310 wint_t towupper (wint_t WC); 311 312 /** Construct a value that describes a mapping between wide characters 313 identified by the string argument, S. 314 315 The strings listed below are valid in all locales as the S argument to 316 the wctrans function. 317 - "tolower" 318 - "toupper" 319 320 @param[in] S A pointer to a multibyte character string naming a 321 mapping between wide characters. 322 323 @return If S identifies a valid mapping of wide characters in the current 324 locale, the wctrans function returns a nonzero value that is 325 valid as the second argument to the towctrans function; 326 otherwise, it returns zero. 327 */ 328 wctrans_t wctrans (const char *S); 329 330 /** Map the wide character WC using the mapping described by WTr. The current 331 locale will be the same as during the call to wctrans that returned 332 the value WTr. 333 334 @param[in] WC The wide character to be converted. 335 @param[in] WTr A value describing a mapping of wide characters in the 336 current locale. 337 338 @return Returns the mapped value of WC using the mapping selected by WTr. 339 */ 340 wint_t towctrans (wint_t WC, wctrans_t WTr); 341 __END_DECLS 342 343 #endif /* _WCTYPE_H_ */ 344