1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
31b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert* Copyright (C) 1997-2015, International Business Machines Corporation and others.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History:
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   06/24/99    helena      Integrated Alan's NF enhancements and Java2 bug fixes
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*******************************************************************************
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef _UNUM
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define _UNUM
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/localpointer.h"
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/uloc.h"
21f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#include "unicode/ucurr.h"
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/umisc.h"
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h"
2459d709d503bab6e2b61931737e662dd293b40578ccornelius#include "unicode/uformattable.h"
25fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#include "unicode/udisplaycontext.h"
2659d709d503bab6e2b61931737e662dd293b40578ccornelius
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C API: NumberFormat
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <h2> Number Format C API </h2>
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Number Format C API  Provides functions for
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatting and parsing a number.  Also provides methods for
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * determining which locales have number formats, and what their names
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are.
37b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UNumberFormat helps you to format and parse numbers for any locale.
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Your code can be completely independent of the locale conventions
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for decimal points, thousands-separators, or even the particular
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * decimal digits used, or whether the number format is even decimal.
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * There are different number format styles like decimal, currency,
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * percent and spellout.
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * To format a number for the current Locale, use one of the static
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * factory methods:
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UChar myString[20];
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    double myNumber = 7.0;
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UErrorCode status = U_ZERO_ERROR;
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    unum_formatDouble(nf, myNumber, myString, 20, NULL, &status);
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    printf(" Example 1: %s\n", austrdup(myString) ); //austrdup( a function used to convert UChar* to char*)
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If you are formatting multiple numbers, it is more efficient to get
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the format and use it multiple times so that the system doesn't
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * have to fetch the information about the local language and country
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * conventions multiple times.
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * uint32_t i, resultlength, reslenneeded;
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UErrorCode status = U_ZERO_ERROR;
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UFieldPosition pos;
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * uint32_t a[] = { 123, 3333, -1234567 };
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * const uint32_t a_len = sizeof(a) / sizeof(a[0]);
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UNumberFormat* nf;
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UChar* result = NULL;
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * nf = unum_open(UNUM_DEFAULT, NULL, -1, NULL, NULL, &status);
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * for (i = 0; i < a_len; i++) {
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    resultlength=0;
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    reslenneeded=unum_format(nf, a[i], NULL, resultlength, &pos, &status);
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    result = NULL;
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    if(status==U_BUFFER_OVERFLOW_ERROR){
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *       status=U_ZERO_ERROR;
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *       resultlength=reslenneeded+1;
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *       result=(UChar*)malloc(sizeof(UChar) * resultlength);
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *       unum_format(nf, a[i], result, resultlength, &pos, &status);
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    }
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    printf( " Example 2: %s\n", austrdup(result));
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    free(result);
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * }
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * To format a number for a different Locale, specify it in the
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * call to unum_open().
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *     UNumberFormat* nf = unum_open(UNUM_DEFAULT, NULL, -1, "fr_FR", NULL, &success)
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can use a NumberFormat API unum_parse() to parse.
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <pre>
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \code
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    UErrorCode status = U_ZERO_ERROR;
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    int32_t pos=0;
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    int32_t num;
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *    num = unum_parse(nf, str, u_strlen(str), &pos, &status);
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \endcode
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </pre>
103c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * Use UNUM_DECIMAL to get the normal number format for that country.
104c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * There are other static options available.  Use UNUM_CURRENCY
105c69afcec261fc345fda8daf46f0ea6b4351dc777Jean-Baptiste Queru * to get the currency number format for that country.  Use UNUM_PERCENT
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to get a format for displaying percentages. With this format, a
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * fraction from 0.53 is displayed as 53%.
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Use a pattern to create either a DecimalFormat or a RuleBasedNumberFormat
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatter.  The pattern must conform to the syntax defined for those
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatters.
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can also control the display of numbers with such function as
11454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * unum_getAttributes() and unum_setAttributes(), which let you set the
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * miminum fraction digits, grouping, etc.
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see UNumberFormatAttributes for more details
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can also use forms of the parse and format methods with
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * ParsePosition and UFieldPosition to allow you to:
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <ul type=round>
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *   <li>(a) progressively parse through pieces of a string.
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *   <li>(b) align the decimal point and other areas.
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * </ul>
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <p>
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * It is also possible to change or set the symbols used for a particular
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * locale like the currency symbol, the grouping seperator , monetary seperator
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * etc by making use of functions unum_setSymbols() and unum_getSymbols().
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** A number formatter.
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  For usage in C programs.
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  @stable ICU 2.0
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef void* UNumberFormat;
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The possible number format styles.
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  @stable ICU 2.0
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatStyle {
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
141b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Decimal format defined by a pattern string.
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_PATTERN_DECIMAL=0,
145b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
146b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Decimal format ("normal" style).
147b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.0
148b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_DECIMAL=1,
150b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
151b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Currency format with a currency symbol, e.g., "$1.00".
152b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.0
153b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
154f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_CURRENCY=2,
155b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
156b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Percent format
157b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.0
158b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
159f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_PERCENT=3,
160b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
161b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Scientific format
162b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.1
163b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
164f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_SCIENTIFIC=4,
165b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
166f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * Spellout rule-based format. The default ruleset can be specified/changed using
167f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * unum_setTextAttribute with UNUM_DEFAULT_RULESET; the available public rulesets
168f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * can be listed using unum_getTextAttribute with UNUM_PUBLIC_RULESETS.
169b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.0
170b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
171f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_SPELLOUT=5,
172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
173f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * Ordinal rule-based format . The default ruleset can be specified/changed using
174f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * unum_setTextAttribute with UNUM_DEFAULT_RULESET; the available public rulesets
175f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * can be listed using unum_getTextAttribute with UNUM_PUBLIC_RULESETS.
176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
178f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_ORDINAL=6,
179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Duration rule-based format
181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
183f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_DURATION=7,
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
185b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Numbering system rule-based format
18627f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable ICU 4.2
187b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru     */
188f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_NUMBERING_SYSTEM=8,
189b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru    /**
190b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Rule-based format defined by a pattern string.
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 3.0
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
193f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_PATTERN_RULEBASED=9,
194b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
195b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Currency format with an ISO currency code, e.g., "USD1.00".
196103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
197b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
198f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_CURRENCY_ISO=10,
199b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
200b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Currency format with a pluralized currency name,
201b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * e.g., "1.00 US dollar" and "3.00 US dollars".
202103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
203b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
204f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_CURRENCY_PLURAL=11,
205fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius    /**
206fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * Currency format for accounting, e.g., "($3.00)" for
207fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     * negative currency amount instead of "-$3.00" ({@link #UNUM_CURRENCY}).
2081b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert     * @stable ICU 53
209fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius     */
210f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_CURRENCY_ACCOUNTING=12,
2111b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert#ifndef U_HIDE_DRAFT_API
212f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    /**
213f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * Currency format with a currency symbol given CASH usage, e.g.,
214f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * "NT$3" instead of "NT$3.23".
215f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     * @draft ICU 54
216f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius     */
217f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_CASH_CURRENCY=13,
218fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif /* U_HIDE_DRAFT_API */
219f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
220b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
221b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * One more than the highest number format style constant.
222103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable ICU 4.8
223b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
224f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius    UNUM_FORMAT_STYLE_COUNT=14,
225f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
226b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
227b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Default format
228b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 2.0
229b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_DEFAULT = UNUM_DECIMAL,
231b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
232b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * Alias for UNUM_PATTERN_DECIMAL
233b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     * @stable ICU 3.0
234b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho     */
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_IGNORE = UNUM_PATTERN_DECIMAL
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatStyle;
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The possible number format rounding modes.
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  @stable ICU 2.0
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatRoundingMode {
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_ROUND_CEILING,
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_ROUND_FLOOR,
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_ROUND_DOWN,
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_ROUND_UP,
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
247103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * Half-even rounding
248103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     * @stable, ICU 3.8
249103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius     */
250103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_ROUND_HALFEVEN,
251103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#ifndef U_HIDE_DEPRECATED_API
252103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /**
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Half-even rounding, misspelled name
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @deprecated, ICU 3.8
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
256103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_FOUND_HALFEVEN = UNUM_ROUND_HALFEVEN,
257103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif  /* U_HIDE_DEPRECATED_API */
25859d709d503bab6e2b61931737e662dd293b40578ccornelius    UNUM_ROUND_HALFDOWN = UNUM_ROUND_HALFEVEN + 1,
259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_ROUND_HALFUP,
260b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    /**
261b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      * ROUND_UNNECESSARY reports an error if formatted result is not exact.
262103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius      * @stable ICU 4.8
263b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho      */
264103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_ROUND_UNNECESSARY
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatRoundingMode;
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The possible number format pad positions.
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru *  @stable ICU 2.0
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatPadPosition {
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_PAD_BEFORE_PREFIX,
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_PAD_AFTER_PREFIX,
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_PAD_BEFORE_SUFFIX,
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UNUM_PAD_AFTER_SUFFIX
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatPadPosition;
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
2778393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius/**
2788393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius * Constants for specifying short or long format.
279fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @stable ICU 51
2808393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius */
2818393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Corneliustypedef enum UNumberCompactStyle {
282fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  /** @stable ICU 51 */
2838393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  UNUM_SHORT,
284fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  /** @stable ICU 51 */
2858393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  UNUM_LONG
286fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  /** @stable ICU 51 */
2878393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius} UNumberCompactStyle;
2888393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
290b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho * Constants for specifying currency spacing
291103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 4.8
292b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho */
293b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2clairehoenum UCurrencySpacing {
294103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 4.8 */
295b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UNUM_CURRENCY_MATCH,
296103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 4.8 */
297b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UNUM_CURRENCY_SURROUNDING_MATCH,
298103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 4.8 */
299b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UNUM_CURRENCY_INSERT,
300103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 4.8 */
301b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho    UNUM_CURRENCY_SPACING_COUNT
302b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho};
303103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef enum UCurrencySpacing UCurrencySpacing; /**< @stable ICU 4.8 */
304103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
305103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
306103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
307103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * FieldPosition and UFieldPosition selectors for format fields
308103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * defined by NumberFormat and UNumberFormat.
309103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @stable ICU 49
310103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
311103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef enum UNumberFormatFields {
312103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
313103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_INTEGER_FIELD,
314103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
315103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_FRACTION_FIELD,
316103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
317103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_DECIMAL_SEPARATOR_FIELD,
318103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
319103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_EXPONENT_SYMBOL_FIELD,
320103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
321103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_EXPONENT_SIGN_FIELD,
322103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
323103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_EXPONENT_FIELD,
324103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
325103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_GROUPING_SEPARATOR_FIELD,
326103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
327103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_CURRENCY_FIELD,
328103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
329103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_PERCENT_FIELD,
330103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
331103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_PERMILL_FIELD,
332103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
333103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_SIGN_FIELD,
334103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    /** @stable ICU 49 */
335103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    UNUM_FIELD_COUNT
336103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} UNumberFormatFields;
337103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
338b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho
339b26ce3a7367e4ed2ee7ddddcdc3f3d3377a455c2claireho/**
340b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Create and return a new UNumberFormat for formatting and parsing
341b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * numbers.  A UNumberFormat may be used to format numbers by calling
342b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * {@link #unum_format }, and to parse numbers by calling {@link #unum_parse }.
343b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The caller must call {@link #unum_close } when done to release resources
344b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * used by this object.
345b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param style The type of number format to open: one of
346fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * UNUM_DECIMAL, UNUM_CURRENCY, UNUM_PERCENT, UNUM_SCIENTIFIC,
347fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * UNUM_CURRENCY_ISO, UNUM_CURRENCY_PLURAL, UNUM_SPELLOUT,
348fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * UNUM_ORDINAL, UNUM_DURATION, UNUM_NUMBERING_SYSTEM,
349b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UNUM_PATTERN_DECIMAL, UNUM_PATTERN_RULEBASED, or UNUM_DEFAULT.
350b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED is passed then the
351b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * number format is opened using the given pattern, which must conform
352b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * to the syntax described in DecimalFormat or RuleBasedNumberFormat,
353b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * respectively.
354b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern A pattern specifying the format to use.
355b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This parameter is ignored unless the style is
356b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UNUM_PATTERN_DECIMAL or UNUM_PATTERN_RULEBASED.
357b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param patternLength The number of characters in the pattern, or -1
358b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * if null-terminated. This parameter is ignored unless the style is
359b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * UNUM_PATTERN.
360b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param locale A locale identifier to use to determine formatting
361b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and parsing conventions, or NULL to use the default locale.
362b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param parseErr A pointer to a UParseError struct to receive the
363b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * details of any parsing errors, or NULL if no parsing error details
364b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * are desired.
365b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status A pointer to an input-output UErrorCode.
366b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A pointer to a newly created UNumberFormat, or NULL if an
367b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * error occurred.
368b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_close
369b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see DecimalFormat
370b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
371b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
372b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UNumberFormat* U_EXPORT2
373b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_open(  UNumberFormatStyle    style,
374b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const    UChar*    pattern,
375b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t            patternLength,
376b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const    char*     locale,
377b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UParseError*       parseErr,
378b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode*        status);
379b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
380b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
381b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
382b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Close a UNumberFormat.
383b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Once closed, a UNumberFormat may no longer be used.
384b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to close.
385b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
386b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
387b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
388b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_close(UNumberFormat* fmt);
389b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
39050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#if U_SHOW_CPLUSPLUS_API
39150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
39250294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_BEGIN
39350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
39450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
39550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * \class LocalUNumberFormatPointer
39650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * "Smart pointer" class, closes a UNumberFormat via unum_close().
39750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * For most methods see the LocalPointerBase base class.
39850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho *
39950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @see LocalPointerBase
40050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho * @see LocalPointer
40127f654740f2a26ad62a5c155af9199af9e69b889claireho * @stable ICU 4.4
40250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho */
40350294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_DEFINE_LOCAL_OPEN_POINTER(LocalUNumberFormatPointer, UNumberFormat, unum_close);
40450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
40550294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehoU_NAMESPACE_END
40650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
40750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#endif
40850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
409b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
410b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Open a copy of a UNumberFormat.
411b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * This function performs a deep copy.
412b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fmt The format to copy
413b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status A pointer to an UErrorCode to receive any errors.
414b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return A pointer to a UNumberFormat identical to fmt.
415b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
416b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
417b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE UNumberFormat* U_EXPORT2
418b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_clone(const UNumberFormat *fmt,
419b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru       UErrorCode *status);
420b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
421b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
422b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Format an integer using a UNumberFormat.
423b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The integer will be formatted according to the UNumberFormat's locale.
424b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
425b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param number The number to format.
42659d709d503bab6e2b61931737e662dd293b40578ccornelius* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
42759d709d503bab6e2b61931737e662dd293b40578ccornelius* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
42859d709d503bab6e2b61931737e662dd293b40578ccornelius* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
42959d709d503bab6e2b61931737e662dd293b40578ccornelius* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
430b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param resultLength The maximum size of result.
431b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param pos    A pointer to a UFieldPosition.  On input, position->field
432b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* is read.  On output, position->beginIndex and position->endIndex indicate
433b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the beginning and ending indices of field number position->field, if such
434b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* a field exists.  This parameter may be NULL, in which case no field
435b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
436b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The total buffer size needed; if greater than resultLength, the output was truncated.
437b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatInt64
438b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatDouble
439b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parse
440b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseInt64
441b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseDouble
442b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see UFieldPosition
443b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
444b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
445b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
446b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_format(    const    UNumberFormat*    fmt,
447b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t            number,
448b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar*            result,
449b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t            resultLength,
450b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UFieldPosition    *pos,
451b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode*        status);
452b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
453b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
454b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Format an int64 using a UNumberFormat.
455b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The int64 will be formatted according to the UNumberFormat's locale.
456b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
457b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param number The number to format.
45859d709d503bab6e2b61931737e662dd293b40578ccornelius* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
45959d709d503bab6e2b61931737e662dd293b40578ccornelius* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
46059d709d503bab6e2b61931737e662dd293b40578ccornelius* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
46159d709d503bab6e2b61931737e662dd293b40578ccornelius* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
462b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param resultLength The maximum size of result.
463b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param pos    A pointer to a UFieldPosition.  On input, position->field
464b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* is read.  On output, position->beginIndex and position->endIndex indicate
465b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the beginning and ending indices of field number position->field, if such
466b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* a field exists.  This parameter may be NULL, in which case no field
467b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
468b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The total buffer size needed; if greater than resultLength, the output was truncated.
469b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_format
470b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatDouble
471b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parse
472b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseInt64
473b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseDouble
474b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see UFieldPosition
475b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
476b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
477b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
478b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_formatInt64(const UNumberFormat *fmt,
479b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int64_t         number,
480b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar*          result,
481b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t         resultLength,
482b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UFieldPosition *pos,
483b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode*     status);
484b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
485b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
486b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Format a double using a UNumberFormat.
487b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The double will be formatted according to the UNumberFormat's locale.
488b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
489b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param number The number to format.
49059d709d503bab6e2b61931737e662dd293b40578ccornelius* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
49159d709d503bab6e2b61931737e662dd293b40578ccornelius* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
49259d709d503bab6e2b61931737e662dd293b40578ccornelius* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
49359d709d503bab6e2b61931737e662dd293b40578ccornelius* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
494b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param resultLength The maximum size of result.
495b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param pos    A pointer to a UFieldPosition.  On input, position->field
496b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* is read.  On output, position->beginIndex and position->endIndex indicate
497b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the beginning and ending indices of field number position->field, if such
498b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* a field exists.  This parameter may be NULL, in which case no field
499b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
500b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The total buffer size needed; if greater than resultLength, the output was truncated.
501b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_format
502b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatInt64
503b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parse
504b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseInt64
505b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseDouble
506b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see UFieldPosition
507b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
508b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
509b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
510b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_formatDouble(    const    UNumberFormat*  fmt,
511b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            double          number,
512b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UChar*          result,
513b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t         resultLength,
514b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UFieldPosition  *pos, /* 0 if ignore */
515b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode*     status);
516b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
517b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
51850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Format a decimal number using a UNumberFormat.
51950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* The number will be formatted according to the UNumberFormat's locale.
52050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* The syntax of the input number is a "numeric string"
52150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* as defined in the Decimal Arithmetic Specification, available at
52250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* http://speleotrove.com/decimal
52350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param fmt The formatter to use.
52450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param number The number to format.
52550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param length The length of the input number, or -1 if the input is nul-terminated.
52659d709d503bab6e2b61931737e662dd293b40578ccornelius* @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
52759d709d503bab6e2b61931737e662dd293b40578ccornelius* the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
52859d709d503bab6e2b61931737e662dd293b40578ccornelius* then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
52959d709d503bab6e2b61931737e662dd293b40578ccornelius* doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
53050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param resultLength The maximum size of result.
53150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param pos    A pointer to a UFieldPosition.  On input, position->field
53250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               is read.  On output, position->beginIndex and position->endIndex indicate
53350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               the beginning and ending indices of field number position->field, if such
53450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               a field exists.  This parameter may be NULL, in which case it is ignored.
53550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param status A pointer to an UErrorCode to receive any errors
53650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @return The total buffer size needed; if greater than resultLength, the output was truncated.
53750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_format
53850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_formatInt64
53950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_parse
54050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_parseInt64
54150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_parseDouble
54250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see UFieldPosition
54327f654740f2a26ad62a5c155af9199af9e69b889claireho* @stable ICU 4.4
54450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
54527f654740f2a26ad62a5c155af9199af9e69b889clairehoU_STABLE int32_t U_EXPORT2
54650294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehounum_formatDecimal(    const    UNumberFormat*  fmt,
54750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            const char *    number,
54850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t         length,
54950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UChar*          result,
55050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            int32_t         resultLength,
55150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UFieldPosition  *pos, /* 0 if ignore */
55250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho            UErrorCode*     status);
55350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
55450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
555b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Format a double currency amount using a UNumberFormat.
556b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The double will be formatted according to the UNumberFormat's locale.
557b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fmt the formatter to use
558b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param number the number to format
559b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param currency the 3-letter null-terminated ISO 4217 currency code
56059d709d503bab6e2b61931737e662dd293b40578ccornelius * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
56159d709d503bab6e2b61931737e662dd293b40578ccornelius * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
56259d709d503bab6e2b61931737e662dd293b40578ccornelius * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
56359d709d503bab6e2b61931737e662dd293b40578ccornelius * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
564b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param resultLength the maximum number of UChars to write to result
565b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pos a pointer to a UFieldPosition.  On input,
566b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * position->field is read.  On output, position->beginIndex and
567b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * position->endIndex indicate the beginning and ending indices of
568b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * field number position->field, if such a field exists.  This
569b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * parameter may be NULL, in which case it is ignored.
570b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to an input-output UErrorCode
571b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the total buffer size needed; if greater than resultLength,
572b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the output was truncated.
573b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_formatDouble
574b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_parseDoubleCurrency
575b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see UFieldPosition
576b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.0
577b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
57859d709d503bab6e2b61931737e662dd293b40578ccorneliusU_STABLE int32_t U_EXPORT2
579b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_formatDoubleCurrency(const UNumberFormat* fmt,
580b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          double number,
581b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          UChar* currency,
582b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          UChar* result,
583b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          int32_t resultLength,
58459d709d503bab6e2b61931737e662dd293b40578ccornelius                          UFieldPosition* pos,
585b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          UErrorCode* status);
586b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
58759d709d503bab6e2b61931737e662dd293b40578ccornelius/**
58859d709d503bab6e2b61931737e662dd293b40578ccornelius * Format a UFormattable into a string.
58959d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the formatter to use
59059d709d503bab6e2b61931737e662dd293b40578ccornelius * @param number the number to format, as a UFormattable
59159d709d503bab6e2b61931737e662dd293b40578ccornelius * @param result A pointer to a buffer to receive the NULL-terminated formatted number. If
59259d709d503bab6e2b61931737e662dd293b40578ccornelius * the formatted number fits into dest but cannot be NULL-terminated (length == resultLength)
59359d709d503bab6e2b61931737e662dd293b40578ccornelius * then the error code is set to U_STRING_NOT_TERMINATED_WARNING. If the formatted number
59459d709d503bab6e2b61931737e662dd293b40578ccornelius * doesn't fit into result then the error code is set to U_BUFFER_OVERFLOW_ERROR.
59559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param resultLength the maximum number of UChars to write to result
59659d709d503bab6e2b61931737e662dd293b40578ccornelius * @param pos a pointer to a UFieldPosition.  On input,
59759d709d503bab6e2b61931737e662dd293b40578ccornelius * position->field is read.  On output, position->beginIndex and
59859d709d503bab6e2b61931737e662dd293b40578ccornelius * position->endIndex indicate the beginning and ending indices of
59959d709d503bab6e2b61931737e662dd293b40578ccornelius * field number position->field, if such a field exists.  This
60059d709d503bab6e2b61931737e662dd293b40578ccornelius * parameter may be NULL, in which case it is ignored.
60159d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status a pointer to an input-output UErrorCode
60259d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the total buffer size needed; if greater than resultLength,
60359d709d503bab6e2b61931737e662dd293b40578ccornelius * the output was truncated. Will return 0 on error.
60459d709d503bab6e2b61931737e662dd293b40578ccornelius * @see unum_parseToUFormattable
605f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius * @stable ICU 52
60659d709d503bab6e2b61931737e662dd293b40578ccornelius */
607f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusU_STABLE int32_t U_EXPORT2
60859d709d503bab6e2b61931737e662dd293b40578ccorneliusunum_formatUFormattable(const UNumberFormat* fmt,
60959d709d503bab6e2b61931737e662dd293b40578ccornelius                        const UFormattable *number,
61059d709d503bab6e2b61931737e662dd293b40578ccornelius                        UChar *result,
61159d709d503bab6e2b61931737e662dd293b40578ccornelius                        int32_t resultLength,
61259d709d503bab6e2b61931737e662dd293b40578ccornelius                        UFieldPosition *pos,
61359d709d503bab6e2b61931737e662dd293b40578ccornelius                        UErrorCode *status);
61459d709d503bab6e2b61931737e662dd293b40578ccornelius
615b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
616b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Parse a string into an integer using a UNumberFormat.
617b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The string will be parsed according to the UNumberFormat's locale.
618b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
619b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param text The text to parse.
620b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param textLength The length of text, or -1 if null-terminated.
62159d709d503bab6e2b61931737e662dd293b40578ccornelius* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
62259d709d503bab6e2b61931737e662dd293b40578ccornelius* to begin parsing.  If not NULL, on output the offset at which parsing ended.
623b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
624b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The value of the parsed integer
625b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseInt64
626b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseDouble
627b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_format
628b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatInt64
629b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatDouble
630b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
631b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
632b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
633b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_parse(    const   UNumberFormat*  fmt,
634b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const   UChar*          text,
635b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t         textLength,
636b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t         *parsePos /* 0 = start */,
637b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode      *status);
638b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
639b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
640b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Parse a string into an int64 using a UNumberFormat.
641b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The string will be parsed according to the UNumberFormat's locale.
642b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
643b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param text The text to parse.
644b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param textLength The length of text, or -1 if null-terminated.
64559d709d503bab6e2b61931737e662dd293b40578ccornelius* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
64659d709d503bab6e2b61931737e662dd293b40578ccornelius* to begin parsing.  If not NULL, on output the offset at which parsing ended.
647b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
648b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The value of the parsed integer
649b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parse
650b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseDouble
651b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_format
652b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatInt64
653b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatDouble
654b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.8
655b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
656b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int64_t U_EXPORT2
657b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_parseInt64(const UNumberFormat*  fmt,
658b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        const UChar*  text,
659b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t       textLength,
660b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t       *parsePos /* 0 = start */,
661b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode    *status);
662b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
663b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
664b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Parse a string into a double using a UNumberFormat.
665b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* The string will be parsed according to the UNumberFormat's locale.
666b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to use.
667b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param text The text to parse.
668b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param textLength The length of text, or -1 if null-terminated.
66959d709d503bab6e2b61931737e662dd293b40578ccornelius* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
67059d709d503bab6e2b61931737e662dd293b40578ccornelius* to begin parsing.  If not NULL, on output the offset at which parsing ended.
671b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
672b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The value of the parsed double
673b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parse
674b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_parseInt64
675b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_format
676b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatInt64
677b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_formatDouble
678b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
679b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
680b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE double U_EXPORT2
681b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_parseDouble(    const   UNumberFormat*  fmt,
682b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const   UChar*          text,
683b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t         textLength,
684b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t         *parsePos /* 0 = start */,
685b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode      *status);
686b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
68750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
68850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho/**
68950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* Parse a number from a string into an unformatted numeric string using a UNumberFormat.
69050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* The input string will be parsed according to the UNumberFormat's locale.
69150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* The syntax of the output is a "numeric string"
69250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* as defined in the Decimal Arithmetic Specification, available at
69350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* http://speleotrove.com/decimal
69450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param fmt The formatter to use.
69550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param text The text to parse.
69650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param textLength The length of text, or -1 if null-terminated.
69759d709d503bab6e2b61931737e662dd293b40578ccornelius* @param parsePos If not NULL, on input a pointer to an integer specifying the offset at which
69859d709d503bab6e2b61931737e662dd293b40578ccornelius*                 to begin parsing.  If not NULL, on output the offset at which parsing ended.
69950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param outBuf A (char *) buffer to receive the parsed number as a string.  The output string
70050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               will be nul-terminated if there is sufficient space.
70150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param outBufLength The size of the output buffer.  May be zero, in which case
70250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               the outBuf pointer may be NULL, and the function will return the
70350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*               size of the output string.
70450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @param status A pointer to an UErrorCode to receive any errors
70550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @return the length of the output string, not including any terminating nul.
70650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_parse
70750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_parseInt64
70850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_format
70950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_formatInt64
71050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho* @see unum_formatDouble
71127f654740f2a26ad62a5c155af9199af9e69b889claireho* @stable ICU 4.4
71250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho*/
71327f654740f2a26ad62a5c155af9199af9e69b889clairehoU_STABLE int32_t U_EXPORT2
71450294ead5e5d23f5bbfed76e00e6b510bd41eee1clairehounum_parseDecimal(const   UNumberFormat*  fmt,
71550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                 const   UChar*          text,
71650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         int32_t         textLength,
71750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         int32_t         *parsePos /* 0 = start */,
71850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         char            *outBuf,
71950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         int32_t         outBufLength,
72050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                         UErrorCode      *status);
72150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho
722b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
723b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Parse a string into a double and a currency using a UNumberFormat.
724b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * The string will be parsed according to the UNumberFormat's locale.
725b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fmt the formatter to use
726b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param text the text to parse
727b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param textLength the length of text, or -1 if null-terminated
728b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param parsePos a pointer to an offset index into text at which to
729b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * begin parsing. On output, *parsePos will point after the last
73059d709d503bab6e2b61931737e662dd293b40578ccornelius * parsed character.  This parameter may be NULL, in which case parsing
731b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * begins at offset 0.
732b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param currency a pointer to the buffer to receive the parsed null-
733b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * terminated currency.  This buffer must have a capacity of at least
734b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 4 UChars.
735b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status a pointer to an input-output UErrorCode
736b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the parsed double
737b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_parseDouble
738b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_formatDoubleCurrency
739b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 3.0
740b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
741b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE double U_EXPORT2
742b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_parseDoubleCurrency(const UNumberFormat* fmt,
743b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         const UChar* text,
744b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         int32_t textLength,
745b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         int32_t* parsePos, /* 0 = start */
746b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UChar* currency,
747b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                         UErrorCode* status);
748b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
74959d709d503bab6e2b61931737e662dd293b40578ccornelius/**
75059d709d503bab6e2b61931737e662dd293b40578ccornelius * Parse a UChar string into a UFormattable.
75159d709d503bab6e2b61931737e662dd293b40578ccornelius * Example code:
75259d709d503bab6e2b61931737e662dd293b40578ccornelius * \snippet test/cintltst/cnumtst.c unum_parseToUFormattable
75359d709d503bab6e2b61931737e662dd293b40578ccornelius * @param fmt the formatter to use
75459d709d503bab6e2b61931737e662dd293b40578ccornelius * @param result the UFormattable to hold the result. If NULL, a new UFormattable will be allocated (which the caller must close with ufmt_close).
75559d709d503bab6e2b61931737e662dd293b40578ccornelius * @param text the text to parse
75659d709d503bab6e2b61931737e662dd293b40578ccornelius * @param textLength the length of text, or -1 if null-terminated
75759d709d503bab6e2b61931737e662dd293b40578ccornelius * @param parsePos a pointer to an offset index into text at which to
75859d709d503bab6e2b61931737e662dd293b40578ccornelius * begin parsing. On output, *parsePos will point after the last
75959d709d503bab6e2b61931737e662dd293b40578ccornelius * parsed character.  This parameter may be NULL in which case parsing
76059d709d503bab6e2b61931737e662dd293b40578ccornelius * begins at offset 0.
76159d709d503bab6e2b61931737e662dd293b40578ccornelius * @param status a pointer to an input-output UErrorCode
76259d709d503bab6e2b61931737e662dd293b40578ccornelius * @return the UFormattable.  Will be ==result unless NULL was passed in for result, in which case it will be the newly opened UFormattable.
76359d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_getType
76459d709d503bab6e2b61931737e662dd293b40578ccornelius * @see ufmt_close
765f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius * @stable ICU 52
76659d709d503bab6e2b61931737e662dd293b40578ccornelius */
767f9878a236aa0d9662d8e40cafdaf2e04cd615835ccorneliusU_STABLE UFormattable* U_EXPORT2
76859d709d503bab6e2b61931737e662dd293b40578ccorneliusunum_parseToUFormattable(const UNumberFormat* fmt,
76959d709d503bab6e2b61931737e662dd293b40578ccornelius                         UFormattable *result,
77059d709d503bab6e2b61931737e662dd293b40578ccornelius                         const UChar* text,
77159d709d503bab6e2b61931737e662dd293b40578ccornelius                         int32_t textLength,
77259d709d503bab6e2b61931737e662dd293b40578ccornelius                         int32_t* parsePos, /* 0 = start */
77359d709d503bab6e2b61931737e662dd293b40578ccornelius                         UErrorCode* status);
77459d709d503bab6e2b61931737e662dd293b40578ccornelius
775b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
776b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Set the pattern used by a UNumberFormat.  This can only be used
77754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius * on a DecimalFormat, other formats return U_UNSUPPORTED_ERROR
778b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * in the status.
779b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param format The formatter to set.
780b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param localized TRUE if the pattern is localized, FALSE otherwise.
781b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param pattern The new pattern
782b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param patternLength The length of pattern, or -1 if null-terminated.
783b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param parseError A pointer to UParseError to recieve information
784b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * about errors occurred during parsing, or NULL if no parse error
785b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * information is desired.
786b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status A pointer to an input-output UErrorCode.
787b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_toPattern
788b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see DecimalFormat
789b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
790b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
791b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
792b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_applyPattern(          UNumberFormat  *format,
793b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UBool          localized,
794b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                    const   UChar          *pattern,
795b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            int32_t         patternLength,
796b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UParseError    *parseError,
797b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UErrorCode     *status
798b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                    );
799b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
800b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
801b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Get a locale for which decimal formatting patterns are available.
802b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* A UNumberFormat in a locale returned by this function will perform the correct
803b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* formatting and parsing for the locale.  The results of this call are not
804b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* valid for rule-based number formats.
805b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queru* @param localeIndex The index of the desired locale.
806b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return A locale for which number formatting patterns are available, or 0 if none.
807b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_countAvailable
808b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
809b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
810b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE const char* U_EXPORT2
811b0ac937921a2c196d8b9da665135bf6ba01a1ccfJean-Baptiste Queruunum_getAvailable(int32_t localeIndex);
812b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
813b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
814b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Determine how many locales have decimal formatting patterns available.  The
815b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* results of this call are not valid for rule-based number formats.
816b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* This function is useful for determining the loop ending condition for
817b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* calls to {@link #unum_getAvailable }.
818b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The number of locales for which decimal formatting patterns are available.
819b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAvailable
820b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
821b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
822b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
823b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_countAvailable(void);
824b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
825103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_HAVE_PARSEALLINPUT
826fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/* The UNumberFormatAttributeValue type cannot be #ifndef U_HIDE_INTERNAL_API, needed for .h variable declaration */
827103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius/**
828103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius * @internal
829103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius */
830103e9ffba2cba345d0078eb8b8db33249f81840aCraig Corneliustypedef enum UNumberFormatAttributeValue {
831fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#ifndef U_HIDE_INTERNAL_API
832103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  /** @internal */
833103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNUM_NO = 0,
834103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  /** @internal */
835103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNUM_YES = 1,
836103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  /** @internal */
837103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNUM_MAYBE = 2
838fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif /* U_HIDE_INTERNAL_API */
839103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius} UNumberFormatAttributeValue;
840103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
841103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius
842b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The possible UNumberFormat numeric attributes @stable ICU 2.0 */
843b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatAttribute {
844b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Parse integers only */
845b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PARSE_INT_ONLY,
846b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Use grouping separator */
847b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_GROUPING_USED,
848b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Always show decimal point */
849b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_DECIMAL_ALWAYS_SHOWN,
850b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Maximum integer digits */
851b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MAX_INTEGER_DIGITS,
852b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Minimum integer digits */
853b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MIN_INTEGER_DIGITS,
854b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Integer digits */
855b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_INTEGER_DIGITS,
856b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Maximum fraction digits */
857b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MAX_FRACTION_DIGITS,
858b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Minimum fraction digits */
859b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MIN_FRACTION_DIGITS,
860b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Fraction digits */
861b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_FRACTION_DIGITS,
862b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Multiplier */
863b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MULTIPLIER,
864b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Grouping size */
865b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_GROUPING_SIZE,
866b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Rounding Mode */
867b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_ROUNDING_MODE,
868b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Rounding increment */
869b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_ROUNDING_INCREMENT,
870b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The width to which the output of <code>format()</code> is padded. */
871b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_FORMAT_WIDTH,
872b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The position at which padding will take place. */
873b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PADDING_POSITION,
874b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Secondary grouping size */
875b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_SECONDARY_GROUPING_SIZE,
876b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Use significant digits
877b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0 */
878b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_SIGNIFICANT_DIGITS_USED,
879b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Minimum significant digits
880b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0 */
881b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MIN_SIGNIFICANT_DIGITS,
882b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Maximum significant digits
883b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0 */
884b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MAX_SIGNIFICANT_DIGITS,
885b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Lenient parse mode used by rule-based formats.
886b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0
887b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   */
88854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  UNUM_LENIENT_PARSE,
889103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#if UCONFIG_HAVE_PARSEALLINPUT
890103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  /** Consume all input. (may use fastpath). Set to UNUM_YES (require fastpath), UNUM_NO (skip fastpath), or UNUM_MAYBE (heuristic).
89154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * This is an internal ICU API. Do not use.
892103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @internal
893103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   */
89459d709d503bab6e2b61931737e662dd293b40578ccornelius  UNUM_PARSE_ALL_INPUT = UNUM_LENIENT_PARSE + 1,
895103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius#endif
8968393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  /**
8978393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    * Scale, which adjusts the position of the
8988393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    * decimal point when formatting.  Amounts will be multiplied by 10 ^ (scale)
8998393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    * before they are formatted.  The default value for the scale is 0 ( no adjustment ).
9008393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    *
9018393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    * <p>Example: setting the scale to 3, 123 formats as "123,000"
9028393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    * <p>Example: setting the scale to -4, 123 formats as "0.0123"
9038393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius    *
904fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius   * @stable ICU 51 */
9058393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  UNUM_SCALE = UNUM_LENIENT_PARSE + 2,
90659d709d503bab6e2b61931737e662dd293b40578ccornelius
9078393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius#ifndef U_HIDE_INTERNAL_API
90854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /** Count of "regular" numeric attributes.
90954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * @internal */
91059d709d503bab6e2b61931737e662dd293b40578ccornelius  UNUM_NUMERIC_ATTRIBUTE_COUNT = UNUM_LENIENT_PARSE + 3,
911fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius#endif  /* U_HIDE_INTERNAL_API */
91254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
913f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#ifndef U_HIDE_DRAFT_API
914f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  /**
915f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * if this attribute is set to 0, it is set to UNUM_CURRENCY_STANDARD purpose,
916f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * otherwise it is UNUM_CURRENCY_CASH purpose
917f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * Default: 0 (UNUM_CURRENCY_STANDARD purpose)
918f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * @draft ICU 54
919f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   */
920f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  UNUM_CURRENCY_USAGE = UNUM_LENIENT_PARSE + 4,
921f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#endif  /* U_HIDE_DRAFT_API */
922f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
923fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  /* The following cannot be #ifndef U_HIDE_INTERNAL_API, needed in .h file variable declararions */
92454dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /** One below the first bitfield-boolean item.
92554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * All items after this one are stored in boolean form.
92654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * @internal */
92754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  UNUM_MAX_NONBOOLEAN_ATTRIBUTE = 0x0FFF,
92854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
92954dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /** If 1, specifies that if setting the "max integer digits" attribute would truncate a value, set an error status rather than silently truncating.
93054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * For example,  formatting the value 1234 with 4 max int digits would succeed, but formatting 12345 would fail. There is no effect on parsing.
93154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * Default: 0 (not set)
93259d709d503bab6e2b61931737e662dd293b40578ccornelius   * @stable ICU 50
93354dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   */
9348393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius  UNUM_FORMAT_FAIL_IF_MORE_THAN_MAX_DIGITS = 0x1000,
93554dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /**
93654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * 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.
93754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * Has no effect on formatting.
93854dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * Default: 0 (unset)
93959d709d503bab6e2b61931737e662dd293b40578ccornelius   * @stable ICU 50
94054dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   */
94154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  UNUM_PARSE_NO_EXPONENT,
94254dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius
943f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#ifndef U_HIDE_DRAFT_API
944f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  /**
945f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * if this attribute is set to 1, specifies that, if the pattern contains a
946f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * decimal mark the input is required to have one. If this attribute is set to 0,
947f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * specifies that input does not have to contain a decimal mark.
948f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * Has no effect on formatting.
949f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * Default: 0 (unset)
950f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * @draft ICU 54
951f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   */
952f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  UNUM_PARSE_DECIMAL_MARK_REQUIRED = UNUM_PARSE_NO_EXPONENT+1,
953f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#endif  /* U_HIDE_DRAFT_API */
954f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
955fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius  /* The following cannot be #ifndef U_HIDE_INTERNAL_API, needed in .h file variable declararions */
95654dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius  /** Limit of boolean attributes.
95754dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius   * @internal */
958f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  UNUM_LIMIT_BOOLEAN_ATTRIBUTE = UNUM_PARSE_NO_EXPONENT+2
959b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatAttribute;
960b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
961b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
962b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Get a numeric attribute associated with a UNumberFormat.
963b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a numeric attribute is the number of integer digits a formatter will produce.
964b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to query.
965b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param attr The attribute to query; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
966b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
967b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
9688393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE,
9698393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* UNUM_SCALE.
970b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The value of attr.
971b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setAttribute
972b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getDoubleAttribute
973b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setDoubleAttribute
974b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getTextAttribute
975b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setTextAttribute
976b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
977b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
978b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
979b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_getAttribute(const UNumberFormat*          fmt,
980b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UNumberFormatAttribute  attr);
981b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
982b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
983b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Set a numeric attribute associated with a UNumberFormat.
984b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a numeric attribute is the number of integer digits a formatter will produce.  If the
985b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* formatter does not understand the attribute, the call is ignored.  Rule-based formatters only understand
986b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* the lenient-parse attribute.
987b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to set.
988b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param attr The attribute to set; one of UNUM_PARSE_INT_ONLY, UNUM_GROUPING_USED,
989b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_DECIMAL_ALWAYS_SHOWN, UNUM_MAX_INTEGER_DIGITS, UNUM_MIN_INTEGER_DIGITS, UNUM_INTEGER_DIGITS,
990b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_MAX_FRACTION_DIGITS, UNUM_MIN_FRACTION_DIGITS, UNUM_FRACTION_DIGITS, UNUM_MULTIPLIER,
991b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_GROUPING_SIZE, UNUM_ROUNDING_MODE, UNUM_FORMAT_WIDTH, UNUM_PADDING_POSITION, UNUM_SECONDARY_GROUPING_SIZE,
9928393335b955da7340c9f19b1b4b2d6c0c2c04be7Craig Cornelius* UNUM_LENIENT_PARSE, or UNUM_SCALE.
993b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param newValue The new value of attr.
994b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAttribute
995b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getDoubleAttribute
996b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setDoubleAttribute
997b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getTextAttribute
998b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setTextAttribute
999b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1000b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1001b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
1002b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_setAttribute(    UNumberFormat*          fmt,
1003b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UNumberFormatAttribute  attr,
1004b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t                 newValue);
1005b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1006b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1007b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1008b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Get a numeric attribute associated with a UNumberFormat.
1009b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a numeric attribute is the number of integer digits a formatter will produce.
1010b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* If the formatter does not understand the attribute, -1 is returned.
1011b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to query.
1012b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param attr The attribute to query; e.g. UNUM_ROUNDING_INCREMENT.
1013b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The value of attr.
1014b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAttribute
1015b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setAttribute
1016b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setDoubleAttribute
1017b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getTextAttribute
1018b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setTextAttribute
1019b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1020b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1021b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE double U_EXPORT2
1022b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_getDoubleAttribute(const UNumberFormat*          fmt,
1023b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru          UNumberFormatAttribute  attr);
1024b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1025b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1026b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Set a numeric attribute associated with a UNumberFormat.
1027b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a numeric attribute is the number of integer digits a formatter will produce.
1028b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* If the formatter does not understand the attribute, this call is ignored.
1029b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to set.
1030b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param attr The attribute to set; e.g. UNUM_ROUNDING_INCREMENT.
1031b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param newValue The new value of attr.
1032b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAttribute
1033b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setAttribute
1034b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getDoubleAttribute
1035b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getTextAttribute
1036b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setTextAttribute
1037b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1038b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1039b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
1040b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_setDoubleAttribute(    UNumberFormat*          fmt,
1041b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UNumberFormatAttribute  attr,
1042b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            double                 newValue);
1043b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1044b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/** The possible UNumberFormat text attributes @stable ICU 2.0*/
1045b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatTextAttribute {
1046b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Positive prefix */
1047b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_POSITIVE_PREFIX,
1048b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Positive suffix */
1049b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_POSITIVE_SUFFIX,
1050b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Negative prefix */
1051b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_NEGATIVE_PREFIX,
1052b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Negative suffix */
1053b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_NEGATIVE_SUFFIX,
1054b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The character used to pad to the format width. */
1055b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PADDING_CHARACTER,
1056b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The ISO currency code */
1057b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_CURRENCY_CODE,
1058b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /**
1059f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * The default rule set, such as "%spellout-numbering-year:", "%spellout-cardinal:",
1060f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * "%spellout-ordinal-masculine-plural:", "%spellout-ordinal-feminine:", or
1061f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * "%spellout-ordinal-neuter:". The available public rulesets can be listed using
1062f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * unum_getTextAttribute with UNUM_PUBLIC_RULESETS. This is only available with
1063f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * rule-based formatters.
1064b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0
1065b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   */
1066b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_DEFAULT_RULESET,
1067b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /**
1068b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * The public rule sets.  This is only available with rule-based formatters.
1069b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * This is a read-only attribute.  The public rulesets are returned as a
1070f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * single string, with each ruleset name delimited by ';' (semicolon). See the
1071f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * CLDR LDML spec for more information about RBNF rulesets:
1072f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * http://www.unicode.org/reports/tr35/tr35-numbers.html#Rule-Based_Number_Formatting
1073b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0
1074b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   */
1075b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PUBLIC_RULESETS
1076b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatTextAttribute;
1077b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1078b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1079b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Get a text attribute associated with a UNumberFormat.
1080b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a text attribute is the suffix for positive numbers.  If the formatter
108154dcd9b6a06071f647dac967e9e267abb9410720Craig Cornelius* does not understand the attribute, U_UNSUPPORTED_ERROR is returned as the status.
1082b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Rule-based formatters only understand UNUM_DEFAULT_RULESET and UNUM_PUBLIC_RULESETS.
1083b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to query.
1084b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param tag The attribute to query; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
1085b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
1086b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_DEFAULT_RULESET, or UNUM_PUBLIC_RULESETS.
1087b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param result A pointer to a buffer to receive the attribute.
1088b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param resultLength The maximum size of result.
1089b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
1090b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The total buffer size needed; if greater than resultLength, the output was truncated.
1091b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setTextAttribute
1092b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAttribute
1093b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setAttribute
1094b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1095b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1096b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
1097b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_getTextAttribute(    const    UNumberFormat*                    fmt,
1098b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UNumberFormatTextAttribute      tag,
1099b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UChar*                            result,
1100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t                            resultLength,
1101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode*                        status);
1102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Set a text attribute associated with a UNumberFormat.
1105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* An example of a text attribute is the suffix for positive numbers.  Rule-based formatters
1106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* only understand UNUM_DEFAULT_RULESET.
1107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to set.
1108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param tag The attribute to set; one of UNUM_POSITIVE_PREFIX, UNUM_POSITIVE_SUFFIX,
1109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* UNUM_NEGATIVE_PREFIX, UNUM_NEGATIVE_SUFFIX, UNUM_PADDING_CHARACTER, UNUM_CURRENCY_CODE,
1110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* or UNUM_DEFAULT_RULESET.
1111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param newValue The new value of attr.
1112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param newValueLength The length of newValue, or -1 if null-terminated.
1113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
1114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getTextAttribute
1115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getAttribute
1116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setAttribute
1117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
1120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_setTextAttribute(    UNumberFormat*                    fmt,
1121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UNumberFormatTextAttribute      tag,
1122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            const    UChar*                            newValue,
1123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            int32_t                            newValueLength,
1124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru            UErrorCode                        *status);
1125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Extract the pattern from a UNumberFormat.  The pattern will follow
1128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the DecimalFormat pattern syntax.
1129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fmt The formatter to query.
1130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param isPatternLocalized TRUE if the pattern should be localized,
1131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * FALSE otherwise.  This is ignored if the formatter is a rule-based
1132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * formatter.
1133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param result A pointer to a buffer to receive the pattern.
1134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param resultLength The maximum size of result.
1135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status A pointer to an input-output UErrorCode.
1136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return The total buffer size needed; if greater than resultLength,
1137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the output was truncated.
1138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see unum_applyPattern
1139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @see DecimalFormat
1140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
1141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
1143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_toPattern(    const    UNumberFormat*          fmt,
1144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UBool                  isPatternLocalized,
1145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UChar*                  result,
1146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        int32_t                 resultLength,
1147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru        UErrorCode*             status);
1148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Constants for specifying a number format symbol.
1152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.0
1153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querutypedef enum UNumberFormatSymbol {
1155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The decimal separator */
1156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_DECIMAL_SEPARATOR_SYMBOL = 0,
1157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The grouping separator */
1158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_GROUPING_SEPARATOR_SYMBOL = 1,
1159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The pattern separator */
1160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PATTERN_SEPARATOR_SYMBOL = 2,
1161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The percent sign */
1162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PERCENT_SYMBOL = 3,
1163b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Zero*/
1164b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_ZERO_DIGIT_SYMBOL = 4,
1165b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Character representing a digit in the pattern */
1166b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_DIGIT_SYMBOL = 5,
1167b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The minus sign */
1168b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MINUS_SIGN_SYMBOL = 6,
1169b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The plus sign */
1170b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PLUS_SIGN_SYMBOL = 7,
1171b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The currency symbol */
1172b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_CURRENCY_SYMBOL = 8,
1173b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The international currency symbol */
1174b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_INTL_CURRENCY_SYMBOL = 9,
1175b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The monetary separator */
1176b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_MONETARY_SEPARATOR_SYMBOL = 10,
1177b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The exponential symbol */
1178b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_EXPONENTIAL_SYMBOL = 11,
1179b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Per mill symbol */
1180b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PERMILL_SYMBOL = 12,
1181b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Escape padding character */
1182b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_PAD_ESCAPE_SYMBOL = 13,
1183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Infinity symbol */
1184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_INFINITY_SYMBOL = 14,
1185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Nan symbol */
1186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_NAN_SYMBOL = 15,
1187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** Significant digit symbol
1188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.0 */
1189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  UNUM_SIGNIFICANT_DIGIT_SYMBOL = 16,
1190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** The monetary grouping separator
1191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   * @stable ICU 3.6
1192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru   */
1193103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius  UNUM_MONETARY_GROUPING_SEPARATOR_SYMBOL = 17,
119427f654740f2a26ad62a5c155af9199af9e69b889claireho  /** One
1195103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
119627f654740f2a26ad62a5c155af9199af9e69b889claireho   */
119727f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_ONE_DIGIT_SYMBOL = 18,
119827f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Two
1199103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
120027f654740f2a26ad62a5c155af9199af9e69b889claireho   */
120127f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_TWO_DIGIT_SYMBOL = 19,
120227f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Three
1203103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
120427f654740f2a26ad62a5c155af9199af9e69b889claireho   */
120527f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_THREE_DIGIT_SYMBOL = 20,
120627f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Four
1207103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
120827f654740f2a26ad62a5c155af9199af9e69b889claireho   */
120927f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_FOUR_DIGIT_SYMBOL = 21,
121027f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Five
1211103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
121227f654740f2a26ad62a5c155af9199af9e69b889claireho   */
121327f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_FIVE_DIGIT_SYMBOL = 22,
121427f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Six
1215103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
121627f654740f2a26ad62a5c155af9199af9e69b889claireho   */
121727f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_SIX_DIGIT_SYMBOL = 23,
121827f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Seven
1219103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius    * @stable ICU 4.6
122027f654740f2a26ad62a5c155af9199af9e69b889claireho   */
122127f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_SEVEN_DIGIT_SYMBOL = 24,
122227f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Eight
1223103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
122427f654740f2a26ad62a5c155af9199af9e69b889claireho   */
122527f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_EIGHT_DIGIT_SYMBOL = 25,
122627f654740f2a26ad62a5c155af9199af9e69b889claireho  /** Nine
1227103e9ffba2cba345d0078eb8b8db33249f81840aCraig Cornelius   * @stable ICU 4.6
122827f654740f2a26ad62a5c155af9199af9e69b889claireho   */
122927f654740f2a26ad62a5c155af9199af9e69b889claireho  UNUM_NINE_DIGIT_SYMBOL = 26,
1230f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
1231f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#ifndef U_HIDE_DRAFT_API
1232f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  /** Multiplication sign
1233f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   * @draft ICU 54
1234f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius   */
1235f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  UNUM_EXPONENT_MULTIPLICATION_SYMBOL = 27,
1236f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius#endif  /* U_HIDE_DRAFT_API */
1237f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius
1238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru  /** count symbol constants */
1239f9878a236aa0d9662d8e40cafdaf2e04cd615835ccornelius  UNUM_FORMAT_SYMBOL_COUNT = 28
1240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru} UNumberFormatSymbol;
1241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Get a symbol associated with a UNumberFormat.
1244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* A UNumberFormat uses symbols to represent the special locale-dependent
1245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* characters in a number, for example the percent sign. This API is not
1246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* supported for rule-based formatters.
1247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to query.
1248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param symbol The UNumberFormatSymbol constant for the symbol to get
1249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param buffer The string buffer that will receive the symbol string;
1250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*               if it is NULL, then only the length of the symbol is returned
1251b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param size The size of the string buffer
1252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors
1253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @return The length of the symbol; the buffer is not modified if
1254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*         <code>length&gt;=size</code>
1255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_setSymbol
1256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE int32_t U_EXPORT2
1259b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_getSymbol(const UNumberFormat *fmt,
1260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UNumberFormatSymbol symbol,
1261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UChar *buffer,
1262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               int32_t size,
1263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UErrorCode *status);
1264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Set a symbol associated with a UNumberFormat.
1267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* A UNumberFormat uses symbols to represent the special locale-dependent
1268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* characters in a number, for example the percent sign.  This API is not
1269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* supported for rule-based formatters.
1270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param fmt The formatter to set.
1271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param symbol The UNumberFormatSymbol constant for the symbol to set
1272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param value The string to set the symbol to
1273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param length The length of the string, or -1 for a zero-terminated string
1274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @param status A pointer to an UErrorCode to receive any errors.
1275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @see unum_getSymbol
1276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* @stable ICU 2.0
1277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
1278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE void U_EXPORT2
1279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_setSymbol(UNumberFormat *fmt,
1280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UNumberFormatSymbol symbol,
1281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               const UChar *value,
1282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               int32_t length,
1283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru               UErrorCode *status);
1284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
1287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Get the locale for this number format object.
1288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * You can choose between valid and actual locale.
1289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param fmt The formatter to get the locale from
1290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param type type of the locale we're looking for (valid or actual)
1291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @param status error code for the operation
1292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @return the locale name
1293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * @stable ICU 2.8
1294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
1295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_STABLE const char* U_EXPORT2
1296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruunum_getLocaleByType(const UNumberFormat *fmt,
1297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     ULocDataLocaleType type,
1298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     UErrorCode* status);
1299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1300fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/**
1301fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Set a particular UDisplayContext value in the formatter, such as
1302fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * UDISPCTX_CAPITALIZATION_FOR_STANDALONE.
1303fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param fmt The formatter for which to set a UDisplayContext value.
1304fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param value The UDisplayContext value to set.
1305fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param status A pointer to an UErrorCode to receive any errors
13061b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * @stable ICU 53
1307fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */
13081b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertU_STABLE void U_EXPORT2
1309fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusunum_setContext(UNumberFormat* fmt, UDisplayContext value, UErrorCode* status);
1310fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
1311fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius/**
1312fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * Get the formatter's UDisplayContext value for the specified UDisplayContextType,
1313fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * such as UDISPCTX_TYPE_CAPITALIZATION.
1314fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param fmt The formatter to query.
1315fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param type The UDisplayContextType whose value to return
1316fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @param status A pointer to an UErrorCode to receive any errors
1317fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius * @return The UDisplayContextValue for the specified type.
13181b7d32f919554dda9c193b32188251337bc756f1Fredrik Roubert * @stable ICU 53
1319fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius */
13201b7d32f919554dda9c193b32188251337bc756f1Fredrik RoubertU_STABLE UDisplayContext U_EXPORT2
1321fceb39872958b9fa2505e63f8b8699a9e0f882f4ccorneliusunum_getContext(const UNumberFormat *fmt, UDisplayContextType type, UErrorCode* status);
1322fceb39872958b9fa2505e63f8b8699a9e0f882f4ccornelius
1323b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
1324b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
1325b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif
1326