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