1 // © 2017 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 __NUMBER_LONGNAMES_H__
8 #define __NUMBER_LONGNAMES_H__
9 
10 #include "unicode/uversion.h"
11 #include "number_utils.h"
12 #include "number_modifiers.h"
13 
14 U_NAMESPACE_BEGIN namespace number {
15 namespace impl {
16 
17 class LongNameHandler : public MicroPropsGenerator, public ModifierStore, public UMemory {
18   public:
19     static UnicodeString getUnitDisplayName(
20         const Locale& loc,
21         const MeasureUnit& unit,
22         UNumberUnitWidth width,
23         UErrorCode& status);
24 
25     static UnicodeString getUnitPattern(
26         const Locale& loc,
27         const MeasureUnit& unit,
28         UNumberUnitWidth width,
29         StandardPlural::Form pluralForm,
30         UErrorCode& status);
31 
32     static LongNameHandler*
33     forCurrencyLongNames(const Locale &loc, const CurrencyUnit &currency, const PluralRules *rules,
34                          const MicroPropsGenerator *parent, UErrorCode &status);
35 
36     static LongNameHandler*
37     forMeasureUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
38                    const UNumberUnitWidth &width, const PluralRules *rules,
39                    const MicroPropsGenerator *parent, UErrorCode &status);
40 
41     void
42     processQuantity(DecimalQuantity &quantity, MicroProps &micros, UErrorCode &status) const U_OVERRIDE;
43 
44     const Modifier* getModifier(Signum signum, StandardPlural::Form plural) const U_OVERRIDE;
45 
46   private:
47     SimpleModifier fModifiers[StandardPlural::Form::COUNT];
48     const PluralRules *rules;
49     const MicroPropsGenerator *parent;
50 
LongNameHandler(const PluralRules * rules,const MicroPropsGenerator * parent)51     LongNameHandler(const PluralRules *rules, const MicroPropsGenerator *parent)
52             : rules(rules), parent(parent) {}
53 
54     static LongNameHandler*
55     forCompoundUnit(const Locale &loc, const MeasureUnit &unit, const MeasureUnit &perUnit,
56                     const UNumberUnitWidth &width, const PluralRules *rules,
57                     const MicroPropsGenerator *parent, UErrorCode &status);
58 
59     void simpleFormatsToModifiers(const UnicodeString *simpleFormats, Field field, UErrorCode &status);
60     void multiSimpleFormatsToModifiers(const UnicodeString *leadFormats, UnicodeString trailFormat,
61                                        Field field, UErrorCode &status);
62 };
63 
64 }  // namespace impl
65 }  // namespace number
66 U_NAMESPACE_END
67 
68 #endif //__NUMBER_LONGNAMES_H__
69 
70 #endif /* #if !UCONFIG_NO_FORMATTING */
71