displayoptions.cpp (4835B)
1 // © 2022 and later: Unicode, Inc. and others. 2 // License & terms of use: http://www.unicode.org/copyright.html 3 4 #include "unicode/utypes.h" 5 6 #if !UCONFIG_NO_FORMATTING 7 8 #include "unicode/displayoptions.h" 9 #include "unicode/udisplayoptions.h" 10 #include "cstring.h" 11 12 U_NAMESPACE_BEGIN 13 14 DisplayOptions::Builder DisplayOptions::builder() { return {}; } 15 16 DisplayOptions::Builder DisplayOptions::copyToBuilder() const { return Builder(*this); } 17 18 DisplayOptions::DisplayOptions(const Builder &builder) { 19 grammaticalCase = builder.grammaticalCase; 20 nounClass = builder.nounClass; 21 pluralCategory = builder.pluralCategory; 22 capitalization = builder.capitalization; 23 nameStyle = builder.nameStyle; 24 displayLength = builder.displayLength; 25 substituteHandling = builder.substituteHandling; 26 } 27 28 DisplayOptions::Builder::Builder() { 29 // Sets default values. 30 grammaticalCase = UDISPOPT_GRAMMATICAL_CASE_UNDEFINED; 31 nounClass = UDISPOPT_NOUN_CLASS_UNDEFINED; 32 pluralCategory = UDISPOPT_PLURAL_CATEGORY_UNDEFINED; 33 capitalization = UDISPOPT_CAPITALIZATION_UNDEFINED; 34 nameStyle = UDISPOPT_NAME_STYLE_UNDEFINED; 35 displayLength = UDISPOPT_DISPLAY_LENGTH_UNDEFINED; 36 substituteHandling = UDISPOPT_SUBSTITUTE_HANDLING_UNDEFINED; 37 } 38 39 DisplayOptions::Builder::Builder(const DisplayOptions &displayOptions) { 40 grammaticalCase = displayOptions.grammaticalCase; 41 nounClass = displayOptions.nounClass; 42 pluralCategory = displayOptions.pluralCategory; 43 capitalization = displayOptions.capitalization; 44 nameStyle = displayOptions.nameStyle; 45 displayLength = displayOptions.displayLength; 46 substituteHandling = displayOptions.substituteHandling; 47 } 48 49 U_NAMESPACE_END 50 51 // C API ------------------------------------------------------------------- *** 52 53 U_NAMESPACE_USE 54 55 namespace { 56 57 const char *grammaticalCaseIds[] = { 58 "undefined", // 0 59 "ablative", // 1 60 "accusative", // 2 61 "comitative", // 3 62 "dative", // 4 63 "ergative", // 5 64 "genitive", // 6 65 "instrumental", // 7 66 "locative", // 8 67 "locative_copulative", // 9 68 "nominative", // 10 69 "oblique", // 11 70 "prepositional", // 12 71 "sociative", // 13 72 "vocative", // 14 73 }; 74 75 } // namespace 76 77 U_CAPI const char * U_EXPORT2 78 udispopt_getGrammaticalCaseIdentifier(UDisplayOptionsGrammaticalCase grammaticalCase) { 79 if (grammaticalCase >= 0 && grammaticalCase < UPRV_LENGTHOF(grammaticalCaseIds)) { 80 return grammaticalCaseIds[grammaticalCase]; 81 } 82 83 return grammaticalCaseIds[0]; 84 } 85 86 U_CAPI UDisplayOptionsGrammaticalCase U_EXPORT2 87 udispopt_fromGrammaticalCaseIdentifier(const char *identifier) { 88 for (int32_t i = 0; i < UPRV_LENGTHOF(grammaticalCaseIds); i++) { 89 if (uprv_strcmp(identifier, grammaticalCaseIds[i]) == 0) { 90 return static_cast<UDisplayOptionsGrammaticalCase>(i); 91 } 92 } 93 94 return UDISPOPT_GRAMMATICAL_CASE_UNDEFINED; 95 } 96 97 namespace { 98 99 const char *pluralCategoryIds[] = { 100 "undefined", // 0 101 "zero", // 1 102 "one", // 2 103 "two", // 3 104 "few", // 4 105 "many", // 5 106 "other", // 6 107 }; 108 109 } // namespace 110 111 U_CAPI const char * U_EXPORT2 112 udispopt_getPluralCategoryIdentifier(UDisplayOptionsPluralCategory pluralCategory) { 113 if (pluralCategory >= 0 && pluralCategory < UPRV_LENGTHOF(pluralCategoryIds)) { 114 return pluralCategoryIds[pluralCategory]; 115 } 116 117 return pluralCategoryIds[0]; 118 } 119 120 U_CAPI UDisplayOptionsPluralCategory U_EXPORT2 121 udispopt_fromPluralCategoryIdentifier(const char *identifier) { 122 for (int32_t i = 0; i < UPRV_LENGTHOF(pluralCategoryIds); i++) { 123 if (uprv_strcmp(identifier, pluralCategoryIds[i]) == 0) { 124 return static_cast<UDisplayOptionsPluralCategory>(i); 125 } 126 } 127 128 return UDISPOPT_PLURAL_CATEGORY_UNDEFINED; 129 } 130 131 namespace { 132 133 const char *nounClassIds[] = { 134 "undefined", // 0 135 "other", // 1 136 "neuter", // 2 137 "feminine", // 3 138 "masculine", // 4 139 "animate", // 5 140 "inanimate", // 6 141 "personal", // 7 142 "common", // 8 143 }; 144 145 } // namespace 146 147 U_CAPI const char * U_EXPORT2 148 udispopt_getNounClassIdentifier(UDisplayOptionsNounClass nounClass) { 149 if (nounClass >= 0 && nounClass < UPRV_LENGTHOF(nounClassIds)) { 150 return nounClassIds[nounClass]; 151 } 152 153 return nounClassIds[0]; 154 } 155 156 U_CAPI UDisplayOptionsNounClass U_EXPORT2 157 udispopt_fromNounClassIdentifier(const char *identifier) { 158 for (int32_t i = 0; i < UPRV_LENGTHOF(nounClassIds); i++) { 159 if (uprv_strcmp(identifier, nounClassIds[i]) == 0) { 160 return static_cast<UDisplayOptionsNounClass>(i); 161 } 162 } 163 164 return UDISPOPT_NOUN_CLASS_UNDEFINED; 165 } 166 167 #endif /* #if !UCONFIG_NO_FORMATTING */