| Index: source/i18n/unicode/scientificnumberformatter.h
|
| diff --git a/source/i18n/unicode/scientificnumberformatter.h b/source/i18n/unicode/scientificnumberformatter.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..700694cd24bb0fc1cce17d7e899cd5c0b3485fd6
|
| --- /dev/null
|
| +++ b/source/i18n/unicode/scientificnumberformatter.h
|
| @@ -0,0 +1,222 @@
|
| +/*
|
| +**********************************************************************
|
| +* Copyright (c) 2014, International Business Machines
|
| +* Corporation and others. All Rights Reserved.
|
| +**********************************************************************
|
| +*/
|
| +#ifndef SCINUMBERFORMATTER_H
|
| +#define SCINUMBERFORMATTER_H
|
| +
|
| +#include "unicode/utypes.h"
|
| +
|
| +#if !UCONFIG_NO_FORMATTING
|
| +
|
| +#ifndef U_HIDE_DRAFT_API
|
| +
|
| +#include "unicode/unistr.h"
|
| +
|
| +/**
|
| + * \file
|
| + * \brief C++ API: Formats in scientific notation.
|
| + */
|
| +
|
| +U_NAMESPACE_BEGIN
|
| +
|
| +class FieldPositionIterator;
|
| +class DecimalFormatStaticSets;
|
| +class DecimalFormatSymbols;
|
| +class DecimalFormat;
|
| +class Formattable;
|
| +
|
| +/**
|
| + * A formatter that formats numbers in user-friendly scientific notation.
|
| + *
|
| + * Sample code:
|
| + * <pre>
|
| + * UErrorCode status = U_ZERO_ERROR;
|
| + * LocalPointer<ScientificNumberFormatter> fmt(
|
| + * ScientificNumberFormatter::createMarkupInstance(
|
| + * "en", "<sup>", "</sup>", status));
|
| + * if (U_FAILURE(status)) {
|
| + * return;
|
| + * }
|
| + * UnicodeString appendTo;
|
| + * // appendTo = "1.23456x10<sup>-78</sup>"
|
| + * fmt->format(1.23456e-78, appendTo, status);
|
| + * </pre>
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| +class U_I18N_API ScientificNumberFormatter : public UObject {
|
| +public:
|
| +
|
| + /**
|
| + * Creates a ScientificNumberFormatter instance that uses
|
| + * superscript characters for exponents.
|
| + * @param fmtToAdopt The DecimalFormat which must be configured for
|
| + * scientific notation.
|
| + * @param status error returned here.
|
| + * @return The new ScientificNumberFormatter instance.
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| + static ScientificNumberFormatter *createSuperscriptInstance(
|
| + DecimalFormat *fmtToAdopt, UErrorCode &status);
|
| +
|
| + /**
|
| + * Creates a ScientificNumberFormatter instance that uses
|
| + * superscript characters for exponents for this locale.
|
| + * @param locale The locale
|
| + * @param status error returned here.
|
| + * @return The ScientificNumberFormatter instance.
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| + static ScientificNumberFormatter *createSuperscriptInstance(
|
| + const Locale &locale, UErrorCode &status);
|
| +
|
| +
|
| + /**
|
| + * Creates a ScientificNumberFormatter instance that uses
|
| + * markup for exponents.
|
| + * @param fmtToAdopt The DecimalFormat which must be configured for
|
| + * scientific notation.
|
| + * @param beginMarkup the markup to start superscript.
|
| + * @param endMarkup the markup to end superscript.
|
| + * @param status error returned here.
|
| + * @return The new ScientificNumberFormatter instance.
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| + static ScientificNumberFormatter *createMarkupInstance(
|
| + DecimalFormat *fmtToAdopt,
|
| + const UnicodeString &beginMarkup,
|
| + const UnicodeString &endMarkup,
|
| + UErrorCode &status);
|
| +
|
| + /**
|
| + * Creates a ScientificNumberFormatter instance that uses
|
| + * markup for exponents for this locale.
|
| + * @param locale The locale
|
| + * @param beginMarkup the markup to start superscript.
|
| + * @param endMarkup the markup to end superscript.
|
| + * @param status error returned here.
|
| + * @return The ScientificNumberFormatter instance.
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| + static ScientificNumberFormatter *createMarkupInstance(
|
| + const Locale &locale,
|
| + const UnicodeString &beginMarkup,
|
| + const UnicodeString &endMarkup,
|
| + UErrorCode &status);
|
| +
|
| +
|
| + /**
|
| + * Returns a copy of this object. Caller must free returned copy.
|
| + * @draft ICU 55
|
| + */
|
| + ScientificNumberFormatter *clone() const {
|
| + return new ScientificNumberFormatter(*this);
|
| + }
|
| +
|
| + /**
|
| + * Destructor.
|
| + * @draft ICU 55
|
| + */
|
| + virtual ~ScientificNumberFormatter();
|
| +
|
| + /**
|
| + * Formats a number into user friendly scientific notation.
|
| + *
|
| + * @param number the number to format.
|
| + * @param appendTo formatted string appended here.
|
| + * @param status any error returned here.
|
| + * @return appendTo
|
| + *
|
| + * @draft ICU 55
|
| + */
|
| + UnicodeString &format(
|
| + const Formattable &number,
|
| + UnicodeString &appendTo,
|
| + UErrorCode &status) const;
|
| + private:
|
| + class U_I18N_API Style : public UObject {
|
| + public:
|
| + virtual Style *clone() const = 0;
|
| + protected:
|
| + virtual UnicodeString &format(
|
| + const UnicodeString &original,
|
| + FieldPositionIterator &fpi,
|
| + const UnicodeString &preExponent,
|
| + const DecimalFormatStaticSets &decimalFormatSets,
|
| + UnicodeString &appendTo,
|
| + UErrorCode &status) const = 0;
|
| + private:
|
| + friend class ScientificNumberFormatter;
|
| + };
|
| +
|
| + class U_I18N_API SuperscriptStyle : public Style {
|
| + public:
|
| + virtual Style *clone() const;
|
| + protected:
|
| + virtual UnicodeString &format(
|
| + const UnicodeString &original,
|
| + FieldPositionIterator &fpi,
|
| + const UnicodeString &preExponent,
|
| + const DecimalFormatStaticSets &decimalFormatSets,
|
| + UnicodeString &appendTo,
|
| + UErrorCode &status) const;
|
| + };
|
| +
|
| + class U_I18N_API MarkupStyle : public Style {
|
| + public:
|
| + MarkupStyle(
|
| + const UnicodeString &beginMarkup,
|
| + const UnicodeString &endMarkup)
|
| + : Style(),
|
| + fBeginMarkup(beginMarkup),
|
| + fEndMarkup(endMarkup) { }
|
| + virtual Style *clone() const;
|
| + protected:
|
| + virtual UnicodeString &format(
|
| + const UnicodeString &original,
|
| + FieldPositionIterator &fpi,
|
| + const UnicodeString &preExponent,
|
| + const DecimalFormatStaticSets &decimalFormatSets,
|
| + UnicodeString &appendTo,
|
| + UErrorCode &status) const;
|
| + private:
|
| + UnicodeString fBeginMarkup;
|
| + UnicodeString fEndMarkup;
|
| + };
|
| +
|
| + ScientificNumberFormatter(
|
| + DecimalFormat *fmtToAdopt,
|
| + Style *styleToAdopt,
|
| + UErrorCode &status);
|
| +
|
| + ScientificNumberFormatter(const ScientificNumberFormatter &other);
|
| + ScientificNumberFormatter &operator=(const ScientificNumberFormatter &);
|
| +
|
| + static void getPreExponent(
|
| + const DecimalFormatSymbols &dfs, UnicodeString &preExponent);
|
| +
|
| + static ScientificNumberFormatter *createInstance(
|
| + DecimalFormat *fmtToAdopt,
|
| + Style *styleToAdopt,
|
| + UErrorCode &status);
|
| +
|
| + UnicodeString fPreExponent;
|
| + DecimalFormat *fDecimalFormat;
|
| + Style *fStyle;
|
| + const DecimalFormatStaticSets *fStaticSets;
|
| +
|
| +};
|
| +
|
| +U_NAMESPACE_END
|
| +
|
| +#endif /* U_HIDE_DRAFT_API */
|
| +
|
| +#endif /* !UCONFIG_NO_FORMATTING */
|
| +#endif
|
|
|