1/* 2 * Copyright (c) 2005 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * This file contains Original Code and/or Modifications of Original Code 7 * as defined in and that are subject to the Apple Public Source License 8 * Version 2.0 (the 'License'). You may not use this file except in 9 * compliance with the License. Please obtain a copy of the License at 10 * http://www.opensource.apple.com/apsl/ and read it before using this 11 * file. 12 * 13 * The Original Code and all software distributed under the License are 14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 18 * Please see the License for the specific language governing rights and 19 * limitations under the License. 20 * 21 * @APPLE_LICENSE_HEADER_END@ 22 */ 23 24#ifndef _XLOCALE__CTYPE_H_ 25#define _XLOCALE__CTYPE_H_ 26 27/* 28 * Use inline functions if we are allowed to and the compiler supports them. 29 */ 30#if !defined(_DONT_USE_CTYPE_INLINE_) && \ 31 (defined(_USE_CTYPE_INLINE_) || defined(__GNUC__) || defined(__cplusplus)) 32 33/* See comments in <machine/_type.h> about __darwin_ct_rune_t. */ 34__BEGIN_DECLS 35unsigned long ___runetype_l(__darwin_ct_rune_t, locale_t); 36__darwin_ct_rune_t ___tolower_l(__darwin_ct_rune_t, locale_t); 37__darwin_ct_rune_t ___toupper_l(__darwin_ct_rune_t, locale_t); 38__END_DECLS 39 40//Begin-Libc 41#ifdef __LIBC__ 42__DARWIN_CTYPE_inline int 43__maskrune_l(__darwin_ct_rune_t _c, unsigned long _f, locale_t _l) 44{ 45 /* _CurrentRuneLocale.__runetype is __uint32_t 46 * _f is unsigned long 47 * ___runetype_l(_c, _l) is unsigned long 48 * retval is int 49 */ 50 return (int)((_c < 0 || _c >= _CACHED_RUNES) ? (__uint32_t)___runetype_l(_c, _l) : 51 __locale_ptr(_l)->__lc_ctype->_CurrentRuneLocale.__runetype[_c]) & (__uint32_t)_f; 52} 53#else /* !__LIBC__ */ 54//End-Libc 55__BEGIN_DECLS 56int __maskrune_l(__darwin_ct_rune_t, unsigned long, locale_t); 57__END_DECLS 58//Begin-Libc 59#endif /* __LIBC__ */ 60//End-Libc 61 62__DARWIN_CTYPE_inline int 63__istype_l(__darwin_ct_rune_t _c, unsigned long _f, locale_t _l) 64{ 65 return !!(isascii(_c) ? (_DefaultRuneLocale.__runetype[_c] & _f) 66 : __maskrune_l(_c, _f, _l)); 67} 68 69__DARWIN_CTYPE_inline __darwin_ct_rune_t 70__toupper_l(__darwin_ct_rune_t _c, locale_t _l) 71{ 72 return isascii(_c) ? _DefaultRuneLocale.__mapupper[_c] 73 : ___toupper_l(_c, _l); 74} 75 76__DARWIN_CTYPE_inline __darwin_ct_rune_t 77__tolower_l(__darwin_ct_rune_t _c, locale_t _l) 78{ 79 return isascii(_c) ? _DefaultRuneLocale.__maplower[_c] 80 : ___tolower_l(_c, _l); 81} 82 83__DARWIN_CTYPE_inline int 84__wcwidth_l(__darwin_ct_rune_t _c, locale_t _l) 85{ 86 unsigned int _x; 87 88 if (_c == 0) 89 return (0); 90 _x = (unsigned int)__maskrune_l(_c, _CTYPE_SWM|_CTYPE_R, _l); 91 if ((_x & _CTYPE_SWM) != 0) 92 return ((_x & _CTYPE_SWM) >> _CTYPE_SWS); 93 return ((_x & _CTYPE_R) != 0 ? 1 : -1); 94} 95 96#ifndef _EXTERNALIZE_CTYPE_INLINES_ 97 98__DARWIN_CTYPE_TOP_inline int 99digittoint_l(int c, locale_t l) 100{ 101 return (__maskrune_l(c, 0x0F, l)); 102} 103 104__DARWIN_CTYPE_TOP_inline int 105isalnum_l(int c, locale_t l) 106{ 107 return (__istype_l(c, _CTYPE_A|_CTYPE_D, l)); 108} 109 110__DARWIN_CTYPE_TOP_inline int 111isalpha_l(int c, locale_t l) 112{ 113 return (__istype_l(c, _CTYPE_A, l)); 114} 115 116__DARWIN_CTYPE_TOP_inline int 117isblank_l(int c, locale_t l) 118{ 119 return (__istype_l(c, _CTYPE_B, l)); 120} 121 122__DARWIN_CTYPE_TOP_inline int 123iscntrl_l(int c, locale_t l) 124{ 125 return (__istype_l(c, _CTYPE_C, l)); 126} 127 128__DARWIN_CTYPE_TOP_inline int 129isdigit_l(int c, locale_t l) 130{ 131 return (__istype_l(c, _CTYPE_D, l)); 132} 133 134__DARWIN_CTYPE_TOP_inline int 135isgraph_l(int c, locale_t l) 136{ 137 return (__istype_l(c, _CTYPE_G, l)); 138} 139 140__DARWIN_CTYPE_TOP_inline int 141ishexnumber_l(int c, locale_t l) 142{ 143 return (__istype_l(c, _CTYPE_X, l)); 144} 145 146__DARWIN_CTYPE_TOP_inline int 147isideogram_l(int c, locale_t l) 148{ 149 return (__istype_l(c, _CTYPE_I, l)); 150} 151 152__DARWIN_CTYPE_TOP_inline int 153islower_l(int c, locale_t l) 154{ 155 return (__istype_l(c, _CTYPE_L, l)); 156} 157 158__DARWIN_CTYPE_TOP_inline int 159isnumber_l(int c, locale_t l) 160{ 161 return (__istype_l(c, _CTYPE_D, l)); 162} 163 164__DARWIN_CTYPE_TOP_inline int 165isphonogram_l(int c, locale_t l) 166{ 167 return (__istype_l(c, _CTYPE_Q, l)); 168} 169 170__DARWIN_CTYPE_TOP_inline int 171isprint_l(int c, locale_t l) 172{ 173 return (__istype_l(c, _CTYPE_R, l)); 174} 175 176__DARWIN_CTYPE_TOP_inline int 177ispunct_l(int c, locale_t l) 178{ 179 return (__istype_l(c, _CTYPE_P, l)); 180} 181 182__DARWIN_CTYPE_TOP_inline int 183isrune_l(int c, locale_t l) 184{ 185 return (__istype_l(c, 0xFFFFFFF0L, l)); 186} 187 188__DARWIN_CTYPE_TOP_inline int 189isspace_l(int c, locale_t l) 190{ 191 return (__istype_l(c, _CTYPE_S, l)); 192} 193 194__DARWIN_CTYPE_TOP_inline int 195isspecial_l(int c, locale_t l) 196{ 197 return (__istype_l(c, _CTYPE_T, l)); 198} 199 200__DARWIN_CTYPE_TOP_inline int 201isupper_l(int c, locale_t l) 202{ 203 return (__istype_l(c, _CTYPE_U, l)); 204} 205 206__DARWIN_CTYPE_TOP_inline int 207isxdigit_l(int c, locale_t l) 208{ 209 return (__istype_l(c, _CTYPE_X, l)); 210} 211 212__DARWIN_CTYPE_TOP_inline int 213tolower_l(int c, locale_t l) 214{ 215 return (__tolower_l(c, l)); 216} 217 218__DARWIN_CTYPE_TOP_inline int 219toupper_l(int c, locale_t l) 220{ 221 return (__toupper_l(c, l)); 222} 223#endif /* _EXTERNALIZE_CTYPE_INLINES_ */ 224 225#else /* not using inlines */ 226 227__BEGIN_DECLS 228int digittoint_l(int, locale_t); 229int isalnum_l(int, locale_t); 230int isalpha_l(int, locale_t); 231int isblank_l(int, locale_t); 232int iscntrl_l(int, locale_t); 233int isdigit_l(int, locale_t); 234int isgraph_l(int, locale_t); 235int ishexnumber_l(int, locale_t); 236int isideogram_l(int, locale_t); 237int islower_l(int, locale_t); 238int isnumber_l(int, locale_t); 239int isphonogram_l(int, locale_t); 240int isprint_l(int, locale_t); 241int ispunct_l(int, locale_t); 242int isrune_l(int, locale_t); 243int isspace_l(int, locale_t); 244int isspecial_l(int, locale_t); 245int isupper_l(int, locale_t); 246int isxdigit_l(int, locale_t); 247int tolower_l(int, locale_t); 248int toupper_l(int, locale_t); 249__END_DECLS 250#endif /* using inlines */ 251 252#endif /* _XLOCALE__CTYPE_H_ */ 253