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