diff options
Diffstat (limited to 'intl/icu/source/i18n/unicode/displayoptions.h')
-rw-r--r-- | intl/icu/source/i18n/unicode/displayoptions.h | 274 |
1 files changed, 274 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/unicode/displayoptions.h b/intl/icu/source/i18n/unicode/displayoptions.h new file mode 100644 index 0000000000..7bc763bbac --- /dev/null +++ b/intl/icu/source/i18n/unicode/displayoptions.h @@ -0,0 +1,274 @@ +// © 2022 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#ifndef __DISPLAYOPTIONS_H__ +#define __DISPLAYOPTIONS_H__ + +#include "unicode/utypes.h" + +#if U_SHOW_CPLUSPLUS_API + +#if !UCONFIG_NO_FORMATTING + +/** + * \file + * \brief C++ API: Display options class + * + * This class is designed as a more modern version of the UDisplayContext mechanism. + */ + +#include "unicode/udisplayoptions.h" +#include "unicode/uversion.h" + +U_NAMESPACE_BEGIN + +#ifndef U_HIDE_DRAFT_API + +/** + * Represents all the display options that are supported by CLDR such as grammatical case, noun + * class, ... etc. It currently supports enums, but may be extended in the future to have other + * types of data. It replaces a DisplayContext[] as a method parameter. + * + * NOTE: This class is Immutable, and uses a Builder interface. + * + * For example: + * ``` + * DisplayOptions x = + * DisplayOptions::builder(). + * .setGrammaticalCase(UDISPOPT_GRAMMATICAL_CASE_DATIVE) + * .setPluralCategory(UDISPOPT_PLURAL_CATEGORY_FEW) + * .build(); + * ``` + * + * @draft ICU 72 + */ +class U_I18N_API DisplayOptions { +public: + /** + * Responsible for building `DisplayOptions`. + * + * @draft ICU 72 + */ + class U_I18N_API Builder { + public: + /** + * Sets the grammatical case. + * + * @param grammaticalCase The grammatical case. + * @return Builder + * @draft ICU 72 + */ + Builder &setGrammaticalCase(UDisplayOptionsGrammaticalCase grammaticalCase) { + this->grammaticalCase = grammaticalCase; + return *this; + } + + /** + * Sets the noun class. + * + * @param nounClass The noun class. + * @return Builder + * @draft ICU 72 + */ + Builder &setNounClass(UDisplayOptionsNounClass nounClass) { + this->nounClass = nounClass; + return *this; + } + + /** + * Sets the plural category. + * + * @param pluralCategory The plural category. + * @return Builder + * @draft ICU 72 + */ + Builder &setPluralCategory(UDisplayOptionsPluralCategory pluralCategory) { + this->pluralCategory = pluralCategory; + return *this; + } + + /** + * Sets the capitalization. + * + * @param capitalization The capitalization. + * @return Builder + * @draft ICU 72 + */ + Builder &setCapitalization(UDisplayOptionsCapitalization capitalization) { + this->capitalization = capitalization; + return *this; + } + + /** + * Sets the dialect handling. + * + * @param nameStyle The name style. + * @return Builder + * @draft ICU 72 + */ + Builder &setNameStyle(UDisplayOptionsNameStyle nameStyle) { + this->nameStyle = nameStyle; + return *this; + } + + /** + * Sets the display length. + * + * @param displayLength The display length. + * @return Builder + * @draft ICU 72 + */ + Builder &setDisplayLength(UDisplayOptionsDisplayLength displayLength) { + this->displayLength = displayLength; + return *this; + } + + /** + * Sets the substitute handling. + * + * @param substituteHandling The substitute handling. + * @return Builder + * @draft ICU 72 + */ + Builder &setSubstituteHandling(UDisplayOptionsSubstituteHandling substituteHandling) { + this->substituteHandling = substituteHandling; + return *this; + } + + /** + * Builds the display options. + * + * @return DisplayOptions + * @draft ICU 72 + */ + DisplayOptions build() { return DisplayOptions(*this); } + + private: + friend DisplayOptions; + + Builder(); + Builder(const DisplayOptions &displayOptions); + + UDisplayOptionsGrammaticalCase grammaticalCase; + UDisplayOptionsNounClass nounClass; + UDisplayOptionsPluralCategory pluralCategory; + UDisplayOptionsCapitalization capitalization; + UDisplayOptionsNameStyle nameStyle; + UDisplayOptionsDisplayLength displayLength; + UDisplayOptionsSubstituteHandling substituteHandling; + }; + + /** + * Creates a builder with the `UNDEFINED` values for all the parameters. + * + * @return Builder + * @draft ICU 72 + */ + static Builder builder(); + /** + * Creates a builder with the same parameters from this object. + * + * @return Builder + * @draft ICU 72 + */ + Builder copyToBuilder() const; + /** + * Gets the grammatical case. + * + * @return UDisplayOptionsGrammaticalCase + * @draft ICU 72 + */ + UDisplayOptionsGrammaticalCase getGrammaticalCase() const { return grammaticalCase; } + + /** + * Gets the noun class. + * + * @return UDisplayOptionsNounClass + * @draft ICU 72 + */ + UDisplayOptionsNounClass getNounClass() const { return nounClass; } + + /** + * Gets the plural category. + * + * @return UDisplayOptionsPluralCategory + * @draft ICU 72 + */ + UDisplayOptionsPluralCategory getPluralCategory() const { return pluralCategory; } + + /** + * Gets the capitalization. + * + * @return UDisplayOptionsCapitalization + * @draft ICU 72 + */ + UDisplayOptionsCapitalization getCapitalization() const { return capitalization; } + + /** + * Gets the dialect handling. + * + * @return UDisplayOptionsNameStyle + * @draft ICU 72 + */ + UDisplayOptionsNameStyle getNameStyle() const { return nameStyle; } + + /** + * Gets the display length. + * + * @return UDisplayOptionsDisplayLength + * @draft ICU 72 + */ + UDisplayOptionsDisplayLength getDisplayLength() const { return displayLength; } + + /** + * Gets the substitute handling. + * + * @return UDisplayOptionsSubstituteHandling + * @draft ICU 72 + */ + UDisplayOptionsSubstituteHandling getSubstituteHandling() const { return substituteHandling; } + + /** + * Copies the DisplayOptions. + * + * @param other The options to copy. + * @draft ICU 72 + */ + DisplayOptions &operator=(const DisplayOptions &other) = default; + + /** + * Moves the DisplayOptions. + * + * @param other The options to move from. + * @draft ICU 72 + */ + DisplayOptions &operator=(DisplayOptions &&other) noexcept = default; + + /** + * Copies the DisplayOptions. + * + * @param other The options to copy. + * @draft ICU 72 + */ + DisplayOptions(const DisplayOptions &other) = default; + +private: + DisplayOptions(const Builder &builder); + UDisplayOptionsGrammaticalCase grammaticalCase; + UDisplayOptionsNounClass nounClass; + UDisplayOptionsPluralCategory pluralCategory; + UDisplayOptionsCapitalization capitalization; + UDisplayOptionsNameStyle nameStyle; + UDisplayOptionsDisplayLength displayLength; + UDisplayOptionsSubstituteHandling substituteHandling; +}; + +#endif // U_HIDE_DRAFT_API + +U_NAMESPACE_END + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif /* U_SHOW_CPLUSPLUS_API */ + +#endif // __DISPLAYOPTIONS_H__ |