tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

numparse_currency.h (2365B)


      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
     17 namespace numparse::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_CLASS for tests
     33 class U_I18N_API_CLASS CombinedCurrencyMatcher : public NumberParseMatcher, public UMemory {
     34  public:
     35    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    char16_t 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 } // namespace numparse::impl
     69 U_NAMESPACE_END
     70 
     71 #endif //__NUMPARSE_CURRENCY_H__
     72 #endif /* #if !UCONFIG_NO_FORMATTING */