]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/strrepl.cpp
ICU-57166.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / strrepl.cpp
index 4ae12b05c24ff50c90a79f42bb27c7e24df8d1fe..4c90cfb32c059bed22cc9aa52677b28e9ce6fcef 100644 (file)
@@ -1,6 +1,6 @@
 /*
 **********************************************************************
-*   Copyright (c) 2002-2004, International Business Machines Corporation
+*   Copyright (c) 2002-2012, International Business Machines Corporation
 *   and others.  All Rights Reserved.
 **********************************************************************
 *   Date        Name        Description
 
 #if !UCONFIG_NO_TRANSLITERATION
 
+#include "unicode/uniset.h"
+#include "unicode/utf16.h"
 #include "strrepl.h"
 #include "rbt_data.h"
 #include "util.h"
-#include "unicode/uniset.h"
 
 U_NAMESPACE_BEGIN
 
-static const UChar EMPTY[] = { 0 }; // empty string: ""
-
 UnicodeReplacer::~UnicodeReplacer() {}
 UOBJECT_DEFINE_RTTI_IMPLEMENTATION(StringReplacer)
 
@@ -94,7 +93,7 @@ UnicodeFunctor* StringReplacer::clone() const {
  * Implement UnicodeFunctor
  */
 UnicodeReplacer* StringReplacer::toReplacer() const {
-    return (UnicodeReplacer*) this;
+  return const_cast<StringReplacer *>(this);
 }
 
 /**
@@ -144,7 +143,7 @@ int32_t StringReplacer::replace(Replaceable& text,
         int32_t tempStart = text.length(); // start of temp buffer
         int32_t destStart = tempStart; // copy new text to here
         if (start > 0) {
-            int32_t len = UTF_CHAR_LENGTH(text.char32At(start-1));
+            int32_t len = U16_LENGTH(text.char32At(start-1));
             text.copy(start-len, start, tempStart);
             destStart += len;
         } else {
@@ -178,7 +177,7 @@ int32_t StringReplacer::replace(Replaceable& text,
                 int32_t len = r->replace(text, destLimit, destLimit, cursor);
                 destLimit += len;
             }
-            oOutput += UTF_CHAR_LENGTH(c);
+            oOutput += U16_LENGTH(c);
         }
         // Insert any accumulated straight text.
         if (buf.length() > 0) {
@@ -194,10 +193,10 @@ int32_t StringReplacer::replace(Replaceable& text,
 
         // Copy new text to start, and delete it
         text.copy(destStart, destLimit, start);
-        text.handleReplaceBetween(tempStart + outLen, destLimit + outLen, EMPTY);
+        text.handleReplaceBetween(tempStart + outLen, destLimit + outLen, UnicodeString());
 
         // Delete the old text (the key)
-        text.handleReplaceBetween(start + outLen, limit + outLen, EMPTY);
+        text.handleReplaceBetween(start + outLen, limit + outLen, UnicodeString());
     }        
 
     if (hasCursor) {
@@ -210,7 +209,7 @@ int32_t StringReplacer::replace(Replaceable& text,
             int32_t n = cursorPos;
             // Outside the output string, cursorPos counts code points
             while (n < 0 && newStart > 0) {
-                newStart -= UTF_CHAR_LENGTH(text.char32At(newStart-1));
+                newStart -= U16_LENGTH(text.char32At(newStart-1));
                 ++n;
             }
             newStart += n;
@@ -219,7 +218,7 @@ int32_t StringReplacer::replace(Replaceable& text,
             int32_t n = cursorPos - output.length();
             // Outside the output string, cursorPos counts code points
             while (n > 0 && newStart < text.length()) {
-                newStart += UTF_CHAR_LENGTH(text.char32At(newStart));
+                newStart += U16_LENGTH(text.char32At(newStart));
                 --n;
             }
             newStart += n;
@@ -294,7 +293,7 @@ UnicodeString& StringReplacer::toReplacerPattern(UnicodeString& rule,
  */
 void StringReplacer::addReplacementSetTo(UnicodeSet& toUnionTo) const {
     UChar32 ch;
-    for (int32_t i=0; i<output.length(); i+=UTF_CHAR_LENGTH(ch)) {
+    for (int32_t i=0; i<output.length(); i+=U16_LENGTH(ch)) {
     ch = output.char32At(i);
     UnicodeReplacer* r = data->lookupReplacer(ch);
     if (r == NULL) {
@@ -317,7 +316,7 @@ void StringReplacer::setData(const TransliterationRuleData* d) {
         if (f != NULL) {
             f->setData(data);
         }
-        i += UTF_CHAR_LENGTH(c);
+        i += U16_LENGTH(c);
     }
 }