00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef MEASUREFORMAT_H
00014 #define MEASUREFORMAT_H
00015
00016 #include "unicode/utypes.h"
00017
00018 #if !UCONFIG_NO_FORMATTING
00019
00020 #include "unicode/format.h"
00021 #include "unicode/udat.h"
00022
00036 enum UMeasureFormatWidth {
00037
00038
00043 UMEASFMT_WIDTH_WIDE,
00044
00049 UMEASFMT_WIDTH_SHORT,
00050
00055 UMEASFMT_WIDTH_NARROW,
00056
00062 UMEASFMT_WIDTH_NUMERIC,
00063
00064 #ifndef U_HIDE_DEPRECATED_API
00065
00069 UMEASFMT_WIDTH_COUNT = 4
00070 #endif // U_HIDE_DEPRECATED_API
00071 };
00073 typedef enum UMeasureFormatWidth UMeasureFormatWidth;
00074
00075 U_NAMESPACE_BEGIN
00076
00077 class Measure;
00078 class MeasureUnit;
00079 class NumberFormat;
00080 class PluralRules;
00081 class MeasureFormatCacheData;
00082 class SharedNumberFormat;
00083 class SharedPluralRules;
00084 class QuantityFormatter;
00085 class SimpleFormatter;
00086 class ListFormatter;
00087 class DateFormat;
00088
00098 class U_I18N_API MeasureFormat : public Format {
00099 public:
00100 using Format::parseObject;
00101 using Format::format;
00102
00110 MeasureFormat(
00111 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
00112
00120 MeasureFormat(
00121 const Locale &locale,
00122 UMeasureFormatWidth width,
00123 NumberFormat *nfToAdopt,
00124 UErrorCode &status);
00125
00130 MeasureFormat(const MeasureFormat &other);
00131
00136 MeasureFormat &operator=(const MeasureFormat &rhs);
00137
00142 virtual ~MeasureFormat();
00143
00148 virtual UBool operator==(const Format &other) const;
00149
00154 virtual Format *clone() const;
00155
00160 virtual UnicodeString &format(
00161 const Formattable &obj,
00162 UnicodeString &appendTo,
00163 FieldPosition &pos,
00164 UErrorCode &status) const;
00165
00172 virtual void parseObject(
00173 const UnicodeString &source,
00174 Formattable &reslt,
00175 ParsePosition &pos) const;
00176
00193 UnicodeString &formatMeasures(
00194 const Measure *measures,
00195 int32_t measureCount,
00196 UnicodeString &appendTo,
00197 FieldPosition &pos,
00198 UErrorCode &status) const;
00199
00213 UnicodeString &formatMeasurePerUnit(
00214 const Measure &measure,
00215 const MeasureUnit &perUnit,
00216 UnicodeString &appendTo,
00217 FieldPosition &pos,
00218 UErrorCode &status) const;
00219
00231 UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const;
00232
00233
00245 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
00246 UErrorCode& ec);
00247
00258 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
00259
00271 static UClassID U_EXPORT2 getStaticClassID(void);
00272
00284 virtual UClassID getDynamicClassID(void) const;
00285
00286 protected:
00291 MeasureFormat();
00292
00293 #ifndef U_HIDE_INTERNAL_API
00294
00300 void initMeasureFormat(
00301 const Locale &locale,
00302 UMeasureFormatWidth width,
00303 NumberFormat *nfToAdopt,
00304 UErrorCode &status);
00312 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
00313
00319 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
00320
00325 const NumberFormat &getNumberFormatInternal() const;
00326
00332 const NumberFormat& getCurrencyFormatInternal() const;
00333
00338 const PluralRules &getPluralRules() const;
00339
00344 Locale getLocale(UErrorCode &status) const;
00345
00350 const char *getLocaleID(UErrorCode &status) const;
00351
00352 #endif
00353
00354 private:
00355 const MeasureFormatCacheData *cache;
00356 const SharedNumberFormat *numberFormat;
00357 const SharedPluralRules *pluralRules;
00358 UMeasureFormatWidth fWidth;
00359
00360
00361
00362
00363 ListFormatter *listFormatter;
00364
00365 UnicodeString &formatMeasure(
00366 const Measure &measure,
00367 const NumberFormat &nf,
00368 UnicodeString &appendTo,
00369 FieldPosition &pos,
00370 UErrorCode &status) const;
00371
00372 UnicodeString &formatMeasuresSlowTrack(
00373 const Measure *measures,
00374 int32_t measureCount,
00375 UnicodeString& appendTo,
00376 FieldPosition& pos,
00377 UErrorCode& status) const;
00378
00379 UnicodeString &formatNumeric(
00380 const Formattable *hms,
00381
00382 int32_t bitMap,
00383 UnicodeString &appendTo,
00384 UErrorCode &status) const;
00385
00386 UnicodeString &formatNumeric(
00387 UDate date,
00388 const DateFormat &dateFmt,
00389 UDateFormatField smallestField,
00390 const Formattable &smallestAmount,
00391 UnicodeString &appendTo,
00392 UErrorCode &status) const;
00393 };
00394
00395 U_NAMESPACE_END
00396
00397 #endif // #if !UCONFIG_NO_FORMATTING
00398 #endif // #ifndef MEASUREFORMAT_H