Created
August 26, 2014 23:45
-
-
Save jroelofs/cc05549e8028c82ec252 to your computer and use it in GitHub Desktop.
locale_android.cpp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// -*- C++ -*- | |
//===-------------------- support/win32/locale_win32.cpp ------------------===// | |
// | |
// The LLVM Compiler Infrastructure | |
// | |
// This file is dual licensed under the MIT and the University of Illinois Open | |
// Source Licenses. See LICENSE.TXT for details. | |
// | |
//===----------------------------------------------------------------------===// | |
#include <ctype.h> | |
// Bionic exports the non-standard _ctype_ array in <ctype.h>, | |
// unfortunately, cannot be used directly for libc++ because it doesn't | |
// have a proper bit-flag for blank characters. | |
// | |
// Note that the header does define a _B flag (as 0x80), but it | |
// is only set on the space (32) character, and used to implement | |
// isprint() properly. The implementation of isblank() relies on | |
// direct comparisons with 9 and 32 instead. | |
// | |
// The following is a local copy of the Bionic _ctype_ array that has | |
// been modified in the following way: | |
// | |
// - It stores 16-bit unsigned values, instead of 8-bit char ones. | |
// | |
// - Bit flag _BLANK (0x100) is used to indicate blank characters. | |
// It is only set for indices 9 (TAB) and 32 (SPACE). | |
// | |
// - Support signed char properly for indexing. | |
// Used to tag blank characters, this doesn't appear in <ctype.h> nor | |
// the original Bionic _ctype_ array. | |
#define _BLANK 0x100 | |
// NOTE: A standalone forward declaration is required to ensure that this | |
// variable is properly exported with a C name. In other words, this does | |
// _not_ work: | |
// | |
// extern "C" { | |
// const char* const _ctype_android = ...; | |
// } | |
// | |
extern "C" const unsigned short* const _ctype_android; | |
#if !defined(_U) | |
# if !defined(_CTYPE_U) | |
# error Bionic header ctype.h does not define either _U nor _CTYPE_U | |
# endif | |
# define _U _CTYPE_U | |
# define _L _CTYPE_L | |
# define _N _CTYPE_N | |
# define _S _CTYPE_S | |
# define _P _CTYPE_P | |
# define _C _CTYPE_C | |
# define _X _CTYPE_X | |
# define _B _CTYPE_B | |
#endif | |
static const unsigned short ctype_android_tab[256+128] = { | |
/* -128..-1 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 80 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 88 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 90 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 98 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* A0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* A8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* B0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* B8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* C0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* C8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* D0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* D8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* E0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* E8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* F0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* F8 */ | |
/* 0..127 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, | |
_C, _C|_S|_BLANK, _C|_S, _C|_S, _C|_S, _C|_S, _C, _C, | |
_C, _C, _C, _C, _C, _C, _C, _C, | |
_C, _C, _C, _C, _C, _C, _C, _C, | |
_S|_B|_BLANK, _P, _P, _P, _P, _P, _P, _P, | |
_P, _P, _P, _P, _P, _P, _P, _P, | |
_N, _N, _N, _N, _N, _N, _N, _N, | |
_N, _N, _P, _P, _P, _P, _P, _P, | |
_P, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U|_X, _U, | |
_U, _U, _U, _U, _U, _U, _U, _U, | |
_U, _U, _U, _U, _U, _U, _U, _U, | |
_U, _U, _U, _P, _P, _P, _P, _P, | |
_P, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L|_X, _L, | |
_L, _L, _L, _L, _L, _L, _L, _L, | |
_L, _L, _L, _L, _L, _L, _L, _L, | |
/* determine printability based on the IS0 8859 8-bit standard */ | |
_L, _L, _L, _P, _P, _P, _P, _C, | |
/* 128..255, same as -128..127 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 80 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 88 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 90 */ | |
_C, _C, _C, _C, _C, _C, _C, _C, /* 98 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* A0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* A8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* B0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* B8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* C0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* C8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* D0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* D8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* E0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* E8 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* F0 */ | |
_P, _P, _P, _P, _P, _P, _P, _P, /* F8 */ | |
}; | |
const unsigned short* const _ctype_android = ctype_android_tab + 128; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment