/
usr
/
include
/
unicode
/
/usr/include/unicode
mkdir
upload
Name
Size
Mode
Actions
basictz.h
8913
0644
edit
dl
rm
bms.h
8664
0644
edit
dl
rm
bmsearch.h
7316
0644
edit
dl
rm
brkiter.h
23001
0644
edit
dl
rm
bytestream.h
8531
0644
edit
dl
rm
calendar.h
90659
0644
edit
dl
rm
caniter.h
7288
0644
edit
dl
rm
chariter.h
24186
0644
edit
dl
rm
choicfmt.h
29528
0644
edit
dl
rm
coleitr.h
12990
0644
edit
dl
rm
coll.h
48468
0644
edit
dl
rm
colldata.h
11957
0644
edit
dl
rm
curramt.h
3659
0644
edit
dl
rm
currpinf.h
7061
0644
edit
dl
rm
currunit.h
3057
0644
edit
dl
rm
datefmt.h
27946
0644
edit
dl
rm
dbbi.h
966
0644
edit
dl
rm
dcfmtsym.h
14040
0644
edit
dl
rm
decimfmt.h
88612
0644
edit
dl
rm
docmain.h
6003
0644
edit
dl
rm
dtfmtsym.h
26145
0644
edit
dl
rm
dtintrv.h
3734
0644
edit
dl
rm
dtitvfmt.h
39700
0644
edit
dl
rm
dtitvinf.h
18704
0644
edit
dl
rm
dtptngen.h
17303
0644
edit
dl
rm
dtrule.h
8718
0644
edit
dl
rm
errorcode.h
4361
0644
edit
dl
rm
fieldpos.h
8713
0644
edit
dl
rm
fmtable.h
18794
0644
edit
dl
rm
format.h
12083
0644
edit
dl
rm
gregocal.h
33797
0644
edit
dl
rm
locid.h
30241
0644
edit
dl
rm
measfmt.h
1897
0644
edit
dl
rm
measunit.h
1635
0644
edit
dl
rm
measure.h
3321
0644
edit
dl
rm
msgfmt.h
39435
0644
edit
dl
rm
normlzr.h
30337
0644
edit
dl
rm
numfmt.h
33987
0644
edit
dl
rm
numsys.h
5004
0644
edit
dl
rm
parseerr.h
3044
0644
edit
dl
rm
parsepos.h
5468
0644
edit
dl
rm
platform.h
9961
0644
edit
dl
rm
plurfmt.h
23079
0644
edit
dl
rm
plurrule.h
9901
0644
edit
dl
rm
ppalmos.h
6992
0644
edit
dl
rm
putil.h
6686
0644
edit
dl
rm
pwin32.h
8668
0644
edit
dl
rm
rbbi.h
26993
0644
edit
dl
rm
rbnf.h
45681
0644
edit
dl
rm
rbtz.h
15695
0644
edit
dl
rm
regex.h
52316
0644
edit
dl
rm
rep.h
9559
0644
edit
dl
rm
resbund.h
18130
0644
edit
dl
rm
schriter.h
6293
0644
edit
dl
rm
search.h
22357
0644
edit
dl
rm
simpletz.h
46179
0644
edit
dl
rm
smpdtfmt.h
48325
0644
edit
dl
rm
sortkey.h
11111
0644
edit
dl
rm
std_string.h
1769
0644
edit
dl
rm
strenum.h
9888
0644
edit
dl
rm
stringpiece.h
5484
0644
edit
dl
rm
stsearch.h
22287
0644
edit
dl
rm
symtable.h
4199
0644
edit
dl
rm
tblcoll.h
38199
0644
edit
dl
rm
timezone.h
34584
0644
edit
dl
rm
tmunit.h
3454
0644
edit
dl
rm
tmutamt.h
4787
0644
edit
dl
rm
tmutfmt.h
8669
0644
edit
dl
rm
translit.h
54780
0644
edit
dl
rm
tzrule.h
36057
0644
edit
dl
rm
tztrans.h
6101
0644
edit
dl
rm
ubidi.h
83092
0644
edit
dl
rm
ubrk.h
17688
0644
edit
dl
rm
ucal.h
40177
0644
edit
dl
rm
ucasemap.h
16420
0644
edit
dl
rm
ucat.h
5371
0644
edit
dl
rm
uchar.h
111062
0644
edit
dl
rm
uchriter.h
13132
0644
edit
dl
rm
uclean.h
11855
0644
edit
dl
rm
ucnv.h
83111
0644
edit
dl
rm
ucnvsel.h
5630
0644
edit
dl
rm
ucnv_cb.h
6635
0644
edit
dl
rm
ucnv_err.h
21375
0644
edit
dl
rm
ucol.h
48826
0644
edit
dl
rm
ucoleitr.h
12356
0644
edit
dl
rm
uconfig.h
6035
0644
edit
dl
rm
ucsdet.h
12464
0644
edit
dl
rm
ucurr.h
11572
0644
edit
dl
rm
udat.h
34496
0644
edit
dl
rm
udata.h
14265
0644
edit
dl
rm
udatpg.h
18715
0644
edit
dl
rm
udeprctd.h
2284
0644
edit
dl
rm
udraft.h
7600
0644
edit
dl
rm
uenum.h
5796
0644
edit
dl
rm
uidna.h
15918
0644
edit
dl
rm
uintrnal.h
15752
0644
edit
dl
rm
uiter.h
23234
0644
edit
dl
rm
uloc.h
44548
0644
edit
dl
rm
ulocdata.h
9739
0644
edit
dl
rm
umachine.h
11360
0644
edit
dl
rm
umisc.h
1255
0644
edit
dl
rm
umsg.h
26076
0644
edit
dl
rm
unifilt.h
3770
0644
edit
dl
rm
unifunct.h
3966
0644
edit
dl
rm
unimatch.h
6071
0644
edit
dl
rm
unirepl.h
3290
0644
edit
dl
rm
uniset.h
61771
0644
edit
dl
rm
unistr.h
161321
0644
edit
dl
rm
unorm.h
23621
0644
edit
dl
rm
unum.h
32145
0644
edit
dl
rm
uobject.h
11393
0644
edit
dl
rm
uobslete.h
852
0644
edit
dl
rm
uregex.h
43948
0644
edit
dl
rm
urename.h
92538
0644
edit
dl
rm
urep.h
5394
0644
edit
dl
rm
ures.h
36348
0644
edit
dl
rm
uscript.h
11360
0644
edit
dl
rm
usearch.h
34223
0644
edit
dl
rm
uset.h
39868
0644
edit
dl
rm
usetiter.h
9606
0644
edit
dl
rm
ushape.h
17907
0644
edit
dl
rm
uspoof.h
38752
0644
edit
dl
rm
usprep.h
7750
0644
edit
dl
rm
ustdio.h
35333
0644
edit
dl
rm
ustream.h
1891
0644
edit
dl
rm
ustring.h
69383
0644
edit
dl
rm
usystem.h
1925
0644
edit
dl
rm
utext.h
58394
0644
edit
dl
rm
utf.h
8273
0644
edit
dl
rm
utf8.h
20512
0644
edit
dl
rm
utf16.h
18776
0644
edit
dl
rm
utf32.h
653
0644
edit
dl
rm
utf_old.h
43646
0644
edit
dl
rm
utmscale.h
13689
0644
edit
dl
rm
utrace.h
13355
0644
edit
dl
rm
utrans.h
23129
0644
edit
dl
rm
utypes.h
34513
0644
edit
dl
rm
uversion.h
10902
0644
edit
dl
rm
vtzone.h
20048
0644
edit
dl
rm
Edit:
/usr/include/unicode/msgfmt.h
(39435B)
/* * Copyright (C) 2007-2009, 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) * 08/19/2002 srl Removing Javaisms ******************************************************************************** */ #ifndef MSGFMT_H #define MSGFMT_H #include "unicode/utypes.h" /** * \file * \brief C++ API: Formats messages in a language-neutral way. */ #if !UCONFIG_NO_FORMATTING #include "unicode/format.h" #include "unicode/locid.h" #include "unicode/parseerr.h" #include "unicode/uchar.h" U_NAMESPACE_BEGIN class NumberFormat; class DateFormat; /** * * A MessageFormat produces concatenated messages in a * language-neutral way. It should be used for all string * concatenations that are visible to end users. * <P> * A MessageFormat contains an array of <EM>subformats</EM> arranged * within a <EM>template string</EM>. Together, the subformats and * template string determine how the MessageFormat will operate during * formatting and parsing. * <P> * Typically, both the subformats and the template string are * specified at once in a <EM>pattern</EM>. By using different * patterns for different locales, messages may be localized. * <P> * During formatting, the MessageFormat takes an array of arguments * and produces a user-readable string. Each argument is a * Formattable object; they may be passed in in an array, or as a * single Formattable object which itself contains an array. Each * argument is matched up with its corresponding subformat, which then * formats it into a string. The resultant strings are then assembled * within the string template of the MessageFormat to produce the * final output string. * <p> * <strong>Note:</strong> * In ICU 4.0 MessageFormat supports named arguments. If a named argument * is used, all arguments must be named. Names start with a character in * <code>UCHAR_ID_START</code> and continue with characters in * <code>UCHARID_CONTINUE</code>, in particular they do not start with a digit. * If named arguments are used, {@link #usesNamedArguments()} will return true. * <p> * The other new methods supporting named arguments are * {@link #getFormatNames(UErrorCode& status)}, * {@link #getFormat(const UnicodeString& formatName, UErrorCode& status)} * {@link #setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status)}, * {@link #adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status)}, * {@link #format(const Formattable* arguments, const UnicodeString *argumentNames, int32_t cnt, UnicodeString& appendTo, FieldPosition& status, int32_t recursionProtection, UErrorCode& success)}, * {@link #format(const UnicodeString* argumentNames, const Formattable* arguments, int32_t count, UnicodeString& appendTo,UErrorCode& status)}. * These methods are all compatible with patterns that do not used named arguments-- * in these cases the keys in the input or output use <code>UnicodeString</code>s * that name the argument indices, e.g. "0", "1", "2"... etc. * <p> * When named arguments are used, certain methods on MessageFormat that take or * return arrays do not perform any action, since it is not possible to * identify positions in an array using a name. UErrorCode is set to * U_ARGUMENT_TYPE_MISMATCH if there is a status/success field in the method. * These methods are * {@link #adoptFormats(Format** formatsToAdopt, int32_t count)}, * {@link #setFormats(const Format** newFormats,int32_t count)}, * {@link #adoptFormat(int32_t n, Format *newFormat)}, * {@link #getFormats(int32_t& count)}, * {@link #format(const Formattable* source,int32_t cnt,UnicodeString& appendTo, FieldPosition& ignore, UErrorCode& success)}, * {@link #format(const UnicodeString& pattern,const Formattable* arguments,int32_t cnt,UnicodeString& appendTo,UErrorCode& success)}, * {@link #format(const Formattable& source, UnicodeString& appendTo,FieldPosition& ignore, UErrorCode& success)}, * {@link #format(const Formattable* arguments, int32_t cnt, UnicodeString& appendTo, FieldPosition& status, int32_t recursionProtection,UErrorCode& success)}, * {@link #parse(const UnicodeString& source, ParsePosition& pos,int32_t& count)}, * {@link #parse(const UnicodeString& source, int32_t& cnt, UErrorCode& status)} * <p> * * <P> * During parsing, an input string is matched against the string * template of the MessageFormat to produce an array of Formattable * objects. Plain text of the template string is matched directly * against intput text. At each position in the template string where * a subformat is located, the subformat is called to parse the * corresponding segment of input text to produce an output argument. * In this way, an array of arguments is created which together * constitute the parse result. * <P> * Parsing may fail or produce unexpected results in a number of * circumstances. * <UL> * <LI>If one of the arguments does not occur in the pattern, it * will be returned as a default Formattable. * <LI>If the format of an argument is loses information, such as with * a choice format where a large number formats to "many", then the * parse may not correspond to the originally formatted argument. * <LI>MessageFormat does not handle ChoiceFormat recursion during * parsing; such parses will fail. * <LI>Parsing will not always find a match (or the correct match) if * some part of the parse is ambiguous. For example, if the pattern * "{1},{2}" is used with the string arguments {"a,b", "c"}, it will * format as "a,b,c". When the result is parsed, it will return {"a", * "b,c"}. * <LI>If a single argument is formatted more than once in the string, * then the rightmost subformat in the pattern string will produce the * parse result; prior subformats with the same argument index will * have no effect. * </UL> * Here are some examples of usage: * <P> * Example 1: * <pre> * \code * UErrorCode success = U_ZERO_ERROR; * GregorianCalendar cal(success); * Formattable arguments[] = { * 7L, * Formattable( (Date) cal.getTime(success), Formattable::kIsDate), * "a disturbance in the Force" * }; * * UnicodeString result; * MessageFormat::format( * "At {1,time} on {1,date}, there was {2} on planet {0,number}.", * arguments, 3, result, success ); * * cout << "result: " << result << endl; * //<output>: At 4:34:20 PM on 23-Mar-98, there was a disturbance * // in the Force on planet 7. * \endcode * </pre> * Typically, the message format will come from resources, and the * arguments will be dynamically set at runtime. * <P> * Example 2: * <pre> * \code * success = U_ZERO_ERROR; * Formattable testArgs[] = {3L, "MyDisk"}; * * MessageFormat form( * "The disk \"{1}\" contains {0} file(s).", success ); * * UnicodeString string; * FieldPosition fpos = 0; * cout << "format: " << form.format(testArgs, 2, string, fpos, success ) << endl; * * // output, with different testArgs: * // output: The disk "MyDisk" contains 0 file(s). * // output: The disk "MyDisk" contains 1 file(s). * // output: The disk "MyDisk" contains 1,273 file(s). * \endcode * </pre> * * The pattern is of the following form. Legend: * <pre> * \code * {optional item} * (group that may be repeated)* * \endcode * </pre> * Do not confuse optional items with items inside quotes braces, such * as this: "{". Quoted braces are literals. * <pre> * \code * messageFormatPattern := string ( "{" messageFormatElement "}" string )* * * messageFormatElement := argumentIndex | argumentName { "," elementFormat } * * elementFormat := "time" { "," datetimeStyle } * | "date" { "," datetimeStyle } * | "number" { "," numberStyle } * | "choice" "," choiceStyle * * datetimeStyle := "short" * | "medium" * | "long" * | "full" * | dateFormatPattern * * numberStyle := "currency" * | "percent" * | "integer" * | numberFormatPattern * * choiceStyle := choiceFormatPattern * * pluralStyle := pluralFormatPattern * \endcode * </pre> * If there is no elementFormat, then the argument must be a string, * which is substituted. If there is no dateTimeStyle or numberStyle, * then the default format is used (e.g. NumberFormat::createInstance(), * DateFormat::createTimeInstance(DateFormat::kDefault, ...) or DateFormat::createDateInstance(DateFormat::kDefault, ...). For * a ChoiceFormat, the pattern must always be specified, since there * is no default. * <P> * In strings, single quotes can be used to quote syntax characters. * A literal single quote is represented by '', both within and outside * of single-quoted segments. Inside a * messageFormatElement, quotes are <EM>not</EM> removed. For example, * {1,number,$'#',##} will produce a number format with the pound-sign * quoted, with a result such as: "$#31,45". * <P> * If a pattern is used, then unquoted braces in the pattern, if any, * must match: that is, "ab {0} de" and "ab '}' de" are ok, but "ab * {0'}' de" and "ab } de" are not. * <p> * <dl><dt><b>Warning:</b><dd>The rules for using quotes within message * format patterns unfortunately have shown to be somewhat confusing. * In particular, it isn't always obvious to localizers whether single * quotes need to be doubled or not. Make sure to inform localizers about * the rules, and tell them (for example, by using comments in resource * bundle source files) which strings will be processed by MessageFormat. * Note that localizers may need to use single quotes in translated * strings where the original version doesn't have them. * <br>Note also that the simplest way to avoid the problem is to * use the real apostrophe (single quote) character U+2019 (') for * human-readable text, and to use the ASCII apostrophe (U+0027 ' ) * only in program syntax, like quoting in MessageFormat. * See the annotations for U+0027 Apostrophe in The Unicode Standard.</p> * </dl> * <P> * The argumentIndex is a non-negative integer, which corresponds to the * index of the arguments presented in an array to be formatted. The * first argument has argumentIndex 0. * <P> * It is acceptable to have unused arguments in the array. With missing * arguments or arguments that are not of the right class for the * specified format, a failing UErrorCode result is set. * <P> * For more sophisticated patterns, you can use a ChoiceFormat to get * output: * <pre> * \code * UErrorCode success = U_ZERO_ERROR; * MessageFormat* form("The disk \"{1}\" contains {0}.", success); * double filelimits[] = {0,1,2}; * UnicodeString filepart[] = {"no files","one file","{0,number} files"}; * ChoiceFormat* fileform = new ChoiceFormat(filelimits, filepart, 3); * form.setFormat(1, *fileform); // NOT zero, see below * * Formattable testArgs[] = {1273L, "MyDisk"}; * * UnicodeString string; * FieldPosition fpos = 0; * cout << form.format(testArgs, 2, string, fpos, success) << endl; * * // output, with different testArgs * // output: The disk "MyDisk" contains no files. * // output: The disk "MyDisk" contains one file. * // output: The disk "MyDisk" contains 1,273 files. * \endcode * </pre> * You can either do this programmatically, as in the above example, * or by using a pattern (see ChoiceFormat for more information) as in: * <pre> * \code * form.applyPattern( * "There {0,choice,0#are no files|1#is one file|1<are {0,number,integer} files}."); * \endcode * </pre> * <P> * <EM>Note:</EM> As we see above, the string produced by a ChoiceFormat in * MessageFormat is treated specially; occurences of '{' are used to * indicated subformats, and cause recursion. If you create both a * MessageFormat and ChoiceFormat programmatically (instead of using * the string patterns), then be careful not to produce a format that * recurses on itself, which will cause an infinite loop. * <P> * <EM>Note:</EM> Subformats are numbered by their order in the pattern. * This is <EM>not</EM> the same as the argumentIndex. * <pre> * \code * For example: with "abc{2}def{3}ghi{0}...", * * format0 affects the first variable {2} * format1 affects the second variable {3} * format2 affects the second variable {0} * \endcode * </pre> * * <p><em>User subclasses are not supported.</em> While clients may write * subclasses, such code will not necessarily work and will not be * guaranteed to work stably from release to release. */ class U_I18N_API MessageFormat : public Format { public: /** * Enum type for kMaxFormat. * @obsolete ICU 3.0. The 10-argument limit was removed as of ICU 2.6, * rendering this enum type obsolete. */ enum EFormatNumber { /** * The maximum number of arguments. * @obsolete ICU 3.0. The 10-argument limit was removed as of ICU 2.6, * rendering this constant obsolete. */ kMaxFormat = 10 }; /** * Constructs a new MessageFormat using the given pattern and the * default locale. * * @param pattern Pattern used to construct object. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @stable ICU 2.0 */ MessageFormat(const UnicodeString& pattern, UErrorCode &status); /** * Constructs a new MessageFormat using the given pattern and locale. * @param pattern Pattern used to construct object. * @param newLocale The locale to use for formatting dates and numbers. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @stable ICU 2.0 */ MessageFormat(const UnicodeString& pattern, const Locale& newLocale, UErrorCode& status); /** * Constructs a new MessageFormat using the given pattern and locale. * @param pattern Pattern used to construct object. * @param newLocale The locale to use for formatting dates and numbers. * @param parseError Struct to recieve information on position * of error within the pattern. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @stable ICU 2.0 */ MessageFormat(const UnicodeString& pattern, const Locale& newLocale, UParseError& parseError, UErrorCode& status); /** * Constructs a new MessageFormat from an existing one. * @stable ICU 2.0 */ MessageFormat(const MessageFormat&); /** * Assignment operator. * @stable ICU 2.0 */ const MessageFormat& operator=(const MessageFormat&); /** * Destructor. * @stable ICU 2.0 */ virtual ~MessageFormat(); /** * Clones this Format object polymorphically. The caller owns the * result and should delete it when done. * @stable ICU 2.0 */ virtual Format* clone(void) const; /** * Returns true if the given Format objects are semantically equal. * Objects of different subclasses are considered unequal. * @param other the object to be compared with. * @return true if the given Format objects are semantically equal. * @stable ICU 2.0 */ virtual UBool operator==(const Format& other) const; /** * Sets the locale. This locale is used for fetching default number or date * format information. * @param theLocale the new locale value to be set. * @stable ICU 2.0 */ virtual void setLocale(const Locale& theLocale); /** * Gets the locale. This locale is used for fetching default number or date * format information. * @return the locale of the object. * @stable ICU 2.0 */ virtual const Locale& getLocale(void) const; /** * Applies the given pattern string to this message format. * * @param pattern The pattern to be applied. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @stable ICU 2.0 */ virtual void applyPattern(const UnicodeString& pattern, UErrorCode& status); /** * Applies the given pattern string to this message format. * * @param pattern The pattern to be applied. * @param parseError Struct to recieve information on position * of error within pattern. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @stable ICU 2.0 */ virtual void applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status); /** * Returns a pattern that can be used to recreate this object. * * @param appendTo Output parameter to receive the pattern. * Result is appended to existing contents. * @return Reference to 'appendTo' parameter. * @stable ICU 2.0 */ virtual UnicodeString& toPattern(UnicodeString& appendTo) const; /** * Sets subformats. * See the class description about format numbering. * The caller should not delete the Format objects after this call. * <EM>The array formatsToAdopt is not itself adopted.</EM> Its * ownership is retained by the caller. If the call fails because * memory cannot be allocated, then the formats will be deleted * by this method, and this object will remain unchanged. * * @stable ICU 2.0 * @param formatsToAdopt the format to be adopted. * @param count the size of the array. */ virtual void adoptFormats(Format** formatsToAdopt, int32_t count); /** * Sets subformats. * See the class description about format numbering. * Each item in the array is cloned into the internal array. * If the call fails because memory cannot be allocated, then this * object will remain unchanged. * * @stable ICU 2.0 * @param newFormats the new format to be set. * @param cnt the size of the array. */ virtual void setFormats(const Format** newFormats, int32_t cnt); /** * Sets one subformat. * See the class description about format numbering. * The caller should not delete the Format object after this call. * If the number is over the number of formats already set, * the item will be deleted and ignored. * @stable ICU 2.0 * @param formatNumber index of the subformat. * @param formatToAdopt the format to be adopted. */ virtual void adoptFormat(int32_t formatNumber, Format* formatToAdopt); /** * Sets one subformat. * See the class description about format numbering. * If the number is over the number of formats already set, * the item will be ignored. * @param formatNumber index of the subformat. * @param format the format to be set. * @stable ICU 2.0 */ virtual void setFormat(int32_t formatNumber, const Format& format); /** * Gets format names. This function returns formatNames in StringEnumerations * which can be used with getFormat() and setFormat() to export formattable * array from current MessageFormat to another. It is caller's resposibility * to delete the returned formatNames. * @param status output param set to success/failure code. * @stable ICU 4.0 */ virtual StringEnumeration* getFormatNames(UErrorCode& status); /** * Gets subformat pointer for given format name. * This function supports both named and numbered * arguments-- if numbered, the formatName is the * corresponding UnicodeStrings (e.g. "0", "1", "2"...). * The returned Format object should not be deleted by the caller, * nor should the ponter of other object . The pointer and its * contents remain valid only until the next call to any method * of this class is made with this object. * @param formatName the name or number specifying a format * @param status output param set to success/failure code. * @stable ICU 4.0 */ virtual Format* getFormat(const UnicodeString& formatName, UErrorCode& status); /** * Sets one subformat for given format name. * See the class description about format name. * This function supports both named and numbered * arguments-- if numbered, the formatName is the * corresponding UnicodeStrings (e.g. "0", "1", "2"...). * If there is no matched formatName or wrong type, * the item will be ignored. * @param formatName Name of the subformat. * @param format the format to be set. * @param status output param set to success/failure code. * @stable ICU 4.0 */ virtual void setFormat(const UnicodeString& formatName, const Format& format, UErrorCode& status); /** * Sets one subformat for given format name. * See the class description about format name. * This function supports both named and numbered * arguments-- if numbered, the formatName is the * corresponding UnicodeStrings (e.g. "0", "1", "2"...). * If there is no matched formatName or wrong type, * the item will be ignored. * The caller should not delete the Format object after this call. * @param formatName Name of the subformat. * @param formatToAdopt Format to be adopted. * @param status output param set to success/failure code. * @stable ICU 4.0 */ virtual void adoptFormat(const UnicodeString& formatName, Format* formatToAdopt, UErrorCode& status); /** * Gets an array of subformats of this object. The returned array * should not be deleted by the caller, nor should the pointers * within the array. The array and its contents remain valid only * until the next call to any method of this class is made with * this object. See the class description about format numbering. * @param count output parameter to receive the size of the array * @return an array of count Format* objects, or NULL if out of * memory. Any or all of the array elements may be NULL. * @stable ICU 2.0 */ virtual const Format** getFormats(int32_t& count) const; /** * Formats the given array of arguments into a user-readable string. * Does not take ownership of the Formattable* array or its contents. * * @param source An array of objects to be formatted. * @param count The number of elements of 'source'. * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param ignore Not used; inherited from base class API. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @return Reference to 'appendTo' parameter. * @stable ICU 2.0 */ UnicodeString& format( const Formattable* source, int32_t count, UnicodeString& appendTo, FieldPosition& ignore, UErrorCode& status) const; /** * Formats the given array of arguments into a user-readable string * using the given pattern. * * @param pattern The pattern. * @param arguments An array of objects to be formatted. * @param count The number of elements of 'source'. * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @return Reference to 'appendTo' parameter. * @stable ICU 2.0 */ static UnicodeString& format(const UnicodeString& pattern, const Formattable* arguments, int32_t count, UnicodeString& appendTo, UErrorCode& status); /** * Formats the given array of arguments into a user-readable * string. The array must be stored within a single Formattable * object of type kArray. If the Formattable object type is not of * type kArray, then returns a failing UErrorCode. * * @param obj A Formattable of type kArray containing * arguments to be formatted. * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param pos On input: an alignment field, if desired. * On output: the offsets of the alignment field. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @return Reference to 'appendTo' parameter. * @stable ICU 2.0 */ virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, FieldPosition& pos, UErrorCode& status) const; /** * Formats the given array of arguments into a user-readable * string. The array must be stored within a single Formattable * object of type kArray. If the Formattable object type is not of * type kArray, then returns a failing UErrorCode. * * @param obj The object to format * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @return Reference to 'appendTo' parameter. * @stable ICU 2.0 */ UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, UErrorCode& status) const; /** * Formats the given array of arguments into a user-defined argument name * array. This function supports both named and numbered * arguments-- if numbered, the formatName is the * corresponding UnicodeStrings (e.g. "0", "1", "2"...). * * @param argumentNames argument name array * @param arguments An array of objects to be formatted. * @param count The number of elements of 'argumentNames' and * arguments. The number of argumentNames and arguments * must be the same. * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * @return Reference to 'appendTo' parameter. * @stable ICU 4.0 */ UnicodeString& format(const UnicodeString* argumentNames, const Formattable* arguments, int32_t count, UnicodeString& appendTo, UErrorCode& status) const; /** * Parses the given string into an array of output arguments. * * @param source String to be parsed. * @param pos On input, starting position for parse. On output, * final position after parse. Unchanged if parse * fails. * @param count Output parameter to receive the number of arguments * parsed. * @return an array of parsed arguments. The caller owns both * the array and its contents. * @stable ICU 2.0 */ virtual Formattable* parse( const UnicodeString& source, ParsePosition& pos, int32_t& count) const; /** * Parses the given string into an array of output arguments. * * @param source String to be parsed. * @param count Output param to receive size of returned array. * @param status Input/output error code. If the * pattern cannot be parsed, set to failure code. * If the MessageFormat is named argument, the status is * set to U_ARGUMENT_TYPE_MISMATCH. * @return an array of parsed arguments. The caller owns both * the array and its contents. Return NULL if status is not U_ZERO_ERROR. * * @stable ICU 2.0 */ virtual Formattable* parse( const UnicodeString& source, int32_t& count, UErrorCode& status) const; /** * Parses the given string into an array of output arguments * stored within a single Formattable of type kArray. * * @param source The string to be parsed into an object. * @param result Formattable to be set to the parse result. * If parse fails, return contents are undefined. * @param pos On input, starting position for parse. On output, * final position after parse. Unchanged if parse * fails. * @stable ICU 2.0 */ virtual void parseObject(const UnicodeString& source, Formattable& result, ParsePosition& pos) const; /** * Convert an 'apostrophe-friendly' pattern into a standard * pattern. Standard patterns treat all apostrophes as * quotes, which is problematic in some languages, e.g. * French, where apostrophe is commonly used. This utility * assumes that only an unpaired apostrophe immediately before * a brace is a true quote. Other unpaired apostrophes are paired, * and the resulting standard pattern string is returned. * * <p><b>Note</b> it is not guaranteed that the returned pattern * is indeed a valid pattern. The only effect is to convert * between patterns having different quoting semantics. * * @param pattern the 'apostrophe-friendly' patttern to convert * @param status Input/output error code. If the pattern * cannot be parsed, the failure code is set. * @return the standard equivalent of the original pattern * @stable ICU 3.4 */ static UnicodeString autoQuoteApostrophe(const UnicodeString& pattern, UErrorCode& status); /** * Returns true if this MessageFormat uses named arguments, * and false otherwise. See class description. * * @return true if named arguments are used. * @stable ICU 4.0 */ UBool usesNamedArguments() const; /** * This API is for ICU internal use only. * Please do not use it. * * Returns argument types count in the parsed pattern. * Used to distinguish pattern "{0} d" and "d". * * @return The number of formattable types in the pattern * @internal */ int32_t getArgTypeCount() const; /** * Returns a unique class ID POLYMORPHICALLY. Pure virtual override. * This method is to implement a simple version of RTTI, since not all * C++ compilers support genuine RTTI. Polymorphic operator==() and * clone() methods call this method. * * @return The class ID for this object. All objects of a * given class have the same class ID. Objects of * other classes have different class IDs. * @stable ICU 2.0 */ virtual UClassID getDynamicClassID(void) const; /** * Return the class ID for this class. This is useful only for * comparing to a return value from getDynamicClassID(). For example: * <pre> * . Base* polymorphic_pointer = createPolymorphicObject(); * . if (polymorphic_pointer->getDynamicClassID() == * . Derived::getStaticClassID()) ... * </pre> * @return The class ID for all objects of this class. * @stable ICU 2.0 */ static UClassID U_EXPORT2 getStaticClassID(void); private: Locale fLocale; UnicodeString fPattern; Format** formatAliases; // see getFormats int32_t formatAliasesCapacity; UProperty idStart; UProperty idContinue; MessageFormat(); // default constructor not implemented /* * A structure representing one subformat of this MessageFormat. * Each subformat has a Format object, an offset into the plain * pattern text fPattern, and an argument number. The argument * number corresponds to the array of arguments to be formatted. * @internal */ class Subformat; /** * A MessageFormat contains an array of subformats. This array * needs to grow dynamically if the MessageFormat is modified. */ Subformat* subformats; int32_t subformatCount; int32_t subformatCapacity; /** * A MessageFormat formats an array of arguments. Each argument * has an expected type, based on the pattern. For example, if * the pattern contains the subformat "{3,number,integer}", then * we expect argument 3 to have type Formattable::kLong. This * array needs to grow dynamically if the MessageFormat is * modified. */ Formattable::Type* argTypes; int32_t argTypeCount; int32_t argTypeCapacity; /** * Is true iff all argument names are non-negative numbers. * */ UBool isArgNumeric; // Variable-size array management UBool allocateSubformats(int32_t capacity); UBool allocateArgTypes(int32_t capacity); /** * Default Format objects used when no format is specified and a * numeric or date argument is formatted. These are volatile * cache objects maintained only for performance. They do not * participate in operator=(), copy constructor(), nor * operator==(). */ NumberFormat* defaultNumberFormat; DateFormat* defaultDateFormat; /** * Method to retrieve default formats (or NULL on failure). * These are semantically const, but may modify *this. */ const NumberFormat* getDefaultNumberFormat(UErrorCode&) const; const DateFormat* getDefaultDateFormat(UErrorCode&) const; /** * Finds the word s, in the keyword list and returns the located index. * @param s the keyword to be searched for. * @param list the list of keywords to be searched with. * @return the index of the list which matches the keyword s. */ static int32_t findKeyword( const UnicodeString& s, const UChar * const *list); /** * Formats the array of arguments and copies the result into the * result buffer, updates the field position. * * @param arguments The formattable objects array. * @param cnt The array count. * @param appendTo Output parameter to receive result. * Result is appended to existing contents. * @param status Field position status. * @param recursionProtection * Initially zero. Bits 0..9 are used to indicate * that a parameter has already been seen, to * avoid recursion. Currently unused. * @param success The error code status. * @return Reference to 'appendTo' parameter. */ UnicodeString& format( const Formattable* arguments, int32_t cnt, UnicodeString& appendTo, FieldPosition& status, int32_t recursionProtection, UErrorCode& success) const; UnicodeString& format( const Formattable* arguments, const UnicodeString *argumentNames, int32_t cnt, UnicodeString& appendTo, FieldPosition& status, int32_t recursionProtection, UErrorCode& success) const; void makeFormat(int32_t offsetNumber, UnicodeString* segments, UParseError& parseError, UErrorCode& success); /** * Convenience method that ought to be in NumberFormat */ NumberFormat* createIntegerFormat(const Locale& locale, UErrorCode& status) const; /** * Checks the range of the source text to quote the special * characters, { and ' and copy to target buffer. * @param source * @param start the text offset to start the process of in the source string * @param end the text offset to end the process of in the source string * @param appendTo Output parameter to receive result. * Result is appended to existing contents. */ static void copyAndFixQuotes(const UnicodeString& appendTo, int32_t start, int32_t end, UnicodeString& target); /** * Returns array of argument types in the parsed pattern * for use in C API. Only for the use of umsg_vformat(). Not * for public consumption. * @param listCount Output parameter to receive the size of array * @return The array of formattable types in the pattern * @internal */ const Formattable::Type* getArgTypeList(int32_t& listCount) const { listCount = argTypeCount; return argTypes; } /** * Returns FALSE if the argument name is not legal. * @param argName argument name. * @return TRUE if the argument name is legal, otherwise return FALSE. */ UBool isLegalArgName(const UnicodeString& argName) const; friend class MessageFormatAdapter; // getFormatTypeList() access }; inline UnicodeString& MessageFormat::format(const Formattable& obj, UnicodeString& appendTo, UErrorCode& status) const { return Format::format(obj, appendTo, status); } U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif // _MSGFMT //eof
Save
cmd:
run