table.c revision 232498
1327Sjkh/*- 24996Sjkh * Copyright (c) 1993 3327Sjkh * The Regents of the University of California. All rights reserved. 4327Sjkh * 5327Sjkh * This code is derived from software contributed to Berkeley by 6327Sjkh * Paul Borman at Krystal Technologies. 7327Sjkh * 8327Sjkh * Copyright (c) 2011 The FreeBSD Foundation 9327Sjkh * All rights reserved. 10327Sjkh * Portions of this software were developed by David Chisnall 11327Sjkh * under sponsorship from the FreeBSD Foundation. 12327Sjkh * 13327Sjkh * Redistribution and use in source and binary forms, with or without 14327Sjkh * modification, are permitted provided that the following conditions 15327Sjkh * are met: 16327Sjkh * 1. Redistributions of source code must retain the above copyright 17327Sjkh * notice, this list of conditions and the following disclaimer. 18327Sjkh * 2. Redistributions in binary form must reproduce the above copyright 194996Sjkh * notice, this list of conditions and the following disclaimer in the 20327Sjkh * documentation and/or other materials provided with the distribution. 21327Sjkh * 4. Neither the name of the University nor the names of its contributors 22327Sjkh * may be used to endorse or promote products derived from this software 23327Sjkh * without specific prior written permission. 244996Sjkh * 25327Sjkh * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 26327Sjkh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 27327Sjkh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 28327Sjkh * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 29383Sjkh * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 30445Sjkh * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 314996Sjkh * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 321520Salm * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 33327Sjkh * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 34327Sjkh * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 35327Sjkh * SUCH DAMAGE. 36327Sjkh */ 37327Sjkh 38327Sjkh#if defined(LIBC_SCCS) && !defined(lint) 39327Sjkhstatic char sccsid[] = "@(#)table.c 8.1 (Berkeley) 6/27/93"; 40327Sjkh#endif /* LIBC_SCCS and not lint */ 41327Sjkh#include <sys/cdefs.h> 42327Sjkh__FBSDID("$FreeBSD: head/lib/libc/locale/table.c 232498 2012-03-04 15:31:13Z theraven $"); 43327Sjkh 44327Sjkh#include <ctype.h> 45327Sjkh#include <runetype.h> 46327Sjkh#include <wchar.h> 47327Sjkh#include "mblocal.h" 481337Sjkh 491337Sjkhconst _RuneLocale _DefaultRuneLocale = { 501337Sjkh _RUNE_MAGIC_1, 511337Sjkh "NONE", 521337Sjkh NULL, 531337Sjkh NULL, 541337Sjkh 0xFFFD, 551337Sjkh 56327Sjkh { /*00*/ _CTYPE_C, 57327Sjkh _CTYPE_C, 58327Sjkh _CTYPE_C, 59327Sjkh _CTYPE_C, 60327Sjkh _CTYPE_C, 61327Sjkh _CTYPE_C, 62327Sjkh _CTYPE_C, 63327Sjkh _CTYPE_C, 64327Sjkh /*08*/ _CTYPE_C, 65327Sjkh _CTYPE_C|_CTYPE_S|_CTYPE_B, 66327Sjkh _CTYPE_C|_CTYPE_S, 67327Sjkh _CTYPE_C|_CTYPE_S, 68327Sjkh _CTYPE_C|_CTYPE_S, 69327Sjkh _CTYPE_C|_CTYPE_S, 70327Sjkh _CTYPE_C, 71327Sjkh _CTYPE_C, 72327Sjkh /*10*/ _CTYPE_C, 73327Sjkh _CTYPE_C, 74327Sjkh _CTYPE_C, 75327Sjkh _CTYPE_C, 76327Sjkh _CTYPE_C, 77327Sjkh _CTYPE_C, 78327Sjkh _CTYPE_C, 79327Sjkh _CTYPE_C, 80327Sjkh /*18*/ _CTYPE_C, 81327Sjkh _CTYPE_C, 82327Sjkh _CTYPE_C, 83327Sjkh _CTYPE_C, 84383Sjkh _CTYPE_C, 85383Sjkh _CTYPE_C, 86383Sjkh _CTYPE_C, 87383Sjkh _CTYPE_C, 88445Sjkh /*20*/ _CTYPE_S|_CTYPE_B|_CTYPE_R, 89445Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 90445Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 91445Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 92327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 931520Salm _CTYPE_P|_CTYPE_R|_CTYPE_G, 941520Salm _CTYPE_P|_CTYPE_R|_CTYPE_G, 951520Salm _CTYPE_P|_CTYPE_R|_CTYPE_G, 964996Sjkh /*28*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 974996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 984996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 994996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 1004996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 1014996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 1024996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 1034996Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 104327Sjkh /*30*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0, 105327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1, 106327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2, 107327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3, 108327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4, 109327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5, 110327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6, 111327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7, 112327Sjkh /*38*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8, 113327Sjkh _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9, 114327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 115327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 116327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 117327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 118327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 119327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 120327Sjkh /*40*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 121327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 122327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 123327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 124327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 125327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 126327Sjkh _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 127327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 128327Sjkh /*48*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 129327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 130327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 131327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 132327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 133327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 134327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 135327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 136327Sjkh /*50*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 137327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 138327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 139327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 140327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 141327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 142327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 143327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 144327Sjkh /*58*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 145327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 146327Sjkh _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 147327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 148327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 149327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 150327Sjkh _CTYPE_P|_CTYPE_R|_CTYPE_G, 1511520Salm _CTYPE_P|_CTYPE_R|_CTYPE_G, 152327Sjkh /*60*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 153327Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 1544996Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 1554996Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 1564996Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 157327Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 158383Sjkh _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 159445Sjkh _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 160327Sjkh /*68*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 1614996Sjkh _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 1624996Sjkh _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 163327Sjkh _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 164327Sjkh _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 165 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 166 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 167 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 168 /*70*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 169 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 170 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 171 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 172 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 173 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 174 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 175 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 176 /*78*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 177 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 178 _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 179 _CTYPE_P|_CTYPE_R|_CTYPE_G, 180 _CTYPE_P|_CTYPE_R|_CTYPE_G, 181 _CTYPE_P|_CTYPE_R|_CTYPE_G, 182 _CTYPE_P|_CTYPE_R|_CTYPE_G, 183 _CTYPE_C, 184 }, 185 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 186 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 187 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 188 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 189 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 190 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 191 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 192 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 193 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 194 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 195 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 196 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 197 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 198 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 199 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 200 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 201 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 202 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 203 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 204 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 205 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 206 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 207 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 208 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 209 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 210 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 211 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 212 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 213 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 214 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 215 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 216 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 217 }, 218 { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 219 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 220 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 221 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 222 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 223 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 224 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 225 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 226 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 227 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 228 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 229 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 230 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 231 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 232 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 233 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 234 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 235 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 236 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 237 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 238 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 239 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 240 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 241 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 242 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 243 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 244 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 245 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 246 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 247 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 248 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 249 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 250 }, 251}; 252 253#undef _CurrentRuneLocale 254const _RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale; 255 256_RuneLocale * 257__runes_for_locale(locale_t locale, int *mb_sb_limit) 258{ 259 FIX_LOCALE(locale); 260 struct xlocale_ctype *c = XLOCALE_CTYPE(locale); 261 *mb_sb_limit = c->__mb_sb_limit; 262 return c->runes; 263} 264