/*
********************************************************************************
*                                                                              *
* COPYRIGHT:                                                                   *
*   (C) Copyright Taligent, Inc.,  1997                                        *
*   (C) Copyright International Business Machines Corporation,  1997-1998      *
*   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
*   US Government Users Restricted Rights - Use, duplication, or disclosure    *
*   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
*                                                                              *
********************************************************************************
*
* File DCFMTSYM.CPP
*
* Modification History:
*
*   Date        Name        Description
*   02/19/97    aliu        Converted from java.
*   03/18/97    clhuang     Implemented with C++ APIs.
*   03/27/97    helena      Updated to pass the simple test after code review.
*   08/26/97    aliu        Added currency/intl currency symbol support.
*    07/20/98    stephen        Slightly modified initialization of monetarySeparator
********************************************************************************
*/
 
#include "dcfmtsym.h"
#include "resbund.h"
#include "decimfmt.h"

// *****************************************************************************
// class DecimalFormatSymbols
// *****************************************************************************
 
const int32_t DecimalFormatSymbols::fgNumberElementsLength = 11;
const int32_t DecimalFormatSymbols::fgCurrencyElementsLength = 3;

/**
 * These are the tags we expect to see in normal resource bundle files associated
 * with a locale.
 */
const UnicodeString DecimalFormatSymbols::fgNumberElements("NumberElements");
const UnicodeString DecimalFormatSymbols::fgCurrencyElements("CurrencyElements");

// Because the C-compiler doesn't parse \u escape sequences, we encode the
// \u last resort strings as UChar arrays.
const UChar DecimalFormatSymbols::fgLastResortPerMill[]      = { 0x2030, 0 };
const UChar DecimalFormatSymbols::fgLastResortInfinity[]     = { 0x221E, 0 };
const UChar DecimalFormatSymbols::fgLastResortNaN[]          = { 0xFFFD, 0 };
const UChar DecimalFormatSymbols::fgLastResortCurrency[]     = { 0x00A4, 0 };
const UChar DecimalFormatSymbols::fgLastResortIntlCurrency[] = { 0x00A4, 0x00A4, 0 };

const UnicodeString DecimalFormatSymbols::fgLastResortNumberElements[] =
{
    ".",    // decimal separator
    "",     // group (thousands) separator
    ";",    // pattern separator
    "%",    // percent sign
    "0",    // native 0 digit
    "#",    // pattern digit
    "-",    // minus sign
    "E",    // exponential
    DecimalFormatSymbols::fgLastResortPerMill,  // per mill
    DecimalFormatSymbols::fgLastResortInfinity, // infinite
    DecimalFormatSymbols::fgLastResortNaN       // NaN
};

const UnicodeString DecimalFormatSymbols::fgLastResortCurrencyElements[] =
{
    DecimalFormatSymbols::fgLastResortCurrency,
    DecimalFormatSymbols::fgLastResortIntlCurrency,
    "."     // monetary decimal separator
};

// -------------------------------------
// Initializes this with the decimal format symbols in the default locale.
 
DecimalFormatSymbols::DecimalFormatSymbols(UErrorCode& status)
{
    initialize(Locale::getDefault(), status, TRUE);
}
 
// -------------------------------------
// Initializes this with the decimal format symbols in the desired locale.
 
DecimalFormatSymbols::DecimalFormatSymbols(const Locale& locale, UErrorCode& status)
{
    initialize(locale, status);
}
 
// -------------------------------------

DecimalFormatSymbols::~DecimalFormatSymbols()
{
}

// -------------------------------------
// copy constructor

DecimalFormatSymbols::DecimalFormatSymbols(const DecimalFormatSymbols &source)
    :   fZeroDigit(source.fZeroDigit),
        fGroupingSeparator(source.fGroupingSeparator),
        fDecimalSeparator(source.fDecimalSeparator),
        fPercent(source.fPercent),
        fPerMill(source.fPerMill),
        fDigit(source.fDigit),
        fPlusSign(source.fPlusSign),
        fMinusSign(source.fMinusSign),
        fExponential(source.fExponential),
        fPatternSeparator(source.fPatternSeparator),
        fInfinity(source.fInfinity),
        fNaN(source.fNaN),
        fCurrencySymbol(source.fCurrencySymbol),
        fIntlCurrencySymbol(source.fIntlCurrencySymbol),
        fMonetarySeparator(source.fMonetarySeparator),
        fPadEscape(source.fPadEscape)
{
}

// -------------------------------------
// assignment operator

DecimalFormatSymbols&
DecimalFormatSymbols::operator=(const DecimalFormatSymbols& rhs)
{
    if (this != &rhs)
    {
        fZeroDigit = rhs.fZeroDigit;
        fGroupingSeparator = rhs.fGroupingSeparator;
        fDecimalSeparator = rhs.fDecimalSeparator;
        fPercent = rhs.fPercent;
        fPerMill = rhs.fPerMill;
        fDigit = rhs.fDigit;
        fPlusSign = rhs.fPlusSign;
        fMinusSign = rhs.fMinusSign;
        fExponential = rhs.fExponential;
        fPatternSeparator = rhs.fPatternSeparator;
        fInfinity = rhs.fInfinity;
        fNaN = rhs.fNaN;
        fCurrencySymbol = rhs.fCurrencySymbol;
        fIntlCurrencySymbol = rhs.fIntlCurrencySymbol;
        fMonetarySeparator = rhs.fMonetarySeparator;
        fPadEscape = rhs.fPadEscape;
    }
    return *this;
}

// -------------------------------------

bool_t
DecimalFormatSymbols::operator==(const DecimalFormatSymbols& that) const
{
    if (this == &that) return TRUE;

    return (fZeroDigit == that.fZeroDigit &&
        fGroupingSeparator == that.fGroupingSeparator &&
        fDecimalSeparator == that.fDecimalSeparator &&
        fPercent == that.fPercent &&
        fPerMill == that.fPerMill &&
        fDigit == that.fDigit &&
        fPlusSign == that.fPlusSign &&
        fMinusSign == that.fMinusSign &&
        fExponential == that.fExponential &&
        fPatternSeparator == that.fPatternSeparator &&
        fInfinity == that.fInfinity &&
        fNaN == that.fNaN &&
        fCurrencySymbol == that.fCurrencySymbol &&
        fIntlCurrencySymbol == that.fIntlCurrencySymbol &&
        fMonetarySeparator == that.fMonetarySeparator &&
        fPadEscape == that.fPadEscape
        );
}
 
// -------------------------------------
 
void
DecimalFormatSymbols::initialize(const Locale& locale, UErrorCode& status,
                                 bool_t useLastResortData)
{
    if (U_FAILURE(status)) return;

    ResourceBundle resource(Locale::getDataDirectory(), locale, status);
    if (U_FAILURE(status))
    {
        // Initializes with last resort data if necessary.
        if (useLastResortData)
        {
            status = U_USING_FALLBACK_ERROR;
            initialize(fgLastResortNumberElements, fgLastResortCurrencyElements);
        }
        return;
    }

    int32_t numberElementsLength=0;
    // Gets the number element array.
    const UnicodeString* numberElements = resource.getStringArray(fgNumberElements, numberElementsLength, status);
    int32_t currencyElementsLength=0;
    // Gets the currency element array.
    const UnicodeString* currencyElements = resource.getStringArray(fgCurrencyElements, currencyElementsLength, status);
    if (U_FAILURE(status)) return;

    // If the array size is too small, something is wrong with the resource
    // bundle, returns the failure error code.
    if (numberElementsLength < fgNumberElementsLength ||
        currencyElementsLength < fgCurrencyElementsLength) {
        status = U_INVALID_FORMAT_ERROR;
        return;
    }

    initialize(numberElements, currencyElements);
}

// Initializes the DecimalFormatSymbol instance with the data obtained
// from ResourceBundle in the desired locale.

void
DecimalFormatSymbols::initialize(const UnicodeString* numberElements, const UnicodeString* currencyElements)
{
    fDecimalSeparator  = numberElements[0][(UTextOffset)0];
    fGroupingSeparator = numberElements[1][(UTextOffset)0];
    fPatternSeparator  = numberElements[2][(UTextOffset)0];
    fPercent           = numberElements[3][(UTextOffset)0];
    fZeroDigit         = numberElements[4][(UTextOffset)0];
    fDigit             = numberElements[5][(UTextOffset)0];
    fPlusSign          = 0x002B; // '+' Hard coded for now; get from resource later
    fMinusSign         = numberElements[6][(UTextOffset)0];
    fExponential       = numberElements[7][(UTextOffset)0];
    fPerMill           = numberElements[8][(UTextOffset)0];
    fInfinity          = numberElements[9];
    fNaN               = numberElements[10];
    fCurrencySymbol     = currencyElements[0];
    fIntlCurrencySymbol = currencyElements[1];
    fPadEscape         = 0x002A; // '*' Hard coded for now; get from resource later

    // if the resource data specified the empty string as the monetary decimal
    // separator, that means we should just use the regular separator as the
    // monetary separator
    if(currencyElements[2].size() == 0)
        fMonetarySeparator = fDecimalSeparator;
    else
        fMonetarySeparator = currencyElements[2][(UTextOffset)0];
}

//eof
