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’\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