ICU 4.6 4.6
msgfmt.h
Go to the documentation of this file.
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
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines