Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(141)

Unified Diff: source/common/listformatter.cpp

Issue 1621843002: ICU 56 update step 1 (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@561
Patch Set: Created 4 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « source/common/icuplugimp.h ('k') | source/common/locid.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: source/common/listformatter.cpp
diff --git a/source/common/listformatter.cpp b/source/common/listformatter.cpp
index cfbd08bdce3cf31fea0b2376d6d5ce423fc602a3..6dbf6c567716c07ebc0f43846dc6fb098927e586 100644
--- a/source/common/listformatter.cpp
+++ b/source/common/listformatter.cpp
@@ -178,12 +178,6 @@ static ListFormatInternal* loadListFormatInternal(
rb = ures_getByKeyWithFallback(rb, "listPattern", rb, &errorCode);
rb = ures_getByKeyWithFallback(rb, style, rb, &errorCode);
- // TODO(Travis Keep): This is a hack until fallbacks can be added for
- // listPattern/duration and listPattern/duration-narrow in CLDR.
- if (errorCode == U_MISSING_RESOURCE_ERROR) {
- errorCode = U_ZERO_ERROR;
- rb = ures_getByKeyWithFallback(rb, "standard", rb, &errorCode);
- }
if (U_FAILURE(errorCode)) {
ures_close(rb);
return NULL;
@@ -254,9 +248,10 @@ ListFormatter::~ListFormatter() {
* On entry offset is an offset into first or -1 if offset unspecified.
* On exit offset is offset of second in result if recordOffset was set
* Otherwise if it was >=0 it is set to point into result where it used
- * to point into first.
+ * to point into first. On exit, result is the join of first and second
+ * according to pat. Any previous value of result gets replaced.
*/
-static void joinStrings(
+static void joinStringsAndReplace(
const SimplePatternFormatter& pat,
const UnicodeString& first,
const UnicodeString& second,
@@ -269,7 +264,7 @@ static void joinStrings(
}
const UnicodeString *params[2] = {&first, &second};
int32_t offsets[2];
- pat.format(
+ pat.formatAndReplace(
params,
UPRV_LENGTHOF(params),
result,
@@ -325,69 +320,43 @@ UnicodeString& ListFormatter::format(
appendTo.append(items[0]);
return appendTo;
}
- if (nItems == 2) {
- if (index == 0) {
- offset = 0;
- }
- joinStrings(
- data->twoPattern,
- items[0],
- items[1],
- appendTo,
- index == 1,
- offset,
- errorCode);
- return appendTo;
- }
- UnicodeString temp[2];
+ UnicodeString result(items[0]);
if (index == 0) {
offset = 0;
}
- joinStrings(
- data->startPattern,
- items[0],
+ joinStringsAndReplace(
+ nItems == 2 ? data->twoPattern : data->startPattern,
+ result,
items[1],
- temp[0],
+ result,
index == 1,
offset,
errorCode);
- int32_t i;
- int32_t pos = 0;
- int32_t npos = 0;
- UBool startsWithZeroPlaceholder =
- data->middlePattern.startsWithPlaceholder(0);
- for (i = 2; i < nItems - 1; ++i) {
- if (!startsWithZeroPlaceholder) {
- npos = (pos + 1) & 1;
- temp[npos].remove();
- }
- joinStrings(
- data->middlePattern,
- temp[pos],
- items[i],
- temp[npos],
- index == i,
- offset,
- errorCode);
- pos = npos;
- }
- if (!data->endPattern.startsWithPlaceholder(0)) {
- npos = (pos + 1) & 1;
- temp[npos].remove();
+ if (nItems > 2) {
+ for (int32_t i = 2; i < nItems - 1; ++i) {
+ joinStringsAndReplace(
+ data->middlePattern,
+ result,
+ items[i],
+ result,
+ index == i,
+ offset,
+ errorCode);
+ }
+ joinStringsAndReplace(
+ data->endPattern,
+ result,
+ items[nItems - 1],
+ result,
+ index == nItems - 1,
+ offset,
+ errorCode);
}
- joinStrings(
- data->endPattern,
- temp[pos],
- items[nItems - 1],
- temp[npos],
- index == nItems - 1,
- offset,
- errorCode);
if (U_SUCCESS(errorCode)) {
if (offset >= 0) {
offset += appendTo.length();
}
- appendTo += temp[npos];
+ appendTo += result;
}
return appendTo;
}
« no previous file with comments | « source/common/icuplugimp.h ('k') | source/common/locid.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698