📄 c_locale.h
字号:
/* * Copyright (c) 1999 * Silicon Graphics Computer Systems, Inc. * * Copyright (c) 1999 * Boris Fomitchev * * This material is provided "as is", with absolutely no warranty expressed * or implied. Any use is at your own risk. * * Permission to use or copy this software for any purpose is hereby granted * without fee, provided the above notices are retained on all copies. * Permission to modify the code and to distribute modified code is granted, * provided the above notices are retained, and a notice that the code was * modified is included with the above copyright notice. * */#ifndef _STLP_C_LOCALE_H#define _STLP_C_LOCALE_H/* * Implementation dependent definitions. * Beware: This header is not a purely internal header, it is also included * from the outside world when building the STLport library. So this header * should not reference internal headers (stlport/stl/_*.h) directly. */#if defined (__sgi)# if defined (ROOT_65) /* IRIX 6.5.x */# include <sgidefs.h># include <standards.h># include <wchar.h># include <ctype.h># else /* IRIX pre-6.5 */# include <sgidefs.h># include <standards.h># if !defined(_SIZE_T) && !defined(_SIZE_T_)# define _SIZE_T# if (_MIPS_SZLONG == 32)typedef unsigned int size_t;# endif# if (_MIPS_SZLONG == 64)typedef unsigned long size_t;# endif# endif# if !defined (_WCHAR_T)# define _WCHAR_T# if (_MIPS_SZLONG == 32)typedef long wchar_t;# endif# if (_MIPS_SZLONG == 64)typedef __int32_t wchar_t;# endif# endif /* _WCHAR_T */# if !defined (_WINT_T)# define _WINT_T# if (_MIPS_SZLONG == 32)typedef long wint_t;# endif# if (_MIPS_SZLONG == 64)typedef __int32_t wint_t;# endif# endif /* _WINT_T */# if !defined (_MBSTATE_T)# define _MBSTATE_T/* _MSC_VER check is here for historical reason and seems wrong as it is the macro defined * by Microsoft compilers to give their version and we are currently in a SGI platform scope. * However _MSC_VER might also be a SGI compiler macro so we keep it this way.*/# if defined (_MSC_VER)typedef int mbstate_t;# elsetypedef char mbstate_t;# endif# endif /* _MBSTATE_T */# endif /* ROOT65 */#else /* __sgi */# include <stddef.h># include <wchar.h># include <ctype.h>#endif /* __sgi *//* * GENERAL FRAMEWORK *//* * Opaque types, implementation (if there is one) depends * on platform locale API. */struct _Locale_ctype;struct _Locale_numeric;struct _Locale_time;struct _Locale_collate;struct _Locale_monetary;struct _Locale_messages;struct _Locale_name_hint;/* Bitmask macros.*//* * For narrow characters, we expose the lookup table interface. *//* Internal bitmask macros, os-specific. */#if defined (__sgi) /* IRIX */# define _Locale_S 0x00000008 /* Spacing character */# define _Locale_A 0x00004000 /* Alphabetical characters only */# define _Locale_B 0x00000040 /* Obsolete: was space char only */# define _Locale_PR 0x00008000 /* Printable characters only */# define _Locale_G 0x40000000 /* Graphic characters only */# define _Locale_BL 0x80000000 /* The blank character class *//* Public bitmask macros, must be defined for every OS. These values, of * course, are specific to IRIX. */# define _Locale_CNTRL 0x00000020 /* Control character */# define _Locale_UPPER 0x00000001 /* Upper case */# define _Locale_LOWER 0x00000002 /* Lower case */# define _Locale_DIGIT 0x00000004 /* Numeral (digit) */# define _Locale_XDIGIT 0x00000080 /* heXadecimal digit */# define _Locale_PUNCT 0x00000010 /* Punctuation */# define _Locale_SPACE (_Locale_S | _Locale_BL)# define _Locale_PRINT (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \ _Locale_DIGIT | _Locale_A | _Locale_XDIGIT | \ _Locale_PR)# define _Locale_ALPHA _Locale_A/** All of these except for graph and blank are from the C standard;* graph and blank are XPG4. (graph in XPG4 doesn't mean quite the* same thing as graph in the C++ library)*/#endif /* IRIX */#if defined (__Lynx__) /* azov: On Lynx isalpha defined as (_U | _L), which gives us a mask * unusable in ctype_table. So we have to redefine it and use hard-coded * numbers (to avoid potential clashes if system headers change). * * P.S. Actually, I see no reason in using platform-specific masks - * having just one set of masks for all platforms should work just as * well - we only use them internally and they don't have to be equal * to whatever defined in local ctype.h * */# define _Locale_CNTRL 040 /* _C, Control character */# define _Locale_UPPER 01 /* _U, Upper case */# define _Locale_LOWER 02 /* _L, Lower case */# define _Locale_DIGIT 04 /* _N, Numeral (digit) */# define _Locale_XDIGIT 0200 /* _X, heXadecimal digit */# define _Locale_PUNCT 020 /* _P, Punctuation */# define _Locale_SPACE 010 /* _S, Spacing */# define _Locale_ALPHA 040000 /* none, Alphanumerical */# define _Locale_PRINT (_Locale_PUNCT | _Locale_UPPER | _Locale_LOWER | \ _Locale_DIGIT | _Locale_ALPHA | _Locale_XDIGIT |\ _Locale_SPACE ) /* Printable */#endif /* __Lynx__ */#if defined (__GNUC__) || defined (__BORLANDC__) || defined (__COMO__)# if defined (__CYGWIN__)# define _Locale_CNTRL 040# define _Locale_UPPER 02# define _Locale_LOWER 01# define _Locale_DIGIT 04# define _Locale_XDIGIT ( 0100 | _Locale_DIGIT )# define _Locale_PUNCT 020# define _Locale_SPACE 010# define _Locale_ALPHA 0200# define _Locale_PRINT (_Locale_ALPHA | _Locale_DIGIT | _Locale_PUNCT | 0400 )# elif defined (__FreeBSD__) || ( defined (__APPLE__) && defined (__GNUC__) && (__GNUC__ > 3) )# define _Locale_CNTRL _CTYPE_C# define _Locale_UPPER _CTYPE_U# define _Locale_LOWER _CTYPE_L# define _Locale_DIGIT _CTYPE_D# define _Locale_XDIGIT _CTYPE_X# define _Locale_PUNCT _CTYPE_P# define _Locale_SPACE _CTYPE_S# define _Locale_PRINT _CTYPE_R# define _Locale_ALPHA _CTYPE_A# elif defined (__NetBSD__) || defined (__OpenBSD__) || defined (__amigaos__)# define _Locale_CNTRL _C# define _Locale_UPPER _U# define _Locale_LOWER _L# define _Locale_DIGIT _N# define _Locale_XDIGIT (_N|_X)# define _Locale_PUNCT _P# define _Locale_SPACE _S# define _Locale_PRINT (_P|_U|_L|_N|_B)# define _Locale_ALPHA (_U|_L)# elif defined (__EMX__) /* OS/2 with emx runtime */# define _Locale_CNTRL _CNTRL# define _Locale_UPPER _UPPER# define _Locale_LOWER _LOWER# define _Locale_DIGIT _DIGIT# define _Locale_XDIGIT _XDIGIT# define _Locale_PUNCT _PUNCT# define _Locale_SPACE _SPACE# define _Locale_PRINT _PRINT# define _Locale_ALPHA (_UPPER|_LOWER)# elif defined (_STLP_USE_GLIBC) /* linux, using the gnu compiler *//* This section uses macros defined in the gnu libc ctype.h header */# define _Locale_CNTRL _IScntrl# define _Locale_UPPER _ISupper# define _Locale_LOWER _ISlower# define _Locale_DIGIT _ISdigit# define _Locale_XDIGIT _ISxdigit# define _Locale_PUNCT _ISpunct# define _Locale_SPACE _ISspace# define _Locale_PRINT _ISprint# define _Locale_ALPHA _ISalpha# endif /* GLIBC */#endif /* gnu */#if (defined (__sun) && defined (__SVR4)) || \ (defined (__digital__) && defined (__unix__)) || \ defined (_AIX)/* fbp : condition from AT&T code*/# if !(defined (__XPG4_CHAR_CLASS__) || defined (_XPG4_2) || \ (defined (_XOPEN_SOURCE) && (_XOPEN_VERSION - 0 == 4))) && ! defined (_ISCNTRL) /* fbp : on 2.5.1, the defines are different ;( */ /* # if ( defined (__sun) && defined (__SVR4) && ! defined (_ISCNTRL) ) */# define _ISCNTRL _C# define _ISUPPER _U# define _ISLOWER _L# define _ISDIGIT _N# define _ISXDIGIT _X# define _ISPUNCT _P# define _ISSPACE _S# define _ISPRINT (_P | _U | _L | _N | _B)# define _ISALPHA (_U | _L)# endif# define _Locale_CNTRL _ISCNTRL# define _Locale_UPPER _ISUPPER# define _Locale_LOWER _ISLOWER# define _Locale_DIGIT _ISDIGIT# define _Locale_XDIGIT _ISXDIGIT# define _Locale_PUNCT _ISPUNCT# define _Locale_SPACE _ISSPACE# define _Locale_PRINT _ISPRINT# define _Locale_ALPHA _ISALPHA#elif defined (__MWERKS__) && defined (N_PLAT_NLM)# define _Locale_CNTRL _CNTRL_# define _Locale_UPPER _UPPER_# define _Locale_LOWER _LOWER_# define _Locale_DIGIT _DIGIT_# define _Locale_XDIGIT _XDIGIT_# define _Locale_PUNCT _PUNCT_# define _Locale_SPACE _SPACE_# define _Locale_PRINT (_PUNCT_|_UPPER_|_LOWER_|_DIGIT_|_BLANK_)# define _Locale_ALPHA (_UPPER_|_LOWER_)#elif defined (__MWERKS__)# define _Locale_CNTRL __control_char# define _Locale_UPPER __upper_case# define _Locale_LOWER __lower_case# define _Locale_DIGIT __digit# define _Locale_XDIGIT __hex_digit# define _Locale_PUNCT __punctuation# define _Locale_SPACE __space_char# define _Locale_PRINT __printable# define _Locale_ALPHA __alphanumeric#elif defined (__BORLANDC__)# define _Locale_CNTRL _IS_CTL# define _Locale_UPPER _IS_UPP# define _Locale_LOWER _IS_LOW# define _Locale_DIGIT _IS_DIG# define _Locale_XDIGIT _IS_HEX# define _Locale_PUNCT _IS_PUN# define _Locale_SPACE _IS_SP# define _Locale_PRINT (_IS_SP|_IS_PUN|_IS_UPP|_IS_LOW|_IS_DIG)# define _Locale_ALPHA _IS_ALPHA#elif defined (_STLP_MSVC_LIB) || defined (__MINGW32__)# define _Locale_CNTRL _CONTROL# define _Locale_UPPER _UPPER# define _Locale_LOWER _LOWER# define _Locale_DIGIT _DIGIT# define _Locale_XDIGIT _HEX# define _Locale_PUNCT _PUNCT# define _Locale_SPACE _SPACE# define _Locale_PRINT (_ALPHA | _DIGIT | _BLANK | _PUNCT)# define _Locale_ALPHA ( _ALPHA & ~ (_UPPER | _LOWER ))#elif defined (__DMC__)# define _Locale_CNTRL _CONTROL# define _Locale_UPPER _UPPER# define _Locale_LOWER _LOWER# define _Locale_DIGIT _DIGIT# define _Locale_XDIGIT _HEX# define _Locale_PUNCT _PUNCT# define _Locale_SPACE _SPACE# define _Locale_PRINT (_UPPER | _LOWER | _DIGIT | _PUNCT | _SPACE)# define _Locale_ALPHA _ALPHA & ~(_UPPER | _LOWER)#elif defined (__MRC__) || defined (__SC__) /* *TY 02/24/2000 - added support for MPW */# define _Locale_CNTRL _CTL# define _Locale_UPPER _UPP# define _Locale_LOWER _LOW# define _Locale_DIGIT _DIG# define _Locale_XDIGIT _HEX# define _Locale_PUNCT _PUN# define _Locale_SPACE _BLA# define _Locale_PRINT (_UPP | _LOW | _DIG | _PUN | _BLA)# define _Locale_ALPHA (_UPP | _LOW)#elif defined (__MLCCPP__)# define _Locale_CNTRL 1# define _Locale_UPPER 2# define _Locale_LOWER 4# define _Locale_DIGIT 8# define _Locale_XDIGIT 16# define _Locale_PUNCT 32# define _Locale_SPACE 64# define _Locale_PRINT 128# define _Locale_ALPHA 256#elif defined (__GNUC__) && (__GNUC__ == 3) && defined (__APPLE__)# define _Locale_CNTRL _C# define _Locale_UPPER _U# define _Locale_LOWER _L# define _Locale_DIGIT _D# define _Locale_XDIGIT _X# define _Locale_PUNCT _P# define _Locale_SPACE _S# define _Locale_PRINT _R# define _Locale_ALPHA _A#elif defined (__hpux) || defined (__osf__)# if defined (__HP_aCC) && !defined (_INCLUDE_HPUX_SOURCE)# define _ISALPHA 0x001# define _ISALNUM 0x002# define _ISBLANK 0x004# define _ISCNTRL 0x008# define _ISDIGIT 0x010# define _ISGRAPH 0x020# define _ISLOWER 0x040# define _ISPRINT 0x080# define _ISPUNCT 0x100# define _ISSPACE 0x200# define _ISUPPER 0x400# define _ISXDIGIT 0x800# endif# define _Locale_CNTRL _ISCNTRL# define _Locale_UPPER _ISUPPER# define _Locale_LOWER _ISLOWER# define _Locale_DIGIT _ISDIGIT# define _Locale_XDIGIT _ISXDIGIT# define _Locale_PUNCT _ISPUNCT# define _Locale_SPACE _ISSPACE# define _Locale_PRINT _ISPRINT# define _Locale_ALPHA _ISALPHA#elif defined (__MVS__) || defined (__OS400__)# define _Locale_CNTRL __ISCNTRL# define _Locale_UPPER __ISUPPER# define _Locale_LOWER __ISLOWER# define _Locale_DIGIT __ISDIGIT# define _Locale_XDIGIT __ISXDIGIT# define _Locale_PUNCT __ISPUNCT# define _Locale_SPACE __ISSPACE# define _Locale_PRINT __ISPRINT# define _Locale_ALPHA __ISALPHA#elif defined (__QNXNTO__) || defined (__WATCOMC__)# define _Locale_CNTRL _CNTRL# define _Locale_UPPER _UPPER# define _Locale_LOWER _LOWER# define _Locale_DIGIT _DIGIT# define _Locale_XDIGIT _XDIGT# define _Locale_PUNCT _PUNCT# define _Locale_SPACE _SPACE# define _Locale_PRINT _PRINT# define _Locale_ALPHA (_UPPER | _LOWER)#elif defined (__DJGPP)# define _Locale_CNTRL __dj_ISCNTRL# define _Locale_UPPER __dj_ISUPPER# define _Locale_LOWER __dj_ISLOWER# define _Locale_DIGIT __dj_ISDIGIT# define _Locale_XDIGIT __dj_ISXDIGIT# define _Locale_PUNCT __dj_ISPUNCT# define _Locale_SPACE __dj_ISSPACE# define _Locale_PRINT __dj_ISPRINT# define _Locale_ALPHA __dj_ISALPHA#elif defined (_STLP_SCO_OPENSERVER)# define _Locale_CNTRL _C# define _Locale_UPPER _U# define _Locale_LOWER _L# define _Locale_DIGIT _N# define _Locale_XDIGIT _X# define _Locale_PUNCT _P# define _Locale_SPACE _S# define _Locale_PRINT _R# define _Locale_ALPHA _A#elif defined (__NCR_SVR)# define _Locale_CNTRL _C# define _Locale_UPPER _U# define _Locale_LOWER _L# define _Locale_DIGIT _N# define _Locale_XDIGIT _X# define _Locale_PUNCT _P# define _Locale_SPACE _S# define _Locale_PRINT (_P | _U | _L | _N | _B)# define _Locale_ALPHA (_U | _L)#elif defined (_CRAY)# define _Locale_CNTRL _CNTRL# define _Locale_UPPER _UPPER# define _Locale_LOWER _LOWER# define _Locale_DIGIT _DIGIT# define _Locale_XDIGIT _XDIGIT# define _Locale_PUNCT _PUNCT# define _Locale_SPACE _SPACE# define _Locale_PRINT _PRINT# define _Locale_ALPHA _ALPHA#endif/* We arbitrarily consider _Locale_CNTRL macro to check locale facet numeric * identifier has been defined for the platform/compiler: */#if !defined (_Locale_CNTRL)# error Unable to find your platform locale facets definitions, please grant them.#endif#endif /* _STLP_C_LOCALE_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -