/* | |
wctype.c | |
7.25.2.2.2 The wctype function | |
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> | |
The wctype function constructs a value with type wctype_t that | |
describes a class of wide characters identified by the string | |
argument property. | |
In particular, we map the property strings so that: | |
iswctype(wc, wctype("alnum")) == iswalnum(wc) | |
iswctype(wc, wctype("alpha")) == iswalpha(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) | |
*/ | |
#include <string.h> | |
#include <wctype.h> | |
/* Using the bit-OR'd ctype character classification flags as return | |
values achieves compatibility with MS iswctype(). */ | |
static const struct { | |
const char *name; | |
wctype_t flags;} cmap[] = { | |
{"alnum", _ALPHA|_DIGIT}, | |
{"alpha", _ALPHA}, | |
{"cntrl", _CONTROL}, | |
{"digit", _DIGIT}, | |
{"graph", _PUNCT|_ALPHA|_DIGIT}, | |
{"lower", _LOWER}, | |
{"print", _BLANK|_PUNCT|_ALPHA|_DIGIT}, | |
{"punct", _PUNCT}, | |
{"space", _SPACE}, | |
{"upper", _UPPER}, | |
{"xdigit", _HEX} | |
}; | |
#define NCMAP (sizeof cmap / sizeof cmap[0]) | |
wctype_t wctype (const char *property) | |
{ | |
int i; | |
for (i = 0; i < NCMAP; ++i) | |
if (strcmp (property, cmap[i].name) == 0) | |
return cmap[i].flags; | |
return 0; | |
} |