Coverage Report

Created: 2025-09-05 07:16

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