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

Side by Side Diff: source/i18n/standardplural.cpp

Issue 1621943002: ICU 56 step 4: Apply post-56 fixes for measure/date format (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/icu.git@56goog
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 unified diff | Download patch
« no previous file with comments | « source/i18n/standardplural.h ('k') | source/i18n/timezone.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 /*
2 *******************************************************************************
3 * Copyright (C) 2015, International Business Machines Corporation
4 * and others. All Rights Reserved.
5 *******************************************************************************
6 * standardplural.cpp
7 *
8 * created on: 2015dec14
9 * created by: Markus W. Scherer
10 */
11
12 #include "unicode/utypes.h"
13
14 #if !UCONFIG_NO_FORMATTING
15
16 #include "unicode/unistr.h"
17 #include "cstring.h"
18 #include "standardplural.h"
19 #include "uassert.h"
20
21 U_NAMESPACE_BEGIN
22
23 static const char *gKeywords[StandardPlural::COUNT] = {
24 "zero", "one", "two", "few", "many", "other"
25 };
26
27 const char *StandardPlural::getKeyword(Form p) {
28 U_ASSERT(ZERO <= p && p < COUNT);
29 return gKeywords[p];
30 }
31
32 int32_t StandardPlural::indexOrNegativeFromString(const char *keyword) {
33 switch (*keyword++) {
34 case 'f':
35 if (uprv_strcmp(keyword, "ew") == 0) {
36 return FEW;
37 }
38 break;
39 case 'm':
40 if (uprv_strcmp(keyword, "any") == 0) {
41 return MANY;
42 }
43 break;
44 case 'o':
45 if (uprv_strcmp(keyword, "ther") == 0) {
46 return OTHER;
47 } else if (uprv_strcmp(keyword, "ne") == 0) {
48 return ONE;
49 }
50 break;
51 case 't':
52 if (uprv_strcmp(keyword, "wo") == 0) {
53 return TWO;
54 }
55 break;
56 case 'z':
57 if (uprv_strcmp(keyword, "ero") == 0) {
58 return ZERO;
59 }
60 break;
61 default:
62 break;
63 }
64 return -1;
65 }
66
67 static const UChar gZero[] = { 0x7A, 0x65, 0x72, 0x6F };
68 static const UChar gOne[] = { 0x6F, 0x6E, 0x65 };
69 static const UChar gTwo[] = { 0x74, 0x77, 0x6F };
70 static const UChar gFew[] = { 0x66, 0x65, 0x77 };
71 static const UChar gMany[] = { 0x6D, 0x61, 0x6E, 0x79 };
72 static const UChar gOther[] = { 0x6F, 0x74, 0x68, 0x65, 0x72 };
73
74 int32_t StandardPlural::indexOrNegativeFromString(const UnicodeString &keyword) {
75 switch (keyword.length()) {
76 case 3:
77 if (keyword.compare(gOne, 3) == 0) {
78 return ONE;
79 } else if (keyword.compare(gTwo, 3) == 0) {
80 return TWO;
81 } else if (keyword.compare(gFew, 3) == 0) {
82 return FEW;
83 }
84 break;
85 case 4:
86 if (keyword.compare(gMany, 4) == 0) {
87 return MANY;
88 } else if (keyword.compare(gZero, 4) == 0) {
89 return ZERO;
90 }
91 break;
92 case 5:
93 if (keyword.compare(gOther, 5) == 0) {
94 return OTHER;
95 }
96 break;
97 default:
98 break;
99 }
100 return -1;
101 }
102
103 int32_t StandardPlural::indexFromString(const char *keyword, UErrorCode &errorCo de) {
104 if (U_FAILURE(errorCode)) { return OTHER; }
105 int32_t i = indexOrNegativeFromString(keyword);
106 if (i >= 0) {
107 return i;
108 } else {
109 errorCode = U_ILLEGAL_ARGUMENT_ERROR;
110 return OTHER;
111 }
112 }
113
114 int32_t StandardPlural::indexFromString(const UnicodeString &keyword, UErrorCode &errorCode) {
115 if (U_FAILURE(errorCode)) { return OTHER; }
116 int32_t i = indexOrNegativeFromString(keyword);
117 if (i >= 0) {
118 return i;
119 } else {
120 errorCode = U_ILLEGAL_ARGUMENT_ERROR;
121 return OTHER;
122 }
123 }
124
125 U_NAMESPACE_END
126
127 #endif // !UCONFIG_NO_FORMATTING
OLDNEW
« no previous file with comments | « source/i18n/standardplural.h ('k') | source/i18n/timezone.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698