/** | |
* This file has no copyright assigned and is placed in the Public Domain. | |
* This file is part of the w64 mingw-runtime package. | |
* No warranty is given; refer to the file DISCLAIMER within this package. | |
*/ | |
/* | |
wctrans.c | |
7.25.3.2 Extensible wide-character case mapping functions | |
Contributed by: Danny Smith <dannysmith@usesr.sourcefoge.net> | |
2005-02-24 | |
This source code is placed in the PUBLIC DOMAIN. It is modified | |
from the Q8 package created by Doug Gwyn <gwyn@arl.mil> | |
*/ | |
#include <string.h> | |
#include <wctype.h> | |
/* | |
This differs from the MS implementation of wctrans which | |
returns 0 for tolower and 1 for toupper. According to | |
C99, a 0 return value indicates invalid input. | |
These two function go in the same translation unit so that we | |
can ensure that | |
towctrans(wc, wctrans("tolower")) == towlower(wc) | |
towctrans(wc, wctrans("toupper")) == towupper(wc) | |
It also ensures that | |
towctrans(wc, wctrans("")) == wc | |
which is not required by standard. | |
*/ | |
static const struct { | |
const char *name; | |
wctrans_t val; } tmap[] = { | |
{"tolower", _LOWER}, | |
{"toupper", _UPPER} | |
}; | |
#define NTMAP (sizeof tmap / sizeof tmap[0]) | |
wctrans_t | |
wctrans (const char* property) | |
{ | |
int i; | |
for ( i = 0; i < NTMAP; ++i ) | |
if (strcmp (property, tmap[i].name) == 0) | |
return tmap[i].val; | |
return 0; | |
} | |
wint_t towctrans (wint_t wc, wctrans_t desc) | |
{ | |
switch (desc) | |
{ | |
case _LOWER: | |
return towlower (wc); | |
case _UPPER: | |
return towupper (wc); | |
default: | |
return wc; | |
} | |
} |