ICU 4.6 4.6
|
00001 /* 00002 * Copyright (C) 2007-2010, International Business Machines Corporation and 00003 * others. All Rights Reserved. 00004 ******************************************************************************** 00005 * 00006 * File MSGFMT.H 00007 * 00008 * Modification History: 00009 * 00010 * Date Name Description 00011 * 02/19/97 aliu Converted from java. 00012 * 03/20/97 helena Finished first cut of implementation. 00013 * 07/22/98 stephen Removed operator!= (defined in Format) 00014 * 08/19/2002 srl Removing Javaisms 00015 *******************************************************************************/ 00016 00017 #ifndef MSGFMT_H 00018 #define MSGFMT_H 00019 00020 #include "unicode/utypes.h" 00021 00027 #if !UCONFIG_NO_FORMATTING 00028 00029 #include "unicode/format.h" 00030 #include "unicode/locid.h" 00031 #include "unicode/parseerr.h" 00032 #include "unicode/uchar.h" 00033 00034 U_NAMESPACE_BEGIN 00035 00036 class NumberFormat; 00037 class DateFormat; 00038 00291 class U_I18N_API MessageFormat : public Format { 00292 public: 00298 enum EFormatNumber { 00304 kMaxFormat = 10 00305 }; 00306 00316 MessageFormat(const UnicodeString& pattern, 00317 UErrorCode &status); 00318 00327 MessageFormat(const UnicodeString& pattern, 00328 const Locale& newLocale, 00329 UErrorCode& status); 00340 MessageFormat(const UnicodeString& pattern, 00341 const Locale& newLocale, 00342 UParseError& parseError, 00343 UErrorCode& status); 00348 MessageFormat(const MessageFormat&); 00349 00354 const MessageFormat& operator=(const MessageFormat&); 00355 00360 virtual ~MessageFormat(); 00361 00367 virtual Format* clone(void) const; 00368 00376 virtual UBool operator==(const Format& other) const; 00377 00384 virtual void setLocale(const Locale& theLocale); 00385 00392 virtual const Locale& getLocale(void) const; 00393 00402 virtual void applyPattern(const UnicodeString& pattern, 00403 UErrorCode& status); 00414 virtual void applyPattern(const UnicodeString& pattern, 00415 UParseError& parseError, 00416 UErrorCode& status); 00417 00426 virtual UnicodeString& toPattern(UnicodeString& appendTo) const; 00427 00444 virtual void adoptFormats(Format** formatsToAdopt, int32_t count); 00445 00460 virtual void setFormats(const Format** newFormats, int32_t cnt); 00461 00462 00477 virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); 00478 00488 virtual void setFormat(int32_t formatNumber, const Format& format); 00489 00498 virtual StringEnumeration* getFormatNames(UErrorCode& status); 00499 00513 virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status); 00514 00528 virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status); 00529 00544 virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status); 00545 00558 virtual const Format** getFormats(int32_t& count) const; 00559 00560 00561 using Format::format; 00562 00580 UnicodeString& format(const Formattable* source, 00581 int32_t count, 00582 UnicodeString& appendTo, 00583 FieldPosition& ignore, 00584 UErrorCode& status) const; 00585 00603 static UnicodeString& format(const UnicodeString& pattern, 00604 const Formattable* arguments, 00605 int32_t count, 00606 UnicodeString& appendTo, 00607 UErrorCode& status); 00608 00629 virtual UnicodeString& format(const Formattable& obj, 00630 UnicodeString& appendTo, 00631 FieldPosition& pos, 00632 UErrorCode& status) const; 00633 00648 UnicodeString& format(const Formattable& obj, 00649 UnicodeString& appendTo, 00650 UErrorCode& status) const; 00651 00652 00671 UnicodeString& format(const UnicodeString* argumentNames, 00672 const Formattable* arguments, 00673 int32_t count, 00674 UnicodeString& appendTo, 00675 UErrorCode& status) const; 00689 virtual Formattable* parse(const UnicodeString& source, 00690 ParsePosition& pos, 00691 int32_t& count) const; 00692 00708 virtual Formattable* parse(const UnicodeString& source, 00709 int32_t& count, 00710 UErrorCode& status) const; 00711 00724 virtual void parseObject(const UnicodeString& source, 00725 Formattable& result, 00726 ParsePosition& pos) const; 00727 00747 static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, 00748 UErrorCode& status); 00749 00757 UBool usesNamedArguments() const; 00758 00759 00770 int32_t getArgTypeCount() const; 00771 00783 virtual UClassID getDynamicClassID(void) const; 00784 00796 static UClassID U_EXPORT2 getStaticClassID(void); 00797 00798 private: 00799 00800 Locale fLocale; 00801 UnicodeString fPattern; 00802 Format** formatAliases; // see getFormats 00803 int32_t formatAliasesCapacity; 00804 UProperty idStart; 00805 UProperty idContinue; 00806 00807 MessageFormat(); // default constructor not implemented 00808 00809 /* 00810 * A structure representing one subformat of this MessageFormat. 00811 * Each subformat has a Format object, an offset into the plain 00812 * pattern text fPattern, and an argument number. The argument 00813 * number corresponds to the array of arguments to be formatted. 00814 * @internal 00815 */ 00816 class Subformat; 00817 00822 Subformat* subformats; 00823 int32_t subformatCount; 00824 int32_t subformatCapacity; 00825 00834 Formattable::Type* argTypes; 00835 int32_t argTypeCount; 00836 int32_t argTypeCapacity; 00837 00842 UBool isArgNumeric; 00843 00844 // Variable-size array management 00845 UBool allocateSubformats(int32_t capacity); 00846 UBool allocateArgTypes(int32_t capacity); 00847 00855 NumberFormat* defaultNumberFormat; 00856 DateFormat* defaultDateFormat; 00857 00862 const NumberFormat* getDefaultNumberFormat(UErrorCode&) const; 00863 const DateFormat* getDefaultDateFormat(UErrorCode&) const; 00864 00871 static int32_t findKeyword( const UnicodeString& s, 00872 const UChar * const *list); 00873 00890 UnicodeString& format( const Formattable* arguments, 00891 int32_t cnt, 00892 UnicodeString& appendTo, 00893 FieldPosition& status, 00894 int32_t recursionProtection, 00895 UErrorCode& success) const; 00896 00897 UnicodeString& format( const Formattable* arguments, 00898 const UnicodeString *argumentNames, 00899 int32_t cnt, 00900 UnicodeString& appendTo, 00901 FieldPosition& status, 00902 int32_t recursionProtection, 00903 UErrorCode& success) const; 00904 00905 void makeFormat(int32_t offsetNumber, 00906 UnicodeString* segments, 00907 UParseError& parseError, 00908 UErrorCode& success); 00909 00913 NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; 00914 00924 static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target); 00925 00934 const Formattable::Type* getArgTypeList(int32_t& listCount) const { 00935 listCount = argTypeCount; 00936 return argTypes; 00937 } 00938 00944 UBool isLegalArgName(const UnicodeString& argName) const; 00945 00946 friend class MessageFormatAdapter; // getFormatTypeList() access 00947 }; 00948 00949 inline UnicodeString& 00950 MessageFormat::format(const Formattable& obj, 00951 UnicodeString& appendTo, 00952 UErrorCode& status) const { 00953 return Format::format(obj, appendTo, status); 00954 } 00955 00956 U_NAMESPACE_END 00957 00958 #endif /* #if !UCONFIG_NO_FORMATTING */ 00959 00960 #endif // _MSGFMT 00961 //eof