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
00097 class U_I18N_API MeasureFormat : public Format {
00098 public:
00099 using Format::parseObject;
00100 using Format::format;
00101
00106 MeasureFormat(
00107 const Locale &locale, UMeasureFormatWidth width, UErrorCode &status);
00108
00113 MeasureFormat(
00114 const Locale &locale,
00115 UMeasureFormatWidth width,
00116 NumberFormat *nfToAdopt,
00117 UErrorCode &status);
00118
00123 MeasureFormat(const MeasureFormat &other);
00124
00129 MeasureFormat &operator=(const MeasureFormat &rhs);
00130
00135 virtual ~MeasureFormat();
00136
00141 virtual UBool operator==(const Format &other) const;
00142
00147 virtual Format *clone() const;
00148
00153 virtual UnicodeString &format(
00154 const Formattable &obj,
00155 UnicodeString &appendTo,
00156 FieldPosition &pos,
00157 UErrorCode &status) const;
00158
00165 virtual void parseObject(
00166 const UnicodeString &source,
00167 Formattable &reslt,
00168 ParsePosition &pos) const;
00169
00186 UnicodeString &formatMeasures(
00187 const Measure *measures,
00188 int32_t measureCount,
00189 UnicodeString &appendTo,
00190 FieldPosition &pos,
00191 UErrorCode &status) const;
00192
00206 UnicodeString &formatMeasurePerUnit(
00207 const Measure &measure,
00208 const MeasureUnit &perUnit,
00209 UnicodeString &appendTo,
00210 FieldPosition &pos,
00211 UErrorCode &status) const;
00212
00224 UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const;
00225
00226
00235 static MeasureFormat* U_EXPORT2 createCurrencyFormat(const Locale& locale,
00236 UErrorCode& ec);
00237
00245 static MeasureFormat* U_EXPORT2 createCurrencyFormat(UErrorCode& ec);
00246
00258 static UClassID U_EXPORT2 getStaticClassID(void);
00259
00271 virtual UClassID getDynamicClassID(void) const;
00272
00273 protected:
00278 MeasureFormat();
00279
00280 #ifndef U_HIDE_INTERNAL_API
00281
00287 void initMeasureFormat(
00288 const Locale &locale,
00289 UMeasureFormatWidth width,
00290 NumberFormat *nfToAdopt,
00291 UErrorCode &status);
00299 UBool setMeasureFormatLocale(const Locale &locale, UErrorCode &status);
00300
00306 void adoptNumberFormat(NumberFormat *nfToAdopt, UErrorCode &status);
00307
00312 const NumberFormat &getNumberFormat() const;
00313
00318 const PluralRules &getPluralRules() const;
00319
00324 Locale getLocale(UErrorCode &status) const;
00325
00330 const char *getLocaleID(UErrorCode &status) const;
00331
00332 #endif
00333
00334 private:
00335 const MeasureFormatCacheData *cache;
00336 const SharedNumberFormat *numberFormat;
00337 const SharedPluralRules *pluralRules;
00338 UMeasureFormatWidth width;
00339
00340
00341
00342
00343 ListFormatter *listFormatter;
00344
00345 const SimpleFormatter *getFormatterOrNull(
00346 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index) const;
00347
00348 const SimpleFormatter *getFormatter(
00349 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index,
00350 UErrorCode &errorCode) const;
00351
00352 const SimpleFormatter *getPluralFormatter(
00353 const MeasureUnit &unit, UMeasureFormatWidth width, int32_t index,
00354 UErrorCode &errorCode) const;
00355
00356 const SimpleFormatter *getPerFormatter(
00357 UMeasureFormatWidth width,
00358 UErrorCode &status) const;
00359
00360 int32_t withPerUnitAndAppend(
00361 const UnicodeString &formatted,
00362 const MeasureUnit &perUnit,
00363 UnicodeString &appendTo,
00364 UErrorCode &status) const;
00365
00366 UnicodeString &formatMeasure(
00367 const Measure &measure,
00368 const NumberFormat &nf,
00369 UnicodeString &appendTo,
00370 FieldPosition &pos,
00371 UErrorCode &status) const;
00372
00373 UnicodeString &formatMeasuresSlowTrack(
00374 const Measure *measures,
00375 int32_t measureCount,
00376 UnicodeString& appendTo,
00377 FieldPosition& pos,
00378 UErrorCode& status) const;
00379
00380 UnicodeString &formatNumeric(
00381 const Formattable *hms,
00382
00383 int32_t bitMap,
00384 UnicodeString &appendTo,
00385 UErrorCode &status) const;
00386
00387 UnicodeString &formatNumeric(
00388 UDate date,
00389 const DateFormat &dateFmt,
00390 UDateFormatField smallestField,
00391 const Formattable &smallestAmount,
00392 UnicodeString &appendTo,
00393 UErrorCode &status) const;
00394 };
00395
00396 U_NAMESPACE_END
00397
00398 #endif // #if !UCONFIG_NO_FORMATTING
00399 #endif // #ifndef MEASUREFORMAT_H