1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* 2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************** 3103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius* Copyright (C) 1996-2012, International Business Machines 4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Corporation and others. All Rights Reserved. 5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru******************************************************************************** 6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File UCHAR.C 8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History: 10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Date Name Description 12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 04/02/97 aliu Creation. 13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 4/15/99 Madhu Updated all the function definitions for C Implementation 14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 5/20/99 Madhu Added the function u_getVersion() 15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 8/19/1999 srl Upgraded scripts to Unicode3.0 16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 11/11/1999 weiv added u_isalnum(), cleaned comments 17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 01/11/2000 helena Renamed u_getVersion to u_getUnicodeVersion. 18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* 06/20/2000 helena OS/400 port changes; mostly typecast. 19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru****************************************************************************** 20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/ 21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h" 23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uchar.h" 24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uscript.h" 25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/udata.h" 26103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "uassert.h" 27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "cmemory.h" 28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "ucln_cmn.h" 29b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#include "utrie2.h" 30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "udataswp.h" 31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "uprops.h" 3227f654740f2a26ad62a5c155af9199af9e69b889claireho#include "ustr_imp.h" 33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define LENGTHOF(array) (int32_t)(sizeof(array)/sizeof((array)[0])) 35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 36103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* uchar_props_data.h is machine-generated by genprops --csource */ 37103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#define INCLUDED_FROM_UCHAR_C 38103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#include "uchar_props_data.h" 39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* constants and macros for access to the data ------------------------------ */ 41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* getting a uint32_t properties word from the data */ 43b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru#define GET_PROPS(c, result) ((result)=UTRIE2_GET16(&propsTrie, c)); 44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool 46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_haveProperties(UErrorCode *pErrorCode) { 47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(*pErrorCode)) { 48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return FALSE; 49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* API functions ------------------------------------------------------------ */ 54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Gets the Unicode character's general category.*/ 56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int8_t U_EXPORT2 57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_charType(UChar32 c) { 58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int8_t)GET_CATEGORY(props); 61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Enumerate all code points with their general categories. */ 64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustruct _EnumTypeCallback { 65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru UCharEnumTypeRange *enumRange; 66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const void *context; 67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru}; 68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic uint32_t U_CALLCONV 70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru_enumTypeValue(const void *context, uint32_t value) { 71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return GET_CATEGORY(value); 72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool U_CALLCONV 75b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru_enumTypeRange(const void *context, UChar32 start, UChar32 end, uint32_t value) { 76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* just cast the value to UCharCategory */ 77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return ((struct _EnumTypeCallback *)context)-> 78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru enumRange(((struct _EnumTypeCallback *)context)->context, 79b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru start, end+1, (UCharCategory)value); 80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_enumCharTypes(UCharEnumTypeRange *enumRange, const void *context) { 84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru struct _EnumTypeCallback callback; 85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 8627f654740f2a26ad62a5c155af9199af9e69b889claireho if(enumRange==NULL) { 87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru callback.enumRange=enumRange; 91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru callback.context=context; 92b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru utrie2_enum(&propsTrie, _enumTypeValue, _enumTypeRange, &callback); 93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if ch is a lower case letter.*/ 96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_islower(UChar32 c) { 98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_LOWERCASE_LETTER); 101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if ch is an upper case letter.*/ 104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isupper(UChar32 c) { 106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_UPPERCASE_LETTER); 109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if ch is a title case letter; usually upper case letters.*/ 112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_istitle(UChar32 c) { 114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_TITLECASE_LETTER); 117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if ch is a decimal digit. */ 120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isdigit(UChar32 c) { 122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER); 125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isxdigit(UChar32 c) { 129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* check ASCII and Fullwidth ASCII a-fA-F */ 132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if( 133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (c<=0x66 && c>=0x41 && (c<=0x46 || c>=0x61)) || 134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (c>=0xff21 && c<=0xff46 && (c<=0xff26 || c>=0xff41)) 135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ) { 136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_DECIMAL_DIGIT_NUMBER); 141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is a letter.*/ 144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isalpha(UChar32 c) { 146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&U_GC_L_MASK)!=0); 149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isUAlphabetic(UChar32 c) { 153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_ALPHABETIC))!=0; 154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if c is a letter or a decimal digit */ 157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isalnum(UChar32 c) { 159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_ND_MASK))!=0); 162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Checks if c is alphabetic, or a decimal digit; implements UCHAR_POSIX_ALNUM. 166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool 169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isalnumPOSIX(UChar32 c) { 170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(u_isUAlphabetic(c) || u_isdigit(c)); 171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if ch is a unicode character with assigned character type.*/ 174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isdefined(UChar32 c) { 176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)!=0); 179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is a base form character that can take a diacritic.*/ 182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isbase(UChar32 c) { 184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_N_MASK|U_GC_MC_MASK|U_GC_ME_MASK))!=0); 187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is a control character.*/ 190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_iscntrl(UChar32 c) { 192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&(U_GC_CC_MASK|U_GC_CF_MASK|U_GC_ZL_MASK|U_GC_ZP_MASK))!=0); 195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isISOControl(UChar32 c) { 199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (uint32_t)c<=0x9f && (c<=0x1f || c>=0x7f); 200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Some control characters that are used as space. */ 203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define IS_THAT_CONTROL_SPACE(c) \ 204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (c<=0x9f && ((c>=TAB && c<=CR) || (c>=0x1c && c <=0x1f) || c==NL)) 205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 20650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/* Java has decided that U+0085 New Line is not whitespace any more. */ 20750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#define IS_THAT_ASCII_CONTROL_SPACE(c) \ 20850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho (c<=0x1f && c>=TAB && (c<=CR || c>=0x1c)) 20950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho 210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is a space character.*/ 211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isspace(UChar32 c) { 213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0 || IS_THAT_CONTROL_SPACE(c)); 216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isJavaSpaceChar(UChar32 c) { 220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&U_GC_Z_MASK)!=0); 223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is a whitespace character.*/ 226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isWhitespace(UChar32 c) { 228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)( 231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ((CAT_MASK(props)&U_GC_Z_MASK)!=0 && 232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru c!=NBSP && c!=FIGURESP && c!=NNBSP) || /* exclude no-break spaces */ 23350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho IS_THAT_ASCII_CONTROL_SPACE(c) 234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ); 235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isblank(UChar32 c) { 239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((uint32_t)c<=0x9f) { 240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return c==9 || c==0x20; /* TAB or SPACE */ 241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* Zs */ 243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_SPACE_SEPARATOR); 246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isUWhiteSpace(UChar32 c) { 251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (u_getUnicodeProperties(c, 1)&U_MASK(UPROPS_WHITE_SPACE))!=0; 252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character is printable.*/ 255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isprint(UChar32 c) { 257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* comparing ==0 returns FALSE for the categories mentioned */ 260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&U_GC_C_MASK)==0); 261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Checks if c is in \p{graph}\p{blank} - \p{cntrl}. 265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Implements UCHAR_POSIX_PRINT. 266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool 269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isprintPOSIX(UChar32 c) { 270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* 273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The only cntrl character in graph+blank is TAB (in blank). 274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Here we implement (blank-TAB)=Zs instead of calling u_isblank(). 275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((GET_CATEGORY(props)==U_SPACE_SEPARATOR) || u_isgraphPOSIX(c)); 277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isgraph(UChar32 c) { 281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* comparing ==0 returns FALSE for the categories mentioned */ 284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)& 285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_GC_CC_MASK|U_GC_CF_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK)) 286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ==0); 287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** 290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Checks if c is in 291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * [^\p{space}\p{gc=Control}\p{gc=Surrogate}\p{gc=Unassigned}] 292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * with space=\p{Whitespace} and Control=Cc. 293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Implements UCHAR_POSIX_GRAPH. 294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @internal 295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC UBool 297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isgraphPOSIX(UChar32 c) { 298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* \p{space}\p{gc=Control} == \p{gc=Z}\p{Control} */ 301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* comparing ==0 returns FALSE for the categories mentioned */ 302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)& 303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_GC_CC_MASK|U_GC_CS_MASK|U_GC_CN_MASK|U_GC_Z_MASK)) 304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru ==0); 305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 306b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 307b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 308b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_ispunct(UChar32 c) { 309b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 310b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 311b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&U_GC_P_MASK)!=0); 312b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 313b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 314b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character can start a Unicode identifier.*/ 315b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 316b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isIDStart(UChar32 c) { 317b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* same as u_isalpha() */ 318b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 319b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 320b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_NL_MASK))!=0); 321b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 322b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* Checks if the Unicode character can be a Unicode identifier part other than starting the 324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru identifier.*/ 325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 326b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isIDPart(UChar32 c) { 327b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 328b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 329b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)( 330b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (CAT_MASK(props)& 331b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_GC_ND_MASK|U_GC_NL_MASK| 332b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_GC_L_MASK| 333b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_GC_PC_MASK|U_GC_MC_MASK|U_GC_MN_MASK) 334b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru )!=0 || 335b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_isIDIgnorable(c)); 336b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 337b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 338b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Checks if the Unicode character can be ignorable in a Java or Unicode identifier.*/ 339b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isIDIgnorable(UChar32 c) { 341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(c<=0x9f) { 34250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return u_isISOControl(c) && !IS_THAT_ASCII_CONTROL_SPACE(c); 343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 346b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)(GET_CATEGORY(props)==U_FORMAT_CHAR); 347b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 348b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Checks if the Unicode character can start a Java identifier.*/ 351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isJavaIDStart(UChar32 c) { 353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)((CAT_MASK(props)&(U_GC_L_MASK|U_GC_SC_MASK|U_GC_PC_MASK))!=0); 356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*Checks if the Unicode character can be a Java identifier part other than starting the 359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * identifier. 360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */ 361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBool U_EXPORT2 362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_isJavaIDPart(UChar32 c) { 363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBool)( 366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (CAT_MASK(props)& 367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru (U_GC_ND_MASK|U_GC_NL_MASK| 368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_GC_L_MASK| 369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_GC_SC_MASK|U_GC_PC_MASK| 370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru U_GC_MC_MASK|U_GC_MN_MASK) 371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru )!=0 || 372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru u_isIDIgnorable(c)); 373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_charDigitValue(UChar32 c) { 377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t props; 37850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t value; 379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 38050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho value=(int32_t)GET_NUMERIC_TYPE_VALUE(props)-UPROPS_NTV_DECIMAL_START; 38150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(value<=9) { 38250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return value; 383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return -1; 385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI double U_EXPORT2 389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_getNumericValue(UChar32 c) { 39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho uint32_t props; 39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t ntv; 392b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru GET_PROPS(c, props); 39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho ntv=(int32_t)GET_NUMERIC_TYPE_VALUE(props); 394b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho if(ntv==UPROPS_NTV_NONE) { 396b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return U_NO_NUMERIC_VALUE; 39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if(ntv<UPROPS_NTV_DIGIT_START) { 39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* decimal digit */ 39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ntv-UPROPS_NTV_DECIMAL_START; 40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if(ntv<UPROPS_NTV_NUMERIC_START) { 40150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* other digit */ 40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ntv-UPROPS_NTV_DIGIT_START; 40350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if(ntv<UPROPS_NTV_FRACTION_START) { 40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* small integer */ 40550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return ntv-UPROPS_NTV_NUMERIC_START; 40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else if(ntv<UPROPS_NTV_LARGE_START) { 40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* fraction */ 40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t numerator=(ntv>>4)-12; 40950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t denominator=(ntv&0xf)+1; 41050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return (double)numerator/denominator; 41154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(ntv<UPROPS_NTV_BASE60_START) { 41250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* large, single-significant-digit integer */ 413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru double numValue; 41450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t mant=(ntv>>5)-14; 41550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho int32_t exp=(ntv&0x1f)+2; 416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numValue=mant; 417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* multiply by 10^exp without math.h */ 419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru while(exp>=4) { 420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numValue*=10000.; 421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru exp-=4; 422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru switch(exp) { 424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 3: 425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numValue*=1000.; 426b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 427b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 2: 428b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numValue*=100.; 429b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 1: 431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru numValue*=10.; 432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru case 0: 434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru default: 435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru break; 436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return numValue; 43954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } else if(ntv<UPROPS_NTV_RESERVED_START) { 44054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius /* sexagesimal (base 60) integer */ 44154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t numValue=(ntv>>2)-0xbf; 44254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius int32_t exp=(ntv&3)+1; 44354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 44454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius switch(exp) { 44554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 4: 44654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius numValue*=60*60*60*60; 44754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 44854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 3: 44954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius numValue*=60*60*60; 45054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 45154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 2: 45254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius numValue*=60*60; 45354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 45454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 1: 45554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius numValue*=60; 45654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 45754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius case 0: 45854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius default: 45954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius break; 46054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius } 46154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius 46254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius return numValue; 46350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho } else { 46450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho /* reserved */ 46550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho return U_NO_NUMERIC_VALUE; 466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI int32_t U_EXPORT2 470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_digit(UChar32 ch, int8_t radix) { 471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru int8_t value; 472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((uint8_t)(radix-2)<=(36-2)) { 473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(int8_t)u_charDigitValue(ch); 474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(value<0) { 475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* ch is not a decimal digit, try latin letters */ 476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(ch>=0x61 && ch<=0x7A) { 477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(int8_t)(ch-0x57); /* ch - 'a' + 10 */ 478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(ch>=0x41 && ch<=0x5A) { 479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(int8_t)(ch-0x37); /* ch - 'A' + 10 */ 480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(ch>=0xFF41 && ch<=0xFF5A) { 481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(int8_t)(ch-0xFF37); /* fullwidth ASCII a-z */ 482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(ch>=0xFF21 && ch<=0xFF3A) { 483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=(int8_t)(ch-0xFF17); /* fullwidth ASCII A-Z */ 484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru value=-1; /* invalid radix */ 488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (int8_t)((value<radix) ? value : -1); 490b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 491b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 492b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UChar32 U_EXPORT2 493b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_forDigit(int32_t digit, int8_t radix) { 494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((uint8_t)(radix-2)>(36-2) || (uint32_t)digit>=(uint32_t)radix) { 495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else if(digit<10) { 497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UChar32)(0x30+digit); 498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UChar32)((0x61-10)+digit); 500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 503103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/* miscellaneous, and support for uprops.cpp -------------------------------- */ 504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_getUnicodeVersion(UVersionInfo versionArray) { 507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(versionArray!=NULL) { 508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uprv_memcpy(versionArray, dataVersion, U_MAX_VERSION_LENGTH); 509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC uint32_t 513103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusu_getMainProperties(UChar32 c) { 514103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius uint32_t props; 515103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius GET_PROPS(c, props); 516103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return props; 517103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} 518b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 519103e9ffba2cba345d0078eb8b8db33249f81840aCraig CorneliusU_CFUNC uint32_t 520103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliusu_getUnicodeProperties(UChar32 c, int32_t column) { 521103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius U_ASSERT(column>=0); 522103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(column>=propsVectorsColumns) { 523b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 524b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } else { 525103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius uint16_t vecIndex=UTRIE2_GET16(&propsVectorsTrie, c); 526b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return propsVectors[vecIndex+column]; 527b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 528b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 529b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 530b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC int32_t 531b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuprv_getMaxValues(int32_t column) { 53227f654740f2a26ad62a5c155af9199af9e69b889claireho switch(column) { 53327f654740f2a26ad62a5c155af9199af9e69b889claireho case 0: 53427f654740f2a26ad62a5c155af9199af9e69b889claireho return indexes[UPROPS_MAX_VALUES_INDEX]; 53527f654740f2a26ad62a5c155af9199af9e69b889claireho case 2: 53627f654740f2a26ad62a5c155af9199af9e69b889claireho return indexes[UPROPS_MAX_VALUES_2_INDEX]; 53727f654740f2a26ad62a5c155af9199af9e69b889claireho default: 538b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return 0; 539b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 540b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 541b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 542b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI void U_EXPORT2 543b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruu_charAge(UChar32 c, UVersionInfo versionArray) { 544b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(versionArray!=NULL) { 545b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru uint32_t version=u_getUnicodeProperties(c, 0)>>UPROPS_AGE_SHIFT; 546b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru versionArray[0]=(uint8_t)(version>>4); 547b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru versionArray[1]=(uint8_t)(version&0xf); 548b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru versionArray[2]=versionArray[3]=0; 549b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 550b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 551b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 552b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UScriptCode U_EXPORT2 553b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuscript_getScript(UChar32 c, UErrorCode *pErrorCode) { 55427f654740f2a26ad62a5c155af9199af9e69b889claireho uint32_t scriptX; 555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USCRIPT_INVALID_CODE; 557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if((uint32_t)c>0x10ffff) { 559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; 560b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return USCRIPT_INVALID_CODE; 561b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 56227f654740f2a26ad62a5c155af9199af9e69b889claireho scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; 56327f654740f2a26ad62a5c155af9199af9e69b889claireho if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { 56427f654740f2a26ad62a5c155af9199af9e69b889claireho return (UScriptCode)scriptX; 56527f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(scriptX<UPROPS_SCRIPT_X_WITH_INHERITED) { 56627f654740f2a26ad62a5c155af9199af9e69b889claireho return USCRIPT_COMMON; 56727f654740f2a26ad62a5c155af9199af9e69b889claireho } else if(scriptX<UPROPS_SCRIPT_X_WITH_OTHER) { 56827f654740f2a26ad62a5c155af9199af9e69b889claireho return USCRIPT_INHERITED; 56927f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 57027f654740f2a26ad62a5c155af9199af9e69b889claireho return (UScriptCode)scriptExtensions[scriptX&UPROPS_SCRIPT_MASK]; 57127f654740f2a26ad62a5c155af9199af9e69b889claireho } 57227f654740f2a26ad62a5c155af9199af9e69b889claireho} 57327f654740f2a26ad62a5c155af9199af9e69b889claireho 57454dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI UBool U_EXPORT2 57527f654740f2a26ad62a5c155af9199af9e69b889clairehouscript_hasScript(UChar32 c, UScriptCode sc) { 57627f654740f2a26ad62a5c155af9199af9e69b889claireho const uint16_t *scx; 57727f654740f2a26ad62a5c155af9199af9e69b889claireho uint32_t scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; 57827f654740f2a26ad62a5c155af9199af9e69b889claireho if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { 57927f654740f2a26ad62a5c155af9199af9e69b889claireho return sc==(UScriptCode)scriptX; 58027f654740f2a26ad62a5c155af9199af9e69b889claireho } 581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 58227f654740f2a26ad62a5c155af9199af9e69b889claireho scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK); 583103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) { 58427f654740f2a26ad62a5c155af9199af9e69b889claireho scx=scriptExtensions+scx[1]; 58527f654740f2a26ad62a5c155af9199af9e69b889claireho } 58654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius if(sc>=USCRIPT_CODE_LIMIT) { 587103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius /* Guard against bogus input that would make us go past the Script_Extensions terminator. */ 588103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return FALSE; 58927f654740f2a26ad62a5c155af9199af9e69b889claireho } 59027f654740f2a26ad62a5c155af9199af9e69b889claireho while(sc>*scx) { 59127f654740f2a26ad62a5c155af9199af9e69b889claireho ++scx; 59227f654740f2a26ad62a5c155af9199af9e69b889claireho } 59327f654740f2a26ad62a5c155af9199af9e69b889claireho return sc==(*scx&0x7fff); 59427f654740f2a26ad62a5c155af9199af9e69b889claireho} 59527f654740f2a26ad62a5c155af9199af9e69b889claireho 59654dcd9b6a06071f647dac967e9e267abb9410720Craig CorneliusU_CAPI int32_t U_EXPORT2 59727f654740f2a26ad62a5c155af9199af9e69b889clairehouscript_getScriptExtensions(UChar32 c, 59827f654740f2a26ad62a5c155af9199af9e69b889claireho UScriptCode *scripts, int32_t capacity, 59927f654740f2a26ad62a5c155af9199af9e69b889claireho UErrorCode *pErrorCode) { 60027f654740f2a26ad62a5c155af9199af9e69b889claireho uint32_t scriptX; 60127f654740f2a26ad62a5c155af9199af9e69b889claireho int32_t length; 60227f654740f2a26ad62a5c155af9199af9e69b889claireho const uint16_t *scx; 60327f654740f2a26ad62a5c155af9199af9e69b889claireho uint16_t sx; 60427f654740f2a26ad62a5c155af9199af9e69b889claireho if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { 60527f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 60627f654740f2a26ad62a5c155af9199af9e69b889claireho } 60727f654740f2a26ad62a5c155af9199af9e69b889claireho if(capacity<0 || (capacity>0 && scripts==NULL)) { 60827f654740f2a26ad62a5c155af9199af9e69b889claireho *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; 60927f654740f2a26ad62a5c155af9199af9e69b889claireho return 0; 61027f654740f2a26ad62a5c155af9199af9e69b889claireho } 61127f654740f2a26ad62a5c155af9199af9e69b889claireho scriptX=u_getUnicodeProperties(c, 0)&UPROPS_SCRIPT_X_MASK; 61227f654740f2a26ad62a5c155af9199af9e69b889claireho if(scriptX<UPROPS_SCRIPT_X_WITH_COMMON) { 613103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius if(capacity==0) { 614103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius *pErrorCode=U_BUFFER_OVERFLOW_ERROR; 615103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } else { 616103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius scripts[0]=(UScriptCode)scriptX; 617103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius } 618103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius return 1; 61927f654740f2a26ad62a5c155af9199af9e69b889claireho } 62027f654740f2a26ad62a5c155af9199af9e69b889claireho 62127f654740f2a26ad62a5c155af9199af9e69b889claireho scx=scriptExtensions+(scriptX&UPROPS_SCRIPT_MASK); 62227f654740f2a26ad62a5c155af9199af9e69b889claireho if(scriptX>=UPROPS_SCRIPT_X_WITH_OTHER) { 62327f654740f2a26ad62a5c155af9199af9e69b889claireho scx=scriptExtensions+scx[1]; 62427f654740f2a26ad62a5c155af9199af9e69b889claireho } 625103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius length=0; 62627f654740f2a26ad62a5c155af9199af9e69b889claireho do { 62727f654740f2a26ad62a5c155af9199af9e69b889claireho sx=*scx++; 62827f654740f2a26ad62a5c155af9199af9e69b889claireho if(length<capacity) { 62954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius scripts[length]=(UScriptCode)(sx&0x7fff); 63027f654740f2a26ad62a5c155af9199af9e69b889claireho } 63127f654740f2a26ad62a5c155af9199af9e69b889claireho ++length; 63227f654740f2a26ad62a5c155af9199af9e69b889claireho } while(sx<0x8000); 63327f654740f2a26ad62a5c155af9199af9e69b889claireho if(length>capacity) { 63427f654740f2a26ad62a5c155af9199af9e69b889claireho *pErrorCode=U_BUFFER_OVERFLOW_ERROR; 63527f654740f2a26ad62a5c155af9199af9e69b889claireho } 63627f654740f2a26ad62a5c155af9199af9e69b889claireho return length; 637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CAPI UBlockCode U_EXPORT2 640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruublock_getCode(UChar32 c) { 641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return (UBlockCode)((u_getUnicodeProperties(c, 0)&UPROPS_BLOCK_MASK)>>UPROPS_BLOCK_SHIFT); 642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/* property starts for UnicodeSet ------------------------------------------- */ 645b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 646b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querustatic UBool U_CALLCONV 647b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru_enumPropertyStartsRange(const void *context, UChar32 start, UChar32 end, uint32_t value) { 648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add the start code point to the USet */ 649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru const USetAdder *sa=(const USetAdder *)context; 650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, start); 651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return TRUE; 652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define USET_ADD_CP_AND_NEXT(sa, cp) sa->add(sa->set, cp); sa->add(sa->set, cp+1) 655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC void U_EXPORT2 657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruuchar_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { 658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(*pErrorCode)) { 659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add the start code point of each same-value range of the main trie */ 663b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru utrie2_enum(&propsTrie, NULL, _enumPropertyStartsRange, sa); 664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add code points with hardcoded properties, plus the ones following them */ 666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for u_isblank() */ 668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, TAB); 669b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 670b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for IS_THAT_CONTROL_SPACE() */ 671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, CR+1); /* range TAB..CR */ 672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0x1c); 673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0x1f+1); 674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, NL); 675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for u_isIDIgnorable() what was not added above */ 677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, DEL); /* range DEL..NBSP-1, NBSP added below */ 678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, HAIRSP); 679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, RLM+1); 680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, INHSWAP); 681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, NOMDIG+1); 682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, ZWNBSP); 683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add no-break spaces for u_isWhitespace() what was not added above */ 685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, NBSP); 686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, FIGURESP); 687b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, NNBSP); 688b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 689b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for u_digit() */ 690b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_a); 691b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_z+1); 692b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_A); 693b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_Z+1); 694b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_a); 695b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_z+1); 696b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_A); 697b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_Z+1); 698b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 699b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for u_isxdigit() */ 700b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_f+1); 701b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_F+1); 702b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_f+1); 703b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, U_FW_F+1); 704b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 705b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for UCHAR_DEFAULT_IGNORABLE_CODE_POINT what was not added above */ 706b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, WJ); /* range WJ..NOMDIG */ 707b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0xfff0); 708b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0xfffb+1); 709b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0xe0000); 710b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru sa->add(sa->set, 0xe0fff+1); 711b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 712b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add for UCHAR_GRAPHEME_BASE and others */ 713b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru USET_ADD_CP_AND_NEXT(sa, CGJ); 714b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 715b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 716b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_CFUNC void U_EXPORT2 717b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruupropsvec_addPropertyStarts(const USetAdder *sa, UErrorCode *pErrorCode) { 718b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(U_FAILURE(*pErrorCode)) { 719b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru return; 720b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 721b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru 722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* add the start code point of each same-value range of the properties vectors trie */ 723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru if(propsVectorsColumns>0) { 724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru /* if propsVectorsColumns==0 then the properties vectors trie may not be there at all */ 725b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru utrie2_enum(&propsVectorsTrie, NULL, _enumPropertyStartsRange, sa); 726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru } 727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} 728