xref: /illumos-gate/usr/src/head/wctype.h (revision 61a52ead)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License, Version 1.0 only
6  * (the "License").  You may not use this file except in compliance
7  * with the License.
8  *
9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10  * or http://www.opensolaris.org/os/licensing.
11  * See the License for the specific language governing permissions
12  * and limitations under the License.
13  *
14  * When distributing Covered Code, include this CDDL HEADER in each
15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16  * If applicable, add the following below this CDDL HEADER, with the
17  * fields enclosed by brackets "[]" replaced with your own identifying
18  * information: Portions Copyright [yyyy] [name of copyright owner]
19  *
20  * CDDL HEADER END
21  */
22 /*	wctype.h	1.13 89/11/02 SMI; JLE	*/
23 /*	from AT&T JAE 2.1			*/
24 /*	definitions for international functions	*/
25 
26 /*
27  * Copyright 2015 Garrett D'Amore <garrett@damore.org>
28  *
29  * Copyright 2003 Sun Microsystems, Inc.  All rights reserved.
30  * Use is subject to license terms.
31  */
32 
33 #ifndef	_WCTYPE_H
34 #define	_WCTYPE_H
35 
36 #include <sys/feature_tests.h>
37 #include <iso/wctype_iso.h>
38 #ifndef _STRICT_SYMBOLS
39 #include <ctype.h>
40 #include <wchar.h>
41 #endif
42 
43 /*
44  * Allow global visibility for symbols defined in
45  * C++ "std" namespace in <iso/wctype_iso.h>.
46  */
47 #if __cplusplus >= 199711L
48 using std::wint_t;
49 using std::wctrans_t;
50 using std::iswalnum;
51 using std::iswalpha;
52 using std::iswcntrl;
53 using std::iswdigit;
54 using std::iswgraph;
55 using std::iswlower;
56 using std::iswprint;
57 using std::iswpunct;
58 using std::iswspace;
59 using std::iswupper;
60 using std::iswxdigit;
61 using std::towlower;
62 using std::towupper;
63 using std::wctrans;
64 using std::towctrans;
65 using std::iswctype;
66 using std::wctype;
67 #if (__cplusplus >= 201103L) || defined(_STDC_C99) || defined(_XPG6) || \
68 	!defined(_STRICT_SYMBOLS)
69 using std::iswblank;
70 #endif
71 #endif
72 
73 #ifdef	__cplusplus
74 extern "C" {
75 #endif
76 
77 /* do not allow any of the following in a strictly conforming application */
78 #ifndef _STRICT_SYMBOLS
79 
80 /*
81  * data structure for supplementary code set
82  * for character class and conversion
83  */
84 struct	_wctype {
85 	wchar_t	tmin;		/* minimum code for wctype */
86 	wchar_t	tmax;		/* maximum code for wctype */
87 	unsigned char  *index;	/* class index */
88 	unsigned int   *type;	/* class type */
89 	wchar_t	cmin;		/* minimum code for conversion */
90 	wchar_t	cmax;		/* maximum code for conversion */
91 	wchar_t *code;		/* conversion code */
92 };
93 
94 
95 #ifdef	_ILLUMOS_PRIVATE
96 extern	int __iswrune(wint_t);
97 extern	wint_t __nextwctype(wint_t, wctype_t);
98 #define	iswrune(c)		__iswrune(c)
99 #define	nextwctype(c, t)	__nextwctype(c, t)
100 #endif
101 
102 /* character classification functions */
103 
104 /* iswascii is still a macro */
105 #define	iswascii(c)	isascii(c)
106 
107 /* isw*, except iswascii(), are not macros any more.  They become functions */
108 
109 /* is* also become functions */
110 extern	int isphonogram(wint_t);
111 extern	int isideogram(wint_t);
112 extern	int isenglish(wint_t);
113 extern	int isnumber(wint_t);
114 extern	int isspecial(wint_t);
115 /* From BSD/MacOS */
116 extern	int iswideogram(wint_t);
117 extern	int iswphonogram(wint_t);
118 extern	int iswnumber(wint_t);
119 extern	int iswhexnumber(wint_t);
120 extern	int iswspecial(wint_t);
121 
122 #define	iscodeset0(c)	isascii(c)
123 #define	iscodeset1(c)	(((c) & WCHAR_CSMASK) == WCHAR_CS1)
124 #define	iscodeset2(c)	(((c) & WCHAR_CSMASK) == WCHAR_CS2)
125 #define	iscodeset3(c)	(((c) & WCHAR_CSMASK) == WCHAR_CS3)
126 
127 #endif /* !defined(_STRICT_SYMBOLS)... */
128 
129 
130 /* XPG7 extended locale support */
131 #if defined(_XPG7) || !defined(_STRICT_SYMBOLS)
132 
133 #ifndef	_LOCALE_T
134 #define	_LOCALE_T
135 typedef struct _locale *locale_t;
136 #endif
137 
138 extern wint_t towlower_l(wint_t, locale_t);
139 extern wint_t towupper_l(wint_t, locale_t);
140 extern wint_t towctrans_l(wint_t, wctrans_t, locale_t);
141 extern int iswctype_l(wint_t, wctype_t, locale_t);
142 extern int iswalnum_l(wint_t, locale_t);
143 extern int iswalpha_l(wint_t, locale_t);
144 extern int iswblank_l(wint_t, locale_t);
145 extern int iswcntrl_l(wint_t, locale_t);
146 extern int iswdigit_l(wint_t, locale_t);
147 extern int iswgraph_l(wint_t, locale_t);
148 extern int iswlower_l(wint_t, locale_t);
149 extern int iswprint_l(wint_t, locale_t);
150 extern int iswpunct_l(wint_t, locale_t);
151 extern int iswspace_l(wint_t, locale_t);
152 extern int iswupper_l(wint_t, locale_t);
153 extern int iswxdigit_l(wint_t, locale_t);
154 extern wctrans_t wctrans_l(const char *, locale_t);
155 extern wctype_t wctype_l(const char *, locale_t);
156 #endif /* defined(_XPG7) || !defined(_STRICT_SYMBOLS) */
157 
158 #ifdef	__cplusplus
159 }
160 #endif
161 
162 #endif	/* _WCTYPE_H */
163