### 4.5 Mapping of wide characters.

The classification functions are also generalized by the ISO C standard. Instead of just allowing the two standard mappings, a locale can contain others. Again, the `localedef` program already supports generating such locale data files.

— Data Type: wctrans_t

> This data type is defined as a scalar type which can hold a value representing the locale-dependent character mapping. There is no way to construct such a value apart from using the return value of the `wctrans` function.

> This type is defined in `wctype.h`.

— Function: wctrans_t wctrans (const char *property)

> Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> The `wctrans` function has to be used to find out whether a named mapping is defined in the current locale selected for the `LC_CTYPE` category. If the returned value is non-zero, you can use it afterwards in calls to `towctrans`. If the return value is zero no such mapping is known in the current locale.

> Beside locale-specific mappings there are two mappings which are guaranteed to be available in every locale:

> `"tolower"` | `"toupper"`

> These functions are declared in `wctype.h`.

— Function: wint_t towctrans (wint_t wc, wctrans_t desc)

> Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> `towctrans` maps the input character wc according to the rules of the mapping for which desc is a descriptor, and returns the value it finds. desc must be obtained by a successful call to `wctrans`.

> This function is declared in `wctype.h`.

For the generally available mappings, the ISO C standard defines convenient shortcuts so that it is not necessary to call `wctrans` for them.

— Function: wint_t towlower (wint_t wc)

> Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> If wc is an upper-case letter, `towlower` returns the corresponding lower-case letter. If wc is not an upper-case letter, wc is returned unchanged.

> `towlower` can be implemented using

>               towctrans (wc, wctrans ("tolower"))

> This function is declared in `wctype.h`.

— Function: wint_t towupper (wint_t wc)

> Preliminary: | MT-Safe locale | AS-Safe | AC-Safe | See POSIX Safety Concepts.

> If wc is a lower-case letter, `towupper` returns the corresponding upper-case letter. Otherwise wc is returned unchanged.

> `towupper` can be implemented using

>               towctrans (wc, wctrans ("toupper"))

> This function is declared in `wctype.h`.

The same warnings given in the last section for the use of the wide character classification functions apply here. It is not possible to simply cast a `char` type value to a `wint_t` and use it as an argument to `towctrans` calls.