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