]> git.saurik.com Git - apple/icu.git/blobdiff - icuSources/i18n/quantityformatter.h
ICU-64260.0.1.tar.gz
[apple/icu.git] / icuSources / i18n / quantityformatter.h
index 4e19085964e9a44a519e404f3eb00addc3b94db3..046eec7509ecb07b8d136c9b1b02c1e6369363d5 100644 (file)
@@ -1,6 +1,8 @@
+// © 2016 and later: Unicode, Inc. and others.
+// License & terms of use: http://www.unicode.org/copyright.html
 /*
 ******************************************************************************
-* Copyright (C) 2014, International Business Machines
+* Copyright (C) 2014-2016, International Business Machines
 * Corporation and others.  All Rights Reserved.
 ******************************************************************************
 * quantityformatter.h
 
 #if !UCONFIG_NO_FORMATTING
 
+#include "standardplural.h"
+
 U_NAMESPACE_BEGIN
 
-class SimplePatternFormatter;
+class SimpleFormatter;
 class UnicodeString;
 class PluralRules;
 class NumberFormat;
 class Formattable;
 class FieldPosition;
 
+namespace number {
+namespace impl {
+class NumberStringBuilder;
+}
+}
+
 /**
  * A plural aware formatter that is good for expressing a single quantity and
  * a unit.
@@ -64,17 +74,14 @@ public:
     void reset();
 
     /**
-      * Adds a plural variant.
-      *
-      * @param variant "zero", "one", "two", "few", "many", "other"
-      * @param rawPattern the pattern for the variant e.g "{0} meters"
-      * @param status any error returned here.
-      * @return TRUE on success; FALSE if status was set to a non zero error.
-      */
-    UBool add(
-            const char *variant,
-            const UnicodeString &rawPattern,
-            UErrorCode &status);
+     * Adds a plural variant if there is none yet for the plural form.
+     *
+     * @param variant "zero", "one", "two", "few", "many", "other"
+     * @param rawPattern the pattern for the variant e.g "{0} meters"
+     * @param status any error returned here.
+     * @return TRUE on success; FALSE if status was set to a non zero error.
+     */
+    UBool addIfAbsent(const char *variant, const UnicodeString &rawPattern, UErrorCode &status);
 
     /**
      * returns TRUE if this object has at least the "other" variant.
@@ -86,30 +93,74 @@ public:
      * If isValid() returns TRUE, this method is guaranteed to return a
      * non-NULL value.
      */
-    const SimplePatternFormatter *getByVariant(const char *variant) const;
+    const SimpleFormatter *getByVariant(const char *variant) const;
 
     /**
-     * Formats a quantity with this object appending the result to appendTo.
+     * Formats a number with this object appending the result to appendTo.
      * At least the "other" variant must be added to this object for this
      * method to work.
      * 
-     * @param quantity the single quantity.
-     * @param fmt formats the quantity
+     * @param number the single number.
+     * @param fmt formats the number
      * @param rules computes the plural variant to use.
      * @param appendTo result appended here.
      * @param status any error returned here.
      * @return appendTo
      */
     UnicodeString &format(
-            const Formattable &quantity,
+            const Formattable &number,
             const NumberFormat &fmt,
             const PluralRules &rules,
             UnicodeString &appendTo,
             FieldPosition &pos,
             UErrorCode &status) const;
 
+    /**
+     * Selects the standard plural form for the number/formatter/rules.
+     * TODO(13591): Remove this method.
+     */
+    static StandardPlural::Form selectPlural(
+            const Formattable &number,
+            const NumberFormat &fmt,
+            const PluralRules &rules,
+            UnicodeString &formattedNumber,
+            FieldPosition &pos,
+            UErrorCode &status);
+
+    /**
+     * Formats a quantity and selects its plural form. The output is appended
+     * to a NumberStringBuilder in order to retain field information.
+     *
+     * @param quantity The number to format.
+     * @param fmt The formatter to use to format the number.
+     * @param rules The rules to use to select the plural form of the
+     *              formatted number.
+     * @param output Where to append the result of the format operation.
+     * @param pluralForm Output variable populated with the plural form of the
+     *                   formatted number.
+     * @param status Set if an error occurs.
+     */
+    static void formatAndSelect(
+            double quantity,
+            const NumberFormat& fmt,
+            const PluralRules& rules,
+            number::impl::NumberStringBuilder& output,
+            StandardPlural::Form& pluralForm,
+            UErrorCode& status);
+
+    /**
+     * Formats the pattern with the value and adjusts the FieldPosition.
+     * TODO: Remove?
+     */
+    static UnicodeString &format(
+            const SimpleFormatter &pattern,
+            const UnicodeString &value,
+            UnicodeString &appendTo,
+            FieldPosition &pos,
+            UErrorCode &status);
+
 private:
-    SimplePatternFormatter *formatters[6];
+    SimpleFormatter *formatters[StandardPlural::COUNT];
 };
 
 U_NAMESPACE_END