Source code

Revision control

Copy as Markdown

Other Tools

// © 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__