ICU 4.4.2 4.4.2
|
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 00317 class U_I18N_API MessageFormat : public Format { 00318 public: 00324 enum EFormatNumber { 00330 kMaxFormat = 10 00331 }; 00332 00342 MessageFormat(const UnicodeString& pattern, 00343 UErrorCode &status); 00344 00353 MessageFormat(const UnicodeString& pattern, 00354 const Locale& newLocale, 00355 UErrorCode& status); 00366 MessageFormat(const UnicodeString& pattern, 00367 const Locale& newLocale, 00368 UParseError& parseError, 00369 UErrorCode& status); 00374 MessageFormat(const MessageFormat&); 00375 00380 const MessageFormat& operator=(const MessageFormat&); 00381 00386 virtual ~MessageFormat(); 00387 00393 virtual Format* clone(void) const; 00394 00402 virtual UBool operator==(const Format& other) const; 00403 00410 virtual void setLocale(const Locale& theLocale); 00411 00418 virtual const Locale& getLocale(void) const; 00419 00428 virtual void applyPattern(const UnicodeString& pattern, 00429 UErrorCode& status); 00440 virtual void applyPattern(const UnicodeString& pattern, 00441 UParseError& parseError, 00442 UErrorCode& status); 00443 00452 virtual UnicodeString& toPattern(UnicodeString& appendTo) const; 00453 00470 virtual void adoptFormats(Format** formatsToAdopt, int32_t count); 00471 00486 virtual void setFormats(const Format** newFormats, int32_t cnt); 00487 00488 00503 virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); 00504 00514 virtual void setFormat(int32_t formatNumber, const Format& format); 00515 00524 virtual StringEnumeration* getFormatNames(UErrorCode& status); 00525 00539 virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status); 00540 00554 virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status); 00555 00570 virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status); 00571 00584 virtual const Format** getFormats(int32_t& count) const; 00585 00586 00587 using Format::format; 00588 00606 UnicodeString& format(const Formattable* source, 00607 int32_t count, 00608 UnicodeString& appendTo, 00609 FieldPosition& ignore, 00610 UErrorCode& status) const; 00611 00629 static UnicodeString& format(const UnicodeString& pattern, 00630 const Formattable* arguments, 00631 int32_t count, 00632 UnicodeString& appendTo, 00633 UErrorCode& status); 00634 00655 virtual UnicodeString& format(const Formattable& obj, 00656 UnicodeString& appendTo, 00657 FieldPosition& pos, 00658 UErrorCode& status) const; 00659 00674 UnicodeString& format(const Formattable& obj, 00675 UnicodeString& appendTo, 00676 UErrorCode& status) const; 00677 00678 00697 UnicodeString& format(const UnicodeString* argumentNames, 00698 const Formattable* arguments, 00699 int32_t count, 00700 UnicodeString& appendTo, 00701 UErrorCode& status) const; 00715 virtual Formattable* parse(const UnicodeString& source, 00716 ParsePosition& pos, 00717 int32_t& count) const; 00718 00734 virtual Formattable* parse(const UnicodeString& source, 00735 int32_t& count, 00736 UErrorCode& status) const; 00737 00750 virtual void parseObject(const UnicodeString& source, 00751 Formattable& result, 00752 ParsePosition& pos) const; 00753 00773 static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, 00774 UErrorCode& status); 00775 00783 UBool usesNamedArguments() const; 00784 00785 00796 int32_t getArgTypeCount() const; 00797 00809 virtual UClassID getDynamicClassID(void) const; 00810 00822 static UClassID U_EXPORT2 getStaticClassID(void); 00823 00824 private: 00825 00826 Locale fLocale; 00827 UnicodeString fPattern; 00828 Format** formatAliases; // see getFormats 00829 int32_t formatAliasesCapacity; 00830 UProperty idStart; 00831 UProperty idContinue; 00832 00833 MessageFormat(); // default constructor not implemented 00834 00835 /* 00836 * A structure representing one subformat of this MessageFormat. 00837 * Each subformat has a Format object, an offset into the plain 00838 * pattern text fPattern, and an argument number. The argument 00839 * number corresponds to the array of arguments to be formatted. 00840 * @internal 00841 */ 00842 class Subformat; 00843 00848 Subformat* subformats; 00849 int32_t subformatCount; 00850 int32_t subformatCapacity; 00851 00860 Formattable::Type* argTypes; 00861 int32_t argTypeCount; 00862 int32_t argTypeCapacity; 00863 00868 UBool isArgNumeric; 00869 00870 // Variable-size array management 00871 UBool allocateSubformats(int32_t capacity); 00872 UBool allocateArgTypes(int32_t capacity); 00873 00881 NumberFormat* defaultNumberFormat; 00882 DateFormat* defaultDateFormat; 00883 00888 const NumberFormat* getDefaultNumberFormat(UErrorCode&) const; 00889 const DateFormat* getDefaultDateFormat(UErrorCode&) const; 00890 00897 static int32_t findKeyword( const UnicodeString& s, 00898 const UChar * const *list); 00899 00916 UnicodeString& format( const Formattable* arguments, 00917 int32_t cnt, 00918 UnicodeString& appendTo, 00919 FieldPosition& status, 00920 int32_t recursionProtection, 00921 UErrorCode& success) const; 00922 00923 UnicodeString& format( const Formattable* arguments, 00924 const UnicodeString *argumentNames, 00925 int32_t cnt, 00926 UnicodeString& appendTo, 00927 FieldPosition& status, 00928 int32_t recursionProtection, 00929 UErrorCode& success) const; 00930 00931 void makeFormat(int32_t offsetNumber, 00932 UnicodeString* segments, 00933 UParseError& parseError, 00934 UErrorCode& success); 00935 00939 NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; 00940 00950 static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target); 00951 00960 const Formattable::Type* getArgTypeList(int32_t& listCount) const { 00961 listCount = argTypeCount; 00962 return argTypes; 00963 } 00964 00970 UBool isLegalArgName(const UnicodeString& argName) const; 00971 00972 friend class MessageFormatAdapter; // getFormatTypeList() access 00973 }; 00974 00975 inline UnicodeString& 00976 MessageFormat::format(const Formattable& obj, 00977 UnicodeString& appendTo, 00978 UErrorCode& status) const { 00979 return Format::format(obj, appendTo, status); 00980 } 00981 00982 U_NAMESPACE_END 00983 00984 #endif /* #if !UCONFIG_NO_FORMATTING */ 00985 00986 #endif // _MSGFMT 00987 //eof