msgfmt.h

Go to the documentation of this file.
00001 /*
00002 * Copyright (C) 2007-2008, 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 
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 
00306 class U_I18N_API MessageFormat : public Format {
00307 public:
00313     enum EFormatNumber {
00319         kMaxFormat = 10
00320     };
00321 
00331     MessageFormat(const UnicodeString& pattern,
00332                   UErrorCode &status);
00333 
00342     MessageFormat(const UnicodeString& pattern,
00343                   const Locale& newLocale,
00344                         UErrorCode& status);
00355     MessageFormat(const UnicodeString& pattern,
00356                   const Locale& newLocale,
00357                   UParseError& parseError,
00358                   UErrorCode& status);
00363     MessageFormat(const MessageFormat&);
00364 
00369     const MessageFormat& operator=(const MessageFormat&);
00370 
00375     virtual ~MessageFormat();
00376 
00382     virtual Format* clone(void) const;
00383 
00391     virtual UBool operator==(const Format& other) const;
00392 
00399     virtual void setLocale(const Locale& theLocale);
00400 
00407     virtual const Locale& getLocale(void) const;
00408 
00417     virtual void applyPattern(const UnicodeString& pattern,
00418                               UErrorCode& status);
00429     virtual void applyPattern(const UnicodeString& pattern,
00430                              UParseError& parseError,
00431                              UErrorCode& status);
00432 
00441     virtual UnicodeString& toPattern(UnicodeString& appendTo) const;
00442 
00456     virtual void adoptFormats(Format** formatsToAdopt, int32_t count);
00457 
00469     virtual void setFormats(const Format** newFormats, int32_t cnt);
00470 
00471 
00482     virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt);
00483 
00493     virtual void setFormat(int32_t formatNumber, const Format& format);
00494 
00503     virtual StringEnumeration* getFormatNames(UErrorCode& status);
00504     
00518     virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status);
00519     
00533     virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status);
00534     
00549     virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status);
00550 
00551 
00563     virtual const Format** getFormats(int32_t& count) const;
00564 
00579     UnicodeString& format(  const Formattable* source,
00580                             int32_t count,
00581                             UnicodeString& appendTo,
00582                             FieldPosition& ignore,
00583                             UErrorCode& status) const;
00584 
00599     static UnicodeString& format(const UnicodeString& pattern,
00600                                  const Formattable* arguments,
00601                                  int32_t count,
00602                                  UnicodeString& appendTo,
00603                                  UErrorCode& status);
00604 
00622     virtual UnicodeString& format(const Formattable& obj,
00623                                   UnicodeString& appendTo,
00624                                   FieldPosition& pos,
00625                                   UErrorCode& status) const;
00626 
00641     UnicodeString& format(const Formattable& obj,
00642                           UnicodeString& appendTo,
00643                           UErrorCode& status) const;
00644     
00645 
00664     UnicodeString& format(const UnicodeString* argumentNames,
00665                           const Formattable* arguments,
00666                           int32_t count,
00667                           UnicodeString& appendTo,
00668                           UErrorCode& status) const;
00682     virtual Formattable* parse( const UnicodeString& source,
00683                                 ParsePosition& pos,
00684                                 int32_t& count) const;
00685 
00700     virtual Formattable* parse( const UnicodeString& source,
00701                                 int32_t& count,
00702                                 UErrorCode& status) const;
00703 
00716     virtual void parseObject(const UnicodeString& source,
00717                              Formattable& result,
00718                              ParsePosition& pos) const;
00719 
00739     static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, 
00740         UErrorCode& status);
00741     
00749     UBool usesNamedArguments() const;
00750     
00762     virtual UClassID getDynamicClassID(void) const;
00763 
00775     static UClassID U_EXPORT2 getStaticClassID(void);
00776     
00777 private:
00778 
00779     Locale              fLocale;
00780     UnicodeString       fPattern;
00781     Format**            formatAliases; // see getFormats
00782     int32_t             formatAliasesCapacity;
00783     UProperty           idStart;
00784     UProperty           idContinue;
00785 
00786     MessageFormat(); // default constructor not implemented
00787 
00788     /*
00789      * A structure representing one subformat of this MessageFormat.
00790      * Each subformat has a Format object, an offset into the plain
00791      * pattern text fPattern, and an argument number.  The argument
00792      * number corresponds to the array of arguments to be formatted.
00793      * @internal
00794      */
00795     class Subformat;
00796 
00801     Subformat* subformats;
00802     int32_t    subformatCount;
00803     int32_t    subformatCapacity;
00804 
00813     Formattable::Type* argTypes;
00814     int32_t            argTypeCount;
00815     int32_t            argTypeCapacity;
00816 
00821     UBool isArgNumeric;
00822 
00823     // Variable-size array management
00824     UBool allocateSubformats(int32_t capacity);
00825     UBool allocateArgTypes(int32_t capacity);
00826 
00834     NumberFormat* defaultNumberFormat;
00835     DateFormat*   defaultDateFormat;
00836 
00841     const NumberFormat* getDefaultNumberFormat(UErrorCode&) const;
00842     const DateFormat*   getDefaultDateFormat(UErrorCode&) const;
00843 
00850     static int32_t findKeyword( const UnicodeString& s,
00851                                 const UChar * const *list);
00852 
00869     UnicodeString&  format( const Formattable* arguments,
00870                             int32_t cnt,
00871                             UnicodeString& appendTo,
00872                             FieldPosition& status,
00873                             int32_t recursionProtection,
00874                             UErrorCode& success) const;
00875     
00876     UnicodeString&  format( const Formattable* arguments, 
00877                             const UnicodeString *argumentNames,
00878                             int32_t cnt,
00879                             UnicodeString& appendTo,
00880                             FieldPosition& status,
00881                             int32_t recursionProtection,
00882                             UErrorCode& success) const;
00883 
00884     void             makeFormat(int32_t offsetNumber,
00885                                 UnicodeString* segments,
00886                                 UParseError& parseError,
00887                                 UErrorCode& success);
00888 
00892     NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const;
00893 
00903     static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target);
00904 
00913     const Formattable::Type* getArgTypeList(int32_t& listCount) const {
00914         listCount = argTypeCount;
00915         return argTypes; 
00916     }
00917     
00923     UBool isLegalArgName(const UnicodeString& argName) const;
00924     
00925     friend class MessageFormatAdapter; // getFormatTypeList() access
00926 };
00927 
00928 inline UnicodeString&
00929 MessageFormat::format(const Formattable& obj,
00930                       UnicodeString& appendTo,
00931                       UErrorCode& status) const {
00932     return Format::format(obj, appendTo, status);
00933 }
00934 U_NAMESPACE_END
00935 
00936 #endif /* #if !UCONFIG_NO_FORMATTING */
00937 
00938 #endif // _MSGFMT
00939 //eof
00940 

Generated on Thu Jan 15 11:25:48 2009 for ICU 4.0.1 by  doxygen 1.4.7