1b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/*
2b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
383a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius* Copyright (C) 1997-2011, International Business Machines Corporation and others.
4b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* All Rights Reserved.
5b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
6b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
7b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* File FORMAT.H
8b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
9b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru* Modification History:
10b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*
11b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   Date        Name        Description
12b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   02/19/97    aliu        Converted from java.
13b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   03/17/97    clhuang     Updated per C++ implementation.
14b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*   03/27/97    helena      Updated to pass the simple test after code review.
15b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru********************************************************************************
16b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru*/
17b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
18b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// This file was generated from the java source file Format.java
19b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru// *****************************************************************************
20b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
21b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#ifndef FORMAT_H
22b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#define FORMAT_H
23b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
24b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
25b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/utypes.h"
26b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
27b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
28b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \file
29b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * \brief C++ API: Base class for all formats.
30b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
31b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
32b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#if !UCONFIG_NO_FORMATTING
33b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
34b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/unistr.h"
35b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/fmtable.h"
36b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/fieldpos.h"
3750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho#include "unicode/fpositer.h"
38b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parsepos.h"
39b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/parseerr.h"
40b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#include "unicode/locid.h"
41b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
42b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_BEGIN
43b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
44b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru/**
45b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Base class for all formats.  This is an abstract base class which
46b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * specifies the protocol for classes which convert other objects or
47b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * values, such as numeric values and dates, and their string
48b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * representations.  In some cases these representations may be
49b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * localized or contain localized characters or strings.  For example,
50b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a numeric formatter such as DecimalFormat may convert a numeric
51b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * value such as 12345 to the string "$12,345".  It may also parse
52b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the string back into a numeric value.  A date and time formatter
53b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * like SimpleDateFormat may represent a specific date, encoded
54b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * numerically, as a string such as "Wednesday, February 26, 1997 AD".
55b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
56b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Many of the concrete subclasses of Format employ the notion of
57b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a pattern.  A pattern is a string representation of the rules which
58b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * govern the interconversion between values and strings.  For example,
59b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * a DecimalFormat object may be associated with the pattern
60b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "$#,##0.00;($#,##0.00)", which is a common US English format for
61b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * currency values, yielding strings such as "$1,234.45" for 1234.45,
62b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and "($987.65)" for 987.6543.  The specific syntax of a pattern
63b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is defined by each subclass.
64b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
65b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Even though many subclasses use patterns, the notion of a pattern
66b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * is not inherent to Format classes in general, and is not part of
67b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the explicit base class protocol.
68b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
69b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * Two complex formatting classes bear mentioning.  These are
70b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * MessageFormat and ChoiceFormat.  ChoiceFormat is a subclass of
71b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * NumberFormat which allows the user to format different number ranges
72b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * as strings.  For instance, 0 may be represented as "no files", 1 as
73b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "one file", and any number greater than 1 as "many files".
74b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * MessageFormat is a formatter which utilizes other Format objects to
75b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * format a string containing with multiple values.  For instance,
76b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * A MessageFormat object might produce the string "There are no files
77b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * on the disk MyDisk on February 27, 1997." given the arguments 0,
78b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * "MyDisk", and the date value of 2/27/97.  See the ChoiceFormat
79b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * and MessageFormat headers for further information.
80b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
81b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If formatting is unsuccessful, a failing UErrorCode is returned when
82b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * the Format cannot format the type of object, otherwise if there is
83b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * something illformed about the the Unicode replacement character
84b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * 0xFFFD is returned.
85b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
86b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * If there is no match when parsing, a parse failure UErrorCode is
87b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * retured for methods which take no ParsePosition.  For the method
88b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * that takes a ParsePosition, the index parameter is left unchanged.
89b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <P>
90b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * <em>User subclasses are not supported.</em> While clients may write
91b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * subclasses, such code will not necessarily work and will not be
92b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru * guaranteed to work stably from release to release.
93b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru */
94b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruclass U_I18N_API Format : public UObject {
95b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Querupublic:
96b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
97b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /** Destructor
98b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
99b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
100b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual ~Format();
101b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
102b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
103b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return true if the given Format objects are semantically equal.
104b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Objects of different subclasses are considered unequal.
105b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param other    the object to be compared with.
106b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return         Return true if the given Format objects are semantically equal.
107b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                 Objects of different subclasses are considered unequal.
108b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
109b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
110b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UBool operator==(const Format& other) const = 0;
111b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
112b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
113b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Return true if the given Format objects are not semantically
114b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * equal.
115b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param other    the object to be compared with.
116b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return         Return true if the given Format objects are not semantically.
117b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
118b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
119b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UBool operator!=(const Format& other) const { return !operator==(other); }
120b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
121b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
122b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Clone this object polymorphically.  The caller is responsible
123b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * for deleting the result when done.
124b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return    A copy of the object
125b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
126b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
127b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual Format* clone() const = 0;
128b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
129b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
130b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Formats an object to produce a string.
131b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
132b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param obj       The object to format.
133b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
134b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
135b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status    Output parameter filled in with success or failure status.
136b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
137b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
138b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
139b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    UnicodeString& format(const Formattable& obj,
140b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          UnicodeString& appendTo,
141b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                          UErrorCode& status) const;
142b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
143b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
144b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Format an object to produce a string.  This is a pure virtual method which
145b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * subclasses must implement. This method allows polymorphic formatting
146b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * of Formattable objects. If a subclass of Format receives a Formattable
147b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * object type it doesn't handle (e.g., if a numeric Formattable is passed
148b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * to a DateFormat object) then it returns a failing UErrorCode.
149b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
150b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param obj       The object to format.
151b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param appendTo  Output parameter to receive result.
152b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  Result is appended to existing contents.
153b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos       On input: an alignment field, if desired.
154b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  On output: the offsets of the alignment field.
155b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status    Output param filled with success/failure status.
156b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @return          Reference to 'appendTo' parameter.
157b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
158b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
159b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual UnicodeString& format(const Formattable& obj,
160b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UnicodeString& appendTo,
161b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  FieldPosition& pos,
162b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                                  UErrorCode& status) const = 0;
16350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    /**
16450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * Format an object to produce a string.  Subclasses should override this
16550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * method. This method allows polymorphic formatting of Formattable objects.
16650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * If a subclass of Format receives a Formattable object type it doesn't
16750294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * handle (e.g., if a numeric Formattable is passed to a DateFormat object)
16850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * then it returns a failing UErrorCode.
16950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *
17050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param obj       The object to format.
17150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param appendTo  Output parameter to receive result.
17250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  Result is appended to existing contents.
17350294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param posIter   On return, can be used to iterate over positions
17450294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     *                  of fields generated by this format call.
17550294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @param status    Output param filled with success/failure status.
17650294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     * @return          Reference to 'appendTo' parameter.
17727f654740f2a26ad62a5c155af9199af9e69b889claireho     * @stable ICU 4.4
17850294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho     */
17950294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho    virtual UnicodeString& format(const Formattable& obj,
18050294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UnicodeString& appendTo,
18150294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  FieldPositionIterator* posIter,
18250294ead5e5d23f5bbfed76e00e6b510bd41eee1claireho                                  UErrorCode& status) const;
183b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
184b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
185b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parse a string to produce an object.  This is a pure virtual
186b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * method which subclasses must implement.  This method allows
187b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * polymorphic parsing of strings into Formattable objects.
188b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
189b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Before calling, set parse_pos.index to the offset you want to
190b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * start parsing at in the source.  After calling, parse_pos.index
191b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * is the end of the text you parsed.  If error occurs, index is
192b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * unchanged.
193b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
194b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * When parsing, leading whitespace is discarded (with successful
195b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parse), while trailing whitespace is left as is.
196b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
197b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Example:
198b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
199b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parsing "_12_xy" (where _ represents a space) for a number,
200b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * with index == 0 will result in the number 12, with
201b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parse_pos.index updated to 3 (just before the second space).
202b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parsing a second time will result in a failing UErrorCode since
203b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * "xy" is not a number, and leave index at 3.
204b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * <P>
205b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Subclasses will typically supply specific parse methods that
206b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * return different types of values. Since methods can't overload
207b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * on return types, these will typically be named "parse", while
208b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * this polymorphic method will always be called parseObject.  Any
209b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * parse method that does not take a parse_pos should set status
210b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * to an error value when no text in the required format is at the
211b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * start position.
212b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
213b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param source    The string to be parsed into an object.
214b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param result    Formattable to be set to the parse result.
215b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  If parse fails, return contents are undefined.
216b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param parse_pos The position to start parsing at. Upon return
217b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  this param is set to the position after the
218b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  last character successfully parsed. If the
219b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  source is not parsed successfully, this param
220b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  will remain unchanged.
221b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
222b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
223b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    virtual void parseObject(const UnicodeString& source,
224b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             Formattable& result,
225b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                             ParsePosition& parse_pos) const = 0;
226b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
227b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
228b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Parses a string to produce an object. This is a convenience method
229b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * which calls the pure virtual parseObject() method, and returns a
230b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * failure UErrorCode if the ParsePosition indicates failure.
231b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
232b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param source    The string to be parsed into an object.
233b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param result    Formattable to be set to the parse result.
234b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  If parse fails, return contents are undefined.
235b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param status    Output param to be filled with success/failure
236b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *                  result code.
237b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
238b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
239b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void parseObject(const UnicodeString& source,
240b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     Formattable& result,
241b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                     UErrorCode& status) const;
242b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
243b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /** Get the locale for this format object. You can choose between valid and actual locale.
244b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @param type type of the locale we're looking for (valid or actual)
245b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @param status error code for the operation
246b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @return the locale
247b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @stable ICU 2.8
248b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
249b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Locale getLocale(ULocDataLocaleType type, UErrorCode& status) const;
250b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
25183a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#ifndef U_HIDE_INTERNAL_API
252b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /** Get the locale for this format object. You can choose between valid and actual locale.
253b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @param type type of the locale we're looking for (valid or actual)
254b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @param status error code for the operation
255b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @return the locale
256b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *  @internal
257b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
258b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    const char* getLocaleID(ULocDataLocaleType type, UErrorCode &status) const;
25983a171d1a62abf406f7f44ae671823d5ec20db7dCraig Cornelius#endif  /* U_HIDE_INTERNAL_API */
260b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
261b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru protected:
262b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /** @stable ICU 2.8 */
263b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    void setLocaleIDs(const char* valid, const char* actual);
264b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
265b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queruprotected:
266b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
267b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Default constructor for subclass use only.  Does nothing.
268b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
269b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
270b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format();
271b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
272b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
273b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
274b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
275b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format(const Format&); // Does nothing; for subclasses only
276b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
277b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
278b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.0
279b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
280b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    Format& operator=(const Format&); // Does nothing; for subclasses
281b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
282b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
283b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    /**
284b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * Simple function for initializing a UParseError from a UnicodeString.
285b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     *
286b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pattern The pattern to copy into the parseError
287b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param pos The position in pattern where the error occured
288b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @param parseError The UParseError object to fill in
289b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     * @stable ICU 2.4
290b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru     */
291b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    static void syntaxError(const UnicodeString& pattern,
292b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            int32_t pos,
293b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru                            UParseError& parseError);
294b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
295b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru private:
296b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char actualLocale[ULOC_FULLNAME_CAPACITY];
297b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru    char validLocale[ULOC_FULLNAME_CAPACITY];
298b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru};
299b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
300b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste QueruU_NAMESPACE_END
301b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
302b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif /* #if !UCONFIG_NO_FORMATTING */
303b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru
304b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru#endif // _FORMAT
305b13da9df870a61b11249bf741347908dbea0edd8Jean-Baptiste Queru//eof
306