Line data Source code
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 0 : static Form orOtherFromString(const UnicodeString &keyword) {
59 0 : 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 0 : static int32_t indexOrOtherIndexFromString(const char *keyword) {
99 0 : int32_t i = indexOrNegativeFromString(keyword);
100 0 : 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 0 : static int32_t indexOrOtherIndexFromString(const UnicodeString &keyword) {
108 0 : int32_t i = indexOrNegativeFromString(keyword);
109 0 : 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__
|