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