Coverage Report

Created: 2025-06-13 06:34

/src/icu/icu4c/source/i18n/standardplural.h
Line
Count
Source (jump to first uncovered line)
1
// © 2016 and later: Unicode, Inc. and others.
2
// License & terms of use: http://www.unicode.org/copyright.html
3
/*
4
 *******************************************************************************
5
 * Copyright (C) 2015, International Business Machines Corporation
6
 * and others. All Rights Reserved.
7
 *******************************************************************************
8
 * standardplural.h
9
 *
10
 * created on: 2015dec14
11
 * created by: Markus W. Scherer
12
 */
13
14
#ifndef __STANDARDPLURAL_H__
15
#define __STANDARDPLURAL_H__
16
17
#include "unicode/utypes.h"
18
19
#if !UCONFIG_NO_FORMATTING
20
21
U_NAMESPACE_BEGIN
22
23
class UnicodeString;
24
25
/**
26
 * Standard CLDR plural form/category constants.
27
 * See http://www.unicode.org/reports/tr35/tr35-numbers.html#Language_Plural_Rules
28
 */
29
class U_I18N_API StandardPlural {
30
public:
31
    enum Form {
32
        ZERO,
33
        ONE,
34
        TWO,
35
        FEW,
36
        MANY,
37
        OTHER,
38
        EQ_0,
39
        EQ_1,
40
        COUNT
41
    };
42
43
    /**
44
     * @return the lowercase CLDR keyword string for the plural form
45
     */
46
    static const char *getKeyword(Form p);
47
48
    /**
49
     * @param keyword for example "few" or "other"
50
     * @return the plural form corresponding to the keyword, or OTHER
51
     */
52
0
    static Form orOtherFromString(const char *keyword) {
53
0
        return static_cast<Form>(indexOrOtherIndexFromString(keyword));
54
0
    }
55
56
    /**
57
     * @param keyword for example "few" or "other"
58
     * @return the plural form corresponding to the keyword, or OTHER
59
     */
60
0
    static Form orOtherFromString(const UnicodeString &keyword) {
61
0
        return static_cast<Form>(indexOrOtherIndexFromString(keyword));
62
0
    }
63
64
    /**
65
     * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form.
66
     *
67
     * @param keyword for example "few" or "other"
68
     * @return the plural form corresponding to the keyword
69
     */
70
0
    static Form fromString(const char *keyword, UErrorCode &errorCode) {
71
0
        return static_cast<Form>(indexFromString(keyword, errorCode));
72
0
    }
73
74
    /**
75
     * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form.
76
     *
77
     * @param keyword for example "few" or "other"
78
     * @return the plural form corresponding to the keyword
79
     */
80
0
    static Form fromString(const UnicodeString &keyword, UErrorCode &errorCode) {
81
0
        return static_cast<Form>(indexFromString(keyword, errorCode));
82
0
    }
83
84
    /**
85
     * @param keyword for example "few" or "other"
86
     * @return the index of the plural form corresponding to the keyword, or a negative value
87
     */
88
    static int32_t indexOrNegativeFromString(const char *keyword);
89
90
    /**
91
     * @param keyword for example "few" or "other"
92
     * @return the index of the plural form corresponding to the keyword, or a negative value
93
     */
94
    static int32_t indexOrNegativeFromString(const UnicodeString &keyword);
95
96
    /**
97
     * @param keyword for example "few" or "other"
98
     * @return the index of the plural form corresponding to the keyword, or OTHER
99
     */
100
0
    static int32_t indexOrOtherIndexFromString(const char *keyword) {
101
0
        int32_t i = indexOrNegativeFromString(keyword);
102
0
        return i >= 0 ? i : OTHER;
103
0
    }
104
105
    /**
106
     * @param keyword for example "few" or "other"
107
     * @return the index of the plural form corresponding to the keyword, or OTHER
108
     */
109
0
    static int32_t indexOrOtherIndexFromString(const UnicodeString &keyword) {
110
0
        int32_t i = indexOrNegativeFromString(keyword);
111
0
        return i >= 0 ? i : OTHER;
112
0
    }
113
114
    /**
115
     * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form.
116
     *
117
     * @param keyword for example "few" or "other"
118
     * @return the index of the plural form corresponding to the keyword
119
     */
120
    static int32_t indexFromString(const char *keyword, UErrorCode &errorCode);
121
122
    /**
123
     * Sets U_ILLEGAL_ARGUMENT_ERROR if the keyword is not a plural form.
124
     *
125
     * @param keyword for example "few" or "other"
126
     * @return the index of the plural form corresponding to the keyword
127
     */
128
    static int32_t indexFromString(const UnicodeString &keyword, UErrorCode &errorCode);
129
};
130
131
U_NAMESPACE_END
132
133
#endif  // !UCONFIG_NO_FORMATTING
134
#endif  // __STANDARDPLURAL_H__