]> git.saurik.com Git - apple/icu.git/blob - icuSources/i18n/standardplural.h
ICU-66108.tar.gz
[apple/icu.git] / icuSources / i18n / standardplural.h
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__