16d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru/* 26d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru******************************************************************************* 350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Copyright (C) 2010, International Business Machines Corporation and 46d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* others. All Rights Reserved. 56d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru******************************************************************************* 66d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* 76d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* 86d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* File NUMSYS.CPP 96d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* 106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* Modification History:* 116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* Date Name Description 126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru* 136d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru******************************************************************************** 146d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru*/ 156d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 166d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/utypes.h" 1750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/localpointer.h" 186d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/uchar.h" 196d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/unistr.h" 206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/ures.h" 216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/ustring.h" 226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/uloc.h" 236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/schriter.h" 246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "unicode/numsys.h" 2527f654740f2a26ad62a5c155af9199af9e69b889claireho#include "cstring.h" 266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#include "uresimp.h" 276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#if !UCONFIG_NO_FORMATTING 296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruU_NAMESPACE_BEGIN 316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru// Useful constants 336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#define DEFAULT_DIGITS UNICODE_STRING_SIMPLE("0123456789"); 356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Querustatic const char gNumberingSystems[] = "numberingSystems"; 3627f654740f2a26ad62a5c155af9199af9e69b889clairehostatic const char gNumberElements[] = "NumberElements"; 3727f654740f2a26ad62a5c155af9199af9e69b889clairehostatic const char gDefault[] = "default"; 386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Querustatic const char gDesc[] = "desc"; 396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Querustatic const char gRadix[] = "radix"; 406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Querustatic const char gAlgorithmic[] = "algorithmic"; 4127f654740f2a26ad62a5c155af9199af9e69b889clairehostatic const char gLatn[] = "latn"; 426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruUOBJECT_DEFINE_RTTI_IMPLEMENTATION(NumberingSystem) 456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru /** 476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * Default Constructor. 486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * 496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * @draft ICU 4.2 506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru */ 516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::NumberingSystem() { 536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru radix = 10; 546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru algorithmic = FALSE; 556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UnicodeString defaultDigits = DEFAULT_DIGITS; 566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru desc.setTo(defaultDigits); 5727f654740f2a26ad62a5c155af9199af9e69b889claireho uprv_strcpy(name,gLatn); 586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru /** 616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * Copy constructor. 626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * @draft ICU 4.2 636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru */ 646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::NumberingSystem(const NumberingSystem& other) 666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru: UObject(other) { 676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru *this=other; 686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem* U_EXPORT2 716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::createInstance(int32_t radix_in, UBool isAlgorithmic_in, const UnicodeString & desc_in, UErrorCode &status) { 726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 7327f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status)) { 7427f654740f2a26ad62a5c155af9199af9e69b889claireho return NULL; 7527f654740f2a26ad62a5c155af9199af9e69b889claireho } 7627f654740f2a26ad62a5c155af9199af9e69b889claireho 776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( radix_in < 2 ) { 786d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 796d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NULL; 806d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( !isAlgorithmic_in ) { 836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( desc_in.countChar32() != radix_in || !isValidDigitString(desc_in)) { 846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_ILLEGAL_ARGUMENT_ERROR; 856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NULL; 866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru NumberingSystem *ns = new NumberingSystem(); 906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ns->setRadix(radix_in); 926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ns->setDesc(desc_in); 936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ns->setAlgorithmic(isAlgorithmic_in); 9427f654740f2a26ad62a5c155af9199af9e69b889claireho ns->setName(NULL); 956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return ns; 966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 986d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 996d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1006d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem* U_EXPORT2 1016d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::createInstance(const Locale & inLocale, UErrorCode& status) { 1026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 10327f654740f2a26ad62a5c155af9199af9e69b889claireho if (U_FAILURE(status)) { 10427f654740f2a26ad62a5c155af9199af9e69b889claireho return NULL; 10527f654740f2a26ad62a5c155af9199af9e69b889claireho } 10627f654740f2a26ad62a5c155af9199af9e69b889claireho 1076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru char buffer[ULOC_KEYWORDS_CAPACITY]; 1086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t count = inLocale.getKeywordValue("numbers",buffer, sizeof(buffer),status); 1096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( count > 0 ) { // @numbers keyword was specified in the locale 1106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru buffer[count] = '\0'; // Make sure it is null terminated. 1116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NumberingSystem::createInstanceByName(buffer,status); 1126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { // Find the default numbering system for this locale. 11327f654740f2a26ad62a5c155af9199af9e69b889claireho UResourceBundle *resource = ures_open(NULL, inLocale.getName(), &status); 11427f654740f2a26ad62a5c155af9199af9e69b889claireho UResourceBundle *numberElementsRes = ures_getByKey(resource,gNumberElements,NULL,&status); 11527f654740f2a26ad62a5c155af9199af9e69b889claireho const UChar *defaultNSName = 11627f654740f2a26ad62a5c155af9199af9e69b889claireho ures_getStringByKeyWithFallback(numberElementsRes, gDefault, &count, &status); 11727f654740f2a26ad62a5c155af9199af9e69b889claireho ures_close(numberElementsRes); 11827f654740f2a26ad62a5c155af9199af9e69b889claireho ures_close(resource); 11927f654740f2a26ad62a5c155af9199af9e69b889claireho 1206d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 1216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_USING_FALLBACK_WARNING; 1226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru NumberingSystem *ns = new NumberingSystem(); 1236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return ns; 1246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 12527f654740f2a26ad62a5c155af9199af9e69b889claireho 1266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( count > 0 && count < ULOC_KEYWORDS_CAPACITY ) { // Default numbering system found 1276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru u_UCharsToChars(defaultNSName,buffer,count); 1286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru buffer[count] = '\0'; // Make sure it is null terminated. 1296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NumberingSystem::createInstanceByName(buffer,status); 1306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } else { 1316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_USING_FALLBACK_WARNING; 1326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru NumberingSystem *ns = new NumberingSystem(); 1336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return ns; 1346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem* U_EXPORT2 1406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::createInstance(UErrorCode& status) { 1416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NumberingSystem::createInstance(Locale::getDefault(), status); 1426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem* U_EXPORT2 1456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::createInstanceByName(const char *name, UErrorCode& status) { 1466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UResourceBundle *numberingSystemsInfo = NULL; 1486d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UResourceBundle *nsTop, *nsCurrent; 1496d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru const UChar* description = NULL; 1506d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t radix = 10; 1516d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t algorithmic = 0; 1526d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t len; 1536d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1546d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru numberingSystemsInfo = ures_openDirect(NULL,gNumberingSystems, &status); 1556d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru nsCurrent = ures_getByKey(numberingSystemsInfo,gNumberingSystems,NULL,&status); 1566d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru nsTop = ures_getByKey(nsCurrent,name,NULL,&status); 1576d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru description = ures_getStringByKey(nsTop,gDesc,&len,&status); 1586d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1596d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ures_getByKey(nsTop,gRadix,nsCurrent,&status); 1606d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru radix = ures_getInt(nsCurrent,&status); 1616d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1626d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ures_getByKey(nsTop,gAlgorithmic,nsCurrent,&status); 1636d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru algorithmic = ures_getInt(nsCurrent,&status); 1646d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1656d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UBool isAlgorithmic = ( algorithmic == 1 ); 1666d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UnicodeString nsd; 1676d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru nsd.setTo(description); 1686d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1696d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ures_close(nsCurrent); 1706d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ures_close(nsTop); 1716d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru ures_close(numberingSystemsInfo); 1726d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1736d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if (U_FAILURE(status)) { 1746d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru status = U_UNSUPPORTED_ERROR; 1756d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return NULL; 1766d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 1776d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 17827f654740f2a26ad62a5c155af9199af9e69b889claireho NumberingSystem* ns = NumberingSystem::createInstance(radix,isAlgorithmic,nsd,status); 17927f654740f2a26ad62a5c155af9199af9e69b889claireho ns->setName(name); 18027f654740f2a26ad62a5c155af9199af9e69b889claireho return ns; 1816d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1826d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1836d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru /** 1846d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * Destructor. 1856d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru * @draft ICU 4.2 1866d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru */ 1876d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruNumberingSystem::~NumberingSystem() { 1886d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1896d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1906d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruint32_t NumberingSystem::getRadix() { 1916d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return radix; 1926d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1936d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 1946d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruUnicodeString NumberingSystem::getDescription() { 1956d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return desc; 1966d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 1976d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 19827f654740f2a26ad62a5c155af9199af9e69b889clairehoconst char * NumberingSystem::getName() { 19927f654740f2a26ad62a5c155af9199af9e69b889claireho return name; 20027f654740f2a26ad62a5c155af9199af9e69b889claireho} 20127f654740f2a26ad62a5c155af9199af9e69b889claireho 2026d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruvoid NumberingSystem::setRadix(int32_t r) { 2036d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru radix = r; 2046d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 2056d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2066d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruvoid NumberingSystem::setAlgorithmic(UBool c) { 2076d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru algorithmic = c; 2086d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 2096d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2106d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queruvoid NumberingSystem::setDesc(UnicodeString d) { 2116d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru desc.setTo(d); 2126d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 21327f654740f2a26ad62a5c155af9199af9e69b889clairehovoid NumberingSystem::setName(const char *n) { 21427f654740f2a26ad62a5c155af9199af9e69b889claireho if ( n == NULL ) { 21527f654740f2a26ad62a5c155af9199af9e69b889claireho name[0] = (char) 0; 21627f654740f2a26ad62a5c155af9199af9e69b889claireho } else { 21727f654740f2a26ad62a5c155af9199af9e69b889claireho uprv_strncpy(name,n,NUMSYS_NAME_CAPACITY); 21827f654740f2a26ad62a5c155af9199af9e69b889claireho name[NUMSYS_NAME_CAPACITY] = (char)0; // Make sure it is null terminated. 21927f654740f2a26ad62a5c155af9199af9e69b889claireho } 22027f654740f2a26ad62a5c155af9199af9e69b889claireho} 2216d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruUBool NumberingSystem::isAlgorithmic() const { 2226d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return ( algorithmic ); 2236d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 2246d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2256d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2266d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruUBool NumberingSystem::isValidDigitString(const UnicodeString& str) { 2276d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2286d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru StringCharacterIterator it(str); 2296d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UChar32 c; 2306d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru UChar32 prev = 0; 2316d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru int32_t i = 0; 2326d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2336d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru for ( it.setToStart(); it.hasNext(); ) { 2346d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru c = it.next32PostInc(); 2356d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru if ( c > 0xFFFF ) { // Digits outside the BMP are not currently supported 2366d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return FALSE; 2376d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2386d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru i++; 2396d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru prev = c; 2406d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru } 2416d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru return TRUE; 2426d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru} 2436d5deb12725f146643d443090dfa11b206df528aJean-Baptiste QueruU_NAMESPACE_END 2446d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2456d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */ 2466d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru 2476d5deb12725f146643d443090dfa11b206df528aJean-Baptiste Queru//eof 248