16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/********************************************************************
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * COPYRIGHT:
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (c) 1997-2011, International Business Machines Corporation and
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * others. All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Copyright (C) 2010 , Yahoo! Inc.
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   file name:  umsg.h
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   encoding:   US-ASCII
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   tab size:   8 (not used)
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   indentation:4
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   Change history:
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   08/5/2001  Ram         Added C wrappers for C++ API.
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ********************************************************************/
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef UMSG_H
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define UMSG_H
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h"
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h"
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/parseerr.h"
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdarg.h>
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: MessageFormat
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <h2>MessageFormat C API </h2>
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>MessageFormat prepares strings for display to users,
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with optional arguments (variables/placeholders).
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The arguments can occur in any order, which is necessary for translation
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * into languages with different grammars.
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>The opaque UMessageFormat type is a thin C wrapper around
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a C++ MessageFormat. It is constructed from a <em>pattern</em> string
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * with arguments in {curly braces} which will be replaced by formatted values.
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Currently, the C API supports only numbered arguments.
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>For details about the pattern syntax and behavior,
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * especially about the ASCII apostrophe vs. the
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * real apostrophe (single quote) character \htmlonly&#x2019;\endhtmlonly (U+2019),
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * see the C++ MessageFormat class documentation.
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>Here are some examples of C API usage:
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Example 1:
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UChar *result, *tzID, *str;
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UChar pattern[100];
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     int32_t resultLengthOut, resultlength;
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UCalendar *cal;
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UDate d1;
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UDateFormat *def1;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UErrorCode status = U_ZERO_ERROR;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     str=(UChar*)malloc(sizeof(UChar) * (strlen("disturbance in force") +1));
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     u_uastrcpy(str, "disturbance in force");
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     tzID=(UChar*)malloc(sizeof(UChar) * 4);
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     u_uastrcpy(tzID, "PST");
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     cal=ucal_open(tzID, u_strlen(tzID), "en_US", UCAL_TRADITIONAL, &status);
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     ucal_setDateTime(cal, 1999, UCAL_MARCH, 18, 0, 0, 0, &status);
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     d1=ucal_getMillis(cal, &status);
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     u_uastrcpy(pattern, "On {0, date, long}, there was a {1} on planet {2,number,integer}");
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     resultlength=0;
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, d1, str, 7);
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     if(status==U_BUFFER_OVERFLOW_ERROR){
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         status=U_ZERO_ERROR;
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         resultlength=resultLengthOut+1;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         result=(UChar*)realloc(result, sizeof(UChar) * resultlength);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, d1, str, 7);
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     }
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     printf("%s\n", austrdup(result) );//austrdup( a function used to convert UChar* to char*)
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     //output>: "On March 18, 1999, there was a disturbance in force on planet 7
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Typically, the message format will come from resources, and the
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * arguments will be dynamically set at runtime.
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Example 2:
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UChar* str;
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UErrorCode status = U_ZERO_ERROR;
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UChar *result;
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UChar pattern[100];
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     int32_t resultlength, resultLengthOut, i;
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     double testArgs= { 100.0, 1.0, 0.0};
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     str=(UChar*)malloc(sizeof(UChar) * 10);
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     u_uastrcpy(str, "MyDisk");
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     u_uastrcpy(pattern, "The disk {1} contains {0,choice,0#no files|1#one file|1<{0,number,integer} files}");
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     for(i=0; i<3; i++){
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       resultlength=0;
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       resultLengthOut=u_formatMessage( "en_US", pattern, u_strlen(pattern), NULL, resultlength, &status, testArgs[i], str);
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       if(status==U_BUFFER_OVERFLOW_ERROR){
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         status=U_ZERO_ERROR;
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         resultlength=resultLengthOut+1;
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         result=(UChar*)malloc(sizeof(UChar) * resultlength);
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *         u_formatMessage( "en_US", pattern, u_strlen(pattern), result, resultlength, &status, testArgs[i], str);
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       }
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       printf("%s\n", austrdup(result) );  //austrdup( a function used to convert UChar* to char*)
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       free(result);
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     }
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // output, with different testArgs:
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // output: The disk "MyDisk" contains 100 files.
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // output: The disk "MyDisk" contains one file.
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     // output: The disk "MyDisk" contains no files.
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  </pre>
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Example 3:
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar* str;
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar* str1;
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UErrorCode status = U_ZERO_ERROR;
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar *result;
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar pattern[100];
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar expected[100];
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * int32_t resultlength,resultLengthOut;
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * str=(UChar*)malloc(sizeof(UChar) * 25);
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * u_uastrcpy(str, "Kirti");
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * str1=(UChar*)malloc(sizeof(UChar) * 25);
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * u_uastrcpy(str1, "female");
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * log_verbose("Testing message format with Select test #1\n:");
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * u_uastrcpy(pattern, "{0} est {1, select, female {all\\u00E9e} other {all\\u00E9}} \\u00E0 Paris.");
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * u_uastrcpy(expected, "Kirti est all\\u00E9e \\u00E0 Paris.");
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * resultlength=0;
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * resultLengthOut=u_formatMessage( "fr", pattern, u_strlen(pattern), NULL, resultlength, &status, str , str1);
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if(status==U_BUFFER_OVERFLOW_ERROR)
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  {
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      status=U_ZERO_ERROR;
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      resultlength=resultLengthOut+1;
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      result=(UChar*)malloc(sizeof(UChar) * resultlength);
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      u_formatMessage( "fr", pattern, u_strlen(pattern), result, resultlength, &status, str , str1);
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      if(u_strcmp(result, expected)==0)
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *          log_verbose("PASS: MessagFormat successful on Select test#1\n");
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      else{
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *          log_err("FAIL: Error in MessageFormat on Select test#1\n GOT %s EXPECTED %s\n", austrdup(result),
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *          austrdup(expected) );
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      }
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *      free(result);
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * }
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  </pre>
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message will be formatted
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the formatted message.
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ... A variable-length argument list containing the arguments specified
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in pattern.
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The total buffer size needed; if greater than resultLength, the
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * output was truncated.
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_parseMessage
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_formatMessage(const char  *locale,
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                 const UChar *pattern,
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t     patternLength,
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UChar       *result,
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t     resultLength,
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UErrorCode  *status,
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                ...);
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message will be formatted
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the formatted message.
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap A variable-length argument list containing the arguments specified
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in pattern.
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The total buffer size needed; if greater than resultLength, the
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * output was truncated.
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_parseMessage
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_vformatMessage(   const char  *locale,
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    const UChar *pattern,
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    int32_t     patternLength,
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    UChar       *result,
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    int32_t     resultLength,
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    va_list     ap,
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    UErrorCode  *status);
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #u_formatMessage }.
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message is formatted
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source The text to parse.
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength The length of source, or -1 if null-terminated.
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ... A variable-length argument list containing the arguments
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specified in pattern.
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_formatMessage
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_parseMessage( const char   *locale,
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                const UChar  *pattern,
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t      patternLength,
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                const UChar  *source,
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t      sourceLength,
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UErrorCode   *status,
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                ...);
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #u_formatMessage }.
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message is formatted
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source The text to parse.
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength The length of source, or -1 if null-terminated.
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap A variable-length argument list containing the arguments
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specified in pattern.
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_formatMessage
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_vparseMessage(const char  *locale,
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                const UChar *pattern,
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t     patternLength,
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                const UChar *source,
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t     sourceLength,
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                va_list     ap,
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UErrorCode  *status);
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message will be formatted
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the formatted message.
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ... A variable-length argument list containing the arguments specified
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in pattern.
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError  A pointer to UParseError to receive information about errors
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     occurred during parsing.
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The total buffer size needed; if greater than resultLength, the
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * output was truncated.
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_parseMessage
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_formatMessageWithError(   const char    *locale,
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const UChar   *pattern,
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t       patternLength,
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UChar         *result,
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t       resultLength,
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UParseError   *parseError,
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UErrorCode    *status,
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            ...);
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message will be formatted
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the formatted message.
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError  A pointer to UParseError to receive information about errors
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                    occurred during parsing.
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap A variable-length argument list containing the arguments specified
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in pattern.
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The total buffer size needed; if greater than resultLength, the
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * output was truncated.
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_vformatMessageWithError(  const char   *locale,
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            const UChar  *pattern,
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t      patternLength,
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UChar        *result,
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t      resultLength,
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UParseError* parseError,
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            va_list      ap,
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UErrorCode   *status);
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #u_formatMessage }.
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message is formatted
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source The text to parse.
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength The length of source, or -1 if null-terminated.
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError  A pointer to UParseError to receive information about errors
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     occurred during parsing.
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ... A variable-length argument list containing the arguments
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specified in pattern.
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_formatMessage
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_parseMessageWithError(const char  *locale,
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        const UChar *pattern,
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t     patternLength,
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        const UChar *source,
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t     sourceLength,
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UParseError *parseError,
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UErrorCode  *status,
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        ...);
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #u_formatMessage }.
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale for which the message is formatted
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The pattern specifying the message's format
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source The text to parse.
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength The length of source, or -1 if null-terminated.
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap A variable-length argument list containing the arguments
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError  A pointer to UParseError to receive information about errors
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     occurred during parsing.
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * specified in pattern.
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_formatMessage
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_vparseMessageWithError(const char  *locale,
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         const UChar *pattern,
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t     patternLength,
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         const UChar *source,
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t     sourceLength,
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         va_list     ap,
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UParseError *parseError,
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UErrorCode* status);
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*----------------------- New experimental API --------------------------- */
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The message format object
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef void* UMessageFormat;
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Open a message formatter with given pattern and for the given locale.
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern       A pattern specifying the format to use.
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength Length of the pattern to use
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale        The locale for which the messages are formatted.
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError    A pointer to UParseError struct to receive any errors
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      occured during parsing. Can be NULL.
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status        A pointer to an UErrorCode to receive any errors.
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return              A pointer to a UMessageFormat to use for formatting
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      messages, or 0 if an error occurred.
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE UMessageFormat* U_EXPORT2
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_open(  const UChar     *pattern,
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         patternLength,
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const  char     *locale,
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UParseError     *parseError,
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode      *status);
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Close a UMessageFormat.
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Once closed, a UMessageFormat may no longer be used.
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param format The formatter to close.
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_close(UMessageFormat* format);
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_SHOW_CPLUSPLUS_API
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \class LocalUMessageFormatPointer
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "Smart pointer" class, closes a UMessageFormat via umsg_close().
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For most methods see the LocalPointerBase base class.
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see LocalPointerBase
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see LocalPointer
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_DEFINE_LOCAL_OPEN_POINTER(LocalUMessageFormatPointer, UMessageFormat, umsg_close);
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Open a copy of a UMessageFormat.
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function performs a deep copy.
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The formatter to copy
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors.
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A pointer to a UDateFormat identical to fmt.
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE UMessageFormat U_EXPORT2
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_clone(const UMessageFormat *fmt,
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org           UErrorCode *status);
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the locale. This locale is used for fetching default number or date
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * format information.
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The formatter to set
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale The locale the formatter should use.
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void  U_EXPORT2
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_setLocale(UMessageFormat *fmt,
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               const char* locale);
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the locale. This locale is used for fetching default number or date
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * format information.
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The formatter to querry
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the locale.
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE const char*  U_EXPORT2
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_getLocale(const UMessageFormat *fmt);
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Sets the pattern.
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt           The formatter to use
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern       The pattern to be applied.
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength Length of the pattern to use
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError    Struct to receive information on position
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      of error if an error is encountered.Can be NULL.
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status        Output param set to success/failure code on
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      exit. If the pattern is invalid, this will be
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      set to a failure result.
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void  U_EXPORT2
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_applyPattern( UMessageFormat *fmt,
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   const UChar* pattern,
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   int32_t patternLength,
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UParseError* parseError,
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                   UErrorCode* status);
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Gets the pattern.
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt          The formatter to use
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result       A pointer to a buffer to receive the pattern.
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status       Output param set to success/failure code on
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     exit. If the pattern is invalid, this will be
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     set to a failure result.
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the pattern of the format
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t  U_EXPORT2
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_toPattern(const UMessageFormat *fmt,
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UChar* result,
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               int32_t resultLength,
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UErrorCode* status);
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt           The formatter to use
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result        A pointer to a buffer to receive the formatted message.
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength  The maximum size of result.
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status        A pointer to an UErrorCode to receive any errors
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ...           A variable-length argument list containing the arguments
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      specified in pattern.
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return              The total buffer size needed; if greater than resultLength,
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      the output was truncated.
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_format(    const UMessageFormat *fmt,
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UChar          *result,
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t        resultLength,
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UErrorCode     *status,
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                ...);
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a message for a locale.
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function may perform re-ordering of the arguments depending on the
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale. For all numeric arguments, double is assumed unless the type is
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * explicitly integer.  All choice format arguments must be of type double.
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt          The formatter to use
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result       A pointer to a buffer to receive the formatted message.
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap           A variable-length argument list containing the arguments
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status       A pointer to an UErrorCode to receive any errors
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     specified in pattern.
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return             The total buffer size needed; if greater than resultLength,
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                     the output was truncated.
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_vformat(   const UMessageFormat *fmt,
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UChar          *result,
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                int32_t        resultLength,
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                va_list        ap,
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                UErrorCode     *status);
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #umsg_format }.
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt           The formatter to use
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source        The text to parse.
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength  The length of source, or -1 if null-terminated.
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count         Output param to receive number of elements returned.
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status        A pointer to an UErrorCode to receive any errors
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ...           A variable-length argument list containing the arguments
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      specified in pattern.
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_parse( const UMessageFormat *fmt,
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const UChar    *source,
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t        sourceLength,
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t        *count,
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode     *status,
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            ...);
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a message.
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For numeric arguments, this function will always use doubles.  Integer types
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * should not be passed.
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not able to parse all output from {@link #umsg_format }.
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt           The formatter to use
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param source        The text to parse.
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param sourceLength  The length of source, or -1 if null-terminated.
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param count         Output param to receive number of elements returned.
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ap            A variable-length argument list containing the arguments
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status        A pointer to an UErrorCode to receive any errors
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *                      specified in pattern.
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_formatMessage
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_vparse(const UMessageFormat *fmt,
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const UChar    *source,
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t        sourceLength,
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t        *count,
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            va_list        ap,
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode     *status);
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert an 'apostrophe-friendly' pattern into a standard
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * pattern.  Standard patterns treat all apostrophes as
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * quotes, which is problematic in some languages, e.g.
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * French, where apostrophe is commonly used.  This utility
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * assumes that only an unpaired apostrophe immediately before
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * a brace is a true quote.  Other unpaired apostrophes are paired,
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and the resulting standard pattern string is returned.
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p><b>Note</b> it is not guaranteed that the returned pattern
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * is indeed a valid pattern.  The only effect is to convert
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * between patterns having different quoting semantics.
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern the 'apostrophe-friendly' patttern to convert
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength the length of pattern, or -1 if unknown and pattern is null-terminated
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param dest the buffer for the result, or NULL if preflight only
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param destCapacity the length of the buffer, or 0 if preflighting
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param ec the error code
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the length of the resulting text, not including trailing null
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *        if buffer has room for the trailing null, it is provided, otherwise
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *        not
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.4
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgumsg_autoQuoteApostrophe(const UChar* pattern,
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t patternLength,
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UChar* dest,
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t destCapacity,
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UErrorCode* ec);
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
624