/src/icu/source/i18n/numparse_currency.h
Line | Count | Source (jump to first uncovered line) |
1 | | // © 2018 and later: Unicode, Inc. and others. |
2 | | // License & terms of use: http://www.unicode.org/copyright.html |
3 | | |
4 | | #include "unicode/utypes.h" |
5 | | |
6 | | #if !UCONFIG_NO_FORMATTING |
7 | | #ifndef __NUMPARSE_CURRENCY_H__ |
8 | | #define __NUMPARSE_CURRENCY_H__ |
9 | | |
10 | | #include "numparse_types.h" |
11 | | #include "numparse_compositions.h" |
12 | | #include "charstr.h" |
13 | | #include "number_currencysymbols.h" |
14 | | #include "unicode/uniset.h" |
15 | | |
16 | | U_NAMESPACE_BEGIN namespace numparse { |
17 | | namespace impl { |
18 | | |
19 | | using ::icu::number::impl::CurrencySymbols; |
20 | | |
21 | | /** |
22 | | * Matches a currency, either a custom currency or one from the data bundle. The class is called |
23 | | * "combined" to emphasize that the currency string may come from one of multiple sources. |
24 | | * |
25 | | * Will match currency spacing either before or after the number depending on whether we are currently in |
26 | | * the prefix or suffix. |
27 | | * |
28 | | * The implementation of this class is slightly different between J and C. See #13584 for a follow-up. |
29 | | * |
30 | | * @author sffc |
31 | | */ |
32 | | // Exported as U_I18N_API for tests |
33 | | class U_I18N_API CombinedCurrencyMatcher : public NumberParseMatcher, public UMemory { |
34 | | public: |
35 | 0 | CombinedCurrencyMatcher() = default; // WARNING: Leaves the object in an unusable state |
36 | | |
37 | | CombinedCurrencyMatcher(const CurrencySymbols& currencySymbols, const DecimalFormatSymbols& dfs, |
38 | | parse_flags_t parseFlags, UErrorCode& status); |
39 | | |
40 | | bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override; |
41 | | |
42 | | bool smokeTest(const StringSegment& segment) const override; |
43 | | |
44 | | UnicodeString toString() const override; |
45 | | |
46 | | private: |
47 | | UChar fCurrencyCode[4]; |
48 | | UnicodeString fCurrency1; |
49 | | UnicodeString fCurrency2; |
50 | | |
51 | | bool fUseFullCurrencyData; |
52 | | UnicodeString fLocalLongNames[StandardPlural::COUNT]; |
53 | | |
54 | | UnicodeString afterPrefixInsert; |
55 | | UnicodeString beforeSuffixInsert; |
56 | | |
57 | | // We could use Locale instead of CharString here, but |
58 | | // Locale has a non-trivial default constructor. |
59 | | CharString fLocaleName; |
60 | | |
61 | | // TODO: See comments in constructor in numparse_currency.cpp |
62 | | // UnicodeSet fLeadCodePoints; |
63 | | |
64 | | /** Matches the currency string without concern for currency spacing. */ |
65 | | bool matchCurrency(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const; |
66 | | }; |
67 | | |
68 | | |
69 | | } // namespace impl |
70 | | } // namespace numparse |
71 | | U_NAMESPACE_END |
72 | | |
73 | | #endif //__NUMPARSE_CURRENCY_H__ |
74 | | #endif /* #if !UCONFIG_NO_FORMATTING */ |