Home | History | Annotate | Download | only in common
      1 //  2018 and later: Unicode, Inc. and others.
      2 // License & terms of use: http://www.unicode.org/copyright.html
      3 
      4 // This file is in common instead of i18n because it is needed by ucurr.cpp.
      5 
      6 #include "unicode/utypes.h"
      7 
      8 #if !UCONFIG_NO_FORMATTING
      9 #ifndef __STATIC_UNICODE_SETS_H__
     10 #define __STATIC_UNICODE_SETS_H__
     11 
     12 #include "unicode/uniset.h"
     13 #include "unicode/unistr.h"
     14 
     15 U_NAMESPACE_BEGIN
     16 namespace unisets {
     17 
     18 enum Key {
     19     // NONE is used to indicate null in chooseFrom().
     20     // EMPTY is used to get an empty UnicodeSet.
     21     NONE = -1,
     22     EMPTY = 0,
     23 
     24     // Ignorables
     25     DEFAULT_IGNORABLES,
     26     STRICT_IGNORABLES,
     27 
     28     // Separators
     29     // Notes:
     30     // - COMMA is a superset of STRICT_COMMA
     31     // - PERIOD is a superset of SCRICT_PERIOD
     32     // - ALL_SEPARATORS is the union of COMMA, PERIOD, and OTHER_GROUPING_SEPARATORS
     33     // - STRICT_ALL_SEPARATORS is the union of STRICT_COMMA, STRICT_PERIOD, and OTHER_GRP_SEPARATORS
     34     COMMA,
     35     PERIOD,
     36     STRICT_COMMA,
     37     STRICT_PERIOD,
     38     OTHER_GROUPING_SEPARATORS,
     39     ALL_SEPARATORS,
     40     STRICT_ALL_SEPARATORS,
     41 
     42     // Symbols
     43     MINUS_SIGN,
     44     PLUS_SIGN,
     45     PERCENT_SIGN,
     46     PERMILLE_SIGN,
     47     INFINITY_KEY, // INFINITY is defined in cmath
     48 
     49     // Currency Symbols
     50     DOLLAR_SIGN,
     51     POUND_SIGN,
     52     RUPEE_SIGN,
     53     YEN_SIGN, // not in CLDR data, but Currency.java wants it
     54 
     55     // Other
     56     DIGITS,
     57 
     58     // Combined Separators with Digits (for lead code points)
     59     DIGITS_OR_ALL_SEPARATORS,
     60     DIGITS_OR_STRICT_ALL_SEPARATORS,
     61 
     62     // The number of elements in the enum.
     63     COUNT
     64 };
     65 
     66 /**
     67  * Gets the static-allocated UnicodeSet according to the provided key. The
     68  * pointer will be deleted during u_cleanup(); the caller should NOT delete it.
     69  *
     70  * Exported as U_COMMON_API for ucurr.cpp
     71  *
     72  * @param key The desired UnicodeSet according to the enum in this file.
     73  * @return The requested UnicodeSet. Guaranteed to be frozen and non-null, but
     74  *         may be empty if an error occurred during data loading.
     75  */
     76 U_COMMON_API const UnicodeSet* get(Key key);
     77 
     78 /**
     79  * Checks if the UnicodeSet given by key1 contains the given string.
     80  *
     81  * Exported as U_COMMON_API for numparse_decimal.cpp
     82  *
     83  * @param str The string to check.
     84  * @param key1 The set to check.
     85  * @return key1 if the set contains str, or NONE if not.
     86  */
     87 U_COMMON_API Key chooseFrom(UnicodeString str, Key key1);
     88 
     89 /**
     90  * Checks if the UnicodeSet given by either key1 or key2 contains the string.
     91  *
     92  * Exported as U_COMMON_API for numparse_decimal.cpp
     93  *
     94  * @param str The string to check.
     95  * @param key1 The first set to check.
     96  * @param key2 The second set to check.
     97  * @return key1 if that set contains str; key2 if that set contains str; or
     98  *         NONE if neither set contains str.
     99  */
    100 U_COMMON_API Key chooseFrom(UnicodeString str, Key key1, Key key2);
    101 
    102 // Unused in C++:
    103 // Key chooseCurrency(UnicodeString str);
    104 // Used instead:
    105 static const struct {
    106     Key key;
    107     UChar32 exemplar;
    108 } kCurrencyEntries[] = {
    109     {DOLLAR_SIGN, u'$'},
    110     {POUND_SIGN, u''},
    111     {RUPEE_SIGN, u''},
    112     {YEN_SIGN, u''},
    113 };
    114 
    115 } // namespace unisets
    116 U_NAMESPACE_END
    117 
    118 #endif //__STATIC_UNICODE_SETS_H__
    119 #endif /* #if !UCONFIG_NO_FORMATTING */
    120