1 // © 2016 and later: Unicode, Inc. and others.
2 // License & terms of use: http://www.unicode.org/copyright.html
4 *****************************************************************************************
5 * Copyright (C) 2010-2012, International Business Machines
6 * Corporation and others. All Rights Reserved.
7 *****************************************************************************************
10 #include "unicode/utypes.h"
12 #if !UCONFIG_NO_FORMATTING
14 #include "unicode/upluralrules.h"
15 #include "unicode/plurrule.h"
16 #include "unicode/locid.h"
17 #include "unicode/unistr.h"
18 #include "unicode/unum.h"
19 #include "unicode/numfmt.h"
24 U_CAPI UPluralRules
* U_EXPORT2
25 uplrules_open(const char *locale
, UErrorCode
*status
)
27 return uplrules_openForType(locale
, UPLURAL_TYPE_CARDINAL
, status
);
30 U_CAPI UPluralRules
* U_EXPORT2
31 uplrules_openForType(const char *locale
, UPluralType type
, UErrorCode
*status
)
33 return (UPluralRules
*)PluralRules::forLocale(Locale(locale
), type
, *status
);
37 uplrules_close(UPluralRules
*uplrules
)
39 delete (PluralRules
*)uplrules
;
42 U_CAPI
int32_t U_EXPORT2
43 uplrules_select(const UPluralRules
*uplrules
,
45 UChar
*keyword
, int32_t capacity
,
48 if (U_FAILURE(*status
)) {
51 if (keyword
== NULL
? capacity
!= 0 : capacity
< 0) {
52 *status
= U_ILLEGAL_ARGUMENT_ERROR
;
55 UnicodeString result
= ((PluralRules
*)uplrules
)->select(number
);
56 return result
.extract(keyword
, capacity
, *status
);
59 U_CAPI
int32_t U_EXPORT2
60 uplrules_selectWithFormat(const UPluralRules
*uplrules
,
62 const UNumberFormat
*fmt
,
63 UChar
*keyword
, int32_t capacity
,
66 if (U_FAILURE(*status
)) {
69 const PluralRules
* plrules
= reinterpret_cast<const PluralRules
*>(uplrules
);
70 const NumberFormat
* nf
= reinterpret_cast<const NumberFormat
*>(fmt
);
71 if (plrules
== NULL
|| nf
== NULL
|| ((keyword
== NULL
)? capacity
!= 0 : capacity
< 0)) {
72 *status
= U_ILLEGAL_ARGUMENT_ERROR
;
75 Formattable
obj(number
);
76 UnicodeString result
= plrules
->select(obj
, *nf
, *status
);
77 return result
.extract(keyword
, capacity
, *status
);
80 U_CAPI UEnumeration
* U_EXPORT2
81 uplrules_getKeywords(const UPluralRules
*uplrules
,
84 if (U_FAILURE(*status
)) {
87 const PluralRules
* plrules
= reinterpret_cast<const PluralRules
*>(uplrules
);
88 if (plrules
== NULL
) {
89 *status
= U_ILLEGAL_ARGUMENT_ERROR
;
92 StringEnumeration
*senum
= plrules
->getKeywords(*status
);
93 if (U_FAILURE(*status
)) {
97 *status
= U_MEMORY_ALLOCATION_ERROR
;
100 return uenum_openFromStringEnumeration(senum
, status
);
103 #endif /* #if !UCONFIG_NO_FORMATTING */