diff options
Diffstat (limited to 'intl/icu/source/i18n/numrange_impl.h')
-rw-r--r-- | intl/icu/source/i18n/numrange_impl.h | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/intl/icu/source/i18n/numrange_impl.h b/intl/icu/source/i18n/numrange_impl.h new file mode 100644 index 0000000000..ac1d8a5897 --- /dev/null +++ b/intl/icu/source/i18n/numrange_impl.h @@ -0,0 +1,89 @@ +// © 2018 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html + +#include "unicode/utypes.h" + +#if !UCONFIG_NO_FORMATTING +#ifndef __SOURCE_NUMRANGE_TYPES_H__ +#define __SOURCE_NUMRANGE_TYPES_H__ + +#include "unicode/numberformatter.h" +#include "unicode/numberrangeformatter.h" +#include "unicode/simpleformatter.h" +#include "number_types.h" +#include "number_decimalquantity.h" +#include "number_formatimpl.h" +#include "formatted_string_builder.h" +#include "formattedval_impl.h" +#include "pluralranges.h" + +U_NAMESPACE_BEGIN namespace number { +namespace impl { + + +/** + * Class similar to UFormattedNumberData. + * + * Has incomplete magic number logic that will need to be finished + * if this is to be exposed as C API in the future. + * + * Possible magic number: 0x46445200 + * Reads in ASCII as "FDR" (FormatteDnumberRange with room at the end) + */ +class UFormattedNumberRangeData : public FormattedValueStringBuilderImpl { +public: + UFormattedNumberRangeData() : FormattedValueStringBuilderImpl(kUndefinedField) {} + virtual ~UFormattedNumberRangeData(); + + DecimalQuantity quantity1; + DecimalQuantity quantity2; + UNumberRangeIdentityResult identityResult = UNUM_IDENTITY_RESULT_COUNT; +}; + + +class NumberRangeFormatterImpl : public UMemory { + public: + NumberRangeFormatterImpl(const RangeMacroProps& macros, UErrorCode& status); + + void format(UFormattedNumberRangeData& data, bool equalBeforeRounding, UErrorCode& status) const; + + private: + NumberFormatterImpl formatterImpl1; + NumberFormatterImpl formatterImpl2; + bool fSameFormatters; + + UNumberRangeCollapse fCollapse; + UNumberRangeIdentityFallback fIdentityFallback; + + SimpleFormatter fRangeFormatter; + NumberFormatterImpl fApproximatelyFormatter; + + StandardPluralRanges fPluralRanges; + + void formatSingleValue(UFormattedNumberRangeData& data, + MicroProps& micros1, MicroProps& micros2, + UErrorCode& status) const; + + void formatApproximately(UFormattedNumberRangeData& data, + MicroProps& micros1, MicroProps& micros2, + UErrorCode& status) const; + + void formatRange(UFormattedNumberRangeData& data, + MicroProps& micros1, MicroProps& micros2, + UErrorCode& status) const; + + const Modifier& resolveModifierPlurals(const Modifier& first, const Modifier& second) const; +}; + + +/** Helper function used in upluralrules.cpp */ +const UFormattedNumberRangeData* validateUFormattedNumberRange( + const UFormattedNumberRange* uresult, UErrorCode& status); + + +} // namespace impl +} // namespace number +U_NAMESPACE_END + +#endif //__SOURCE_NUMRANGE_TYPES_H__ +#endif /* #if !UCONFIG_NO_FORMATTING */ |