16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*
26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2013, International Business Machines Corporation and others.
46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* All Rights Reserved.
56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Modification History:
66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*
76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   Date        Name        Description
86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*   06/24/99    helena      Integrated Alan's NF enhancements and Java2 bug fixes
96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*******************************************************************************
106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef _UNUM
136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define _UNUM
146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h"
166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if !UCONFIG_NO_FORMATTING
186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/localpointer.h"
206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uloc.h"
216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/umisc.h"
226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/parseerr.h"
236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uformattable.h"
246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file
276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: NumberFormat
286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <h2> Number Format C API </h2>
306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Number Format C API  Provides functions for
326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formatting and parsing a number.  Also provides methods for
336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * determining which locales have number formats, and what their names
346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are.
356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNumberFormat helps you to format and parse numbers for any locale.
376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Your code can be completely independent of the locale conventions
386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for decimal points, thousands-separators, or even the particular
396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * decimal digits used, or whether the number format is even decimal.
406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * There are different number format styles like decimal, currency,
416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * percent and spellout.
426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * To format a number for the current Locale, use one of the static
446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * factory methods:
456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    UChar myString[20];
486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    double myNumber = 7.0;
496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    UErrorCode status = U_ZERO_ERROR;
506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    unum_formatDouble(nf, myNumber, myString, 20, NULL, &status);
526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function used to convert UChar* to char*)
536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If you are formatting multiple numbers, it is more efficient to get
566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the format and use it multiple times so that the system doesn't
576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * have to fetch the information about the local language and country
586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * conventions multiple times.
596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * uint32_t i, resultlength, reslenneeded;
626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UErrorCode status = U_ZERO_ERROR;
636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UFieldPosition pos;
646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * uint32_t a[] = { 123, 3333, -1234567 };
656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * const uint32_t a_len = sizeof(a) / sizeof(a[0]);
666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNumberFormat* nf;
676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UChar* result = NULL;
686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * for (i = 0; i < a_len; i++) {
716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    resultlength=0;
726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    reslenneeded=unum_format(nf, a[i], NULL, resultlength, &pos, &status);
736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    result = NULL;
746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    if(status==U_BUFFER_OVERFLOW_ERROR){
756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       status=U_ZERO_ERROR;
766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       resultlength=reslenneeded+1;
776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       result=(UChar*)malloc(sizeof(UChar) * resultlength);
786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *       unum_format(nf, a[i], result, resultlength, &pos, &status);
796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    }
806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    printf( " Example 2: %s\n", austrdup(result));
816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    free(result);
826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * }
836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * To format a number for a different Locale, specify it in the
866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * call to unum_open().
876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *     UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, "fr_FR", NULL, &success)
906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can use a NumberFormat API unum_parse() to parse.
936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <pre>
946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code
956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    UErrorCode status = U_ZERO_ERROR;
966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    int32_t pos=0;
976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    int32_t num;
986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *    num = unum_parse(nf, str, u_strlen(str), &pos, &status);
996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode
1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </pre>
1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use UNUM_DECIMAL to get the normal number format for that country.
1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * There are other static options available.  Use UNUM_CURRENCY
1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to get the currency number format for that country.  Use UNUM_PERCENT
1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to get a format for displaying percentages. With this format, a
1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * fraction from 0.53 is displayed as 53%.
1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Use a pattern to create either a DecimalFormat or a RuleBasedNumberFormat
1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formatter.  The pattern must conform to the syntax defined for those
1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formatters.
1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can also control the display of numbers with such function as
1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unum_getAttributes() and unum_setAttributes(), which let you set the
1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * miminum fraction digits, grouping, etc.
1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UNumberFormatAttributes for more details
1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <P>
1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can also use forms of the parse and format methods with
1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ParsePosition and UFieldPosition to allow you to:
1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <ul type=round>
1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   <li>(a) progressively parse through pieces of a string.
1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *   <li>(b) align the decimal point and other areas.
1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </ul>
1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <p>
1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * It is also possible to change or set the symbols used for a particular
1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * locale like the currency symbol, the grouping seperator , monetary seperator
1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * etc by making use of functions unum_setSymbols() and unum_getSymbols().
1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** A number formatter.
1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  For usage in C programs.
1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.0
1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef void* UNumberFormat;
1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The possible number format styles.
1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.0
1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatStyle {
1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Decimal format defined by a pattern string.
1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.0
1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PATTERN_DECIMAL=0,
1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Decimal format ("normal" style).
1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_DECIMAL=1,
1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Currency format with a currency symbol, e.g., "$1.00".
1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY,
1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Percent format
1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PERCENT,
1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Scientific format
1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.1
1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_SCIENTIFIC,
1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Spellout rule-based format
1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_SPELLOUT,
1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Ordinal rule-based format
1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.0
1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ORDINAL,
1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Duration rule-based format
1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.0
1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_DURATION,
1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Numbering system rule-based format
1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.2
1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_NUMBERING_SYSTEM,
1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Rule-based format defined by a pattern string.
1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.0
1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PATTERN_RULEBASED,
1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Currency format with an ISO currency code, e.g., "USD1.00".
1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.8
1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_ISO,
1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Currency format with a pluralized currency name,
1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * e.g., "1.00 US dollar" and "3.00 US dollars".
1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.8
1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_PLURAL,
1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * One more than the highest number format style constant.
2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 4.8
2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_FORMAT_STYLE_COUNT,
2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Default format
2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 2.0
2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_DEFAULT = UNUM_DECIMAL,
2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Alias for UNUM_PATTERN_DECIMAL
2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable ICU 3.0
2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_IGNORE = UNUM_PATTERN_DECIMAL
2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatStyle;
2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The possible number format rounding modes.
2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.0
2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatRoundingMode {
2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_CEILING,
2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_FLOOR,
2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_DOWN,
2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_UP,
2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Half-even rounding
2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @stable, ICU 3.8
2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_HALFEVEN,
2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DEPRECATED_API
2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * Half-even rounding, misspelled name
2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     * @deprecated, ICU 3.8
2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org     */
2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_FOUND_HALFEVEN = UNUM_ROUND_HALFEVEN,
2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_DEPRECATED_API */
2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_HALFDOWN = UNUM_ROUND_HALFEVEN + 1,
2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_HALFUP,
2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /**
2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * ROUND_UNNECESSARY reports an error if formatted result is not exact.
2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      * @stable ICU 4.8
2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org      */
2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_ROUND_UNNECESSARY
2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatRoundingMode;
2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The possible number format pad positions.
2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *  @stable ICU 2.0
2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatPadPosition {
2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PAD_BEFORE_PREFIX,
2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PAD_AFTER_PREFIX,
2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PAD_BEFORE_SUFFIX,
2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PAD_AFTER_SUFFIX
2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatPadPosition;
2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API
2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constants for specifying short or long format.
2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 51
2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberCompactStyle {
2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @draft ICU 51 */
2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SHORT,
2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @draft ICU 51 */
2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_LONG
2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @draft ICU 51 */
2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberCompactStyle;
2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DRAFT_API */
2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constants for specifying currency spacing
2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.8
2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgenum UCurrencySpacing {
2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 4.8 */
2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_MATCH,
2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 4.8 */
2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_SURROUNDING_MATCH,
2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 4.8 */
2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_INSERT,
2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 4.8 */
2816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_SPACING_COUNT
2826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org};
2836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UCurrencySpacing UCurrencySpacing; /**< @stable ICU 4.8 */
2846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
2866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
2876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FieldPosition and UFieldPosition selectors for format fields
2886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * defined by NumberFormat and UNumberFormat.
2896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 49
2906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
2916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatFields {
2926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
2936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_INTEGER_FIELD,
2946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
2956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_FRACTION_FIELD,
2966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
2976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_DECIMAL_SEPARATOR_FIELD,
2986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
2996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_EXPONENT_SYMBOL_FIELD,
3006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_EXPONENT_SIGN_FIELD,
3026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_EXPONENT_FIELD,
3046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_GROUPING_SEPARATOR_FIELD,
3066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_CURRENCY_FIELD,
3086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PERCENT_FIELD,
3106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_PERMILL_FIELD,
3126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_SIGN_FIELD,
3146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    /** @stable ICU 49 */
3156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    UNUM_FIELD_COUNT
3166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatFields;
3176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Create and return a new UNumberFormat for formatting and parsing
3216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * numbers.  A UNumberFormat may be used to format numbers by calling
3226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * {@link #unum_format }, and to parse numbers by calling {@link #unum_parse }.
3236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The caller must call {@link #unum_close } when done to release resources
3246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * used by this object.
3256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param style The type of number format to open: one of
3266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNUM_DECIMAL, UNUM_CURRENCY, UNUM_PERCENT, UNUM_SCIENTIFIC, UNUM_SPELLOUT,
3276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNUM_PATTERN_DECIMAL, UNUM_PATTERN_RULEBASED, or UNUM_DEFAULT.
3286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED is passed then the
3296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * number format is opened using the given pattern, which must conform
3306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * to the syntax described in DecimalFormat or RuleBasedNumberFormat,
3316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * respectively.
3326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern A pattern specifying the format to use.
3336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This parameter is ignored unless the style is
3346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED.
3356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The number of characters in the pattern, or -1
3366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if null-terminated. This parameter is ignored unless the style is
3376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * UNUM_PATTERN.
3386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param locale A locale identifier to use to determine formatting
3396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * and parsing conventions, or NULL to use the default locale.
3406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseErr A pointer to a UParseError struct to receive the
3416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * details of any parsing errors, or NULL if no parsing error details
3426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are desired.
3436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an input-output UErrorCode.
3446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A pointer to a newly created UNumberFormat, or NULL if an
3456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * error occurred.
3466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_close
3476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see DecimalFormat
3486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE UNumberFormat* U_EXPORT2
3516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_open(  UNumberFormatStyle    style,
3526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const    UChar*    pattern,
3536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t            patternLength,
3546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const    char*     locale,
3556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UParseError*       parseErr,
3566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode*        status);
3576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Close a UNumberFormat.
3616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Once closed, a UNumberFormat may no longer be used.
3626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to close.
3636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
3646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
3656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
3666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_close(UNumberFormat* fmt);
3676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_SHOW_CPLUSPLUS_API
3696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_BEGIN
3716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \class LocalUNumberFormatPointer
3746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * "Smart pointer" class, closes a UNumberFormat via unum_close().
3756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For most methods see the LocalPointerBase base class.
3766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org *
3776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see LocalPointerBase
3786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see LocalPointer
3796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 4.4
3806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatPointer, UNumberFormat, unum_close);
3826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_NAMESPACE_END
3846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
3866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
3886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Open a copy of a UNumberFormat.
3896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function performs a deep copy.
3906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The format to copy
3916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an UErrorCode to receive any errors.
3926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return A pointer to a UNumberFormat identical to fmt.
3936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
3946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
3956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE UNumberFormat* U_EXPORT2
3966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_clone(const UNumberFormat *fmt,
3976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org       UErrorCode *status);
3986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
3996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Format an integer using a UNumberFormat.
4016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The integer will be formatted according to the UNumberFormat's locale.
4026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
4036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param number The number to format.
4046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
4056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
4066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
4076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
4086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param resultLength The maximum size of result.
4096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param pos    A pointer to a UFieldPosition.  On input, position->field
4106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* is read.  On output, position->beginIndex and position->endIndex indicate
4116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the beginning and ending indices of field number position->field, if such
4126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* a field exists.  This parameter may be NULL, in which case no field
4136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
4146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The total buffer size needed; if greater than resultLength, the output was truncated.
4156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
4166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
4176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
4186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
4196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
4206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see UFieldPosition
4216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
4226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
4236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
4246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_format(    const    UNumberFormat*    fmt,
4256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t            number,
4266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UChar*            result,
4276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t            resultLength,
4286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UFieldPosition    *pos,
4296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode*        status);
4306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Format an int64 using a UNumberFormat.
4336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The int64 will be formatted according to the UNumberFormat's locale.
4346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
4356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param number The number to format.
4366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
4376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
4386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
4396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
4406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param resultLength The maximum size of result.
4416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param pos    A pointer to a UFieldPosition.  On input, position->field
4426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* is read.  On output, position->beginIndex and position->endIndex indicate
4436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the beginning and ending indices of field number position->field, if such
4446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* a field exists.  This parameter may be NULL, in which case no field
4456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
4466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The total buffer size needed; if greater than resultLength, the output was truncated.
4476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
4486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
4496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
4506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
4516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
4526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see UFieldPosition
4536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
4546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
4556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
4566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_formatInt64(const UNumberFormat *fmt,
4576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int64_t         number,
4586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UChar*          result,
4596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t         resultLength,
4606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UFieldPosition *pos,
4616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode*     status);
4626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Format a double using a UNumberFormat.
4656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The double will be formatted according to the UNumberFormat's locale.
4666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
4676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param number The number to format.
4686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
4696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
4706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
4716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
4726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param resultLength The maximum size of result.
4736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param pos    A pointer to a UFieldPosition.  On input, position->field
4746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* is read.  On output, position->beginIndex and position->endIndex indicate
4756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the beginning and ending indices of field number position->field, if such
4766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* a field exists.  This parameter may be NULL, in which case no field
4776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
4786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The total buffer size needed; if greater than resultLength, the output was truncated.
4796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
4806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
4816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
4826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
4836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
4846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see UFieldPosition
4856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
4866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
4876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
4886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_formatDouble(    const    UNumberFormat*  fmt,
4896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            double          number,
4906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UChar*          result,
4916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         resultLength,
4926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UFieldPosition  *pos, /* 0 if ignore */
4936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode*     status);
4946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
4956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
4966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Format a decimal number using a UNumberFormat.
4976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The number will be formatted according to the UNumberFormat's locale.
4986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The syntax of the input number is a "numeric string"
4996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* as defined in the Decimal Arithmetic Specification, available at
5006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* http://speleotrove.com/decimal
5016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
5026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param number The number to format.
5036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param length The length of the input number, or -1 if the input is nul-terminated.
5046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
5056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
5066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
5076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
5086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param resultLength The maximum size of result.
5096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param pos    A pointer to a UFieldPosition.  On input, position->field
5106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               is read.  On output, position->beginIndex and position->endIndex indicate
5116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               the beginning and ending indices of field number position->field, if such
5126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               a field exists.  This parameter may be NULL, in which case it is ignored.
5136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
5146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The total buffer size needed; if greater than resultLength, the output was truncated.
5156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
5166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
5176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
5186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
5196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
5206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see UFieldPosition
5216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 4.4
5226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
5236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
5246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_formatDecimal(    const    UNumberFormat*  fmt,
5256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const char *    number,
5266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         length,
5276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UChar*          result,
5286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         resultLength,
5296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UFieldPosition  *pos, /* 0 if ignore */
5306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode*     status);
5316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a double currency amount using a UNumberFormat.
5346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The double will be formatted according to the UNumberFormat's locale.
5356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the formatter to use
5366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number the number to format
5376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param currency the 3-letter null-terminated ISO 4217 currency code
5386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
5396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
5406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
5416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
5426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength the maximum number of UChars to write to result
5436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos a pointer to a UFieldPosition.  On input,
5446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * position->field is read.  On output, position->beginIndex and
5456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * position->endIndex indicate the beginning and ending indices of
5466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * field number position->field, if such a field exists.  This
5476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parameter may be NULL, in which case it is ignored.
5486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status a pointer to an input-output UErrorCode
5496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the total buffer size needed; if greater than resultLength,
5506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the output was truncated.
5516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_formatDouble
5526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_parseDoubleCurrency
5536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see UFieldPosition
5546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0
5556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
5576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_formatDoubleCurrency(const UNumberFormat* fmt,
5586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          double number,
5596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          UChar* currency,
5606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          UChar* result,
5616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          int32_t resultLength,
5626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          UFieldPosition* pos,
5636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                          UErrorCode* status);
5646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API
5666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Format a UFormattable into a string.
5686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the formatter to use
5696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param number the number to format, as a UFormattable
5706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
5716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
5726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
5736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
5746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength the maximum number of UChars to write to result
5756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pos a pointer to a UFieldPosition.  On input,
5766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * position->field is read.  On output, position->beginIndex and
5776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * position->endIndex indicate the beginning and ending indices of
5786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * field number position->field, if such a field exists.  This
5796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parameter may be NULL, in which case it is ignored.
5806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status a pointer to an input-output UErrorCode
5816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the total buffer size needed; if greater than resultLength,
5826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the output was truncated. Will return 0 on error.
5836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_parseToUFormattable
5846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52
5856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
5866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_DRAFT int32_t U_EXPORT2
5876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_formatUFormattable(const UNumberFormat* fmt,
5886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        const UFormattable *number,
5896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UChar *result,
5906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        int32_t resultLength,
5916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UFieldPosition *pos,
5926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                        UErrorCode *status);
5936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_DRAFT_API */
5946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
5956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
5966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Parse a string into an integer using a UNumberFormat.
5976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The string will be parsed according to the UNumberFormat's locale.
5986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
5996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param text The text to parse.
6006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param textLength The length of text, or -1 if null-terminated.
6016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
6026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* to begin parsing.  If not NULL, on output the offset at which parsing ended.
6036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
6046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The value of the parsed integer
6056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
6066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
6076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
6086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
6096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
6106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
6116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
6126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
6136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parse(    const   UNumberFormat*  fmt,
6146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const   UChar*          text,
6156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t         textLength,
6166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t         *parsePos /* 0 = start */,
6176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode      *status);
6186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Parse a string into an int64 using a UNumberFormat.
6216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The string will be parsed according to the UNumberFormat's locale.
6226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
6236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param text The text to parse.
6246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param textLength The length of text, or -1 if null-terminated.
6256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
6266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* to begin parsing.  If not NULL, on output the offset at which parsing ended.
6276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
6286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The value of the parsed integer
6296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
6306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseDouble
6316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
6326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
6336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
6346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.8
6356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
6366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int64_t U_EXPORT2
6376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parseInt64(const UNumberFormat*  fmt,
6386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        const UChar*  text,
6396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t       textLength,
6406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t       *parsePos /* 0 = start */,
6416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode    *status);
6426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Parse a string into a double using a UNumberFormat.
6456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The string will be parsed according to the UNumberFormat's locale.
6466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
6476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param text The text to parse.
6486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param textLength The length of text, or -1 if null-terminated.
6496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
6506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* to begin parsing.  If not NULL, on output the offset at which parsing ended.
6516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
6526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The value of the parsed double
6536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
6546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
6556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
6566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
6576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
6586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
6596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
6606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE double U_EXPORT2
6616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parseDouble(    const   UNumberFormat*  fmt,
6626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const   UChar*          text,
6636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         textLength,
6646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t         *parsePos /* 0 = start */,
6656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode      *status);
6666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
6686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
6696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Parse a number from a string into an unformatted numeric string using a UNumberFormat.
6706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The input string will be parsed according to the UNumberFormat's locale.
6716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* The syntax of the output is a "numeric string"
6726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* as defined in the Decimal Arithmetic Specification, available at
6736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* http://speleotrove.com/decimal
6746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to use.
6756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param text The text to parse.
6766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param textLength The length of text, or -1 if null-terminated.
6776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
6786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*                 to begin parsing.  If not NULL, on output the offset at which parsing ended.
6796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param outBuf A (char *) buffer to receive the parsed number as a string.  The output string
6806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               will be nul-terminated if there is sufficient space.
6816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param outBufLength The size of the output buffer.  May be zero, in which case
6826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               the outBuf pointer may be NULL, and the function will return the
6836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               size of the output string.
6846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
6856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return the length of the output string, not including any terminating nul.
6866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parse
6876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_parseInt64
6886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_format
6896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatInt64
6906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_formatDouble
6916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 4.4
6926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
6936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
6946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parseDecimal(const   UNumberFormat*  fmt,
6956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                 const   UChar*          text,
6966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t         textLength,
6976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t         *parsePos /* 0 = start */,
6986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         char            *outBuf,
6996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t         outBufLength,
7006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UErrorCode      *status);
7016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a string into a double and a currency using a UNumberFormat.
7046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The string will be parsed according to the UNumberFormat's locale.
7056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the formatter to use
7066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text the text to parse
7076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param textLength the length of text, or -1 if null-terminated
7086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parsePos a pointer to an offset index into text at which to
7096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * begin parsing. On output, *parsePos will point after the last
7106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parsed character.  This parameter may be NULL, in which case parsing
7116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * begins at offset 0.
7126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param currency a pointer to the buffer to receive the parsed null-
7136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * terminated currency.  This buffer must have a capacity of at least
7146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 4 UChars.
7156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status a pointer to an input-output UErrorCode
7166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the parsed double
7176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_parseDouble
7186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_formatDoubleCurrency
7196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 3.0
7206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE double U_EXPORT2
7226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parseDoubleCurrency(const UNumberFormat* fmt,
7236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         const UChar* text,
7246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t textLength,
7256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t* parsePos, /* 0 = start */
7266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UChar* currency,
7276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UErrorCode* status);
7286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API
7306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Parse a UChar string into a UFormattable.
7326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Example code:
7336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \snippet test/cintltst/cnumtst.c unum_parseToUFormattable
7346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt the formatter to use
7356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result the UFormattable to hold the result. If NULL, a new UFormattable will be allocated (which the caller must close with ufmt_close).
7366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param text the text to parse
7376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param textLength the length of text, or -1 if null-terminated
7386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parsePos a pointer to an offset index into text at which to
7396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * begin parsing. On output, *parsePos will point after the last
7406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * parsed character.  This parameter may be NULL in which case parsing
7416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * begins at offset 0.
7426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status a pointer to an input-output UErrorCode
7436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the UFormattable.  Will be ==result unless NULL was passed in for result, in which case it will be the newly opened UFormattable.
7446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see ufmt_getType
7456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see ufmt_close
7466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @draft ICU 52
7476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_DRAFT UFormattable* U_EXPORT2
7496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_parseToUFormattable(const UNumberFormat* fmt,
7506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UFormattable *result,
7516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         const UChar* text,
7526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t textLength,
7536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         int32_t* parsePos, /* 0 = start */
7546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                         UErrorCode* status);
7556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_DRAFT_API */
7566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the pattern used by a UNumberFormat.  This can only be used
7596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * on a DecimalFormat, other formats return U_UNSUPPORTED_ERROR
7606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * in the status.
7616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param format The formatter to set.
7626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param localized TRUE if the pattern is localized, FALSE otherwise.
7636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param pattern The new pattern
7646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param patternLength The length of pattern, or -1 if null-terminated.
7656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param parseError A pointer to UParseError to recieve information
7666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * about errors occurred during parsing, or NULL if no parse error
7676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * information is desired.
7686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an input-output UErrorCode.
7696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_toPattern
7706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see DecimalFormat
7716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
7726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
7736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
7746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_applyPattern(          UNumberFormat  *format,
7756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UBool          localized,
7766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                    const   UChar          *pattern,
7776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            int32_t         patternLength,
7786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UParseError    *parseError,
7796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                            UErrorCode     *status
7806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                                    );
7816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Get a locale for which decimal formatting patterns are available.
7846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* A UNumberFormat in a locale returned by this function will perform the correct
7856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* formatting and parsing for the locale.  The results of this call are not
7866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* valid for rule-based number formats.
7876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param localeIndex The index of the desired locale.
7886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return A locale for which number formatting patterns are available, or 0 if none.
7896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_countAvailable
7906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
7916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
7926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE const char* U_EXPORT2
7936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getAvailable(int32_t localeIndex);
7946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
7956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
7966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Determine how many locales have decimal formatting patterns available.  The
7976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* results of this call are not valid for rule-based number formats.
7986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* This function is useful for determining the loop ending condition for
7996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* calls to {@link #unum_getAvailable }.
8006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The number of locales for which decimal formatting patterns are available.
8016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAvailable
8026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
8036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
8046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
8056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_countAvailable(void);
8066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_HAVE_PARSEALLINPUT
8086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
8096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @internal
8106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
8116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatAttributeValue {
8126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @internal */
8136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NO = 0,
8146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @internal */
8156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_YES = 1,
8166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** @internal */
8176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MAYBE = 2
8186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatAttributeValue;
8196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
8206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The possible UNumberFormat numeric attributes @stable ICU 2.0 */
8226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatAttribute {
8236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Parse integers only */
8246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PARSE_INT_ONLY,
8256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Use grouping separator */
8266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_GROUPING_USED,
8276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Always show decimal point */
8286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_DECIMAL_ALWAYS_SHOWN,
8296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Maximum integer digits */
8306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MAX_INTEGER_DIGITS,
8316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Minimum integer digits */
8326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MIN_INTEGER_DIGITS,
8336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Integer digits */
8346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_INTEGER_DIGITS,
8356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Maximum fraction digits */
8366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MAX_FRACTION_DIGITS,
8376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Minimum fraction digits */
8386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MIN_FRACTION_DIGITS,
8396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Fraction digits */
8406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FRACTION_DIGITS,
8416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Multiplier */
8426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MULTIPLIER,
8436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Grouping size */
8446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_GROUPING_SIZE,
8456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Rounding Mode */
8466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_ROUNDING_MODE,
8476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Rounding increment */
8486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_ROUNDING_INCREMENT,
8496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The width to which the output of <code>format()</code> is padded. */
8506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FORMAT_WIDTH,
8516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The position at which padding will take place. */
8526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PADDING_POSITION,
8536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Secondary grouping size */
8546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SECONDARY_GROUPING_SIZE,
8556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Use significant digits
8566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0 */
8576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SIGNIFICANT_DIGITS_USED,
8586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Minimum significant digits
8596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0 */
8606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MIN_SIGNIFICANT_DIGITS,
8616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Maximum significant digits
8626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0 */
8636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MAX_SIGNIFICANT_DIGITS,
8646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Lenient parse mode used by rule-based formats.
8656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0
8666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
8676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_LENIENT_PARSE,
8686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if UCONFIG_HAVE_PARSEALLINPUT
8696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Consume all input. (may use fastpath). Set to UNUM_YES (require fastpath), UNUM_NO (skip fastpath), or UNUM_MAYBE (heuristic).
8706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * This is an internal ICU API. Do not use.
8716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal
8726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
8736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PARSE_ALL_INPUT = UNUM_LENIENT_PARSE + 1,
8746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
8756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_DRAFT_API
8766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
8776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * Scale, which adjusts the position of the
8786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * decimal point when formatting.  Amounts will be multiplied by 10 ^ (scale)
8796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * before they are formatted.  The default value for the scale is 0 ( no adjustment ).
8806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *
8816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * <p>Example: setting the scale to 3, 123 formats as "123,000"
8826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * <p>Example: setting the scale to -4, 123 formats as "0.0123"
8836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    *
8846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @draft ICU 51 */
8856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SCALE = UNUM_LENIENT_PARSE + 2,
8866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* U_HIDE_DRAFT_API */
8876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
8896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Count of "regular" numeric attributes.
8906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal */
8916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NUMERIC_ATTRIBUTE_COUNT = UNUM_LENIENT_PARSE + 3,
8926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** One below the first bitfield-boolean item.
8946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * All items after this one are stored in boolean form.
8956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal */
8966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MAX_NONBOOLEAN_ATTRIBUTE = 0x0FFF,
8976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
8986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
8996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** If 1, specifies that if setting the "max integer digits" attribute would truncate a value, set an error status rather than silently truncating.
9006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * For example,  formatting the value 1234 with 4 max int digits would succeed, but formatting 12345 would fail. There is no effect on parsing.
9016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * Default: 0 (not set)
9026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 50
9036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
9046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS = 0x1000,
9056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
9066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * if this attribute is set to 1, specifies that, if the pattern doesn't contain an exponent, the exponent will not be parsed. If the pattern does contain an exponent, this attribute has no effect.
9076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * Has no effect on formatting.
9086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * Default: 0 (unset)
9096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 50
9106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
9116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PARSE_NO_EXPONENT,
9126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef U_HIDE_INTERNAL_API
9146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Limit of boolean attributes.
9156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @internal */
9166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_LIMIT_BOOLEAN_ATTRIBUTE
9176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif  /* U_HIDE_INTERNAL_API */
9186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatAttribute;
9196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
9216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Get a numeric attribute associated with a UNumberFormat.
9226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a numeric attribute is the number of integer digits a formatter will produce.
9236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to query.
9246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param attr The attribute to query; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
9256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
9266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
9276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE,
9286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_SCALE.
9296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The value of attr.
9306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setAttribute
9316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getDoubleAttribute
9326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setDoubleAttribute
9336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getTextAttribute
9346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setTextAttribute
9356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
9366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
9376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
9386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getAttribute(const UNumberFormat*          fmt,
9396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          UNumberFormatAttribute  attr);
9406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
9426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Set a numeric attribute associated with a UNumberFormat.
9436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a numeric attribute is the number of integer digits a formatter will produce.  If the
9446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* formatter does not understand the attribute, the call is ignored.  Rule-based formatters only understand
9456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* the lenient-parse attribute.
9466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to set.
9476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param attr The attribute to set; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
9486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
9496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
9506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE,
9516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_LENIENT_PARSE, or UNUM_SCALE.
9526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param newValue The new value of attr.
9536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAttribute
9546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getDoubleAttribute
9556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setDoubleAttribute
9566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getTextAttribute
9576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setTextAttribute
9586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
9596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
9606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
9616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_setAttribute(    UNumberFormat*          fmt,
9626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UNumberFormatAttribute  attr,
9636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t                 newValue);
9646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
9676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Get a numeric attribute associated with a UNumberFormat.
9686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a numeric attribute is the number of integer digits a formatter will produce.
9696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* If the formatter does not understand the attribute, -1 is returned.
9706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to query.
9716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param attr The attribute to query; e.g. UNUM_ROUNDING_INCREMENT.
9726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The value of attr.
9736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAttribute
9746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setAttribute
9756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setDoubleAttribute
9766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getTextAttribute
9776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setTextAttribute
9786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
9796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
9806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE double U_EXPORT2
9816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getDoubleAttribute(const UNumberFormat*          fmt,
9826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org          UNumberFormatAttribute  attr);
9836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
9846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
9856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Set a numeric attribute associated with a UNumberFormat.
9866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a numeric attribute is the number of integer digits a formatter will produce.
9876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* If the formatter does not understand the attribute, this call is ignored.
9886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to set.
9896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param attr The attribute to set; e.g. UNUM_ROUNDING_INCREMENT.
9906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param newValue The new value of attr.
9916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAttribute
9926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setAttribute
9936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getDoubleAttribute
9946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getTextAttribute
9956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setTextAttribute
9966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
9976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
9986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
9996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_setDoubleAttribute(    UNumberFormat*          fmt,
10006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UNumberFormatAttribute  attr,
10016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            double                 newValue);
10026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** The possible UNumberFormat text attributes @stable ICU 2.0*/
10046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatTextAttribute {
10056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Positive prefix */
10066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_POSITIVE_PREFIX,
10076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Positive suffix */
10086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_POSITIVE_SUFFIX,
10096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Negative prefix */
10106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NEGATIVE_PREFIX,
10116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Negative suffix */
10126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NEGATIVE_SUFFIX,
10136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The character used to pad to the format width. */
10146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PADDING_CHARACTER,
10156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The ISO currency code */
10166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_CURRENCY_CODE,
10176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
10186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * The default rule set.  This is only available with rule-based formatters.
10196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0
10206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
10216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_DEFAULT_RULESET,
10226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /**
10236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * The public rule sets.  This is only available with rule-based formatters.
10246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * This is a read-only attribute.  The public rulesets are returned as a
10256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * single string, with each ruleset name delimited by ';' (semicolon).
10266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0
10276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
10286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PUBLIC_RULESETS
10296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatTextAttribute;
10306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
10326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Get a text attribute associated with a UNumberFormat.
10336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a text attribute is the suffix for positive numbers.  If the formatter
10346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* does not understand the attribute, U_UNSUPPORTED_ERROR is returned as the status.
10356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Rule-based formatters only understand UNUM_DEFAULT_RULESET and UNUM_PUBLIC_RULESETS.
10366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to query.
10376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param tag The attribute to query; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
10386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
10396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_DEFAULT_RULESET, or UNUM_PUBLIC_RULESETS.
10406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param result A pointer to a buffer to receive the attribute.
10416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param resultLength The maximum size of result.
10426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
10436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The total buffer size needed; if greater than resultLength, the output was truncated.
10446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setTextAttribute
10456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAttribute
10466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setAttribute
10476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
10486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
10496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
10506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getTextAttribute(    const    UNumberFormat*                    fmt,
10516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UNumberFormatTextAttribute      tag,
10526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UChar*                            result,
10536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t                            resultLength,
10546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode*                        status);
10556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
10576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Set a text attribute associated with a UNumberFormat.
10586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* An example of a text attribute is the suffix for positive numbers.  Rule-based formatters
10596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* only understand UNUM_DEFAULT_RULESET.
10606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to set.
10616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param tag The attribute to set; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
10626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
10636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* or UNUM_DEFAULT_RULESET.
10646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param newValue The new value of attr.
10656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param newValueLength The length of newValue, or -1 if null-terminated.
10666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
10676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getTextAttribute
10686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getAttribute
10696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setAttribute
10706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
10716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
10726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
10736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_setTextAttribute(    UNumberFormat*                    fmt,
10746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UNumberFormatTextAttribute      tag,
10756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            const    UChar*                            newValue,
10766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            int32_t                            newValueLength,
10776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org            UErrorCode                        *status);
10786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
10796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
10806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Extract the pattern from a UNumberFormat.  The pattern will follow
10816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the DecimalFormat pattern syntax.
10826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The formatter to query.
10836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param isPatternLocalized TRUE if the pattern should be localized,
10846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * FALSE otherwise.  This is ignored if the formatter is a rule-based
10856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * formatter.
10866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param result A pointer to a buffer to receive the pattern.
10876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param resultLength The maximum size of result.
10886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status A pointer to an input-output UErrorCode.
10896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return The total buffer size needed; if greater than resultLength,
10906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * the output was truncated.
10916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see unum_applyPattern
10926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see DecimalFormat
10936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
10946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
10956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
10966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_toPattern(    const    UNumberFormat*          fmt,
10976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UBool                  isPatternLocalized,
10986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UChar*                  result,
10996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        int32_t                 resultLength,
11006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org        UErrorCode*             status);
11016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
11046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Constants for specifying a number format symbol.
11056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0
11066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
11076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgtypedef enum UNumberFormatSymbol {
11086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The decimal separator */
11096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_DECIMAL_SEPARATOR_SYMBOL = 0,
11106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The grouping separator */
11116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_GROUPING_SEPARATOR_SYMBOL = 1,
11126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The pattern separator */
11136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PATTERN_SEPARATOR_SYMBOL = 2,
11146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The percent sign */
11156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PERCENT_SYMBOL = 3,
11166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Zero*/
11176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_ZERO_DIGIT_SYMBOL = 4,
11186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Character representing a digit in the pattern */
11196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_DIGIT_SYMBOL = 5,
11206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The minus sign */
11216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MINUS_SIGN_SYMBOL = 6,
11226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The plus sign */
11236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PLUS_SIGN_SYMBOL = 7,
11246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The currency symbol */
11256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_CURRENCY_SYMBOL = 8,
11266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The international currency symbol */
11276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_INTL_CURRENCY_SYMBOL = 9,
11286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The monetary separator */
11296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MONETARY_SEPARATOR_SYMBOL = 10,
11306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The exponential symbol */
11316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_EXPONENTIAL_SYMBOL = 11,
11326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Per mill symbol */
11336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PERMILL_SYMBOL = 12,
11346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Escape padding character */
11356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_PAD_ESCAPE_SYMBOL = 13,
11366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Infinity symbol */
11376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_INFINITY_SYMBOL = 14,
11386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Nan symbol */
11396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NAN_SYMBOL = 15,
11406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Significant digit symbol
11416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.0 */
11426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16,
11436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** The monetary grouping separator
11446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 3.6
11456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17,
11476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** One
11486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_ONE_DIGIT_SYMBOL = 18,
11516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Two
11526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_TWO_DIGIT_SYMBOL = 19,
11556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Three
11566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_THREE_DIGIT_SYMBOL = 20,
11596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Four
11606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FOUR_DIGIT_SYMBOL = 21,
11636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Five
11646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FIVE_DIGIT_SYMBOL = 22,
11676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Six
11686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SIX_DIGIT_SYMBOL = 23,
11716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Seven
11726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org    * @stable ICU 4.6
11736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_SEVEN_DIGIT_SYMBOL = 24,
11756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Eight
11766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_EIGHT_DIGIT_SYMBOL = 25,
11796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** Nine
11806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   * @stable ICU 4.6
11816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org   */
11826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_NINE_DIGIT_SYMBOL = 26,
11836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  /** count symbol constants */
11846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org  UNUM_FORMAT_SYMBOL_COUNT = 27
11856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} UNumberFormatSymbol;
11866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
11876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
11886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Get a symbol associated with a UNumberFormat.
11896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* A UNumberFormat uses symbols to represent the special locale-dependent
11906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* characters in a number, for example the percent sign. This API is not
11916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* supported for rule-based formatters.
11926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to query.
11936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param symbol The UNumberFormatSymbol constant for the symbol to get
11946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param buffer The string buffer that will receive the symbol string;
11956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*               if it is NULL, then only the length of the symbol is returned
11966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param size The size of the string buffer
11976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors
11986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @return The length of the symbol; the buffer is not modified if
11996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*         <code>length&gt;=size</code>
12006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_setSymbol
12016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
12026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
12036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE int32_t U_EXPORT2
12046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getSymbol(const UNumberFormat *fmt,
12056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UNumberFormatSymbol symbol,
12066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UChar *buffer,
12076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               int32_t size,
12086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UErrorCode *status);
12096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
12116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Set a symbol associated with a UNumberFormat.
12126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* A UNumberFormat uses symbols to represent the special locale-dependent
12136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* characters in a number, for example the percent sign.  This API is not
12146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* supported for rule-based formatters.
12156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param fmt The formatter to set.
12166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param symbol The UNumberFormatSymbol constant for the symbol to set
12176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param value The string to set the symbol to
12186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param length The length of the string, or -1 for a zero-terminated string
12196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @param status A pointer to an UErrorCode to receive any errors.
12206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @see unum_getSymbol
12216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* @stable ICU 2.0
12226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/
12236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2
12246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_setSymbol(UNumberFormat *fmt,
12256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UNumberFormatSymbol symbol,
12266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               const UChar *value,
12276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               int32_t length,
12286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org               UErrorCode *status);
12296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/**
12326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Get the locale for this number format object.
12336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * You can choose between valid and actual locale.
12346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param fmt The formatter to get the locale from
12356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param type type of the locale we're looking for (valid or actual)
12366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param status error code for the operation
12376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the locale name
12386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.8
12396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */
12406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE const char* U_EXPORT2
12416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgunum_getLocaleByType(const UNumberFormat *fmt,
12426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     ULocDataLocaleType type,
12436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org                     UErrorCode* status);
12446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif /* #if !UCONFIG_NO_FORMATTING */
12466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org
12476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif
1248