/* * Copyright © {1997-1999}, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************** * * File MSGFMT.H * * Modification History: * * Date Name Description * 02/19/97 aliu Converted from java. * 03/20/97 helena Finished first cut of implementation. * 07/22/98 stephen Removed operator!= (defined in Format) ******************************************************************************** */ // ***************************************************************************** // This file was generated from the java source file MessageFormat.java // ***************************************************************************** #ifndef MSGFMT_H #define MSGFMT_H #include "unicode/utypes.h" #include "unicode/format.h" #include "unicode/locid.h" class NumberFormat; class U_I18N_API MessageFormat : public Format { public: enum EFormatNumber { kMaxFormat = 10 }; MessageFormat(const UnicodeString& pattern, UErrorCode &status); MessageFormat(const UnicodeString& pattern, const Locale& newLocale, UErrorCode& success); MessageFormat(const MessageFormat&); const MessageFormat& operator=(const MessageFormat&); virtual ~MessageFormat(); virtual Format* clone(void) const; virtual UBool operator==(const Format& other) const; virtual void setLocale(const Locale& theLocale); virtual const Locale& getLocale(void) const; virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status); virtual UnicodeString& toPattern(UnicodeString& result) const; virtual void adoptFormats(Format** formatsToAdopt, int32_t count); virtual void setFormats(const Format** newFormats,int32_t cnt); virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); virtual void setFormat(int32_t variable, const Format& newFormat); virtual const Format** getFormats(int32_t& count) const; UnicodeString& format( const Formattable* source, int32_t count, UnicodeString& result, FieldPosition& ignore, UErrorCode& success) const; static UnicodeString& format( const UnicodeString& pattern, const Formattable* arguments, int32_t count, UnicodeString& result, UErrorCode& success); virtual UnicodeString& format(const Formattable& obj, UnicodeString& toAppendTo, FieldPosition& pos, UErrorCode& status) const; UnicodeString& format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const; virtual Formattable* parse( const UnicodeString& source, ParsePosition& status, int32_t& count) const; virtual Formattable* parse( const UnicodeString& source, int32_t& count, UErrorCode& status) const; virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& parse_pos) const; public: virtual UClassID getDynamicClassID(void) const; static UClassID getStaticClassID(void) { return (UClassID)&fgClassID; } private: static char fgClassID; static NumberFormat* fgNumberFormat; // fgNumberFormat is held in a cache of one. static NumberFormat* getNumberFormat(UErrorCode &status); // call this function to 'check out' a numberformat from the cache. static void releaseNumberFormat(NumberFormat *adopt); // call this function to 'return' the number format to the cache. Locale fLocale; UnicodeString fPattern; // later, allow more than ten items Format *fFormats[kMaxFormat]; int32_t *fOffsets; int32_t fCount; int32_t *fArgumentNumbers; int32_t fMaxOffset; static const int32_t fgListLength; static const UnicodeString fgTypeList[]; static const UnicodeString fgModifierList[]; static const UnicodeString fgDateModifierList[]; static int32_t findKeyword( const UnicodeString& s, const UnicodeString* list); UnicodeString& format( const Formattable* arguments, int32_t cnt, UnicodeString& result, FieldPosition& status, int32_t recursionProtection, UErrorCode& success) const; void makeFormat( int32_t position, int32_t offsetNumber, UnicodeString* segments, UErrorCode& success); NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; static void copyAndFixQuotes(const UnicodeString& source, int32_t start, int32_t end, UnicodeString& target); static int32_t stoi(const UnicodeString& string, UErrorCode& status); static UnicodeString& itos(int32_t i, UnicodeString& string); }; inline UClassID MessageFormat::getDynamicClassID() const { return MessageFormat::getStaticClassID(); } inline UnicodeString& MessageFormat::format(const Formattable& obj, UnicodeString& result, UErrorCode& status) const { return Format::format(obj, result, status); } #endif // _MSGFMT //eof