return (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat()) ? E_UNSUPPORTED_OPERATION : E_INVALID_ARG;
}
-result
-_LocaleData::GetNumberSymbols(const Locale& locale, String symbols[])
-{
- UErrorCode status = U_ZERO_ERROR;
- ;
- SetLocale(locale);
-
- SysTryReturnResult(NID_LCL, IsLocaleSupported(), E_SYSTEM, "A System error has been occurred. Locale is not supported");
-
- IcuDecimalFormatSymbols sym(__icuLocale, status);
- SysTryReturnResult(NID_LCL, U_SUCCESS(status), E_SYSTEM, "A System error has been occurred. Unable to get ICU Decimal Format Symbols");
-
- symbols[NUMBER_SYMBOL_DECIMAL_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kDecimalSeparatorSymbol));
- symbols[NUMBER_SYMBOL_GROUPING_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kGroupingSeparatorSymbol));
- symbols[NUMBER_SYMBOL_PATTERN_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPatternSeparatorSymbol));
- symbols[NUMBER_SYMBOL_PERCENT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPercentSymbol));
- symbols[NUMBER_SYMBOL_ZERO_DIGIT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kZeroDigitSymbol));
- symbols[NUMBER_SYMBOL_DIGIT] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kDigitSymbol));
- symbols[NUMBER_SYMBOL_CURRENCY] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kCurrencySymbol));
- symbols[NUMBER_SYMBOL_INTL_CURRENCY] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kIntlCurrencySymbol));
- symbols[NUMBER_SYMBOL_MONETARY_SEPARATOR] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kMonetarySeparatorSymbol));
- symbols[NUMBER_SYMBOL_PER_MILL] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPerMillSymbol));
- symbols[NUMBER_SYMBOL_EXPONENTIAL] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kExponentialSymbol));
- symbols[NUMBER_SYMBOL_PLUS_SIGN] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kPlusSignSymbol));
- symbols[NUMBER_SYMBOL_MINUS_SIGN] = _LocaleData::GetOspString(sym.getSymbol(IcuDecimalFormatSymbols::kMinusSignSymbol));
-
- return E_SUCCESS;
-}
result
_LocaleData::SetNumberFormatter(const Locale& locale, NumberFormatterStyle style)
* @file FLclNumberSymbols.cpp
* @brief This is the implementation file for NumberSymbols class.
*/
-
+#include <unicode/locid.h>
#include <FBaseSysLog.h>
#include <FApp_AppInfo.h>
#include "FLcl_NumberSymbolsImpl.h"
#include "FLcl_LocaleData.h"
-
using namespace Tizen::Base;
namespace Tizen { namespace Locales
{
-
-/////////////////////////////////////////////////////////////////////////////////////////////////////
-// Public Method
+static U_ICU_NAMESPACE::DecimalFormatSymbols::ENumberFormatSymbol NUMBER_SYMBOL_TYPE_CONVERT_TABLE[NUMBER_SYMBOL_COUNT] =
+ { U_ICU_NAMESPACE::DecimalFormatSymbols::kDecimalSeparatorSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kGroupingSeparatorSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kPatternSeparatorSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kPercentSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kZeroDigitSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kDigitSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kCurrencySymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kIntlCurrencySymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kMonetarySeparatorSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kPerMillSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kExponentialSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kPlusSignSymbol
+ , U_ICU_NAMESPACE::DecimalFormatSymbols::kMinusSignSymbol
+ };
_NumberSymbolsImpl::_NumberSymbolsImpl(void)
: __locale(LANGUAGE_INVALID, COUNTRY_INVALID)
+ , __pIcuDecimalFormatSymbols(null)
{
}
_NumberSymbolsImpl::_NumberSymbolsImpl(const _NumberSymbolsImpl& other)
: __locale(LANGUAGE_INVALID, COUNTRY_INVALID)
+ , __pIcuDecimalFormatSymbols(null)
{
- this->__locale = other.__locale;
-
- for (int i = 0; i < NUMBER_SYMBOL_COUNT; i++)
- {
- this->__symbols[i] = other.__symbols[i]; // Copying symbols
- }
+ __locale = other.__locale;
+ __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(*other.__pIcuDecimalFormatSymbols);
+ SysTryReturn(NID_LCL, __pIcuDecimalFormatSymbols, , E_OUT_OF_MEMORY, "It is not enough memory.");
}
{
if (this != &rhs)
{
- for (int i = 0; i < (int) NUMBER_SYMBOL_COUNT; ++i)
+ __locale = rhs.__locale;
+ if (__pIcuDecimalFormatSymbols)
{
- __symbols[(NumberSymbol) i] = rhs.__symbols[(NumberSymbol) i]; // Copying symbols
+ delete __pIcuDecimalFormatSymbols;
+ __pIcuDecimalFormatSymbols = null;
}
-
- __locale = rhs.__locale;
+ __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(*rhs.__pIcuDecimalFormatSymbols);
}
return *this;
_NumberSymbolsImpl::~_NumberSymbolsImpl(void)
{
+ if (__pIcuDecimalFormatSymbols)
+ {
+ delete __pIcuDecimalFormatSymbols;
+ }
}
result
_NumberSymbolsImpl::Construct(const Locale& locale)
{
- result r = E_SUCCESS;
- _LocaleData localeData;
- r = localeData.GetNumberSymbols(locale, __symbols); // Get number symbols from ICU
+ result r = (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat())
+ ? E_UNSUPPORTED_OPERATION
+ : E_INVALID_ARG;
- if (!IsFailed(r))
- {
- __locale = locale;
- return E_SUCCESS;
- }
+ U_ICU_NAMESPACE::Locale icuLocale = _LocaleData::GetIcuLocale(locale);
+ SysTryReturnResult(NID_LCL, icuLocale.isBogus() != true, r, "It is an invalid locale.");
+
+ UErrorCode status = U_ZERO_ERROR;
+ __pIcuDecimalFormatSymbols = new U_ICU_NAMESPACE::DecimalFormatSymbols(icuLocale, status);
+ SysTryReturnResult(NID_LCL, __pIcuDecimalFormatSymbols, E_OUT_OF_MEMORY, "It is not enough memory.");
+ __locale = locale;
- return (Tizen::App::_AppInfo::GetApiVersion() == _API_VERSION_2_0 && Tizen::App::_AppInfo::IsOspCompat()) ? E_UNSUPPORTED_OPERATION : E_INVALID_ARG;
+ return E_SUCCESS;
}
String
_NumberSymbolsImpl::GetNumberSymbol(NumberSymbol symbol) const
{
- return (symbol < NUMBER_SYMBOL_COUNT) ? __symbols[symbol] : String(); // Get symbol value for symbol
+ SysTryReturn(NID_LCL, symbol < NUMBER_SYMBOL_COUNT, String(), E_INVALID_ARG, "It is an invalid argument.");
+ return _LocaleData::GetOspString(__pIcuDecimalFormatSymbols->getSymbol(NUMBER_SYMBOL_TYPE_CONVERT_TABLE[symbol]));
}
result
_NumberSymbolsImpl::SetNumberSymbol(const NumberSymbol symbol, const String& str)
{
- if (symbol < NUMBER_SYMBOL_COUNT) // validate symbol value
- {
- __symbols[symbol] = str; // Set symbol
- }
-
+ SysTryReturnResult(NID_LCL, symbol < NUMBER_SYMBOL_COUNT, E_INVALID_ARG, "It is an invalid argument.");
+ U_ICU_NAMESPACE::UnicodeString icuStr = _LocaleData::GetIcuString(str);
+ __pIcuDecimalFormatSymbols->setSymbol(NUMBER_SYMBOL_TYPE_CONVERT_TABLE[symbol], icuStr);
return E_SUCCESS;
}
_NumberSymbolsImpl::GetLocale(void) const
{
ClearLastResult();
- return &__locale; // return locale object stored during construction
+ return &__locale;
}