xref: /aosp_15_r20/external/icu/libicu/cts_headers/unicode/displayoptions.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2022 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker 
4*0e209d39SAndroid Build Coastguard Worker #ifndef __DISPLAYOPTIONS_H__
5*0e209d39SAndroid Build Coastguard Worker #define __DISPLAYOPTIONS_H__
6*0e209d39SAndroid Build Coastguard Worker 
7*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
8*0e209d39SAndroid Build Coastguard Worker 
9*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
10*0e209d39SAndroid Build Coastguard Worker 
11*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
12*0e209d39SAndroid Build Coastguard Worker 
13*0e209d39SAndroid Build Coastguard Worker /**
14*0e209d39SAndroid Build Coastguard Worker  * \file
15*0e209d39SAndroid Build Coastguard Worker  * \brief C++ API: Display options class
16*0e209d39SAndroid Build Coastguard Worker  *
17*0e209d39SAndroid Build Coastguard Worker  * This class is designed as a more modern version of the UDisplayContext mechanism.
18*0e209d39SAndroid Build Coastguard Worker  */
19*0e209d39SAndroid Build Coastguard Worker 
20*0e209d39SAndroid Build Coastguard Worker #include "unicode/udisplayoptions.h"
21*0e209d39SAndroid Build Coastguard Worker #include "unicode/uversion.h"
22*0e209d39SAndroid Build Coastguard Worker 
23*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
24*0e209d39SAndroid Build Coastguard Worker 
25*0e209d39SAndroid Build Coastguard Worker /**
26*0e209d39SAndroid Build Coastguard Worker  * Represents all the display options that are supported by CLDR such as grammatical case, noun
27*0e209d39SAndroid Build Coastguard Worker  * class, ... etc. It currently supports enums, but may be extended in the future to have other
28*0e209d39SAndroid Build Coastguard Worker  * types of data. It replaces a DisplayContext[] as a method parameter.
29*0e209d39SAndroid Build Coastguard Worker  *
30*0e209d39SAndroid Build Coastguard Worker  * NOTE: This class is Immutable, and uses a Builder interface.
31*0e209d39SAndroid Build Coastguard Worker  *
32*0e209d39SAndroid Build Coastguard Worker  * For example:
33*0e209d39SAndroid Build Coastguard Worker  * ```
34*0e209d39SAndroid Build Coastguard Worker  * DisplayOptions x =
35*0e209d39SAndroid Build Coastguard Worker  *     DisplayOptions::builder().
36*0e209d39SAndroid Build Coastguard Worker  *         .setGrammaticalCase(UDISPOPT_GRAMMATICAL_CASE_DATIVE)
37*0e209d39SAndroid Build Coastguard Worker  *         .setPluralCategory(UDISPOPT_PLURAL_CATEGORY_FEW)
38*0e209d39SAndroid Build Coastguard Worker  *         .build();
39*0e209d39SAndroid Build Coastguard Worker  * ```
40*0e209d39SAndroid Build Coastguard Worker  *
41*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 72
42*0e209d39SAndroid Build Coastguard Worker  */
43*0e209d39SAndroid Build Coastguard Worker class U_I18N_API DisplayOptions {
44*0e209d39SAndroid Build Coastguard Worker public:
45*0e209d39SAndroid Build Coastguard Worker     /**
46*0e209d39SAndroid Build Coastguard Worker      * Responsible for building `DisplayOptions`.
47*0e209d39SAndroid Build Coastguard Worker      *
48*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
49*0e209d39SAndroid Build Coastguard Worker      */
50*0e209d39SAndroid Build Coastguard Worker     class U_I18N_API Builder {
51*0e209d39SAndroid Build Coastguard Worker     public:
52*0e209d39SAndroid Build Coastguard Worker         /**
53*0e209d39SAndroid Build Coastguard Worker          * Sets the grammatical case.
54*0e209d39SAndroid Build Coastguard Worker          *
55*0e209d39SAndroid Build Coastguard Worker          * @param grammaticalCase The grammatical case.
56*0e209d39SAndroid Build Coastguard Worker          * @return Builder
57*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
58*0e209d39SAndroid Build Coastguard Worker          */
setGrammaticalCase(UDisplayOptionsGrammaticalCase grammaticalCase)59*0e209d39SAndroid Build Coastguard Worker         Builder &setGrammaticalCase(UDisplayOptionsGrammaticalCase grammaticalCase) {
60*0e209d39SAndroid Build Coastguard Worker             this->grammaticalCase = grammaticalCase;
61*0e209d39SAndroid Build Coastguard Worker             return *this;
62*0e209d39SAndroid Build Coastguard Worker         }
63*0e209d39SAndroid Build Coastguard Worker 
64*0e209d39SAndroid Build Coastguard Worker         /**
65*0e209d39SAndroid Build Coastguard Worker          * Sets the noun class.
66*0e209d39SAndroid Build Coastguard Worker          *
67*0e209d39SAndroid Build Coastguard Worker          * @param nounClass The noun class.
68*0e209d39SAndroid Build Coastguard Worker          * @return Builder
69*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
70*0e209d39SAndroid Build Coastguard Worker          */
setNounClass(UDisplayOptionsNounClass nounClass)71*0e209d39SAndroid Build Coastguard Worker         Builder &setNounClass(UDisplayOptionsNounClass nounClass) {
72*0e209d39SAndroid Build Coastguard Worker             this->nounClass = nounClass;
73*0e209d39SAndroid Build Coastguard Worker             return *this;
74*0e209d39SAndroid Build Coastguard Worker         }
75*0e209d39SAndroid Build Coastguard Worker 
76*0e209d39SAndroid Build Coastguard Worker         /**
77*0e209d39SAndroid Build Coastguard Worker          * Sets the plural category.
78*0e209d39SAndroid Build Coastguard Worker          *
79*0e209d39SAndroid Build Coastguard Worker          * @param pluralCategory The plural category.
80*0e209d39SAndroid Build Coastguard Worker          * @return Builder
81*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
82*0e209d39SAndroid Build Coastguard Worker          */
setPluralCategory(UDisplayOptionsPluralCategory pluralCategory)83*0e209d39SAndroid Build Coastguard Worker         Builder &setPluralCategory(UDisplayOptionsPluralCategory pluralCategory) {
84*0e209d39SAndroid Build Coastguard Worker             this->pluralCategory = pluralCategory;
85*0e209d39SAndroid Build Coastguard Worker             return *this;
86*0e209d39SAndroid Build Coastguard Worker         }
87*0e209d39SAndroid Build Coastguard Worker 
88*0e209d39SAndroid Build Coastguard Worker         /**
89*0e209d39SAndroid Build Coastguard Worker          * Sets the capitalization.
90*0e209d39SAndroid Build Coastguard Worker          *
91*0e209d39SAndroid Build Coastguard Worker          * @param capitalization The capitalization.
92*0e209d39SAndroid Build Coastguard Worker          * @return Builder
93*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
94*0e209d39SAndroid Build Coastguard Worker          */
setCapitalization(UDisplayOptionsCapitalization capitalization)95*0e209d39SAndroid Build Coastguard Worker         Builder &setCapitalization(UDisplayOptionsCapitalization capitalization) {
96*0e209d39SAndroid Build Coastguard Worker             this->capitalization = capitalization;
97*0e209d39SAndroid Build Coastguard Worker             return *this;
98*0e209d39SAndroid Build Coastguard Worker         }
99*0e209d39SAndroid Build Coastguard Worker 
100*0e209d39SAndroid Build Coastguard Worker         /**
101*0e209d39SAndroid Build Coastguard Worker          * Sets the dialect handling.
102*0e209d39SAndroid Build Coastguard Worker          *
103*0e209d39SAndroid Build Coastguard Worker          * @param nameStyle The name style.
104*0e209d39SAndroid Build Coastguard Worker          * @return Builder
105*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
106*0e209d39SAndroid Build Coastguard Worker          */
setNameStyle(UDisplayOptionsNameStyle nameStyle)107*0e209d39SAndroid Build Coastguard Worker         Builder &setNameStyle(UDisplayOptionsNameStyle nameStyle) {
108*0e209d39SAndroid Build Coastguard Worker             this->nameStyle = nameStyle;
109*0e209d39SAndroid Build Coastguard Worker             return *this;
110*0e209d39SAndroid Build Coastguard Worker         }
111*0e209d39SAndroid Build Coastguard Worker 
112*0e209d39SAndroid Build Coastguard Worker         /**
113*0e209d39SAndroid Build Coastguard Worker          * Sets the display length.
114*0e209d39SAndroid Build Coastguard Worker          *
115*0e209d39SAndroid Build Coastguard Worker          * @param displayLength The display length.
116*0e209d39SAndroid Build Coastguard Worker          * @return Builder
117*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
118*0e209d39SAndroid Build Coastguard Worker          */
setDisplayLength(UDisplayOptionsDisplayLength displayLength)119*0e209d39SAndroid Build Coastguard Worker         Builder &setDisplayLength(UDisplayOptionsDisplayLength displayLength) {
120*0e209d39SAndroid Build Coastguard Worker             this->displayLength = displayLength;
121*0e209d39SAndroid Build Coastguard Worker             return *this;
122*0e209d39SAndroid Build Coastguard Worker         }
123*0e209d39SAndroid Build Coastguard Worker 
124*0e209d39SAndroid Build Coastguard Worker         /**
125*0e209d39SAndroid Build Coastguard Worker          * Sets the substitute handling.
126*0e209d39SAndroid Build Coastguard Worker          *
127*0e209d39SAndroid Build Coastguard Worker          * @param substituteHandling The substitute handling.
128*0e209d39SAndroid Build Coastguard Worker          * @return Builder
129*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
130*0e209d39SAndroid Build Coastguard Worker          */
setSubstituteHandling(UDisplayOptionsSubstituteHandling substituteHandling)131*0e209d39SAndroid Build Coastguard Worker         Builder &setSubstituteHandling(UDisplayOptionsSubstituteHandling substituteHandling) {
132*0e209d39SAndroid Build Coastguard Worker             this->substituteHandling = substituteHandling;
133*0e209d39SAndroid Build Coastguard Worker             return *this;
134*0e209d39SAndroid Build Coastguard Worker         }
135*0e209d39SAndroid Build Coastguard Worker 
136*0e209d39SAndroid Build Coastguard Worker         /**
137*0e209d39SAndroid Build Coastguard Worker          * Builds the display options.
138*0e209d39SAndroid Build Coastguard Worker          *
139*0e209d39SAndroid Build Coastguard Worker          * @return DisplayOptions
140*0e209d39SAndroid Build Coastguard Worker          * @stable ICU 72
141*0e209d39SAndroid Build Coastguard Worker          */
build()142*0e209d39SAndroid Build Coastguard Worker         DisplayOptions build() { return DisplayOptions(*this); }
143*0e209d39SAndroid Build Coastguard Worker 
144*0e209d39SAndroid Build Coastguard Worker     private:
145*0e209d39SAndroid Build Coastguard Worker         friend DisplayOptions;
146*0e209d39SAndroid Build Coastguard Worker 
147*0e209d39SAndroid Build Coastguard Worker         Builder();
148*0e209d39SAndroid Build Coastguard Worker         Builder(const DisplayOptions &displayOptions);
149*0e209d39SAndroid Build Coastguard Worker 
150*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsGrammaticalCase grammaticalCase;
151*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsNounClass nounClass;
152*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsPluralCategory pluralCategory;
153*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsCapitalization capitalization;
154*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsNameStyle nameStyle;
155*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsDisplayLength displayLength;
156*0e209d39SAndroid Build Coastguard Worker         UDisplayOptionsSubstituteHandling substituteHandling;
157*0e209d39SAndroid Build Coastguard Worker     };
158*0e209d39SAndroid Build Coastguard Worker 
159*0e209d39SAndroid Build Coastguard Worker     /**
160*0e209d39SAndroid Build Coastguard Worker      * Creates a builder with the `UNDEFINED` values for all the parameters.
161*0e209d39SAndroid Build Coastguard Worker      *
162*0e209d39SAndroid Build Coastguard Worker      * @return Builder
163*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
164*0e209d39SAndroid Build Coastguard Worker      */
165*0e209d39SAndroid Build Coastguard Worker     static Builder builder();
166*0e209d39SAndroid Build Coastguard Worker     /**
167*0e209d39SAndroid Build Coastguard Worker      * Creates a builder with the same parameters from this object.
168*0e209d39SAndroid Build Coastguard Worker      *
169*0e209d39SAndroid Build Coastguard Worker      * @return Builder
170*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
171*0e209d39SAndroid Build Coastguard Worker      */
172*0e209d39SAndroid Build Coastguard Worker     Builder copyToBuilder() const;
173*0e209d39SAndroid Build Coastguard Worker     /**
174*0e209d39SAndroid Build Coastguard Worker      * Gets the grammatical case.
175*0e209d39SAndroid Build Coastguard Worker      *
176*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsGrammaticalCase
177*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
178*0e209d39SAndroid Build Coastguard Worker      */
getGrammaticalCase()179*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsGrammaticalCase getGrammaticalCase() const { return grammaticalCase; }
180*0e209d39SAndroid Build Coastguard Worker 
181*0e209d39SAndroid Build Coastguard Worker     /**
182*0e209d39SAndroid Build Coastguard Worker      * Gets the noun class.
183*0e209d39SAndroid Build Coastguard Worker      *
184*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsNounClass
185*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
186*0e209d39SAndroid Build Coastguard Worker      */
getNounClass()187*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsNounClass getNounClass() const { return nounClass; }
188*0e209d39SAndroid Build Coastguard Worker 
189*0e209d39SAndroid Build Coastguard Worker     /**
190*0e209d39SAndroid Build Coastguard Worker      * Gets the plural category.
191*0e209d39SAndroid Build Coastguard Worker      *
192*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsPluralCategory
193*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
194*0e209d39SAndroid Build Coastguard Worker      */
getPluralCategory()195*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsPluralCategory getPluralCategory() const { return pluralCategory; }
196*0e209d39SAndroid Build Coastguard Worker 
197*0e209d39SAndroid Build Coastguard Worker     /**
198*0e209d39SAndroid Build Coastguard Worker      * Gets the capitalization.
199*0e209d39SAndroid Build Coastguard Worker      *
200*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsCapitalization
201*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
202*0e209d39SAndroid Build Coastguard Worker      */
getCapitalization()203*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsCapitalization getCapitalization() const { return capitalization; }
204*0e209d39SAndroid Build Coastguard Worker 
205*0e209d39SAndroid Build Coastguard Worker     /**
206*0e209d39SAndroid Build Coastguard Worker      * Gets the dialect handling.
207*0e209d39SAndroid Build Coastguard Worker      *
208*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsNameStyle
209*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
210*0e209d39SAndroid Build Coastguard Worker      */
getNameStyle()211*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsNameStyle getNameStyle() const { return nameStyle; }
212*0e209d39SAndroid Build Coastguard Worker 
213*0e209d39SAndroid Build Coastguard Worker     /**
214*0e209d39SAndroid Build Coastguard Worker      * Gets the display length.
215*0e209d39SAndroid Build Coastguard Worker      *
216*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsDisplayLength
217*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
218*0e209d39SAndroid Build Coastguard Worker      */
getDisplayLength()219*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsDisplayLength getDisplayLength() const { return displayLength; }
220*0e209d39SAndroid Build Coastguard Worker 
221*0e209d39SAndroid Build Coastguard Worker     /**
222*0e209d39SAndroid Build Coastguard Worker      * Gets the substitute handling.
223*0e209d39SAndroid Build Coastguard Worker      *
224*0e209d39SAndroid Build Coastguard Worker      * @return UDisplayOptionsSubstituteHandling
225*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
226*0e209d39SAndroid Build Coastguard Worker      */
getSubstituteHandling()227*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsSubstituteHandling getSubstituteHandling() const { return substituteHandling; }
228*0e209d39SAndroid Build Coastguard Worker 
229*0e209d39SAndroid Build Coastguard Worker     /**
230*0e209d39SAndroid Build Coastguard Worker      * Copies the DisplayOptions.
231*0e209d39SAndroid Build Coastguard Worker      *
232*0e209d39SAndroid Build Coastguard Worker      * @param other The options to copy.
233*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
234*0e209d39SAndroid Build Coastguard Worker      */
235*0e209d39SAndroid Build Coastguard Worker     DisplayOptions &operator=(const DisplayOptions &other) = default;
236*0e209d39SAndroid Build Coastguard Worker 
237*0e209d39SAndroid Build Coastguard Worker     /**
238*0e209d39SAndroid Build Coastguard Worker      * Moves the DisplayOptions.
239*0e209d39SAndroid Build Coastguard Worker      *
240*0e209d39SAndroid Build Coastguard Worker      * @param other The options to move from.
241*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
242*0e209d39SAndroid Build Coastguard Worker      */
243*0e209d39SAndroid Build Coastguard Worker     DisplayOptions &operator=(DisplayOptions &&other) noexcept = default;
244*0e209d39SAndroid Build Coastguard Worker 
245*0e209d39SAndroid Build Coastguard Worker     /**
246*0e209d39SAndroid Build Coastguard Worker      * Copies the DisplayOptions.
247*0e209d39SAndroid Build Coastguard Worker      *
248*0e209d39SAndroid Build Coastguard Worker      * @param other The options to copy.
249*0e209d39SAndroid Build Coastguard Worker      * @stable ICU 72
250*0e209d39SAndroid Build Coastguard Worker      */
251*0e209d39SAndroid Build Coastguard Worker     DisplayOptions(const DisplayOptions &other) = default;
252*0e209d39SAndroid Build Coastguard Worker 
253*0e209d39SAndroid Build Coastguard Worker private:
254*0e209d39SAndroid Build Coastguard Worker     DisplayOptions(const Builder &builder);
255*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsGrammaticalCase grammaticalCase;
256*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsNounClass nounClass;
257*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsPluralCategory pluralCategory;
258*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsCapitalization capitalization;
259*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsNameStyle nameStyle;
260*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsDisplayLength displayLength;
261*0e209d39SAndroid Build Coastguard Worker     UDisplayOptionsSubstituteHandling substituteHandling;
262*0e209d39SAndroid Build Coastguard Worker };
263*0e209d39SAndroid Build Coastguard Worker 
264*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
265*0e209d39SAndroid Build Coastguard Worker 
266*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */
267*0e209d39SAndroid Build Coastguard Worker 
268*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */
269*0e209d39SAndroid Build Coastguard Worker 
270*0e209d39SAndroid Build Coastguard Worker #endif // __DISPLAYOPTIONS_H__
271