1 | // © 2016 and later: Unicode, Inc. and others. |
2 | // License & terms of use: http://www.unicode.org/copyright.html |
3 | /* |
4 | ******************************************************************************* |
5 | * Copyright (C) 2015, International Business Machines Corporation |
6 | * and others. All Rights Reserved. |
7 | ******************************************************************************* |
8 | * standardplural.h |
9 | * |
10 | * created on: 2015dec14 |
11 | * created by: Markus W. Scherer |
12 | */ |
13 | |
14 | #ifndef __STANDARDPLURAL_H__ |
15 | #define __STANDARDPLURAL_H__ |
16 | |
17 | #include "unicode/utypes.h" |
18 | |
19 | #if !UCONFIG_NO_FORMATTING |
20 | |
21 | U_NAMESPACE_BEGIN |
22 | |
23 | class UnicodeString; |
24 | |
25 | /** |
26 | * Standard CLDR plural form/category constants. |
27 | * See http://www.unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules |
28 | */ |
29 | class U_I18N_API StandardPlural { |
30 | public: |
31 | enum Form { |
32 | ZERO, |
33 | ONE, |
34 | TWO, |
35 | FEW, |
36 | MANY, |
37 | OTHER, |
38 | COUNT |
39 | }; |
40 | |
41 | /** |
42 | * @return the lowercase CLDR keyword string for the plural form |
43 | */ |
44 | static const char *getKeyword(Form p); |
45 | |
46 | /** |
47 | * @param keyword for example "few" or "other" |
48 | * @return the plural form corresponding to the keyword, or OTHER |
49 | */ |
50 | static Form orOtherFromString(const char *keyword) { |
51 | return static_cast<Form>(indexOrOtherIndexFromString(keyword)); |
52 | } |
53 | |
54 | /** |
55 | * @param keyword for example "few" or "other" |
56 | * @return the plural form corresponding to the keyword, or OTHER |
57 | */ |
58 | static Form orOtherFromString(const UnicodeString &keyword) { |
59 | return static_cast<Form>(indexOrOtherIndexFromString(keyword)); |
60 | } |
61 | |
62 | /** |
63 | * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form. |
64 | * |
65 | * @param keyword for example "few" or "other" |
66 | * @return the plural form corresponding to the keyword |
67 | */ |
68 | static Form fromString(const char *keyword, UErrorCode &errorCode) { |
69 | return static_cast<Form>(indexFromString(keyword, errorCode)); |
70 | } |
71 | |
72 | /** |
73 | * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form. |
74 | * |
75 | * @param keyword for example "few" or "other" |
76 | * @return the plural form corresponding to the keyword |
77 | */ |
78 | static Form fromString(const UnicodeString &keyword, UErrorCode &errorCode) { |
79 | return static_cast<Form>(indexFromString(keyword, errorCode)); |
80 | } |
81 | |
82 | /** |
83 | * @param keyword for example "few" or "other" |
84 | * @return the index of the plural form corresponding to the keyword, or a negative value |
85 | */ |
86 | static int32_t indexOrNegativeFromString(const char *keyword); |
87 | |
88 | /** |
89 | * @param keyword for example "few" or "other" |
90 | * @return the index of the plural form corresponding to the keyword, or a negative value |
91 | */ |
92 | static int32_t indexOrNegativeFromString(const UnicodeString &keyword); |
93 | |
94 | /** |
95 | * @param keyword for example "few" or "other" |
96 | * @return the index of the plural form corresponding to the keyword, or OTHER |
97 | */ |
98 | static int32_t indexOrOtherIndexFromString(const char *keyword) { |
99 | int32_t i = indexOrNegativeFromString(keyword); |
100 | return i >= 0 ? i : OTHER; |
101 | } |
102 | |
103 | /** |
104 | * @param keyword for example "few" or "other" |
105 | * @return the index of the plural form corresponding to the keyword, or OTHER |
106 | */ |
107 | static int32_t indexOrOtherIndexFromString(const UnicodeString &keyword) { |
108 | int32_t i = indexOrNegativeFromString(keyword); |
109 | return i >= 0 ? i : OTHER; |
110 | } |
111 | |
112 | /** |
113 | * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form. |
114 | * |
115 | * @param keyword for example "few" or "other" |
116 | * @return the index of the plural form corresponding to the keyword |
117 | */ |
118 | static int32_t indexFromString(const char *keyword, UErrorCode &errorCode); |
119 | |
120 | /** |
121 | * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form. |
122 | * |
123 | * @param keyword for example "few" or "other" |
124 | * @return the index of the plural form corresponding to the keyword |
125 | */ |
126 | static int32_t indexFromString(const UnicodeString &keyword, UErrorCode &errorCode); |
127 | }; |
128 | |
129 | U_NAMESPACE_END |
130 | |
131 | #endif // !UCONFIG_NO_FORMATTING |
132 | #endif // __STANDARDPLURAL_H__ |
133 | |