1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others. 2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html 3*0e209d39SAndroid Build Coastguard Worker /* 4*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 5*0e209d39SAndroid Build Coastguard Worker * Copyright (c) 2004-2016, International Business Machines 6*0e209d39SAndroid Build Coastguard Worker * Corporation and others. All Rights Reserved. 7*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 8*0e209d39SAndroid Build Coastguard Worker * Author: Alan Liu 9*0e209d39SAndroid Build Coastguard Worker * Created: April 20, 2004 10*0e209d39SAndroid Build Coastguard Worker * Since: ICU 3.0 11*0e209d39SAndroid Build Coastguard Worker ********************************************************************** 12*0e209d39SAndroid Build Coastguard Worker */ 13*0e209d39SAndroid Build Coastguard Worker #ifndef MEASUREFORMAT_H 14*0e209d39SAndroid Build Coastguard Worker #define MEASUREFORMAT_H 15*0e209d39SAndroid Build Coastguard Worker 16*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h" 17*0e209d39SAndroid Build Coastguard Worker 18*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API 19*0e209d39SAndroid Build Coastguard Worker 20*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING 21*0e209d39SAndroid Build Coastguard Worker 22*0e209d39SAndroid Build Coastguard Worker #include "unicode/format.h" 23*0e209d39SAndroid Build Coastguard Worker #include "unicode/udat.h" 24*0e209d39SAndroid Build Coastguard Worker 25*0e209d39SAndroid Build Coastguard Worker /** 26*0e209d39SAndroid Build Coastguard Worker * \file 27*0e209d39SAndroid Build Coastguard Worker * \brief C++ API: Compatibility APIs for measure formatting. 28*0e209d39SAndroid Build Coastguard Worker */ 29*0e209d39SAndroid Build Coastguard Worker 30*0e209d39SAndroid Build Coastguard Worker /** 31*0e209d39SAndroid Build Coastguard Worker * Constants for various widths. 32*0e209d39SAndroid Build Coastguard Worker * There are 4 widths: Wide, Short, Narrow, Numeric. 33*0e209d39SAndroid Build Coastguard Worker * For example, for English, when formatting "3 hours" 34*0e209d39SAndroid Build Coastguard Worker * Wide is "3 hours"; short is "3 hrs"; narrow is "3h"; 35*0e209d39SAndroid Build Coastguard Worker * formatting "3 hours 17 minutes" as numeric give "3:17" 36*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 37*0e209d39SAndroid Build Coastguard Worker */ 38*0e209d39SAndroid Build Coastguard Worker enum UMeasureFormatWidth { 39*0e209d39SAndroid Build Coastguard Worker 40*0e209d39SAndroid Build Coastguard Worker // Wide, short, and narrow must be first and in this order. 41*0e209d39SAndroid Build Coastguard Worker /** 42*0e209d39SAndroid Build Coastguard Worker * Spell out measure units. 43*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 44*0e209d39SAndroid Build Coastguard Worker */ 45*0e209d39SAndroid Build Coastguard Worker UMEASFMT_WIDTH_WIDE, 46*0e209d39SAndroid Build Coastguard Worker 47*0e209d39SAndroid Build Coastguard Worker /** 48*0e209d39SAndroid Build Coastguard Worker * Abbreviate measure units. 49*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 50*0e209d39SAndroid Build Coastguard Worker */ 51*0e209d39SAndroid Build Coastguard Worker UMEASFMT_WIDTH_SHORT, 52*0e209d39SAndroid Build Coastguard Worker 53*0e209d39SAndroid Build Coastguard Worker /** 54*0e209d39SAndroid Build Coastguard Worker * Use symbols for measure units when possible. 55*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 56*0e209d39SAndroid Build Coastguard Worker */ 57*0e209d39SAndroid Build Coastguard Worker UMEASFMT_WIDTH_NARROW, 58*0e209d39SAndroid Build Coastguard Worker 59*0e209d39SAndroid Build Coastguard Worker /** 60*0e209d39SAndroid Build Coastguard Worker * Completely omit measure units when possible. For example, format 61*0e209d39SAndroid Build Coastguard Worker * '5 hours, 37 minutes' as '5:37' 62*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 63*0e209d39SAndroid Build Coastguard Worker */ 64*0e209d39SAndroid Build Coastguard Worker UMEASFMT_WIDTH_NUMERIC, 65*0e209d39SAndroid Build Coastguard Worker 66*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_DEPRECATED_API 67*0e209d39SAndroid Build Coastguard Worker /** 68*0e209d39SAndroid Build Coastguard Worker * One more than the highest normal UMeasureFormatWidth value. 69*0e209d39SAndroid Build Coastguard Worker * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. 70*0e209d39SAndroid Build Coastguard Worker */ 71*0e209d39SAndroid Build Coastguard Worker UMEASFMT_WIDTH_COUNT = 4 72*0e209d39SAndroid Build Coastguard Worker #endif // U_HIDE_DEPRECATED_API 73*0e209d39SAndroid Build Coastguard Worker }; 74*0e209d39SAndroid Build Coastguard Worker /** @stable ICU 53 */ 75*0e209d39SAndroid Build Coastguard Worker typedef enum UMeasureFormatWidth UMeasureFormatWidth; 76*0e209d39SAndroid Build Coastguard Worker 77*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN 78*0e209d39SAndroid Build Coastguard Worker 79*0e209d39SAndroid Build Coastguard Worker class Measure; 80*0e209d39SAndroid Build Coastguard Worker class MeasureUnit; 81*0e209d39SAndroid Build Coastguard Worker class NumberFormat; 82*0e209d39SAndroid Build Coastguard Worker class PluralRules; 83*0e209d39SAndroid Build Coastguard Worker class MeasureFormatCacheData; 84*0e209d39SAndroid Build Coastguard Worker class SharedNumberFormat; 85*0e209d39SAndroid Build Coastguard Worker class SharedPluralRules; 86*0e209d39SAndroid Build Coastguard Worker class QuantityFormatter; 87*0e209d39SAndroid Build Coastguard Worker class SimpleFormatter; 88*0e209d39SAndroid Build Coastguard Worker class ListFormatter; 89*0e209d39SAndroid Build Coastguard Worker class DateFormat; 90*0e209d39SAndroid Build Coastguard Worker 91*0e209d39SAndroid Build Coastguard Worker /** 92*0e209d39SAndroid Build Coastguard Worker * <p><strong>IMPORTANT:</strong> New users are strongly encouraged to see if 93*0e209d39SAndroid Build Coastguard Worker * numberformatter.h fits their use case. Although not deprecated, this header 94*0e209d39SAndroid Build Coastguard Worker * is provided for backwards compatibility only, and has much more limited 95*0e209d39SAndroid Build Coastguard Worker * capabilities. 96*0e209d39SAndroid Build Coastguard Worker * 97*0e209d39SAndroid Build Coastguard Worker * @see Format 98*0e209d39SAndroid Build Coastguard Worker * @author Alan Liu 99*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 100*0e209d39SAndroid Build Coastguard Worker */ 101*0e209d39SAndroid Build Coastguard Worker class U_I18N_API MeasureFormat : public Format { 102*0e209d39SAndroid Build Coastguard Worker public: 103*0e209d39SAndroid Build Coastguard Worker using Format::parseObject; 104*0e209d39SAndroid Build Coastguard Worker using Format::format; 105*0e209d39SAndroid Build Coastguard Worker 106*0e209d39SAndroid Build Coastguard Worker /** 107*0e209d39SAndroid Build Coastguard Worker * Constructor. 108*0e209d39SAndroid Build Coastguard Worker * <p> 109*0e209d39SAndroid Build Coastguard Worker * <strong>NOTE:</strong> New users are strongly encouraged to use 110*0e209d39SAndroid Build Coastguard Worker * {@link icu::number::NumberFormatter} instead of NumberFormat. 111*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 112*0e209d39SAndroid Build Coastguard Worker */ 113*0e209d39SAndroid Build Coastguard Worker MeasureFormat( 114*0e209d39SAndroid Build Coastguard Worker const Locale &locale, UMeasureFormatWidth width, UErrorCode &status); 115*0e209d39SAndroid Build Coastguard Worker 116*0e209d39SAndroid Build Coastguard Worker /** 117*0e209d39SAndroid Build Coastguard Worker * Constructor. 118*0e209d39SAndroid Build Coastguard Worker * <p> 119*0e209d39SAndroid Build Coastguard Worker * <strong>NOTE:</strong> New users are strongly encouraged to use 120*0e209d39SAndroid Build Coastguard Worker * {@link icu::number::NumberFormatter} instead of NumberFormat. 121*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 122*0e209d39SAndroid Build Coastguard Worker */ 123*0e209d39SAndroid Build Coastguard Worker MeasureFormat( 124*0e209d39SAndroid Build Coastguard Worker const Locale &locale, 125*0e209d39SAndroid Build Coastguard Worker UMeasureFormatWidth width, 126*0e209d39SAndroid Build Coastguard Worker NumberFormat *nfToAdopt, 127*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 128*0e209d39SAndroid Build Coastguard Worker 129*0e209d39SAndroid Build Coastguard Worker /** 130*0e209d39SAndroid Build Coastguard Worker * Copy constructor. 131*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 132*0e209d39SAndroid Build Coastguard Worker */ 133*0e209d39SAndroid Build Coastguard Worker MeasureFormat(const MeasureFormat &other); 134*0e209d39SAndroid Build Coastguard Worker 135*0e209d39SAndroid Build Coastguard Worker /** 136*0e209d39SAndroid Build Coastguard Worker * Assignment operator. 137*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 138*0e209d39SAndroid Build Coastguard Worker */ 139*0e209d39SAndroid Build Coastguard Worker MeasureFormat &operator=(const MeasureFormat &rhs); 140*0e209d39SAndroid Build Coastguard Worker 141*0e209d39SAndroid Build Coastguard Worker /** 142*0e209d39SAndroid Build Coastguard Worker * Destructor. 143*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 144*0e209d39SAndroid Build Coastguard Worker */ 145*0e209d39SAndroid Build Coastguard Worker virtual ~MeasureFormat(); 146*0e209d39SAndroid Build Coastguard Worker 147*0e209d39SAndroid Build Coastguard Worker /** 148*0e209d39SAndroid Build Coastguard Worker * Return true if given Format objects are semantically equal. 149*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 150*0e209d39SAndroid Build Coastguard Worker */ 151*0e209d39SAndroid Build Coastguard Worker virtual bool operator==(const Format &other) const override; 152*0e209d39SAndroid Build Coastguard Worker 153*0e209d39SAndroid Build Coastguard Worker /** 154*0e209d39SAndroid Build Coastguard Worker * Clones this object polymorphically. 155*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 156*0e209d39SAndroid Build Coastguard Worker */ 157*0e209d39SAndroid Build Coastguard Worker virtual MeasureFormat *clone() const override; 158*0e209d39SAndroid Build Coastguard Worker 159*0e209d39SAndroid Build Coastguard Worker /** 160*0e209d39SAndroid Build Coastguard Worker * Formats object to produce a string. 161*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 162*0e209d39SAndroid Build Coastguard Worker */ 163*0e209d39SAndroid Build Coastguard Worker virtual UnicodeString &format( 164*0e209d39SAndroid Build Coastguard Worker const Formattable &obj, 165*0e209d39SAndroid Build Coastguard Worker UnicodeString &appendTo, 166*0e209d39SAndroid Build Coastguard Worker FieldPosition &pos, 167*0e209d39SAndroid Build Coastguard Worker UErrorCode &status) const override; 168*0e209d39SAndroid Build Coastguard Worker 169*0e209d39SAndroid Build Coastguard Worker #ifndef U_FORCE_HIDE_DRAFT_API 170*0e209d39SAndroid Build Coastguard Worker /** 171*0e209d39SAndroid Build Coastguard Worker * Parse a string to produce an object. This implementation sets 172*0e209d39SAndroid Build Coastguard Worker * status to U_UNSUPPORTED_ERROR. 173*0e209d39SAndroid Build Coastguard Worker * 174*0e209d39SAndroid Build Coastguard Worker * @draft ICU 53 175*0e209d39SAndroid Build Coastguard Worker */ 176*0e209d39SAndroid Build Coastguard Worker virtual void parseObject( 177*0e209d39SAndroid Build Coastguard Worker const UnicodeString &source, 178*0e209d39SAndroid Build Coastguard Worker Formattable &reslt, 179*0e209d39SAndroid Build Coastguard Worker ParsePosition &pos) const override; 180*0e209d39SAndroid Build Coastguard Worker #endif // U_FORCE_HIDE_DRAFT_API 181*0e209d39SAndroid Build Coastguard Worker 182*0e209d39SAndroid Build Coastguard Worker /** 183*0e209d39SAndroid Build Coastguard Worker * Formats measure objects to produce a string. An example of such a 184*0e209d39SAndroid Build Coastguard Worker * formatted string is 3 meters, 3.5 centimeters. Measure objects appear 185*0e209d39SAndroid Build Coastguard Worker * in the formatted string in the same order they appear in the "measures" 186*0e209d39SAndroid Build Coastguard Worker * array. The NumberFormat of this object is used only to format the amount 187*0e209d39SAndroid Build Coastguard Worker * of the very last measure. The other amounts are formatted with zero 188*0e209d39SAndroid Build Coastguard Worker * decimal places while rounding toward zero. 189*0e209d39SAndroid Build Coastguard Worker * @param measures array of measure objects. 190*0e209d39SAndroid Build Coastguard Worker * @param measureCount the number of measure objects. 191*0e209d39SAndroid Build Coastguard Worker * @param appendTo formatted string appended here. 192*0e209d39SAndroid Build Coastguard Worker * @param pos the field position. 193*0e209d39SAndroid Build Coastguard Worker * @param status the error. 194*0e209d39SAndroid Build Coastguard Worker * @return appendTo reference 195*0e209d39SAndroid Build Coastguard Worker * 196*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 197*0e209d39SAndroid Build Coastguard Worker */ 198*0e209d39SAndroid Build Coastguard Worker UnicodeString &formatMeasures( 199*0e209d39SAndroid Build Coastguard Worker const Measure *measures, 200*0e209d39SAndroid Build Coastguard Worker int32_t measureCount, 201*0e209d39SAndroid Build Coastguard Worker UnicodeString &appendTo, 202*0e209d39SAndroid Build Coastguard Worker FieldPosition &pos, 203*0e209d39SAndroid Build Coastguard Worker UErrorCode &status) const; 204*0e209d39SAndroid Build Coastguard Worker 205*0e209d39SAndroid Build Coastguard Worker /** 206*0e209d39SAndroid Build Coastguard Worker * Formats a single measure per unit. An example of such a 207*0e209d39SAndroid Build Coastguard Worker * formatted string is 3.5 meters per second. 208*0e209d39SAndroid Build Coastguard Worker * @param measure The measure object. In above example, 3.5 meters. 209*0e209d39SAndroid Build Coastguard Worker * @param perUnit The per unit. In above example, it is 210*0e209d39SAndroid Build Coastguard Worker * `*%MeasureUnit::createSecond(status)`. 211*0e209d39SAndroid Build Coastguard Worker * @param appendTo formatted string appended here. 212*0e209d39SAndroid Build Coastguard Worker * @param pos the field position. 213*0e209d39SAndroid Build Coastguard Worker * @param status the error. 214*0e209d39SAndroid Build Coastguard Worker * @return appendTo reference 215*0e209d39SAndroid Build Coastguard Worker * 216*0e209d39SAndroid Build Coastguard Worker * @stable ICU 55 217*0e209d39SAndroid Build Coastguard Worker */ 218*0e209d39SAndroid Build Coastguard Worker UnicodeString &formatMeasurePerUnit( 219*0e209d39SAndroid Build Coastguard Worker const Measure &measure, 220*0e209d39SAndroid Build Coastguard Worker const MeasureUnit &perUnit, 221*0e209d39SAndroid Build Coastguard Worker UnicodeString &appendTo, 222*0e209d39SAndroid Build Coastguard Worker FieldPosition &pos, 223*0e209d39SAndroid Build Coastguard Worker UErrorCode &status) const; 224*0e209d39SAndroid Build Coastguard Worker 225*0e209d39SAndroid Build Coastguard Worker /** 226*0e209d39SAndroid Build Coastguard Worker * Gets the display name of the specified {@link MeasureUnit} corresponding to the current 227*0e209d39SAndroid Build Coastguard Worker * locale and format width. 228*0e209d39SAndroid Build Coastguard Worker * @param unit The unit for which to get a display name. 229*0e209d39SAndroid Build Coastguard Worker * @param status the error. 230*0e209d39SAndroid Build Coastguard Worker * @return The display name in the locale and width specified in 231*0e209d39SAndroid Build Coastguard Worker * the MeasureFormat constructor, or null if there is no display name available 232*0e209d39SAndroid Build Coastguard Worker * for the specified unit. 233*0e209d39SAndroid Build Coastguard Worker * 234*0e209d39SAndroid Build Coastguard Worker * @stable ICU 58 235*0e209d39SAndroid Build Coastguard Worker */ 236*0e209d39SAndroid Build Coastguard Worker UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const; 237*0e209d39SAndroid Build Coastguard Worker 238*0e209d39SAndroid Build Coastguard Worker 239*0e209d39SAndroid Build Coastguard Worker /** 240*0e209d39SAndroid Build Coastguard Worker * Return a formatter for CurrencyAmount objects in the given 241*0e209d39SAndroid Build Coastguard Worker * locale. 242*0e209d39SAndroid Build Coastguard Worker * <p> 243*0e209d39SAndroid Build Coastguard Worker * <strong>NOTE:</strong> New users are strongly encouraged to use 244*0e209d39SAndroid Build Coastguard Worker * {@link icu::number::NumberFormatter} instead of NumberFormat. 245*0e209d39SAndroid Build Coastguard Worker * @param locale desired locale 246*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code 247*0e209d39SAndroid Build Coastguard Worker * @return a formatter object, or nullptr upon error 248*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 249*0e209d39SAndroid Build Coastguard Worker */ 250*0e209d39SAndroid Build Coastguard Worker static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale, 251*0e209d39SAndroid Build Coastguard Worker UErrorCode& ec); 252*0e209d39SAndroid Build Coastguard Worker 253*0e209d39SAndroid Build Coastguard Worker /** 254*0e209d39SAndroid Build Coastguard Worker * Return a formatter for CurrencyAmount objects in the default 255*0e209d39SAndroid Build Coastguard Worker * locale. 256*0e209d39SAndroid Build Coastguard Worker * <p> 257*0e209d39SAndroid Build Coastguard Worker * <strong>NOTE:</strong> New users are strongly encouraged to use 258*0e209d39SAndroid Build Coastguard Worker * {@link icu::number::NumberFormatter} instead of NumberFormat. 259*0e209d39SAndroid Build Coastguard Worker * @param ec input-output error code 260*0e209d39SAndroid Build Coastguard Worker * @return a formatter object, or nullptr upon error 261*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 262*0e209d39SAndroid Build Coastguard Worker */ 263*0e209d39SAndroid Build Coastguard Worker static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec); 264*0e209d39SAndroid Build Coastguard Worker 265*0e209d39SAndroid Build Coastguard Worker /** 266*0e209d39SAndroid Build Coastguard Worker * Return the class ID for this class. This is useful only for comparing to 267*0e209d39SAndroid Build Coastguard Worker * a return value from getDynamicClassID(). For example: 268*0e209d39SAndroid Build Coastguard Worker * <pre> 269*0e209d39SAndroid Build Coastguard Worker * . Base* polymorphic_pointer = createPolymorphicObject(); 270*0e209d39SAndroid Build Coastguard Worker * . if (polymorphic_pointer->getDynamicClassID() == 271*0e209d39SAndroid Build Coastguard Worker * . erived::getStaticClassID()) ... 272*0e209d39SAndroid Build Coastguard Worker * </pre> 273*0e209d39SAndroid Build Coastguard Worker * @return The class ID for all objects of this class. 274*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 275*0e209d39SAndroid Build Coastguard Worker */ 276*0e209d39SAndroid Build Coastguard Worker static UClassID U_EXPORT2 getStaticClassID(); 277*0e209d39SAndroid Build Coastguard Worker 278*0e209d39SAndroid Build Coastguard Worker /** 279*0e209d39SAndroid Build Coastguard Worker * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. This 280*0e209d39SAndroid Build Coastguard Worker * method is to implement a simple version of RTTI, since not all C++ 281*0e209d39SAndroid Build Coastguard Worker * compilers support genuine RTTI. Polymorphic operator==() and clone() 282*0e209d39SAndroid Build Coastguard Worker * methods call this method. 283*0e209d39SAndroid Build Coastguard Worker * 284*0e209d39SAndroid Build Coastguard Worker * @return The class ID for this object. All objects of a 285*0e209d39SAndroid Build Coastguard Worker * given class have the same class ID. Objects of 286*0e209d39SAndroid Build Coastguard Worker * other classes have different class IDs. 287*0e209d39SAndroid Build Coastguard Worker * @stable ICU 53 288*0e209d39SAndroid Build Coastguard Worker */ 289*0e209d39SAndroid Build Coastguard Worker virtual UClassID getDynamicClassID() const override; 290*0e209d39SAndroid Build Coastguard Worker 291*0e209d39SAndroid Build Coastguard Worker protected: 292*0e209d39SAndroid Build Coastguard Worker /** 293*0e209d39SAndroid Build Coastguard Worker * Default constructor. 294*0e209d39SAndroid Build Coastguard Worker * @stable ICU 3.0 295*0e209d39SAndroid Build Coastguard Worker */ 296*0e209d39SAndroid Build Coastguard Worker MeasureFormat(); 297*0e209d39SAndroid Build Coastguard Worker 298*0e209d39SAndroid Build Coastguard Worker #ifndef U_HIDE_INTERNAL_API 299*0e209d39SAndroid Build Coastguard Worker 300*0e209d39SAndroid Build Coastguard Worker /** 301*0e209d39SAndroid Build Coastguard Worker * ICU use only. 302*0e209d39SAndroid Build Coastguard Worker * Initialize or change MeasureFormat class from subclass. 303*0e209d39SAndroid Build Coastguard Worker * @internal. 304*0e209d39SAndroid Build Coastguard Worker */ 305*0e209d39SAndroid Build Coastguard Worker void initMeasureFormat( 306*0e209d39SAndroid Build Coastguard Worker const Locale &locale, 307*0e209d39SAndroid Build Coastguard Worker UMeasureFormatWidth width, 308*0e209d39SAndroid Build Coastguard Worker NumberFormat *nfToAdopt, 309*0e209d39SAndroid Build Coastguard Worker UErrorCode &status); 310*0e209d39SAndroid Build Coastguard Worker /** 311*0e209d39SAndroid Build Coastguard Worker * ICU use only. 312*0e209d39SAndroid Build Coastguard Worker * Allows subclass to change locale. Note that this method also changes 313*0e209d39SAndroid Build Coastguard Worker * the NumberFormat object. Returns true if locale changed; false if no 314*0e209d39SAndroid Build Coastguard Worker * change was made. 315*0e209d39SAndroid Build Coastguard Worker * @internal. 316*0e209d39SAndroid Build Coastguard Worker */ 317*0e209d39SAndroid Build Coastguard Worker UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status); 318*0e209d39SAndroid Build Coastguard Worker 319*0e209d39SAndroid Build Coastguard Worker /** 320*0e209d39SAndroid Build Coastguard Worker * ICU use only. 321*0e209d39SAndroid Build Coastguard Worker * Let subclass change NumberFormat. 322*0e209d39SAndroid Build Coastguard Worker * @internal. 323*0e209d39SAndroid Build Coastguard Worker */ 324*0e209d39SAndroid Build Coastguard Worker void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status); 325*0e209d39SAndroid Build Coastguard Worker 326*0e209d39SAndroid Build Coastguard Worker /** 327*0e209d39SAndroid Build Coastguard Worker * ICU use only. 328*0e209d39SAndroid Build Coastguard Worker * @internal. 329*0e209d39SAndroid Build Coastguard Worker */ 330*0e209d39SAndroid Build Coastguard Worker const NumberFormat &getNumberFormatInternal() const; 331*0e209d39SAndroid Build Coastguard Worker 332*0e209d39SAndroid Build Coastguard Worker /** 333*0e209d39SAndroid Build Coastguard Worker * ICU use only. 334*0e209d39SAndroid Build Coastguard Worker * Always returns the short form currency formatter. 335*0e209d39SAndroid Build Coastguard Worker * @internal. 336*0e209d39SAndroid Build Coastguard Worker */ 337*0e209d39SAndroid Build Coastguard Worker const NumberFormat& getCurrencyFormatInternal() const; 338*0e209d39SAndroid Build Coastguard Worker 339*0e209d39SAndroid Build Coastguard Worker /** 340*0e209d39SAndroid Build Coastguard Worker * ICU use only. 341*0e209d39SAndroid Build Coastguard Worker * @internal. 342*0e209d39SAndroid Build Coastguard Worker */ 343*0e209d39SAndroid Build Coastguard Worker const PluralRules &getPluralRules() const; 344*0e209d39SAndroid Build Coastguard Worker 345*0e209d39SAndroid Build Coastguard Worker /** 346*0e209d39SAndroid Build Coastguard Worker * ICU use only. 347*0e209d39SAndroid Build Coastguard Worker * @internal. 348*0e209d39SAndroid Build Coastguard Worker */ 349*0e209d39SAndroid Build Coastguard Worker Locale getLocale(UErrorCode &status) const; 350*0e209d39SAndroid Build Coastguard Worker 351*0e209d39SAndroid Build Coastguard Worker /** 352*0e209d39SAndroid Build Coastguard Worker * ICU use only. 353*0e209d39SAndroid Build Coastguard Worker * @internal. 354*0e209d39SAndroid Build Coastguard Worker */ 355*0e209d39SAndroid Build Coastguard Worker const char *getLocaleID(UErrorCode &status) const; 356*0e209d39SAndroid Build Coastguard Worker 357*0e209d39SAndroid Build Coastguard Worker #endif /* U_HIDE_INTERNAL_API */ 358*0e209d39SAndroid Build Coastguard Worker 359*0e209d39SAndroid Build Coastguard Worker private: 360*0e209d39SAndroid Build Coastguard Worker const MeasureFormatCacheData *cache; 361*0e209d39SAndroid Build Coastguard Worker const SharedNumberFormat *numberFormat; 362*0e209d39SAndroid Build Coastguard Worker const SharedPluralRules *pluralRules; 363*0e209d39SAndroid Build Coastguard Worker UMeasureFormatWidth fWidth; 364*0e209d39SAndroid Build Coastguard Worker 365*0e209d39SAndroid Build Coastguard Worker // Declared outside of MeasureFormatSharedData because ListFormatter 366*0e209d39SAndroid Build Coastguard Worker // objects are relatively cheap to copy; therefore, they don't need to be 367*0e209d39SAndroid Build Coastguard Worker // shared across instances. 368*0e209d39SAndroid Build Coastguard Worker ListFormatter *listFormatter; 369*0e209d39SAndroid Build Coastguard Worker 370*0e209d39SAndroid Build Coastguard Worker UnicodeString &formatMeasure( 371*0e209d39SAndroid Build Coastguard Worker const Measure &measure, 372*0e209d39SAndroid Build Coastguard Worker const NumberFormat &nf, 373*0e209d39SAndroid Build Coastguard Worker UnicodeString &appendTo, 374*0e209d39SAndroid Build Coastguard Worker FieldPosition &pos, 375*0e209d39SAndroid Build Coastguard Worker UErrorCode &status) const; 376*0e209d39SAndroid Build Coastguard Worker 377*0e209d39SAndroid Build Coastguard Worker UnicodeString &formatMeasuresSlowTrack( 378*0e209d39SAndroid Build Coastguard Worker const Measure *measures, 379*0e209d39SAndroid Build Coastguard Worker int32_t measureCount, 380*0e209d39SAndroid Build Coastguard Worker UnicodeString& appendTo, 381*0e209d39SAndroid Build Coastguard Worker FieldPosition& pos, 382*0e209d39SAndroid Build Coastguard Worker UErrorCode& status) const; 383*0e209d39SAndroid Build Coastguard Worker 384*0e209d39SAndroid Build Coastguard Worker UnicodeString &formatNumeric( 385*0e209d39SAndroid Build Coastguard Worker const Formattable *hms, // always length 3: [0] is hour; [1] is 386*0e209d39SAndroid Build Coastguard Worker // minute; [2] is second. 387*0e209d39SAndroid Build Coastguard Worker int32_t bitMap, // 1=hour set, 2=minute set, 4=second set 388*0e209d39SAndroid Build Coastguard Worker UnicodeString &appendTo, 389*0e209d39SAndroid Build Coastguard Worker UErrorCode &status) const; 390*0e209d39SAndroid Build Coastguard Worker }; 391*0e209d39SAndroid Build Coastguard Worker 392*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END 393*0e209d39SAndroid Build Coastguard Worker 394*0e209d39SAndroid Build Coastguard Worker #endif // #if !UCONFIG_NO_FORMATTING 395*0e209d39SAndroid Build Coastguard Worker 396*0e209d39SAndroid Build Coastguard Worker #endif /* U_SHOW_CPLUSPLUS_API */ 397*0e209d39SAndroid Build Coastguard Worker 398*0e209d39SAndroid Build Coastguard Worker #endif // #ifndef MEASUREFORMAT_H 399