Bug 1795756 - Part 5: Support roundingMode, roundingIncrement, and stripTrailingZero for PluralRules. r=platform-i18n-reviewers,dminor
Required updates for the next patch in this stack. Also replaces `PluralRulesOptions::RoundingPriority` with an alias to `NumberFormatOptions::RoundingPriority`, so we don't have to duplicate the `RoundingPriority` and `RoundingMode` enums. Differential Revision: https://phabricator.services.mozilla.com/D179946
This commit is contained in:
@@ -6,7 +6,6 @@
|
||||
#define intl_components_PluralRules_h_
|
||||
|
||||
#include <string_view>
|
||||
#include <type_traits>
|
||||
#include <utility>
|
||||
|
||||
#include "mozilla/intl/ICUError.h"
|
||||
@@ -128,6 +127,12 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
|
||||
options.mSignificantDigits.emplace(mSignificantDigits.ref());
|
||||
}
|
||||
|
||||
options.mStripTrailingZero = mStripTrailingZero;
|
||||
|
||||
options.mRoundingIncrement = mRoundingIncrement;
|
||||
|
||||
options.mRoundingMode = NumberFormatOptions::RoundingMode(mRoundingMode);
|
||||
|
||||
options.mRoundingPriority =
|
||||
NumberFormatOptions::RoundingPriority(mRoundingPriority);
|
||||
|
||||
@@ -155,6 +160,12 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
|
||||
options.mSignificantDigits.emplace(mSignificantDigits.ref());
|
||||
}
|
||||
|
||||
options.mStripTrailingZero = mStripTrailingZero;
|
||||
|
||||
options.mRoundingIncrement = mRoundingIncrement;
|
||||
|
||||
options.mRoundingMode = NumberFormatOptions::RoundingMode(mRoundingMode);
|
||||
|
||||
options.mRoundingPriority =
|
||||
NumberFormatOptions::RoundingPriority(mRoundingPriority);
|
||||
|
||||
@@ -192,28 +203,29 @@ struct MOZ_STACK_CLASS PluralRulesOptions {
|
||||
*/
|
||||
Maybe<std::pair<uint32_t, uint32_t>> mSignificantDigits;
|
||||
|
||||
/**
|
||||
* Set to true to strip trailing zeros after the decimal point for integer
|
||||
* values.
|
||||
*/
|
||||
bool mStripTrailingZero = false;
|
||||
|
||||
/**
|
||||
* Set the rounding increment, which must be a non-zero number.
|
||||
*/
|
||||
uint32_t mRoundingIncrement = 1;
|
||||
|
||||
/**
|
||||
* Set the rounding mode.
|
||||
*/
|
||||
using RoundingMode = NumberFormatOptions::RoundingMode;
|
||||
RoundingMode mRoundingMode = RoundingMode::HalfExpand;
|
||||
|
||||
/**
|
||||
* Set the rounding priority. |mFractionDigits| and |mSignificantDigits| must
|
||||
* both be set if the rounding priority isn't equal to "auto".
|
||||
*/
|
||||
enum class RoundingPriority {
|
||||
Auto,
|
||||
MorePrecision,
|
||||
LessPrecision,
|
||||
} mRoundingPriority = RoundingPriority::Auto;
|
||||
|
||||
// Must be compatible with NumberFormatOptions::RoundingPriority.
|
||||
static_assert(std::is_same_v<
|
||||
std::underlying_type_t<RoundingPriority>,
|
||||
std::underlying_type_t<NumberFormatOptions::RoundingPriority>>);
|
||||
static_assert(RoundingPriority::Auto ==
|
||||
RoundingPriority(NumberFormatOptions::RoundingPriority::Auto));
|
||||
static_assert(
|
||||
RoundingPriority::LessPrecision ==
|
||||
RoundingPriority(NumberFormatOptions::RoundingPriority::LessPrecision));
|
||||
static_assert(
|
||||
RoundingPriority::MorePrecision ==
|
||||
RoundingPriority(NumberFormatOptions::RoundingPriority::MorePrecision));
|
||||
using RoundingPriority = NumberFormatOptions::RoundingPriority;
|
||||
RoundingPriority mRoundingPriority = RoundingPriority::Auto;
|
||||
};
|
||||
|
||||
} // namespace mozilla::intl
|
||||
|
||||
Reference in New Issue
Block a user