1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-02 08:42:48 +00:00

Add the ISO C90 Amd. 1 wctrans(3) and towctrans(3) functions.

This commit is contained in:
Tim J. Robbins 2002-08-04 12:09:08 +00:00
parent 92ece88d16
commit 4645079944
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=101313
4 changed files with 203 additions and 2 deletions

View File

@ -41,6 +41,11 @@ typedef _BSD_WINT_T_ wint_t;
#undef _BSD_WINT_T_
#endif
#ifndef _WCTRANS_T
typedef int wctrans_t;
#define _WCTRANS_T
#endif
#ifndef _WCTYPE_T
typedef long wctype_t;
#define _WCTYPE_T
@ -52,6 +57,8 @@ typedef long wctype_t;
__BEGIN_DECLS
int iswctype(wint_t, wctype_t);
wint_t towctrans(wint_t, wctrans_t);
wctrans_t wctrans(const char *);
wctype_t wctype(const char *);
#if 0
/* XXX: not implemented */

View File

@ -9,14 +9,14 @@ SRCS+= ansi.c big5.c btowc.c collate.c collcmp.c euc.c fix_grouping.c frune.c \
ldpart.c lmessages.c lmonetary.c lnumeric.c localeconv.c mbrune.c \
mskanji.c nl_langinfo.c nomacros.c none.c rune.c \
runetype.c setinvalidrune.c setlocale.c setrunelocale.c table.c \
tolower.c toupper.c utf2.c wctob.c wctype.c
tolower.c toupper.c utf2.c wctob.c wctrans.c wctype.c
.if ${LIB} == "c"
MAN+= btowc.3 \
ctype.3 digittoint.3 isalnum.3 isalpha.3 isascii.3 isblank.3 iscntrl.3 \
isdigit.3 isgraph.3 islower.3 isprint.3 ispunct.3 isspace.3 \
isupper.3 isxdigit.3 mbrune.3 multibyte.3 nl_langinfo.3 rune.3 \
setlocale.3 toascii.3 tolower.3 toupper.3 wctype.3
setlocale.3 toascii.3 tolower.3 toupper.3 wctrans.3 wctype.3
MAN+= euc.4 utf2.4
MLINKS+=btowc.3 wctob.3
@ -29,5 +29,6 @@ MLINKS+=rune.3 fgetrune.3 rune.3 fputrune.3 rune.3 fungetrune.3 \
rune.3 setinvalidrune.3 rune.3 setrunelocale.3 rune.3 sgetrune.3 \
rune.3 sputrune.3
MLINKS+=setlocale.3 localeconv.3
MLINKS+=wctrans.3 towctrans.3
MLINKS+=wctype.3 iswctype.3
.endif

109
lib/libc/locale/wctrans.3 Normal file
View File

@ -0,0 +1,109 @@
.\" Copyright (c) 2002 Tim J. Robbins
.\" 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.
.\"
.\" $FreeBSD$
.\"
.Dd August 4, 2002
.Dt WCTRANS 3
.Os
.Sh NAME
.Nm towctrans ,
.Nm wctrans
.Nd "wide character mapping functions"
.Sh LIBRARY
.Lb libc
.Sh SYNOPSIS
.In wctype.h
.Ft wint_t
.Fn towctrans "wint_t wc" "wctrans_t desc"
.Ft wctrans_t
.Fn wctrans "const char *charclass"
.Sh DESCRIPTION
The
.Fn wctrans
function returns a value of type
.Vt wctrans_t
which represents the requested wide character mapping operation and
may be used as the second argument for calls to
.Fn towctrans .
.Pp
The following character mapping names are recognised:
.Bl -column -offset indent ".Li tolower" ".Li toupper"
.It Li tolower Ta Li toupper
.El
.Pp
The
.Fn towctrans
function transliterates the wide character
.Fa wc
according to the mapping described by
.Fa desc .
.Sh RETURN VALUES
The
.Fn towctrans
function returns the transliterated character if successful, otherwise
it returns the character unchanged and sets
.Va errno .
.Pp
The
.Fn wctrans
function returns non-zero if successful, otherwise it returns zero
and sets
.Va errno .
.Sh ERRORS
The
.Fn towctrans
function will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
The supplied
.Fa desc
argument is invalid.
.El
.Pp
The
.Fn wctrans
function will fail if:
.Bl -tag -width Er
.It Bq Er EINVAL
The requested mapping name is invalid.
.El
.Sh SEE ALSO
.Xr tolower 3 ,
.Xr toupper 3 ,
.Xr wctype 3
.Sh STANDARDS
The
.Fn towctrans
and
.Fn wctrans
functions conform to
.St -p1003.1-2001 .
.Sh HISTORY
The
.Fn towctrans
and
.Fn wctrans
functions first appeared in
.Fx 5.0 .

84
lib/libc/locale/wctrans.c Normal file
View File

@ -0,0 +1,84 @@
/*-
* Copyright (c) 2002 Tim J. Robbins.
* 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.
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
#include <ctype.h>
#include <errno.h>
#include <string.h>
#include <wctype.h>
enum {
_WCT_ERROR = 0,
_WCT_TOLOWER = 1,
_WCT_TOUPPER = 2
};
/*
* TODO: Supply a macro version of this.
*/
wint_t
towctrans(wint_t wc, wctrans_t desc)
{
switch (desc) {
case _WCT_TOLOWER:
wc = tolower(wc);
break;
case _WCT_TOUPPER:
wc = toupper(wc);
break;
case _WCT_ERROR:
default:
errno = EINVAL;
break;
}
return (wc);
}
wctrans_t
wctrans(const char *charclass)
{
struct {
const char *name;
wctrans_t trans;
} ccls[] = {
{ "tolower", _WCT_TOLOWER },
{ "toupper", _WCT_TOUPPER },
{ NULL, _WCT_ERROR }, /* Default */
};
int i;
i = 0;
while (ccls[i].name != NULL && strcmp(ccls[i].name, charclass) != 0)
i++;
if (ccls[i].trans == _WCT_ERROR)
errno = EINVAL;
return (ccls[i].trans);
}