diff --git a/i18npool/inc/localedata.hxx b/i18npool/inc/localedata.hxx index c3aa6cf57d2c..4a83d44375b2 100644 --- a/i18npool/inc/localedata.hxx +++ b/i18npool/inc/localedata.hxx @@ -23,7 +23,7 @@ #include -#include +#include #include @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include @@ -61,7 +61,7 @@ namespace i18npool { class LocaleDataImpl : public cppu::WeakImplHelper < - css::i18n::XLocaleData4, + css::i18n::XLocaleData5, css::lang::XServiceInfo > { @@ -108,6 +108,9 @@ public: // XLocaleData4 virtual css::uno::Sequence< OUString > SAL_CALL getDateAcceptancePatterns( const css::lang::Locale& rLocale ) override; + // XLocaleData5 + virtual css::i18n::LocaleDataItem2 SAL_CALL getLocaleItem2( const css::lang::Locale& rLocale ) override; + // following methods are used by indexentry service /// @throws css::uno::RuntimeException css::uno::Sequence< OUString > SAL_CALL getIndexAlgorithm( const css::lang::Locale& rLocale ); diff --git a/i18npool/source/localedata/localedata.cxx b/i18npool/source/localedata/localedata.cxx index 500a9408136e..e84f2b6282e7 100644 --- a/i18npool/source/localedata/localedata.cxx +++ b/i18npool/source/localedata/localedata.cxx @@ -423,6 +423,47 @@ LocaleDataImpl::getLocaleItem( const Locale& rLocale ) } } + +LocaleDataItem2 SAL_CALL +LocaleDataImpl::getLocaleItem2( const Locale& rLocale ) +{ + MyFunc_Type func = reinterpret_cast(getFunctionSymbol( rLocale, "getLocaleItem" )); + + if ( func ) { + sal_Int16 dataItemCount = 0; + sal_Unicode **dataItem = func(dataItemCount); + + assert(dataItemCount >= 18); + + LocaleDataItem2 item( + dataItem[0], + dataItem[1], + dataItem[2], + dataItem[3], + dataItem[4], + dataItem[5], + dataItem[6], + dataItem[7], + dataItem[8], + dataItem[9], + dataItem[10], + dataItem[11], + dataItem[12], + dataItem[13], + dataItem[14], + dataItem[15], + dataItem[16], + dataItem[17], + dataItemCount >= 19 ? dataItem[18] : OUString() + ); + return item; + } + else { + LocaleDataItem2 item1; + return item1; + } +} + #ifndef DISABLE_DYNLOADING extern "C" { static void SAL_CALL thisModule() {} } @@ -1560,7 +1601,10 @@ sal_Bool SAL_CALL LocaleDataImpl::supportsService(const OUString& rServiceName) Sequence< OUString > SAL_CALL LocaleDataImpl::getSupportedServiceNames() { - Sequence< OUString > aRet { "com.sun.star.i18n.LocaleData" }; + Sequence< OUString > aRet { + "com.sun.star.i18n.LocaleData", + "com.sun.star.i18n.LocaleData2" + }; return aRet; } diff --git a/i18npool/util/i18npool.component b/i18npool/util/i18npool.component index 1b74fd736f54..3598ffa8b781 100644 --- a/i18npool/util/i18npool.component +++ b/i18npool/util/i18npool.component @@ -128,6 +128,7 @@ +