.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"   GNU glibc-2 source code and manual
.\"   Dinkumware C library reference http://www.dinkumware.com/
.\"   OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
.\"   ISO/IEC 9899:1999
.\"
.TH TOWCTRANS 3  2015-08-08 "GNU" "Linux Programmer's Manual"
.SH NAME
towctrans \- wide-character transliteration
.SH SYNOPSIS
.nf
.B #include <wctype.h>
.PP
.BI "wint_t towctrans(wint_t " wc ", wctrans_t " desc );
.fi
.SH DESCRIPTION
If
.I wc
is a wide character, the
.BR towctrans ()
function
translates it according to the transliteration descriptor
.IR desc .
If
.I wc
is
.BR WEOF ,
.B WEOF
is returned.
.PP
.I desc
must be a transliteration descriptor returned by
the
.BR wctrans (3)
function.
.SH RETURN VALUE
The
.BR towctrans ()
function returns the translated wide character,
or
.B WEOF
if
.I wc
is
.BR WEOF .
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lb lb lb
l l l.
Interface	Attribute	Value
T{
.BR towctrans ()
T}	Thread safety	MT-Safe
.TE
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008, C99.
.SH NOTES
The behavior of
.BR towctrans ()
depends on the
.B LC_CTYPE
category of the
current locale.
.SH SEE ALSO
.BR towlower (3),
.BR towupper (3),
.BR wctrans (3)
