X-Git-Url: https://git.saurik.com/apple/icu.git/blobdiff_plain/b25be06635768807f8f693286fa73bb2297bb06c..4388f060552cc537e71e957d32f35e9d75a61233:/icuSources/i18n/transreg.cpp diff --git a/icuSources/i18n/transreg.cpp b/icuSources/i18n/transreg.cpp index 8e1d4f43..77281511 100644 --- a/icuSources/i18n/transreg.cpp +++ b/icuSources/i18n/transreg.cpp @@ -1,6 +1,6 @@ /* ********************************************************************** -* Copyright (c) 2001-2010, International Business Machines +* Copyright (c) 2001-2011, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * Date Name Description @@ -44,9 +44,11 @@ static const UChar LOCALE_SEP = 95; // '_' //static const UChar VARIANT_SEP = 0x002F; // '/' // String constants -static const UChar NO_VARIANT[] = { 0 }; // empty string static const UChar ANY[] = { 65, 110, 121, 0 }; // Any +// empty string +#define NO_VARIANT UnicodeString() + /** * Resource bundle key for the RuleBasedTransliterator rule. */ @@ -517,7 +519,7 @@ TransliteratorRegistry::TransliteratorRegistry(UErrorCode& status) : availableIDs(status) { registry.setValueDeleter(deleteEntry); - availableIDs.setDeleter(uhash_deleteUnicodeString); + availableIDs.setDeleter(uprv_deleteUObject); availableIDs.setComparer(uhash_compareCaselessUnicodeString); specDAG.setValueDeleter(uhash_deleteHashtable); } @@ -868,7 +870,7 @@ void TransliteratorRegistry::registerEntry(const UnicodeString& source, UnicodeString ID; UnicodeString s(source); if (s.length() == 0) { - s = ANY; + s.setTo(TRUE, ANY, 3); } TransliteratorIDParser::STVtoID(source, target, variant, ID); registerEntry(ID, s, target, variant, adopted, visible); @@ -936,12 +938,12 @@ void TransliteratorRegistry::registerSTV(const UnicodeString& source, if (U_FAILURE(status) || targets == 0) { return; } - targets->setValueDeleter(uhash_deleteUObject); + targets->setValueDeleter(uprv_deleteUObject); specDAG.put(source, targets, status); } UVector *variants = (UVector*) targets->get(target); if (variants == 0) { - variants = new UVector(uhash_deleteUnicodeString, + variants = new UVector(uprv_deleteUObject, uhash_compareCaselessUnicodeString, status); if (variants == 0) { return; @@ -959,7 +961,7 @@ void TransliteratorRegistry::registerSTV(const UnicodeString& source, variants->addElement(tempus, status); } } else { - tempus = new UnicodeString(NO_VARIANT) ; + tempus = new UnicodeString(); // = NO_VARIANT if (tempus != NULL) { variants->insertElementAt(tempus, 0, status); } @@ -1073,9 +1075,9 @@ TransliteratorEntry* TransliteratorRegistry::findInBundle(const TransliteratorSp // but must be consistent and documented. if (pass == 0) { utag.append(direction == UTRANS_FORWARD ? - TRANSLITERATE_TO : TRANSLITERATE_FROM); + TRANSLITERATE_TO : TRANSLITERATE_FROM, -1); } else { - utag.append(TRANSLITERATE); + utag.append(TRANSLITERATE, -1); } UnicodeString s(specToFind.get()); utag.append(s.toUpper("")); @@ -1282,7 +1284,8 @@ Transliterator* TransliteratorRegistry::instantiateEntry(const UnicodeString& ID } int32_t passNumber = 1; for (int32_t i = 0; U_SUCCESS(status) && i < entry->u.dataVector->size(); i++) { - Transliterator* t = new RuleBasedTransliterator(UnicodeString(CompoundTransliterator::PASS_STRING) + (passNumber++), + // TODO: Should passNumber be turned into a decimal-string representation (1 -> "1")? + Transliterator* t = new RuleBasedTransliterator(UnicodeString(CompoundTransliterator::PASS_STRING) + UnicodeString(passNumber++), (TransliterationRuleData*)(entry->u.dataVector->elementAt(i)), FALSE); if (t == 0) status = U_MEMORY_ALLOCATION_ERROR;