1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- // © 2018 and later: Unicode, Inc. and others.
- // License & terms of use: http://www.unicode.org/copyright.html
- #include "unicode/utypes.h"
- #if !UCONFIG_NO_FORMATTING
- #ifndef __NUMPARSE_CURRENCY_H__
- #define __NUMPARSE_CURRENCY_H__
- #include "numparse_types.h"
- #include "numparse_compositions.h"
- #include "charstr.h"
- #include "number_currencysymbols.h"
- #include "unicode/uniset.h"
- U_NAMESPACE_BEGIN namespace numparse {
- namespace impl {
- using ::icu::number::impl::CurrencySymbols;
- /**
- * Matches a currency, either a custom currency or one from the data bundle. The class is called
- * "combined" to emphasize that the currency string may come from one of multiple sources.
- *
- * Will match currency spacing either before or after the number depending on whether we are currently in
- * the prefix or suffix.
- *
- * The implementation of this class is slightly different between J and C. See #13584 for a follow-up.
- *
- * @author sffc
- */
- // Exported as U_I18N_API for tests
- class U_I18N_API CombinedCurrencyMatcher : public NumberParseMatcher, public UMemory {
- public:
- CombinedCurrencyMatcher() = default; // WARNING: Leaves the object in an unusable state
- CombinedCurrencyMatcher(const CurrencySymbols& currencySymbols, const DecimalFormatSymbols& dfs,
- parse_flags_t parseFlags, UErrorCode& status);
- bool match(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const override;
- bool smokeTest(const StringSegment& segment) const override;
- UnicodeString toString() const override;
- private:
- UChar fCurrencyCode[4];
- UnicodeString fCurrency1;
- UnicodeString fCurrency2;
- bool fUseFullCurrencyData;
- UnicodeString fLocalLongNames[StandardPlural::COUNT];
- UnicodeString afterPrefixInsert;
- UnicodeString beforeSuffixInsert;
- // We could use Locale instead of CharString here, but
- // Locale has a non-trivial default constructor.
- CharString fLocaleName;
- // TODO: See comments in constructor in numparse_currency.cpp
- // UnicodeSet fLeadCodePoints;
- /** Matches the currency string without concern for currency spacing. */
- bool matchCurrency(StringSegment& segment, ParsedNumber& result, UErrorCode& status) const;
- };
- } // namespace impl
- } // namespace numparse
- U_NAMESPACE_END
- #endif //__NUMPARSE_CURRENCY_H__
- #endif /* #if !UCONFIG_NO_FORMATTING */
|