42. Wide character classification and mapping utilities <wctype.h>
#
42.1. Introduction#
The header <wctype.h>
declares three data types, one macro, and many functions.
The types declared are
!
wint_t
described in Introduction;
wctrans_t
which is a scalar type that can hold values which represent locale-specific character mappings; and
wctype_t
which is a scalar type that can hold values which represent locale-specific character classifications.
The macro defined is WEOF
(described in Introduction).
The functions declared are grouped as follows:
Functions that provide wide character classification;
Extensible functions that provide wide character classification;
Functions that provide wide character case mapping;
Extensible functions that provide wide character mapping.
For all functions described in this subclause that accept an argument of type wint_t
, the
value shall be representable as a wchar_t
or shall equal the value of the macro WEOF
. If
this argument has any other value, the behavior is undefined.
The behavior of these functions is affected by the LC_CTYPE
category of the current
locale.
42.2. Wide character classification utilities#
The header <wctype.h>
declares several functions useful for classifying wide
characters.
The term printing wide character refers to a member of a locale-specific set of wide characters, each of which occupies at least one printing position on a display device. The term control wide character refers to a member of a locale-specific set of wide characters that are not printing wide characters.
42.2.1. Wide character classification functions#
The functions in this subclause return nonzero (true) if and only if the value of the argument wc conforms to that in the description of the function.
Each of the following functions returns true for each wide character that corresponds (as
if by a call to the wctob
function) to a single-byte character for which the corresponding
character classification function from Character classification functions returns true, except that the iswgraph
and
iswpunct
functions may differ with respect to wide characters other than L' '
that are
both printing and white-space wide characters. [1]
Forward references: the wctob
function (The wctob function).
42.2.1.1. The iswalnum
function#
Synopsis
#include <wctype.h>
int iswalnum(wint_t wc);
Description
The iswalnum
function tests for any wide character for which iswalpha
or
iswdigit
is true.
42.2.1.2. The iswalpha
function#
Synopsis
#include <wctype.h>
int iswalpha(wint_t wc);
Description
The iswalpha
function tests for any wide character for which iswupper
or
iswlower
is true, or any wide character that is one of a locale-specific set of alphabetic
wide characters for which none of iswcntrl, iswdigit, iswpunct
or iswspace
is true. [2]
The functions iswlower
and iswupper
test true or false separately for each of these additional
wide characters; all four combinations are possible.
42.2.1.3. The iswblank
function#
Synopsis
#include <wctype.h>
int iswblank(wint_t wc);
Description
The iswblank
function tests for any wide character that is a standard blank wide
character or is one of a locale-specific set of wide characters for which iswspace
is true
and that is used to separate words within a line of text. The standard blank wide
characters are the following: space (L' '
), and horizontal tab (L'\t'
). In the āCā
locale, iswblank
returns true only for the standard blank characters.
42.2.1.4. The iswcntrl
function#
Synopsis
#include <wctype.h>
int iswcntrl(wint_t wc);
Description
The iswcntrl
function tests for any control wide character.
42.2.1.5. The iswdigit
function#
Synopsis
#include <wctype.h>
int iswdigit(wint_t wc);
Description
The iswdigit
function tests for any wide character that corresponds to a decimal-digit
character (as defined in Character Sets).
42.2.1.6. The iswgraph
function#
Synopsis
#include <wctype.h>
int iswgraph(wint_t wc);
Description
The iswgraph
function tests for any wide character for which iswprint
is true and
iswspace
is false. [3]
42.2.1.7. The iswlower
function#
Synopsis
#include <wctype.h>
int iswlower(wint_t wc);
Description
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.
42.2.1.8. The iswprint
function#
Synopsis
#include <wctype.h>
int iswprint(wint_t wc);
Description
The iswprint
function tests for any printing wide character.
42.2.1.9. The iswpunct
function#
Synopsis
#include <wctype.h>
int iswpunct(wint_t wc);
Description
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. [3]
Note that the behavior of the iswgraph
and iswpunct
functions may differ from their
corresponding functions in Character classification functions with respect to printing, white-space, single-byte execution
characters other than ā ā.
42.2.1.10. The iswspace
function#
Synopsis
#include <wctype.h>
int iswspace(wint_t wc);
Description
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.
42.2.1.11. The iswupper
function#
Synopsis
#include <wctype.h>
int iswupper(wint_t wc);
Description
The iswupper
function 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.
42.2.1.12. The iswxdigit
function#
Synopsis
#include <wctype.h>
int iswxdigit(wint_t wc);
Description
The iswxdigit
function tests for any wide character that corresponds to a
hexadecimal-digit character (as defined in Integer Constants).
42.2.2. Extensible wide character classification functions#
The functions wctype
and iswctype
provide extensible wide character classification
as well as testing equivalent to that performed by the functions described in the previous
subclause (Wide character classification functions).
42.2.2.1. The iswctype
function#
Synopsis
#include <wctype.h>
int iswctype(wint_t wc, wctype_t desc);
Description
The iswctype
function determines whether the wide character wc
has the property
described by desc
. The current setting of the LC_CTYPE
category shall be the same as
during the call to wctype
that returned the value desc
.
Each of the following expressions has a truth-value equivalent to the call to the wide character classification function (Wide character classification functions) in the comment that follows the expression:
iswctype(wc, wctype("alnum")) // iswalnum(wc)
iswctype(wc, wctype("alpha")) // iswalpha(wc)
iswctype(wc, wctype("blank")) // iswblank(wc)
iswctype(wc, wctype("cntrl")) // iswcntrl(wc)
iswctype(wc, wctype("digit")) // iswdigit(wc)
iswctype(wc, wctype("graph")) // iswgraph(wc)
iswctype(wc, wctype("lower")) // iswlower(wc)
iswctype(wc, wctype("print")) // iswprint(wc)
iswctype(wc, wctype("punct")) // iswpunct(wc)
iswctype(wc, wctype("space")) // iswspace(wc)
iswctype(wc, wctype("upper")) // iswupper(wc)
iswctype(wc, wctype("xdigit")) // iswxdigit(wc)
Returns
The iswctype
function returns nonzero (true) if and only if the value of the wide
character wc
has the property described by desc
.
Forward references: the wctype
function (The wctype function).
42.2.2.2. The wctype
function#
Synopsis
#include <wctype.h>
wctype_t wctype(const char *property);
Description
The wctype
function constructs a value with type wctype_t
that describes a class of
wide characters identified by the string argument property.
The strings listed in the description of the iswctype
function shall be valid in all
locales as property arguments to the wctype
function.
Returns
If property identifies a valid class of wide characters according to the LC_CTYPE
category of 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.
42.3. Wide character case mapping utilities#
The header <wctype.h>
declares several functions useful for mapping wide characters.
42.3.1. Wide character case mapping functions#
42.3.1.1. The towlower
function#
Synopsis
#include <wctype.h>
wint_t towlower(wint_t wc);
Description
The towlower
function converts an uppercase letter to a corresponding lowercase letter.
Returns
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 giv en locale); otherwise, the argument is
returned unchanged.
42.3.1.2. The towupper
function#
Synopsis
#include <wctype.h>
wint_t towupper(wint_t wc);
Description
The towupper
function converts a lowercase letter to a corresponding uppercase letter.
Returns
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 giv en locale); otherwise, the argument is
returned unchanged.
42.3.2. Extensible wide character case mapping functions#
The functions wctrans
and towctrans
provide extensible wide character mapping as
well as case mapping equivalent to that performed by the functions described in the
previous subclause (Wide character case mapping functions).
42.3.2.1. The towctrans
function#
Synopsis
#include <wctype.h>
wint_t towctrans(wint_t wc, wctrans_t desc);
Description
The towctrans
function maps the wide character wc
using the mapping described by
desc
. The current setting of the LC_CTYPE
category shall be the same as during the call
to wctrans that returned the value desc
.
Each of the following expressions behaves the same as the call to the wide character case mapping function (Wide character case mapping functions) in the comment that follows the expression:
towctrans(wc, wctrans("tolower")) // towlower(wc)
towctrans(wc, wctrans("toupper")) // towupper(wc)
Returns
The towctrans
function returns the mapped value of wc
using the mapping described
by desc
.
42.3.2.2. The wctrans
function#
Synopsis
#include <wctype.h>
wctrans_t wctrans(const char *property);
Description
The wctrans
function constructs a value with type wctrans_t
that describes a
mapping between wide characters identified by the string argument property.
The strings listed in the description of the towctrans
function shall be valid in all
locales as property arguments to the wctrans
function.
Returns
If property identifies a valid mapping of wide characters according to the LC_CTYPE
category of 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.