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 &getNumberFormat() const;
00326
00331 const PluralRules &getPluralRules() const;
00332
00337 Locale getLocale(UErrorCode &status) const;
00338
00343 const char *getLocaleID(UErrorCode &status) const;
00344
00345 #endif
00346
00347 private:
00348 const MeasureFormatCacheData *cache;
00349 const SharedNumberFormat *numberFormat;
00350 const SharedPluralRules *pluralRules;
00351 UMeasureFormatWidth fWidth;
00352
00353
00354
00355
00356 ListFormatter *listFormatter;
00357
00358 const SimpleFormatter *getFormatterOrNull(
00359 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index) const;
00360
00361 const SimpleFormatter *getFormatter(
00362 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index,
00363 UErrorCode &errorCode) const;
00364
00365 const SimpleFormatter *getPluralFormatter(
00366 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index,
00367 UErrorCode &errorCode) const;
00368
00369 const SimpleFormatter *getPerFormatter(
00370 UMeasureFormatWidth width,
00371 UErrorCode &status) const;
00372
00373 int32_t withPerUnitAndAppend(
00374 const UnicodeString &formatted,
00375 const MeasureUnit &perUnit,
00376 UnicodeString &appendTo,
00377 UErrorCode &status) const;
00378
00379 UnicodeString &formatMeasure(
00380 const Measure &measure,
00381 const NumberFormat &nf,
00382 UnicodeString &appendTo,
00383 FieldPosition &pos,
00384 UErrorCode &status) const;
00385
00386 UnicodeString &formatMeasuresSlowTrack(
00387 const Measure *measures,
00388 int32_t measureCount,
00389 UnicodeString& appendTo,
00390 FieldPosition& pos,
00391 UErrorCode& status) const;
00392
00393 UnicodeString &formatNumeric(
00394 const Formattable *hms,
00395
00396 int32_t bitMap,
00397 UnicodeString &appendTo,
00398 UErrorCode &status) const;
00399
00400 UnicodeString &formatNumeric(
00401 UDate date,
00402 const DateFormat &dateFmt,
00403 UDateFormatField smallestField,
00404 const Formattable &smallestAmount,
00405 UnicodeString &appendTo,
00406 UErrorCode &status) const;
00407 };
00408
00409 U_NAMESPACE_END
00410
00411 #endif // #if !UCONFIG_NO_FORMATTING
00412 #endif // #ifndef MEASUREFORMAT_H