00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
#ifndef MSGFMT_H
00020
#define MSGFMT_H
00021
00022
#include "unicode/utypes.h"
00023
#include "unicode/format.h"
00024
#include "unicode/locid.h"
00025
#include "unicode/parseerr.h"
00026
00027 U_NAMESPACE_BEGIN
00028
00029
class NumberFormat;
00030
00194 class U_I18N_API MessageFormat :
public Format {
00195
public:
00196
enum EFormatNumber { kMaxFormat = 10 };
00205 MessageFormat(
const UnicodeString& pattern,
00206 UErrorCode &status);
00207
00216 MessageFormat(
const UnicodeString& pattern,
00217
const Locale& newLocale,
00218 UErrorCode& success);
00229 MessageFormat(
const UnicodeString& pattern,
00230
const Locale& newLocale,
00231
UParseError& parseError,
00232 UErrorCode& success);
00237 MessageFormat(
const MessageFormat&);
00238
00243
const MessageFormat& operator=(
const MessageFormat&);
00244
00249
virtual ~MessageFormat();
00250
00256
virtual Format*
clone(
void)
const;
00257
00263
virtual UBool operator==(
const Format& other)
const;
00264
00270
virtual void setLocale(
const Locale& theLocale);
00271
00277
virtual const Locale& getLocale(
void)
const;
00278
00288
virtual void applyPattern(
const UnicodeString& pattern,
00289 UErrorCode& status);
00300
virtual void applyPattern(
const UnicodeString& pattern,
00301
UParseError& parseError,
00302 UErrorCode& status);
00303
00308
virtual UnicodeString& toPattern(
UnicodeString& result)
const;
00309
00316
virtual void adoptFormats(
Format** formatsToAdopt, int32_t count);
00317
00323
virtual void setFormats(
const Format** newFormats,int32_t cnt);
00324
00325
00332
virtual void adoptFormat(int32_t formatNumber,
Format* formatToAdopt);
00333
00339
virtual void setFormat(int32_t variable,
const Format& newFormat);
00340
00341
00347
virtual const Format** getFormats(int32_t& count)
const;
00348
00359
UnicodeString& format(
const Formattable* source,
00360 int32_t count,
00361
UnicodeString& result,
00362
FieldPosition& ignore,
00363 UErrorCode& success)
const;
00364
00370
static UnicodeString& format(
const UnicodeString& pattern,
00371
const Formattable* arguments,
00372 int32_t count,
00373
UnicodeString& result,
00374 UErrorCode& success);
00375
00391
virtual UnicodeString& format(
const Formattable& obj,
00392
UnicodeString& toAppendTo,
00393
FieldPosition& pos,
00394 UErrorCode& status)
const;
00395
00400
UnicodeString& format(
const Formattable& obj,
00401
UnicodeString& result,
00402 UErrorCode& status)
const;
00403
00435
virtual Formattable* parse(
const UnicodeString& source,
00436
ParsePosition& status,
00437 int32_t& count)
const;
00438
00450
virtual Formattable* parse(
const UnicodeString& source,
00451 int32_t& count,
00452 UErrorCode& status)
const;
00453
00483
virtual void parseObject(
const UnicodeString& source,
00484
Formattable& result,
00485
ParsePosition& parse_pos)
const;
00486
00487
public:
00499
virtual UClassID getDynamicClassID(
void)
const;
00500
00512 static UClassID getStaticClassID(
void) {
return (
UClassID)&fgClassID; }
00513
00521 const Formattable::Type* getFormatTypeList(int32_t& listCount){
00522 listCount=fListCount;
00523
return fFormatTypeList;
00524 }
00525
00526
private:
00527
static const char fgClassID;
00528
00529
00530
00531
00532
00533 Formattable::Type fFormatTypeList[kMaxFormat];
00534 int32_t fListCount;
00535
00536
00537
00538
static NumberFormat* getNumberFormat(UErrorCode &status);
00539
static void releaseNumberFormat(
NumberFormat *adopt);
00540
00541 Locale fLocale;
00542
UnicodeString fPattern;
00543
00544
Format *fFormats[kMaxFormat];
00545 int32_t *fOffsets;
00546 int32_t fCount;
00547 int32_t *fArgumentNumbers;
00548 int32_t fMaxOffset;
00549
00556
static int32_t findKeyword(
const UnicodeString& s,
00557
const UChar *
const *list);
00558
00570
UnicodeString& format(
const Formattable* arguments,
00571 int32_t cnt,
00572
UnicodeString& result,
00573
FieldPosition& status,
00574 int32_t recursionProtection,
00575 UErrorCode& success)
const;
00576
00586 int32_t makeFormat(
00587 int32_t offsetNumber,
00588
UnicodeString* segments,
00589
UParseError& parseError,
00590 UErrorCode& success);
00591
00595
NumberFormat* createIntegerFormat(
const Locale& locale, UErrorCode& status)
const;
00596
00605
static void copyAndFixQuotes(
const UnicodeString& source, int32_t start, int32_t end,
UnicodeString& target);
00606
00614
static int32_t stoi(
const UnicodeString& string);
00615
00624
static UnicodeString& itos(int32_t i,
UnicodeString& string);
00625 };
00626
00627
inline UClassID
00628 MessageFormat::getDynamicClassID()
const
00629
{
00630
return MessageFormat::getStaticClassID();
00631 }
00632
00633
inline UnicodeString&
00634 MessageFormat::format(
const Formattable& obj,
00635
UnicodeString& result,
00636 UErrorCode& status)
const {
00637
return Format::format(obj, result, status);
00638 }
00639 U_NAMESPACE_END
00640
00641
#endif // _MSGFMT
00642