xref: /aosp_15_r20/external/icu/libandroidicu/include/unicode/umsg.h (revision 0e209d3975ff4a8c132096b14b0e9364a753506e)
1*0e209d39SAndroid Build Coastguard Worker // © 2016 and later: Unicode, Inc. and others.
2*0e209d39SAndroid Build Coastguard Worker // License & terms of use: http://www.unicode.org/copyright.html
3*0e209d39SAndroid Build Coastguard Worker /********************************************************************
4*0e209d39SAndroid Build Coastguard Worker  * COPYRIGHT:
5*0e209d39SAndroid Build Coastguard Worker  * Copyright (c) 1997-2011, International Business Machines Corporation and
6*0e209d39SAndroid Build Coastguard Worker  * others. All Rights Reserved.
7*0e209d39SAndroid Build Coastguard Worker  * Copyright (C) 2010 , Yahoo! Inc.
8*0e209d39SAndroid Build Coastguard Worker  ********************************************************************
9*0e209d39SAndroid Build Coastguard Worker  *
10*0e209d39SAndroid Build Coastguard Worker  *   file name:  umsg.h
11*0e209d39SAndroid Build Coastguard Worker  *   encoding:   UTF-8
12*0e209d39SAndroid Build Coastguard Worker  *   tab size:   8 (not used)
13*0e209d39SAndroid Build Coastguard Worker  *   indentation:4
14*0e209d39SAndroid Build Coastguard Worker  *
15*0e209d39SAndroid Build Coastguard Worker  *   Change history:
16*0e209d39SAndroid Build Coastguard Worker  *
17*0e209d39SAndroid Build Coastguard Worker  *   08/5/2001  Ram         Added C wrappers for C++ API.
18*0e209d39SAndroid Build Coastguard Worker  ********************************************************************/
19*0e209d39SAndroid Build Coastguard Worker 
20*0e209d39SAndroid Build Coastguard Worker #ifndef UMSG_H
21*0e209d39SAndroid Build Coastguard Worker #define UMSG_H
22*0e209d39SAndroid Build Coastguard Worker 
23*0e209d39SAndroid Build Coastguard Worker #include "unicode/utypes.h"
24*0e209d39SAndroid Build Coastguard Worker 
25*0e209d39SAndroid Build Coastguard Worker #if !UCONFIG_NO_FORMATTING
26*0e209d39SAndroid Build Coastguard Worker 
27*0e209d39SAndroid Build Coastguard Worker #include "unicode/uloc.h"
28*0e209d39SAndroid Build Coastguard Worker #include "unicode/parseerr.h"
29*0e209d39SAndroid Build Coastguard Worker #include <stdarg.h>
30*0e209d39SAndroid Build Coastguard Worker 
31*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
32*0e209d39SAndroid Build Coastguard Worker #include "unicode/localpointer.h"
33*0e209d39SAndroid Build Coastguard Worker #endif   // U_SHOW_CPLUSPLUS_API
34*0e209d39SAndroid Build Coastguard Worker 
35*0e209d39SAndroid Build Coastguard Worker /**
36*0e209d39SAndroid Build Coastguard Worker  * \file
37*0e209d39SAndroid Build Coastguard Worker  * \brief C API: MessageFormat
38*0e209d39SAndroid Build Coastguard Worker  *
39*0e209d39SAndroid Build Coastguard Worker  * <h2>MessageFormat C API </h2>
40*0e209d39SAndroid Build Coastguard Worker  *
41*0e209d39SAndroid Build Coastguard Worker  * <p>MessageFormat prepares strings for display to users,
42*0e209d39SAndroid Build Coastguard Worker  * with optional arguments (variables/placeholders).
43*0e209d39SAndroid Build Coastguard Worker  * The arguments can occur in any order, which is necessary for translation
44*0e209d39SAndroid Build Coastguard Worker  * into languages with different grammars.
45*0e209d39SAndroid Build Coastguard Worker  *
46*0e209d39SAndroid Build Coastguard Worker  * <p>The opaque UMessageFormat type is a thin C wrapper around
47*0e209d39SAndroid Build Coastguard Worker  * a C++ MessageFormat. It is constructed from a <em>pattern</em> string
48*0e209d39SAndroid Build Coastguard Worker  * with arguments in {curly braces} which will be replaced by formatted values.
49*0e209d39SAndroid Build Coastguard Worker  *
50*0e209d39SAndroid Build Coastguard Worker  * <p>Currently, the C API supports only numbered arguments.
51*0e209d39SAndroid Build Coastguard Worker  *
52*0e209d39SAndroid Build Coastguard Worker  * <p>For details about the pattern syntax and behavior,
53*0e209d39SAndroid Build Coastguard Worker  * especially about the ASCII apostrophe vs. the
54*0e209d39SAndroid Build Coastguard Worker  * real apostrophe (single quote) character \htmlonly&#x2019;\endhtmlonly (U+2019),
55*0e209d39SAndroid Build Coastguard Worker  * see the C++ MessageFormat class documentation.
56*0e209d39SAndroid Build Coastguard Worker  *
57*0e209d39SAndroid Build Coastguard Worker  * <p>Here are some examples of C API usage:
58*0e209d39SAndroid Build Coastguard Worker  * Example 1:
59*0e209d39SAndroid Build Coastguard Worker  * <pre>
60*0e209d39SAndroid Build Coastguard Worker  * \code
61*0e209d39SAndroid Build Coastguard Worker  *     UChar *result, *tzID, *str;
62*0e209d39SAndroid Build Coastguard Worker  *     UChar pattern[100];
63*0e209d39SAndroid Build Coastguard Worker  *     int32_t resultLengthOut, resultlength;
64*0e209d39SAndroid Build Coastguard Worker  *     UCalendar *cal;
65*0e209d39SAndroid Build Coastguard Worker  *     UDate d1;
66*0e209d39SAndroid Build Coastguard Worker  *     UDateFormat *def1;
67*0e209d39SAndroid Build Coastguard Worker  *     UErrorCode status = U_ZERO_ERROR;
68*0e209d39SAndroid Build Coastguard Worker  *
69*0e209d39SAndroid Build Coastguard Worker  *     str=(UChar*)malloc(sizeof(UChar) * (strlen("disturbance in force") +1));
70*0e209d39SAndroid Build Coastguard Worker  *     u_uastrcpy(str, "disturbance in force");
71*0e209d39SAndroid Build Coastguard Worker  *     tzID=(UChar*)malloc(sizeof(UChar) * 4);
72*0e209d39SAndroid Build Coastguard Worker  *     u_uastrcpy(tzID, "PST");
73*0e209d39SAndroid Build Coastguard Worker  *     cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
74*0e209d39SAndroid Build Coastguard Worker  *     ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status);
75*0e209d39SAndroid Build Coastguard Worker  *     d1=ucal_getMillis(cal, &status);
76*0e209d39SAndroid Build Coastguard Worker  *     u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}");
77*0e209d39SAndroid Build Coastguard Worker  *     resultlength=0;
78*0e209d39SAndroid Build Coastguard Worker  *     resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, d1, str, 7);
79*0e209d39SAndroid Build Coastguard Worker  *     if(status==U_BUFFER_OVERFLOW_ERROR){
80*0e209d39SAndroid Build Coastguard Worker  *         status=U_ZERO_ERROR;
81*0e209d39SAndroid Build Coastguard Worker  *         resultlength=resultLengthOut+1;
82*0e209d39SAndroid Build Coastguard Worker  *         result=(UChar*)realloc(result, sizeof(UChar) * resultlength);
83*0e209d39SAndroid Build Coastguard Worker  *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7);
84*0e209d39SAndroid Build Coastguard Worker  *     }
85*0e209d39SAndroid Build Coastguard Worker  *     printf("%s\n", austrdup(result) );//austrdup( a function used to convert UChar* to char*)
86*0e209d39SAndroid Build Coastguard Worker  *     //output>: "On March 18, 1999, there was a disturbance in force on planet 7
87*0e209d39SAndroid Build Coastguard Worker  * \endcode
88*0e209d39SAndroid Build Coastguard Worker  * </pre>
89*0e209d39SAndroid Build Coastguard Worker  * Typically, the message format will come from resources, and the
90*0e209d39SAndroid Build Coastguard Worker  * arguments will be dynamically set at runtime.
91*0e209d39SAndroid Build Coastguard Worker  * <P>
92*0e209d39SAndroid Build Coastguard Worker  * Example 2:
93*0e209d39SAndroid Build Coastguard Worker  * <pre>
94*0e209d39SAndroid Build Coastguard Worker  * \code
95*0e209d39SAndroid Build Coastguard Worker  *     UChar* str;
96*0e209d39SAndroid Build Coastguard Worker  *     UErrorCode status = U_ZERO_ERROR;
97*0e209d39SAndroid Build Coastguard Worker  *     UChar *result;
98*0e209d39SAndroid Build Coastguard Worker  *     UChar pattern[100];
99*0e209d39SAndroid Build Coastguard Worker  *     int32_t resultlength, resultLengthOut, i;
100*0e209d39SAndroid Build Coastguard Worker  *     double testArgs= { 100.0, 1.0, 0.0};
101*0e209d39SAndroid Build Coastguard Worker  *
102*0e209d39SAndroid Build Coastguard Worker  *     str=(UChar*)malloc(sizeof(UChar) * 10);
103*0e209d39SAndroid Build Coastguard Worker  *     u_uastrcpy(str, "MyDisk");
104*0e209d39SAndroid Build Coastguard Worker  *     u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");
105*0e209d39SAndroid Build Coastguard Worker  *     for(i=0; i<3; i++){
106*0e209d39SAndroid Build Coastguard Worker  *       resultlength=0;
107*0e209d39SAndroid Build Coastguard Worker  *       resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str);
108*0e209d39SAndroid Build Coastguard Worker  *       if(status==U_BUFFER_OVERFLOW_ERROR){
109*0e209d39SAndroid Build Coastguard Worker  *         status=U_ZERO_ERROR;
110*0e209d39SAndroid Build Coastguard Worker  *         resultlength=resultLengthOut+1;
111*0e209d39SAndroid Build Coastguard Worker  *         result=(UChar*)malloc(sizeof(UChar) * resultlength);
112*0e209d39SAndroid Build Coastguard Worker  *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);
113*0e209d39SAndroid Build Coastguard Worker  *       }
114*0e209d39SAndroid Build Coastguard Worker  *       printf("%s\n", austrdup(result) );  //austrdup( a function used to convert UChar* to char*)
115*0e209d39SAndroid Build Coastguard Worker  *       free(result);
116*0e209d39SAndroid Build Coastguard Worker  *     }
117*0e209d39SAndroid Build Coastguard Worker  *     // output, with different testArgs:
118*0e209d39SAndroid Build Coastguard Worker  *     // output: The disk "MyDisk" contains 100 files.
119*0e209d39SAndroid Build Coastguard Worker  *     // output: The disk "MyDisk" contains one file.
120*0e209d39SAndroid Build Coastguard Worker  *     // output: The disk "MyDisk" contains no files.
121*0e209d39SAndroid Build Coastguard Worker  * \endcode
122*0e209d39SAndroid Build Coastguard Worker  *  </pre>
123*0e209d39SAndroid Build Coastguard Worker  *
124*0e209d39SAndroid Build Coastguard Worker  *
125*0e209d39SAndroid Build Coastguard Worker  * Example 3:
126*0e209d39SAndroid Build Coastguard Worker  * <pre>
127*0e209d39SAndroid Build Coastguard Worker  * \code
128*0e209d39SAndroid Build Coastguard Worker  * UChar* str;
129*0e209d39SAndroid Build Coastguard Worker  * UChar* str1;
130*0e209d39SAndroid Build Coastguard Worker  * UErrorCode status = U_ZERO_ERROR;
131*0e209d39SAndroid Build Coastguard Worker  * UChar *result;
132*0e209d39SAndroid Build Coastguard Worker  * UChar pattern[100];
133*0e209d39SAndroid Build Coastguard Worker  * UChar expected[100];
134*0e209d39SAndroid Build Coastguard Worker  * int32_t resultlength,resultLengthOut;
135*0e209d39SAndroid Build Coastguard Worker 
136*0e209d39SAndroid Build Coastguard Worker  * str=(UChar*)malloc(sizeof(UChar) * 25);
137*0e209d39SAndroid Build Coastguard Worker  * u_uastrcpy(str, "Kirti");
138*0e209d39SAndroid Build Coastguard Worker  * str1=(UChar*)malloc(sizeof(UChar) * 25);
139*0e209d39SAndroid Build Coastguard Worker  * u_uastrcpy(str1, "female");
140*0e209d39SAndroid Build Coastguard Worker  * log_verbose("Testing message format with Select test #1\n:");
141*0e209d39SAndroid Build Coastguard Worker  * u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris.");
142*0e209d39SAndroid Build Coastguard Worker  * u_uastrcpy(expected, "Kirti est all\\u00E9e \\u00E0 Paris.");
143*0e209d39SAndroid Build Coastguard Worker  * resultlength=0;
144*0e209d39SAndroid Build Coastguard Worker  * resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1);
145*0e209d39SAndroid Build Coastguard Worker  * if(status==U_BUFFER_OVERFLOW_ERROR)
146*0e209d39SAndroid Build Coastguard Worker  *  {
147*0e209d39SAndroid Build Coastguard Worker  *      status=U_ZERO_ERROR;
148*0e209d39SAndroid Build Coastguard Worker  *      resultlength=resultLengthOut+1;
149*0e209d39SAndroid Build Coastguard Worker  *      result=(UChar*)malloc(sizeof(UChar) * resultlength);
150*0e209d39SAndroid Build Coastguard Worker  *      u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1);
151*0e209d39SAndroid Build Coastguard Worker  *      if(u_strcmp(result, expected)==0)
152*0e209d39SAndroid Build Coastguard Worker  *          log_verbose("PASS: MessagFormat successful on Select test#1\n");
153*0e209d39SAndroid Build Coastguard Worker  *      else{
154*0e209d39SAndroid Build Coastguard Worker  *          log_err("FAIL: Error in MessageFormat on Select test#1\n GOT %s EXPECTED %s\n", austrdup(result),
155*0e209d39SAndroid Build Coastguard Worker  *          austrdup(expected) );
156*0e209d39SAndroid Build Coastguard Worker  *      }
157*0e209d39SAndroid Build Coastguard Worker  *      free(result);
158*0e209d39SAndroid Build Coastguard Worker  * }
159*0e209d39SAndroid Build Coastguard Worker  * \endcode
160*0e209d39SAndroid Build Coastguard Worker  *  </pre>
161*0e209d39SAndroid Build Coastguard Worker  */
162*0e209d39SAndroid Build Coastguard Worker 
163*0e209d39SAndroid Build Coastguard Worker /**
164*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
165*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
166*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
167*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
168*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message will be formatted
169*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
170*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
171*0e209d39SAndroid Build Coastguard Worker  * @param result A pointer to a buffer to receive the formatted message.
172*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
173*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
174*0e209d39SAndroid Build Coastguard Worker  * @param ... A variable-length argument list containing the arguments specified
175*0e209d39SAndroid Build Coastguard Worker  * in pattern.
176*0e209d39SAndroid Build Coastguard Worker  * @return The total buffer size needed; if greater than resultLength, the
177*0e209d39SAndroid Build Coastguard Worker  * output was truncated.
178*0e209d39SAndroid Build Coastguard Worker  * @see u_parseMessage
179*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
180*0e209d39SAndroid Build Coastguard Worker  */
181*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
182*0e209d39SAndroid Build Coastguard Worker u_formatMessage(const char  *locale,
183*0e209d39SAndroid Build Coastguard Worker                  const UChar *pattern,
184*0e209d39SAndroid Build Coastguard Worker                 int32_t     patternLength,
185*0e209d39SAndroid Build Coastguard Worker                 UChar       *result,
186*0e209d39SAndroid Build Coastguard Worker                 int32_t     resultLength,
187*0e209d39SAndroid Build Coastguard Worker                 UErrorCode  *status,
188*0e209d39SAndroid Build Coastguard Worker                 ...);
189*0e209d39SAndroid Build Coastguard Worker 
190*0e209d39SAndroid Build Coastguard Worker /**
191*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
192*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
193*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
194*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
195*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message will be formatted
196*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
197*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
198*0e209d39SAndroid Build Coastguard Worker  * @param result A pointer to a buffer to receive the formatted message.
199*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
200*0e209d39SAndroid Build Coastguard Worker  * @param ap A variable-length argument list containing the arguments specified
201*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
202*0e209d39SAndroid Build Coastguard Worker  * in pattern.
203*0e209d39SAndroid Build Coastguard Worker  * @return The total buffer size needed; if greater than resultLength, the
204*0e209d39SAndroid Build Coastguard Worker  * output was truncated.
205*0e209d39SAndroid Build Coastguard Worker  * @see u_parseMessage
206*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
207*0e209d39SAndroid Build Coastguard Worker  */
208*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
209*0e209d39SAndroid Build Coastguard Worker u_vformatMessage(   const char  *locale,
210*0e209d39SAndroid Build Coastguard Worker                     const UChar *pattern,
211*0e209d39SAndroid Build Coastguard Worker                     int32_t     patternLength,
212*0e209d39SAndroid Build Coastguard Worker                     UChar       *result,
213*0e209d39SAndroid Build Coastguard Worker                     int32_t     resultLength,
214*0e209d39SAndroid Build Coastguard Worker                     va_list     ap,
215*0e209d39SAndroid Build Coastguard Worker                     UErrorCode  *status);
216*0e209d39SAndroid Build Coastguard Worker 
217*0e209d39SAndroid Build Coastguard Worker /**
218*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
219*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
220*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
221*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #u_formatMessage }.
222*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message is formatted
223*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
224*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
225*0e209d39SAndroid Build Coastguard Worker  * @param source The text to parse.
226*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength The length of source, or -1 if null-terminated.
227*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
228*0e209d39SAndroid Build Coastguard Worker  * @param ... A variable-length argument list containing the arguments
229*0e209d39SAndroid Build Coastguard Worker  * specified in pattern.
230*0e209d39SAndroid Build Coastguard Worker  * @see u_formatMessage
231*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
232*0e209d39SAndroid Build Coastguard Worker  */
233*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
234*0e209d39SAndroid Build Coastguard Worker u_parseMessage( const char   *locale,
235*0e209d39SAndroid Build Coastguard Worker                 const UChar  *pattern,
236*0e209d39SAndroid Build Coastguard Worker                 int32_t      patternLength,
237*0e209d39SAndroid Build Coastguard Worker                 const UChar  *source,
238*0e209d39SAndroid Build Coastguard Worker                 int32_t      sourceLength,
239*0e209d39SAndroid Build Coastguard Worker                 UErrorCode   *status,
240*0e209d39SAndroid Build Coastguard Worker                 ...);
241*0e209d39SAndroid Build Coastguard Worker 
242*0e209d39SAndroid Build Coastguard Worker /**
243*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
244*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
245*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
246*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #u_formatMessage }.
247*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message is formatted
248*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
249*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
250*0e209d39SAndroid Build Coastguard Worker  * @param source The text to parse.
251*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength The length of source, or -1 if null-terminated.
252*0e209d39SAndroid Build Coastguard Worker  * @param ap A variable-length argument list containing the arguments
253*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
254*0e209d39SAndroid Build Coastguard Worker  * specified in pattern.
255*0e209d39SAndroid Build Coastguard Worker  * @see u_formatMessage
256*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
257*0e209d39SAndroid Build Coastguard Worker  */
258*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
259*0e209d39SAndroid Build Coastguard Worker u_vparseMessage(const char  *locale,
260*0e209d39SAndroid Build Coastguard Worker                 const UChar *pattern,
261*0e209d39SAndroid Build Coastguard Worker                 int32_t     patternLength,
262*0e209d39SAndroid Build Coastguard Worker                 const UChar *source,
263*0e209d39SAndroid Build Coastguard Worker                 int32_t     sourceLength,
264*0e209d39SAndroid Build Coastguard Worker                 va_list     ap,
265*0e209d39SAndroid Build Coastguard Worker                 UErrorCode  *status);
266*0e209d39SAndroid Build Coastguard Worker 
267*0e209d39SAndroid Build Coastguard Worker /**
268*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
269*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
270*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
271*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
272*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message will be formatted
273*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
274*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
275*0e209d39SAndroid Build Coastguard Worker  * @param result A pointer to a buffer to receive the formatted message.
276*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
277*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
278*0e209d39SAndroid Build Coastguard Worker  * @param ... A variable-length argument list containing the arguments specified
279*0e209d39SAndroid Build Coastguard Worker  * in pattern.
280*0e209d39SAndroid Build Coastguard Worker  * @param parseError  A pointer to UParseError to receive information about errors
281*0e209d39SAndroid Build Coastguard Worker  *                     occurred during parsing.
282*0e209d39SAndroid Build Coastguard Worker  * @return The total buffer size needed; if greater than resultLength, the
283*0e209d39SAndroid Build Coastguard Worker  * output was truncated.
284*0e209d39SAndroid Build Coastguard Worker  * @see u_parseMessage
285*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
286*0e209d39SAndroid Build Coastguard Worker  */
287*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
288*0e209d39SAndroid Build Coastguard Worker u_formatMessageWithError(   const char    *locale,
289*0e209d39SAndroid Build Coastguard Worker                             const UChar   *pattern,
290*0e209d39SAndroid Build Coastguard Worker                             int32_t       patternLength,
291*0e209d39SAndroid Build Coastguard Worker                             UChar         *result,
292*0e209d39SAndroid Build Coastguard Worker                             int32_t       resultLength,
293*0e209d39SAndroid Build Coastguard Worker                             UParseError   *parseError,
294*0e209d39SAndroid Build Coastguard Worker                             UErrorCode    *status,
295*0e209d39SAndroid Build Coastguard Worker                             ...);
296*0e209d39SAndroid Build Coastguard Worker 
297*0e209d39SAndroid Build Coastguard Worker /**
298*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
299*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
300*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
301*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
302*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message will be formatted
303*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
304*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
305*0e209d39SAndroid Build Coastguard Worker  * @param result A pointer to a buffer to receive the formatted message.
306*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
307*0e209d39SAndroid Build Coastguard Worker  * @param parseError  A pointer to UParseError to receive information about errors
308*0e209d39SAndroid Build Coastguard Worker  *                    occurred during parsing.
309*0e209d39SAndroid Build Coastguard Worker  * @param ap A variable-length argument list containing the arguments specified
310*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
311*0e209d39SAndroid Build Coastguard Worker  * in pattern.
312*0e209d39SAndroid Build Coastguard Worker  * @return The total buffer size needed; if greater than resultLength, the
313*0e209d39SAndroid Build Coastguard Worker  * output was truncated.
314*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
315*0e209d39SAndroid Build Coastguard Worker  */
316*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
317*0e209d39SAndroid Build Coastguard Worker u_vformatMessageWithError(  const char   *locale,
318*0e209d39SAndroid Build Coastguard Worker                             const UChar  *pattern,
319*0e209d39SAndroid Build Coastguard Worker                             int32_t      patternLength,
320*0e209d39SAndroid Build Coastguard Worker                             UChar        *result,
321*0e209d39SAndroid Build Coastguard Worker                             int32_t      resultLength,
322*0e209d39SAndroid Build Coastguard Worker                             UParseError* parseError,
323*0e209d39SAndroid Build Coastguard Worker                             va_list      ap,
324*0e209d39SAndroid Build Coastguard Worker                             UErrorCode   *status);
325*0e209d39SAndroid Build Coastguard Worker 
326*0e209d39SAndroid Build Coastguard Worker /**
327*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
328*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
329*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
330*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #u_formatMessage }.
331*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message is formatted
332*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
333*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
334*0e209d39SAndroid Build Coastguard Worker  * @param source The text to parse.
335*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength The length of source, or -1 if null-terminated.
336*0e209d39SAndroid Build Coastguard Worker  * @param parseError  A pointer to UParseError to receive information about errors
337*0e209d39SAndroid Build Coastguard Worker  *                     occurred during parsing.
338*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
339*0e209d39SAndroid Build Coastguard Worker  * @param ... A variable-length argument list containing the arguments
340*0e209d39SAndroid Build Coastguard Worker  * specified in pattern.
341*0e209d39SAndroid Build Coastguard Worker  * @see u_formatMessage
342*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
343*0e209d39SAndroid Build Coastguard Worker  */
344*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
345*0e209d39SAndroid Build Coastguard Worker u_parseMessageWithError(const char  *locale,
346*0e209d39SAndroid Build Coastguard Worker                         const UChar *pattern,
347*0e209d39SAndroid Build Coastguard Worker                         int32_t     patternLength,
348*0e209d39SAndroid Build Coastguard Worker                         const UChar *source,
349*0e209d39SAndroid Build Coastguard Worker                         int32_t     sourceLength,
350*0e209d39SAndroid Build Coastguard Worker                         UParseError *parseError,
351*0e209d39SAndroid Build Coastguard Worker                         UErrorCode  *status,
352*0e209d39SAndroid Build Coastguard Worker                         ...);
353*0e209d39SAndroid Build Coastguard Worker 
354*0e209d39SAndroid Build Coastguard Worker /**
355*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
356*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
357*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
358*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #u_formatMessage }.
359*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale for which the message is formatted
360*0e209d39SAndroid Build Coastguard Worker  * @param pattern The pattern specifying the message's format
361*0e209d39SAndroid Build Coastguard Worker  * @param patternLength The length of pattern
362*0e209d39SAndroid Build Coastguard Worker  * @param source The text to parse.
363*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength The length of source, or -1 if null-terminated.
364*0e209d39SAndroid Build Coastguard Worker  * @param ap A variable-length argument list containing the arguments
365*0e209d39SAndroid Build Coastguard Worker  * @param parseError  A pointer to UParseError to receive information about errors
366*0e209d39SAndroid Build Coastguard Worker  *                     occurred during parsing.
367*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors
368*0e209d39SAndroid Build Coastguard Worker  * specified in pattern.
369*0e209d39SAndroid Build Coastguard Worker  * @see u_formatMessage
370*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
371*0e209d39SAndroid Build Coastguard Worker  */
372*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
373*0e209d39SAndroid Build Coastguard Worker u_vparseMessageWithError(const char  *locale,
374*0e209d39SAndroid Build Coastguard Worker                          const UChar *pattern,
375*0e209d39SAndroid Build Coastguard Worker                          int32_t     patternLength,
376*0e209d39SAndroid Build Coastguard Worker                          const UChar *source,
377*0e209d39SAndroid Build Coastguard Worker                          int32_t     sourceLength,
378*0e209d39SAndroid Build Coastguard Worker                          va_list     ap,
379*0e209d39SAndroid Build Coastguard Worker                          UParseError *parseError,
380*0e209d39SAndroid Build Coastguard Worker                          UErrorCode* status);
381*0e209d39SAndroid Build Coastguard Worker 
382*0e209d39SAndroid Build Coastguard Worker /*----------------------- New experimental API --------------------------- */
383*0e209d39SAndroid Build Coastguard Worker /**
384*0e209d39SAndroid Build Coastguard Worker  * The message format object
385*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
386*0e209d39SAndroid Build Coastguard Worker  */
387*0e209d39SAndroid Build Coastguard Worker typedef void* UMessageFormat;
388*0e209d39SAndroid Build Coastguard Worker 
389*0e209d39SAndroid Build Coastguard Worker 
390*0e209d39SAndroid Build Coastguard Worker /**
391*0e209d39SAndroid Build Coastguard Worker  * Open a message formatter with given pattern and for the given locale.
392*0e209d39SAndroid Build Coastguard Worker  * @param pattern       A pattern specifying the format to use.
393*0e209d39SAndroid Build Coastguard Worker  * @param patternLength Length of the pattern to use
394*0e209d39SAndroid Build Coastguard Worker  * @param locale        The locale for which the messages are formatted.
395*0e209d39SAndroid Build Coastguard Worker  * @param parseError    A pointer to UParseError struct to receive any errors
396*0e209d39SAndroid Build Coastguard Worker  *                      occurred during parsing. Can be NULL.
397*0e209d39SAndroid Build Coastguard Worker  * @param status        A pointer to an UErrorCode to receive any errors.
398*0e209d39SAndroid Build Coastguard Worker  * @return              A pointer to a UMessageFormat to use for formatting
399*0e209d39SAndroid Build Coastguard Worker  *                      messages, or 0 if an error occurred.
400*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
401*0e209d39SAndroid Build Coastguard Worker  */
402*0e209d39SAndroid Build Coastguard Worker U_CAPI UMessageFormat* U_EXPORT2
403*0e209d39SAndroid Build Coastguard Worker umsg_open(  const UChar     *pattern,
404*0e209d39SAndroid Build Coastguard Worker             int32_t         patternLength,
405*0e209d39SAndroid Build Coastguard Worker             const  char     *locale,
406*0e209d39SAndroid Build Coastguard Worker             UParseError     *parseError,
407*0e209d39SAndroid Build Coastguard Worker             UErrorCode      *status);
408*0e209d39SAndroid Build Coastguard Worker 
409*0e209d39SAndroid Build Coastguard Worker /**
410*0e209d39SAndroid Build Coastguard Worker  * Close a UMessageFormat.
411*0e209d39SAndroid Build Coastguard Worker  * Once closed, a UMessageFormat may no longer be used.
412*0e209d39SAndroid Build Coastguard Worker  * @param format The formatter to close.
413*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
414*0e209d39SAndroid Build Coastguard Worker  */
415*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
416*0e209d39SAndroid Build Coastguard Worker umsg_close(UMessageFormat* format);
417*0e209d39SAndroid Build Coastguard Worker 
418*0e209d39SAndroid Build Coastguard Worker #if U_SHOW_CPLUSPLUS_API
419*0e209d39SAndroid Build Coastguard Worker 
420*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_BEGIN
421*0e209d39SAndroid Build Coastguard Worker 
422*0e209d39SAndroid Build Coastguard Worker /**
423*0e209d39SAndroid Build Coastguard Worker  * \class LocalUMessageFormatPointer
424*0e209d39SAndroid Build Coastguard Worker  * "Smart pointer" class, closes a UMessageFormat via umsg_close().
425*0e209d39SAndroid Build Coastguard Worker  * For most methods see the LocalPointerBase base class.
426*0e209d39SAndroid Build Coastguard Worker  *
427*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointerBase
428*0e209d39SAndroid Build Coastguard Worker  * @see LocalPointer
429*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 4.4
430*0e209d39SAndroid Build Coastguard Worker  */
431*0e209d39SAndroid Build Coastguard Worker U_DEFINE_LOCAL_OPEN_POINTER(LocalUMessageFormatPointer, UMessageFormat, umsg_close);
432*0e209d39SAndroid Build Coastguard Worker 
433*0e209d39SAndroid Build Coastguard Worker U_NAMESPACE_END
434*0e209d39SAndroid Build Coastguard Worker 
435*0e209d39SAndroid Build Coastguard Worker #endif
436*0e209d39SAndroid Build Coastguard Worker 
437*0e209d39SAndroid Build Coastguard Worker /**
438*0e209d39SAndroid Build Coastguard Worker  * Open a copy of a UMessageFormat.
439*0e209d39SAndroid Build Coastguard Worker  * This function performs a deep copy.
440*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to copy
441*0e209d39SAndroid Build Coastguard Worker  * @param status A pointer to an UErrorCode to receive any errors.
442*0e209d39SAndroid Build Coastguard Worker  * @return A pointer to a UDateFormat identical to fmt.
443*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
444*0e209d39SAndroid Build Coastguard Worker  */
445*0e209d39SAndroid Build Coastguard Worker U_CAPI UMessageFormat U_EXPORT2
446*0e209d39SAndroid Build Coastguard Worker umsg_clone(const UMessageFormat *fmt,
447*0e209d39SAndroid Build Coastguard Worker            UErrorCode *status);
448*0e209d39SAndroid Build Coastguard Worker 
449*0e209d39SAndroid Build Coastguard Worker /**
450*0e209d39SAndroid Build Coastguard Worker  * Sets the locale. This locale is used for fetching default number or date
451*0e209d39SAndroid Build Coastguard Worker  * format information.
452*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to set
453*0e209d39SAndroid Build Coastguard Worker  * @param locale The locale the formatter should use.
454*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
455*0e209d39SAndroid Build Coastguard Worker  */
456*0e209d39SAndroid Build Coastguard Worker U_CAPI void  U_EXPORT2
457*0e209d39SAndroid Build Coastguard Worker umsg_setLocale(UMessageFormat *fmt,
458*0e209d39SAndroid Build Coastguard Worker                const char* locale);
459*0e209d39SAndroid Build Coastguard Worker 
460*0e209d39SAndroid Build Coastguard Worker /**
461*0e209d39SAndroid Build Coastguard Worker  * Gets the locale. This locale is used for fetching default number or date
462*0e209d39SAndroid Build Coastguard Worker  * format information.
463*0e209d39SAndroid Build Coastguard Worker  * @param fmt The formatter to querry
464*0e209d39SAndroid Build Coastguard Worker  * @return the locale.
465*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
466*0e209d39SAndroid Build Coastguard Worker  */
467*0e209d39SAndroid Build Coastguard Worker U_CAPI const char*  U_EXPORT2
468*0e209d39SAndroid Build Coastguard Worker umsg_getLocale(const UMessageFormat *fmt);
469*0e209d39SAndroid Build Coastguard Worker 
470*0e209d39SAndroid Build Coastguard Worker /**
471*0e209d39SAndroid Build Coastguard Worker  * Sets the pattern.
472*0e209d39SAndroid Build Coastguard Worker  * @param fmt           The formatter to use
473*0e209d39SAndroid Build Coastguard Worker  * @param pattern       The pattern to be applied.
474*0e209d39SAndroid Build Coastguard Worker  * @param patternLength Length of the pattern to use
475*0e209d39SAndroid Build Coastguard Worker  * @param parseError    Struct to receive information on position
476*0e209d39SAndroid Build Coastguard Worker  *                      of error if an error is encountered.Can be NULL.
477*0e209d39SAndroid Build Coastguard Worker  * @param status        Output param set to success/failure code on
478*0e209d39SAndroid Build Coastguard Worker  *                      exit. If the pattern is invalid, this will be
479*0e209d39SAndroid Build Coastguard Worker  *                      set to a failure result.
480*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
481*0e209d39SAndroid Build Coastguard Worker  */
482*0e209d39SAndroid Build Coastguard Worker U_CAPI void  U_EXPORT2
483*0e209d39SAndroid Build Coastguard Worker umsg_applyPattern( UMessageFormat *fmt,
484*0e209d39SAndroid Build Coastguard Worker                    const UChar* pattern,
485*0e209d39SAndroid Build Coastguard Worker                    int32_t patternLength,
486*0e209d39SAndroid Build Coastguard Worker                    UParseError* parseError,
487*0e209d39SAndroid Build Coastguard Worker                    UErrorCode* status);
488*0e209d39SAndroid Build Coastguard Worker 
489*0e209d39SAndroid Build Coastguard Worker /**
490*0e209d39SAndroid Build Coastguard Worker  * Gets the pattern.
491*0e209d39SAndroid Build Coastguard Worker  * @param fmt          The formatter to use
492*0e209d39SAndroid Build Coastguard Worker  * @param result       A pointer to a buffer to receive the pattern.
493*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
494*0e209d39SAndroid Build Coastguard Worker  * @param status       Output param set to success/failure code on
495*0e209d39SAndroid Build Coastguard Worker  *                     exit. If the pattern is invalid, this will be
496*0e209d39SAndroid Build Coastguard Worker  *                     set to a failure result.
497*0e209d39SAndroid Build Coastguard Worker  * @return the pattern of the format
498*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
499*0e209d39SAndroid Build Coastguard Worker  */
500*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t  U_EXPORT2
501*0e209d39SAndroid Build Coastguard Worker umsg_toPattern(const UMessageFormat *fmt,
502*0e209d39SAndroid Build Coastguard Worker                UChar* result,
503*0e209d39SAndroid Build Coastguard Worker                int32_t resultLength,
504*0e209d39SAndroid Build Coastguard Worker                UErrorCode* status);
505*0e209d39SAndroid Build Coastguard Worker 
506*0e209d39SAndroid Build Coastguard Worker /**
507*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
508*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
509*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
510*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
511*0e209d39SAndroid Build Coastguard Worker  * @param fmt           The formatter to use
512*0e209d39SAndroid Build Coastguard Worker  * @param result        A pointer to a buffer to receive the formatted message.
513*0e209d39SAndroid Build Coastguard Worker  * @param resultLength  The maximum size of result.
514*0e209d39SAndroid Build Coastguard Worker  * @param status        A pointer to an UErrorCode to receive any errors
515*0e209d39SAndroid Build Coastguard Worker  * @param ...           A variable-length argument list containing the arguments
516*0e209d39SAndroid Build Coastguard Worker  *                      specified in pattern.
517*0e209d39SAndroid Build Coastguard Worker  * @return              The total buffer size needed; if greater than resultLength,
518*0e209d39SAndroid Build Coastguard Worker  *                      the output was truncated.
519*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
520*0e209d39SAndroid Build Coastguard Worker  */
521*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
522*0e209d39SAndroid Build Coastguard Worker umsg_format(    const UMessageFormat *fmt,
523*0e209d39SAndroid Build Coastguard Worker                 UChar          *result,
524*0e209d39SAndroid Build Coastguard Worker                 int32_t        resultLength,
525*0e209d39SAndroid Build Coastguard Worker                 UErrorCode     *status,
526*0e209d39SAndroid Build Coastguard Worker                 ...);
527*0e209d39SAndroid Build Coastguard Worker 
528*0e209d39SAndroid Build Coastguard Worker /**
529*0e209d39SAndroid Build Coastguard Worker  * Format a message for a locale.
530*0e209d39SAndroid Build Coastguard Worker  * This function may perform re-ordering of the arguments depending on the
531*0e209d39SAndroid Build Coastguard Worker  * locale. For all numeric arguments, double is assumed unless the type is
532*0e209d39SAndroid Build Coastguard Worker  * explicitly integer.  All choice format arguments must be of type double.
533*0e209d39SAndroid Build Coastguard Worker  * @param fmt          The formatter to use
534*0e209d39SAndroid Build Coastguard Worker  * @param result       A pointer to a buffer to receive the formatted message.
535*0e209d39SAndroid Build Coastguard Worker  * @param resultLength The maximum size of result.
536*0e209d39SAndroid Build Coastguard Worker  * @param ap           A variable-length argument list containing the arguments
537*0e209d39SAndroid Build Coastguard Worker  * @param status       A pointer to an UErrorCode to receive any errors
538*0e209d39SAndroid Build Coastguard Worker  *                     specified in pattern.
539*0e209d39SAndroid Build Coastguard Worker  * @return             The total buffer size needed; if greater than resultLength,
540*0e209d39SAndroid Build Coastguard Worker  *                     the output was truncated.
541*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
542*0e209d39SAndroid Build Coastguard Worker  */
543*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
544*0e209d39SAndroid Build Coastguard Worker umsg_vformat(   const UMessageFormat *fmt,
545*0e209d39SAndroid Build Coastguard Worker                 UChar          *result,
546*0e209d39SAndroid Build Coastguard Worker                 int32_t        resultLength,
547*0e209d39SAndroid Build Coastguard Worker                 va_list        ap,
548*0e209d39SAndroid Build Coastguard Worker                 UErrorCode     *status);
549*0e209d39SAndroid Build Coastguard Worker 
550*0e209d39SAndroid Build Coastguard Worker /**
551*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
552*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
553*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
554*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #umsg_format }.
555*0e209d39SAndroid Build Coastguard Worker  * @param fmt           The formatter to use
556*0e209d39SAndroid Build Coastguard Worker  * @param source        The text to parse.
557*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength  The length of source, or -1 if null-terminated.
558*0e209d39SAndroid Build Coastguard Worker  * @param count         Output param to receive number of elements returned.
559*0e209d39SAndroid Build Coastguard Worker  * @param status        A pointer to an UErrorCode to receive any errors
560*0e209d39SAndroid Build Coastguard Worker  * @param ...           A variable-length argument list containing the arguments
561*0e209d39SAndroid Build Coastguard Worker  *                      specified in pattern.
562*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
563*0e209d39SAndroid Build Coastguard Worker  */
564*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
565*0e209d39SAndroid Build Coastguard Worker umsg_parse( const UMessageFormat *fmt,
566*0e209d39SAndroid Build Coastguard Worker             const UChar    *source,
567*0e209d39SAndroid Build Coastguard Worker             int32_t        sourceLength,
568*0e209d39SAndroid Build Coastguard Worker             int32_t        *count,
569*0e209d39SAndroid Build Coastguard Worker             UErrorCode     *status,
570*0e209d39SAndroid Build Coastguard Worker             ...);
571*0e209d39SAndroid Build Coastguard Worker 
572*0e209d39SAndroid Build Coastguard Worker /**
573*0e209d39SAndroid Build Coastguard Worker  * Parse a message.
574*0e209d39SAndroid Build Coastguard Worker  * For numeric arguments, this function will always use doubles.  Integer types
575*0e209d39SAndroid Build Coastguard Worker  * should not be passed.
576*0e209d39SAndroid Build Coastguard Worker  * This function is not able to parse all output from {@link #umsg_format }.
577*0e209d39SAndroid Build Coastguard Worker  * @param fmt           The formatter to use
578*0e209d39SAndroid Build Coastguard Worker  * @param source        The text to parse.
579*0e209d39SAndroid Build Coastguard Worker  * @param sourceLength  The length of source, or -1 if null-terminated.
580*0e209d39SAndroid Build Coastguard Worker  * @param count         Output param to receive number of elements returned.
581*0e209d39SAndroid Build Coastguard Worker  * @param ap            A variable-length argument list containing the arguments
582*0e209d39SAndroid Build Coastguard Worker  * @param status        A pointer to an UErrorCode to receive any errors
583*0e209d39SAndroid Build Coastguard Worker  *                      specified in pattern.
584*0e209d39SAndroid Build Coastguard Worker  * @see u_formatMessage
585*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 2.0
586*0e209d39SAndroid Build Coastguard Worker  */
587*0e209d39SAndroid Build Coastguard Worker U_CAPI void U_EXPORT2
588*0e209d39SAndroid Build Coastguard Worker umsg_vparse(const UMessageFormat *fmt,
589*0e209d39SAndroid Build Coastguard Worker             const UChar    *source,
590*0e209d39SAndroid Build Coastguard Worker             int32_t        sourceLength,
591*0e209d39SAndroid Build Coastguard Worker             int32_t        *count,
592*0e209d39SAndroid Build Coastguard Worker             va_list        ap,
593*0e209d39SAndroid Build Coastguard Worker             UErrorCode     *status);
594*0e209d39SAndroid Build Coastguard Worker 
595*0e209d39SAndroid Build Coastguard Worker 
596*0e209d39SAndroid Build Coastguard Worker /**
597*0e209d39SAndroid Build Coastguard Worker  * Convert an 'apostrophe-friendly' pattern into a standard
598*0e209d39SAndroid Build Coastguard Worker  * pattern.  Standard patterns treat all apostrophes as
599*0e209d39SAndroid Build Coastguard Worker  * quotes, which is problematic in some languages, e.g.
600*0e209d39SAndroid Build Coastguard Worker  * French, where apostrophe is commonly used.  This utility
601*0e209d39SAndroid Build Coastguard Worker  * assumes that only an unpaired apostrophe immediately before
602*0e209d39SAndroid Build Coastguard Worker  * a brace is a true quote.  Other unpaired apostrophes are paired,
603*0e209d39SAndroid Build Coastguard Worker  * and the resulting standard pattern string is returned.
604*0e209d39SAndroid Build Coastguard Worker  *
605*0e209d39SAndroid Build Coastguard Worker  * <p><b>Note</b> it is not guaranteed that the returned pattern
606*0e209d39SAndroid Build Coastguard Worker  * is indeed a valid pattern.  The only effect is to convert
607*0e209d39SAndroid Build Coastguard Worker  * between patterns having different quoting semantics.
608*0e209d39SAndroid Build Coastguard Worker  *
609*0e209d39SAndroid Build Coastguard Worker  * @param pattern the 'apostrophe-friendly' patttern to convert
610*0e209d39SAndroid Build Coastguard Worker  * @param patternLength the length of pattern, or -1 if unknown and pattern is null-terminated
611*0e209d39SAndroid Build Coastguard Worker  * @param dest the buffer for the result, or NULL if preflight only
612*0e209d39SAndroid Build Coastguard Worker  * @param destCapacity the length of the buffer, or 0 if preflighting
613*0e209d39SAndroid Build Coastguard Worker  * @param ec the error code
614*0e209d39SAndroid Build Coastguard Worker  * @return the length of the resulting text, not including trailing null
615*0e209d39SAndroid Build Coastguard Worker  *        if buffer has room for the trailing null, it is provided, otherwise
616*0e209d39SAndroid Build Coastguard Worker  *        not
617*0e209d39SAndroid Build Coastguard Worker  * @stable ICU 3.4
618*0e209d39SAndroid Build Coastguard Worker  */
619*0e209d39SAndroid Build Coastguard Worker U_CAPI int32_t U_EXPORT2
620*0e209d39SAndroid Build Coastguard Worker umsg_autoQuoteApostrophe(const UChar* pattern,
621*0e209d39SAndroid Build Coastguard Worker                          int32_t patternLength,
622*0e209d39SAndroid Build Coastguard Worker                          UChar* dest,
623*0e209d39SAndroid Build Coastguard Worker                          int32_t destCapacity,
624*0e209d39SAndroid Build Coastguard Worker                          UErrorCode* ec);
625*0e209d39SAndroid Build Coastguard Worker 
626*0e209d39SAndroid Build Coastguard Worker #endif /* #if !UCONFIG_NO_FORMATTING */
627*0e209d39SAndroid Build Coastguard Worker 
628*0e209d39SAndroid Build Coastguard Worker #endif
629