11573Srgrimes/*- 21573Srgrimes * Copyright (c) 1993 31573Srgrimes * The Regents of the University of California. All rights reserved. 41573Srgrimes * 51573Srgrimes * This code is derived from software contributed to Berkeley by 61573Srgrimes * Paul Borman at Krystal Technologies. 71573Srgrimes * 8227753Stheraven * Copyright (c) 2011 The FreeBSD Foundation 9227753Stheraven * All rights reserved. 10227753Stheraven * Portions of this software were developed by David Chisnall 11227753Stheraven * under sponsorship from the FreeBSD Foundation. 12227753Stheraven * 131573Srgrimes * Redistribution and use in source and binary forms, with or without 141573Srgrimes * modification, are permitted provided that the following conditions 151573Srgrimes * are met: 161573Srgrimes * 1. Redistributions of source code must retain the above copyright 171573Srgrimes * notice, this list of conditions and the following disclaimer. 181573Srgrimes * 2. Redistributions in binary form must reproduce the above copyright 191573Srgrimes * notice, this list of conditions and the following disclaimer in the 201573Srgrimes * documentation and/or other materials provided with the distribution. 211573Srgrimes * 4. Neither the name of the University nor the names of its contributors 221573Srgrimes * may be used to endorse or promote products derived from this software 231573Srgrimes * without specific prior written permission. 241573Srgrimes * 251573Srgrimes * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 261573Srgrimes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 271573Srgrimes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 281573Srgrimes * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 291573Srgrimes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 301573Srgrimes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 311573Srgrimes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 321573Srgrimes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 331573Srgrimes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 341573Srgrimes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 351573Srgrimes * SUCH DAMAGE. 361573Srgrimes */ 371573Srgrimes 381573Srgrimes#if defined(LIBC_SCCS) && !defined(lint) 391573Srgrimesstatic char sccsid[] = "@(#)table.c 8.1 (Berkeley) 6/27/93"; 401573Srgrimes#endif /* LIBC_SCCS and not lint */ 4192986Sobrien#include <sys/cdefs.h> 4292986Sobrien__FBSDID("$FreeBSD$"); 431573Srgrimes 441573Srgrimes#include <ctype.h> 45132820Stjr#include <runetype.h> 46121845Stjr#include <wchar.h> 47129153Stjr#include "mblocal.h" 481573Srgrimes 49227753Stheravenconst _RuneLocale _DefaultRuneLocale = { 501573Srgrimes _RUNE_MAGIC_1, 5161218Sache "NONE", 52136609Stjr NULL, 53136609Stjr NULL, 541573Srgrimes 0xFFFD, 551573Srgrimes 5657035Sobrien { /*00*/ _CTYPE_C, 5757035Sobrien _CTYPE_C, 5857035Sobrien _CTYPE_C, 5957035Sobrien _CTYPE_C, 6057035Sobrien _CTYPE_C, 6157035Sobrien _CTYPE_C, 6257035Sobrien _CTYPE_C, 6357035Sobrien _CTYPE_C, 6457035Sobrien /*08*/ _CTYPE_C, 6557035Sobrien _CTYPE_C|_CTYPE_S|_CTYPE_B, 6657035Sobrien _CTYPE_C|_CTYPE_S, 6757035Sobrien _CTYPE_C|_CTYPE_S, 6857035Sobrien _CTYPE_C|_CTYPE_S, 6957035Sobrien _CTYPE_C|_CTYPE_S, 7057035Sobrien _CTYPE_C, 7157035Sobrien _CTYPE_C, 7257035Sobrien /*10*/ _CTYPE_C, 7357035Sobrien _CTYPE_C, 7457035Sobrien _CTYPE_C, 7557035Sobrien _CTYPE_C, 7657035Sobrien _CTYPE_C, 7757035Sobrien _CTYPE_C, 7857035Sobrien _CTYPE_C, 7957035Sobrien _CTYPE_C, 8057035Sobrien /*18*/ _CTYPE_C, 8157035Sobrien _CTYPE_C, 8257035Sobrien _CTYPE_C, 8357035Sobrien _CTYPE_C, 8457035Sobrien _CTYPE_C, 8557035Sobrien _CTYPE_C, 8657035Sobrien _CTYPE_C, 8757035Sobrien _CTYPE_C, 8857035Sobrien /*20*/ _CTYPE_S|_CTYPE_B|_CTYPE_R, 8957035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9057035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9157035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9257035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9357035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9457035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9557035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9657035Sobrien /*28*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 9757035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9857035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 9957035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 10057035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 10157035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 10257035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 10357035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 10457035Sobrien /*30*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|0, 10557035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|1, 10657035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|2, 10757035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|3, 10857035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|4, 10957035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|5, 11057035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|6, 11157035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|7, 11257035Sobrien /*38*/ _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|8, 11357035Sobrien _CTYPE_D|_CTYPE_R|_CTYPE_G|_CTYPE_X|9, 11457035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 11557035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 11657035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 11757035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 11857035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 11957035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 12057035Sobrien /*40*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 12157035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 12257035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 12357035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 12457035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 12557035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 12657035Sobrien _CTYPE_U|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 12757035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 12857035Sobrien /*48*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 12957035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13057035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13157035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13257035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13357035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13457035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13557035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13657035Sobrien /*50*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13757035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13857035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 13957035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14057035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14157035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14257035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14357035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14457035Sobrien /*58*/ _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14557035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14657035Sobrien _CTYPE_U|_CTYPE_R|_CTYPE_G|_CTYPE_A, 14757035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 14857035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 14957035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 15057035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 15157035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 15257035Sobrien /*60*/ _CTYPE_P|_CTYPE_R|_CTYPE_G, 15357035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|10, 15457035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|11, 15557035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|12, 15657035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|13, 15757035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|14, 15857035Sobrien _CTYPE_L|_CTYPE_X|_CTYPE_R|_CTYPE_G|_CTYPE_A|15, 15957035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16057035Sobrien /*68*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16157035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16257035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16357035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16457035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16557035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16657035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16757035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16857035Sobrien /*70*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 16957035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17057035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17157035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17257035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17357035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17457035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17557035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17657035Sobrien /*78*/ _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17757035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17857035Sobrien _CTYPE_L|_CTYPE_R|_CTYPE_G|_CTYPE_A, 17957035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 18057035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 18157035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 18257035Sobrien _CTYPE_P|_CTYPE_R|_CTYPE_G, 18357035Sobrien _CTYPE_C, 1841573Srgrimes }, 1851573Srgrimes { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 1861573Srgrimes 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 1871573Srgrimes 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 1881573Srgrimes 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 1891573Srgrimes 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 1901573Srgrimes 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 1911573Srgrimes 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 1921573Srgrimes 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 1931573Srgrimes 0x40, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 1941573Srgrimes 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 1951573Srgrimes 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 1961573Srgrimes 'x', 'y', 'z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 1971573Srgrimes 0x60, 'a', 'b', 'c', 'd', 'e', 'f', 'g', 1981573Srgrimes 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 1991573Srgrimes 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 2001573Srgrimes 'x', 'y', 'z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 2011573Srgrimes 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 2021573Srgrimes 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 2031573Srgrimes 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 2041573Srgrimes 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 2051573Srgrimes 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 2061573Srgrimes 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 2071573Srgrimes 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 2081573Srgrimes 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 2091573Srgrimes 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 2101573Srgrimes 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 2111573Srgrimes 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 2121573Srgrimes 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 2131573Srgrimes 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 2141573Srgrimes 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 2151573Srgrimes 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 2161573Srgrimes 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 2171573Srgrimes }, 2181573Srgrimes { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 2191573Srgrimes 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 2201573Srgrimes 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 2211573Srgrimes 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 2221573Srgrimes 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 2231573Srgrimes 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 2241573Srgrimes 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 2251573Srgrimes 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 2261573Srgrimes 0x40, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 2271573Srgrimes 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 2281573Srgrimes 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 2291573Srgrimes 'X', 'Y', 'Z', 0x5b, 0x5c, 0x5d, 0x5e, 0x5f, 2301573Srgrimes 0x60, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 2311573Srgrimes 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 2321573Srgrimes 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 2331573Srgrimes 'X', 'Y', 'Z', 0x7b, 0x7c, 0x7d, 0x7e, 0x7f, 2341573Srgrimes 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 2351573Srgrimes 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 2361573Srgrimes 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 2371573Srgrimes 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, 2381573Srgrimes 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 2391573Srgrimes 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, 2401573Srgrimes 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 2411573Srgrimes 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 2421573Srgrimes 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 2431573Srgrimes 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf, 2441573Srgrimes 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 2451573Srgrimes 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf, 2461573Srgrimes 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 2471573Srgrimes 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, 2481573Srgrimes 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 2491573Srgrimes 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff, 2501573Srgrimes }, 2511573Srgrimes}; 2521573Srgrimes 253227753Stheraven#undef _CurrentRuneLocale 254232498Stheravenconst _RuneLocale *_CurrentRuneLocale = &_DefaultRuneLocale; 2551573Srgrimes 256227753Stheraven_RuneLocale * 257227753Stheraven__runes_for_locale(locale_t locale, int *mb_sb_limit) 258227753Stheraven{ 259227753Stheraven FIX_LOCALE(locale); 260227753Stheraven struct xlocale_ctype *c = XLOCALE_CTYPE(locale); 261227753Stheraven *mb_sb_limit = c->__mb_sb_limit; 262227753Stheraven return c->runes; 263227753Stheraven} 264