msgfmt.h

Go to the documentation of this file.
00001 /* 00002 * Copyright (C) {1997-2004}, International Business Machines Corporation and others. All Rights Reserved. 00003 ******************************************************************************** 00004 * 00005 * File MSGFMT.H 00006 * 00007 * Modification History: 00008 * 00009 * Date Name Description 00010 * 02/19/97 aliu Converted from java. 00011 * 03/20/97 helena Finished first cut of implementation. 00012 * 07/22/98 stephen Removed operator!= (defined in Format) 00013 * 08/19/2002 srl Removing Javaisms 00014 ******************************************************************************** 00015 */ 00016 00017 #ifndef MSGFMT_H 00018 #define MSGFMT_H 00019 00020 #include "unicode/utypes.h" 00021 00022 #if !UCONFIG_NO_FORMATTING 00023 00024 #include "unicode/format.h" 00025 #include "unicode/locid.h" 00026 #include "unicode/parseerr.h" 00027 00028 U_NAMESPACE_BEGIN 00029 00030 class NumberFormat; 00031 class DateFormat; 00032 00246 class U_I18N_API MessageFormat : public Format { 00247 public: 00253 enum EFormatNumber { 00259 kMaxFormat = 10 00260 }; 00261 00271 MessageFormat(const UnicodeString& pattern, 00272 UErrorCode &status); 00273 00282 MessageFormat(const UnicodeString& pattern, 00283 const Locale& newLocale, 00284 UErrorCode& status); 00295 MessageFormat(const UnicodeString& pattern, 00296 const Locale& newLocale, 00297 UParseError& parseError, 00298 UErrorCode& status); 00303 MessageFormat(const MessageFormat&); 00304 00309 const MessageFormat& operator=(const MessageFormat&); 00310 00315 virtual ~MessageFormat(); 00316 00322 virtual Format* clone(void) const; 00323 00331 virtual UBool operator==(const Format& other) const; 00332 00339 virtual void setLocale(const Locale& theLocale); 00340 00347 virtual const Locale& getLocale(void) const; 00348 00357 virtual void applyPattern(const UnicodeString& pattern, 00358 UErrorCode& status); 00369 virtual void applyPattern(const UnicodeString& pattern, 00370 UParseError& parseError, 00371 UErrorCode& status); 00372 00381 virtual UnicodeString& toPattern(UnicodeString& appendTo) const; 00382 00396 virtual void adoptFormats(Format** formatsToAdopt, int32_t count); 00397 00409 virtual void setFormats(const Format** newFormats,int32_t cnt); 00410 00411 00422 virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); 00423 00433 virtual void setFormat(int32_t formatNumber, const Format& format); 00434 00446 virtual const Format** getFormats(int32_t& count) const; 00447 00462 UnicodeString& format( const Formattable* source, 00463 int32_t count, 00464 UnicodeString& appendTo, 00465 FieldPosition& ignore, 00466 UErrorCode& status) const; 00467 00482 static UnicodeString& format( const UnicodeString& pattern, 00483 const Formattable* arguments, 00484 int32_t count, 00485 UnicodeString& appendTo, 00486 UErrorCode& status); 00487 00505 virtual UnicodeString& format(const Formattable& obj, 00506 UnicodeString& appendTo, 00507 FieldPosition& pos, 00508 UErrorCode& status) const; 00509 00524 UnicodeString& format(const Formattable& obj, 00525 UnicodeString& appendTo, 00526 UErrorCode& status) const; 00527 00541 virtual Formattable* parse( const UnicodeString& source, 00542 ParsePosition& pos, 00543 int32_t& count) const; 00544 00556 virtual Formattable* parse( const UnicodeString& source, 00557 int32_t& count, 00558 UErrorCode& status) const; 00559 00572 virtual void parseObject(const UnicodeString& source, 00573 Formattable& result, 00574 ParsePosition& pos) const; 00575 00587 virtual UClassID getDynamicClassID(void) const; 00588 00600 static UClassID getStaticClassID(void); 00601 00602 private: 00603 00604 Locale fLocale; 00605 UnicodeString fPattern; 00606 Format** formatAliases; // see getFormats 00607 int32_t formatAliasesCapacity; 00608 00609 MessageFormat(); // default constructor not implemented 00610 00611 /* 00612 * A structure representing one subformat of this MessageFormat. 00613 * Each subformat has a Format object, an offset into the plain 00614 * pattern text fPattern, and an argument number. The argument 00615 * number corresponds to the array of arguments to be formatted. 00616 * @internal 00617 */ 00618 class Subformat { 00619 public: 00623 Format* format; // formatter 00627 int32_t offset; // offset into fPattern 00631 int32_t arg; // 0-based argument number 00632 00638 Subformat& operator=(const Subformat& that) { 00639 format = that.format ? that.format->clone() : NULL; 00640 offset = that.offset; 00641 arg = that.arg; 00642 return *this; 00643 } 00644 00648 UBool operator==(const Subformat& that) const { 00649 // Do cheap comparisons first 00650 return offset == that.offset && 00651 arg == that.arg && 00652 ((format == that.format) || // handles NULL 00653 (*format == *that.format)); 00654 } 00655 00659 UBool operator!=(const Subformat& that) const { 00660 return !operator==(that); 00661 } 00662 }; 00663 00668 Subformat* subformats; 00669 int32_t subformatCount; 00670 int32_t subformatCapacity; 00671 00680 Formattable::Type* argTypes; 00681 int32_t argTypeCount; 00682 int32_t argTypeCapacity; 00683 00684 // Variable-size array management 00685 UBool allocateSubformats(int32_t capacity); 00686 UBool allocateArgTypes(int32_t capacity); 00687 00695 NumberFormat* defaultNumberFormat; 00696 DateFormat* defaultDateFormat; 00697 00702 const NumberFormat* getDefaultNumberFormat(UErrorCode&) const; 00703 const DateFormat* getDefaultDateFormat(UErrorCode&) const; 00704 00711 static int32_t findKeyword( const UnicodeString& s, 00712 const UChar * const *list); 00713 00730 UnicodeString& format( const Formattable* arguments, 00731 int32_t cnt, 00732 UnicodeString& appendTo, 00733 FieldPosition& status, 00734 int32_t recursionProtection, 00735 UErrorCode& success) const; 00736 00737 void makeFormat(int32_t offsetNumber, 00738 UnicodeString* segments, 00739 UParseError& parseError, 00740 UErrorCode& success); 00741 00745 NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; 00746 00756 static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target); 00757 00766 const Formattable::Type* getArgTypeList(int32_t& listCount) const { 00767 listCount = argTypeCount; 00768 return argTypes; 00769 } 00770 00771 friend class MessageFormatAdapter; // getFormatTypeList() access 00772 }; 00773 00774 inline UnicodeString& 00775 MessageFormat::format(const Formattable& obj, 00776 UnicodeString& appendTo, 00777 UErrorCode& status) const { 00778 return Format::format(obj, appendTo, status); 00779 } 00780 U_NAMESPACE_END 00781 00782 #endif /* #if !UCONFIG_NO_FORMATTING */ 00783 00784 #endif // _MSGFMT 00785 //eof 00786

Generated on Fri Jun 18 12:35:58 2004 for ICU by doxygen 1.3.7