2011-06-28 04:34:10 +02:00
|
|
|
/** @file
|
2011-08-18 00:54:56 +02:00
|
|
|
Wide character classification and mapping utilities.
|
|
|
|
|
|
|
|
The following macros are defined in this file:<BR>
|
|
|
|
@verbatim
|
|
|
|
WEOF Wide char version of end-of-file.
|
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
The following types are defined in this file:<BR>
|
|
|
|
@verbatim
|
|
|
|
wint_t Type capable of holding all wchar_t values and WEOF.
|
|
|
|
wctrans_t A type for holding locale-specific character mappings.
|
|
|
|
wctype_t Type for holding locale-specific character classifications.
|
|
|
|
@endverbatim
|
|
|
|
|
|
|
|
The following functions are declared in this file:<BR>
|
|
|
|
@verbatim
|
|
|
|
############### Wide Character Classification Functions
|
|
|
|
int iswalnum (wint_t);
|
|
|
|
int iswalpha (wint_t);
|
|
|
|
int iswcntrl (wint_t);
|
|
|
|
int iswdigit (wint_t);
|
|
|
|
int iswgraph (wint_t);
|
|
|
|
int iswlower (wint_t);
|
|
|
|
int iswprint (wint_t);
|
|
|
|
int iswpunct (wint_t);
|
|
|
|
int iswblank (wint_t);
|
|
|
|
int iswspace (wint_t);
|
|
|
|
int iswupper (wint_t);
|
|
|
|
int iswxdigit (wint_t);
|
|
|
|
|
|
|
|
############### Extensible Wide Character Classification Functions
|
|
|
|
wctype_t wctype (const char *);
|
|
|
|
int iswctype (wint_t, wctype_t);
|
|
|
|
|
|
|
|
############### Wide Character Case Mapping Utilities
|
|
|
|
wint_t towlower (wint_t);
|
|
|
|
wint_t towupper (wint_t);
|
|
|
|
|
|
|
|
############### Extensible Wide Character Case Mapping Utilities
|
|
|
|
wctrans_t wctrans (const char *);
|
|
|
|
wint_t towctrans (wint_t, wctrans_t);
|
|
|
|
@endverbatim
|
2011-06-28 04:34:10 +02:00
|
|
|
|
|
|
|
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
|
|
|
|
This program and the accompanying materials are licensed and made available under
|
|
|
|
the terms and conditions of the BSD License that accompanies this distribution.
|
|
|
|
The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
2011-04-27 23:42:16 +02:00
|
|
|
|
|
|
|
* Copyright (c)1999 Citrus Project,
|
|
|
|
* All rights reserved.
|
|
|
|
*
|
|
|
|
* Redistribution and use in source and binary forms, with or without
|
|
|
|
* modification, are permitted provided that the following conditions
|
|
|
|
* are met:
|
|
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer.
|
|
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
|
|
* documentation and/or other materials provided with the distribution.
|
|
|
|
*
|
|
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
|
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
|
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
|
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
|
|
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
|
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
|
|
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
|
|
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
|
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
|
|
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
|
|
* SUCH DAMAGE.
|
|
|
|
*
|
|
|
|
* citrus Id: wctype.h,v 1.4 2000/12/21 01:50:21 itojun Exp
|
|
|
|
|
2011-06-28 04:34:10 +02:00
|
|
|
NetBSD: wctype.h,v 1.6 2005/02/03 04:39:32 perry Exp
|
|
|
|
**/
|
2011-04-27 23:42:16 +02:00
|
|
|
#ifndef _WCTYPE_H_
|
|
|
|
#define _WCTYPE_H_
|
|
|
|
|
|
|
|
#include <sys/EfiCdefs.h>
|
|
|
|
#include <machine/ansi.h>
|
|
|
|
|
2011-06-28 04:34:10 +02:00
|
|
|
#ifdef _EFI_WINT_T
|
2011-08-18 00:54:56 +02:00
|
|
|
/** wint_t is an integer type unchanged by default argument promotions that can
|
|
|
|
hold any value corresponding to members of the extended character set, as
|
|
|
|
well as at least one value that does not correspond to any member of the
|
|
|
|
extended character set: WEOF.
|
|
|
|
*/
|
2011-06-28 04:34:10 +02:00
|
|
|
typedef _EFI_WINT_T wint_t;
|
|
|
|
#undef _BSD_WINT_T_
|
|
|
|
#undef _EFI_WINT_T
|
2011-04-27 23:42:16 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _BSD_WCTRANS_T_
|
2011-08-18 00:54:56 +02:00
|
|
|
/** A scalar type for holding locale-specific character mappings. */
|
|
|
|
typedef wint_t (*wctrans_t)(wint_t);
|
|
|
|
#undef _BSD_WCTRANS_T_
|
2011-04-27 23:42:16 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifdef _BSD_WCTYPE_T_
|
2011-08-18 00:54:56 +02:00
|
|
|
/** A scalar type capable of holding values representing locale-specific
|
|
|
|
character classifications. */
|
|
|
|
typedef _BSD_WCTYPE_T_ wctype_t;
|
|
|
|
#undef _BSD_WCTYPE_T_
|
2011-04-27 23:42:16 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
#ifndef WEOF
|
2011-08-18 00:54:56 +02:00
|
|
|
/** WEOF expands to a constant expression of type wint_t whose value does not
|
|
|
|
correspond to any member of the extended character set. It is accepted
|
|
|
|
(and returned) by several functions, declared in this file, to indicate
|
|
|
|
end-of-file, that is, no more input from a stream. It is also used as a
|
|
|
|
wide character value that does not correspond to any member of the
|
|
|
|
extended character set.
|
|
|
|
*/
|
|
|
|
#define WEOF ((wint_t)-1)
|
2011-04-27 23:42:16 +02:00
|
|
|
#endif
|
|
|
|
|
|
|
|
__BEGIN_DECLS
|
2011-08-18 00:54:56 +02:00
|
|
|
/** Test for any wide character for which iswalpha or iswdigit is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswalnum (wint_t WC);
|
|
|
|
|
|
|
|
/** Test for any wide character for which iswupper or iswlower is TRUE,
|
|
|
|
OR, a locale-specific character where none of iswcntrl, iswdigit,
|
|
|
|
iswpunct, or iswspace is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswalpha (wint_t WC);
|
|
|
|
|
|
|
|
/** Test for any wide control character.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswcntrl (wint_t WC);
|
|
|
|
|
|
|
|
/** Test if the value of WC is a wide character that corresponds to a decimal digit.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswdigit (wint_t WC);
|
|
|
|
|
|
|
|
/** Test for wide characters for which iswprint is TRUE and iswspace is FALSE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswgraph (wint_t WC);
|
|
|
|
|
|
|
|
/** The iswlower function tests for any wide character that corresponds to a
|
|
|
|
lowercase letter or is one of a locale-specific set of wide characters
|
|
|
|
for which none of iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswlower (wint_t WC);
|
|
|
|
|
|
|
|
/** Test for any printing wide character.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswprint (wint_t WC);
|
|
|
|
|
|
|
|
/** The iswpunct function tests for any printing wide character that is one
|
|
|
|
of a locale-specific set of punctuation wide characters for which
|
|
|
|
neither iswspace nor iswalnum is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswpunct (wint_t WC);
|
|
|
|
|
|
|
|
/** Test for standard blank characters or locale-specific characters
|
|
|
|
for which iswspace is TRUE and are used to separate words within a line
|
|
|
|
of text. In the "C" locale, iswblank only returns TRUE for the standard
|
|
|
|
blank characters space (L' ') and horizontal tab (L'\t').
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswblank (wint_t WC);
|
|
|
|
|
|
|
|
/** The iswspace function tests for any wide character that corresponds to a
|
|
|
|
locale-specific set of white-space wide characters for which none of
|
|
|
|
iswalnum, iswgraph, or iswpunct is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswspace (wint_t WC);
|
|
|
|
|
|
|
|
/** Tests for any wide character that corresponds to an uppercase letter or
|
|
|
|
is one of a locale-specific set of wide characters for which none of
|
|
|
|
iswcntrl, iswdigit, iswpunct, or iswspace is TRUE.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswupper (wint_t WC);
|
|
|
|
|
|
|
|
/** The iswxdigit function tests for any wide character that corresponds to a
|
|
|
|
hexadecimal-digit character.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
|
|
|
|
@return Returns non-zero (TRUE) if and only if the value of WC conforms
|
|
|
|
to the classification described for this function.
|
|
|
|
*/
|
|
|
|
int iswxdigit (wint_t WC);
|
|
|
|
|
|
|
|
/** Construct a value that describes a class of wide characters, identified
|
|
|
|
by the string pointed to by Desc. The constructed value is suitable for
|
|
|
|
use as the second argument to the iswctype function.
|
|
|
|
|
|
|
|
The following strings name classes of wide characters that the iswctype
|
|
|
|
function is able to test against. These strings are valid in all locales
|
|
|
|
as Desc arguments to wctype().
|
|
|
|
- "alnum"
|
|
|
|
- "alpha"
|
|
|
|
- "blank"
|
|
|
|
- "cntrl"
|
|
|
|
- "digit"
|
|
|
|
- "graph"
|
|
|
|
- "lower"
|
|
|
|
- "print"
|
|
|
|
- "punct"
|
|
|
|
- "space"
|
|
|
|
- "upper"
|
|
|
|
- "xdigit
|
|
|
|
|
|
|
|
@param[in] Desc A pointer to a multibyte character string naming a
|
|
|
|
class of wide characters.
|
|
|
|
|
|
|
|
@return If Desc identifies a valid class of wide characters in the
|
|
|
|
current locale, the wctype function returns a nonzero value that
|
|
|
|
is valid as the second argument to the iswctype function;
|
|
|
|
otherwise, it returns zero.
|
|
|
|
*/
|
|
|
|
wctype_t wctype (const char *Desc);
|
|
|
|
|
|
|
|
/** Determine whether the wide character WC has the property described by Wct.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be classified.
|
|
|
|
@param[in] Wct A value describing a class of wide characters.
|
|
|
|
|
|
|
|
@return The iswctype function returns nonzero (TRUE) if and only if the
|
|
|
|
value of the wide character WC has the property described by Wct.
|
|
|
|
*/
|
|
|
|
int iswctype (wint_t WC, wctype_t Wct);
|
|
|
|
|
|
|
|
/** Convert an uppercase letter to a corresponding lowercase letter.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be converted.
|
|
|
|
|
|
|
|
@return If the argument is a wide character for which iswupper is TRUE
|
|
|
|
and there are one or more corresponding wide characters, as
|
|
|
|
specified by the current locale, for which iswlower is TRUE, the
|
|
|
|
towlower function returns one of the corresponding wide
|
|
|
|
characters (always the same one for any given locale); otherwise,
|
|
|
|
the argument is returned unchanged.
|
|
|
|
*/
|
|
|
|
wint_t towlower (wint_t WC);
|
|
|
|
|
|
|
|
/** Convert a lowercase letter to a corresponding uppercase letter.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be converted.
|
|
|
|
|
|
|
|
@return If the argument is a wide character for which iswlower is TRUE
|
|
|
|
and there are one or more corresponding wide characters, as
|
|
|
|
specified by the current locale, for which iswupper is TRUE, the
|
|
|
|
towupper function returns one of the corresponding wide
|
|
|
|
characters (always the same one for any given locale); otherwise,
|
|
|
|
the argument is returned unchanged.
|
|
|
|
*/
|
|
|
|
wint_t towupper (wint_t WC);
|
|
|
|
|
|
|
|
/** Construct a value that describes a mapping between wide characters
|
|
|
|
identified by the string argument, S.
|
|
|
|
|
|
|
|
The strings listed below are valid in all locales as the S argument to
|
|
|
|
the wctrans function.
|
|
|
|
- "tolower"
|
|
|
|
- "toupper"
|
|
|
|
|
|
|
|
@param[in] S A pointer to a multibyte character string naming a
|
|
|
|
mapping between wide characters.
|
|
|
|
|
|
|
|
@return If S identifies a valid mapping of wide characters in the current
|
|
|
|
locale, the wctrans function returns a nonzero value that is
|
|
|
|
valid as the second argument to the towctrans function;
|
|
|
|
otherwise, it returns zero.
|
|
|
|
*/
|
|
|
|
wctrans_t wctrans (const char *S);
|
|
|
|
|
|
|
|
/** Map the wide character WC using the mapping described by WTr. The current
|
|
|
|
locale will be the same as during the call to wctrans that returned
|
|
|
|
the value WTr.
|
|
|
|
|
|
|
|
@param[in] WC The wide character to be converted.
|
|
|
|
@param[in] WTr A value describing a mapping of wide characters in the
|
|
|
|
current locale.
|
|
|
|
|
|
|
|
@return Returns the mapped value of WC using the mapping selected by WTr.
|
|
|
|
*/
|
|
|
|
wint_t towctrans (wint_t WC, wctrans_t WTr);
|
2011-04-27 23:42:16 +02:00
|
|
|
__END_DECLS
|
|
|
|
|
|
|
|
#endif /* _WCTYPE_H_ */
|