summaryrefslogtreecommitdiff
path: root/i18npool
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2018-05-13 03:09:43 +0300
committerEike Rathke <erack@redhat.com>2018-06-11 22:59:12 +0200
commit90385c35cc6bea312eedeea2de33529e76cd6f2a (patch)
tree8770c7c27d5776c2c98bf96626d32130c9c27eaa /i18npool
parent3aa6a43a59ea940fa079231b0a0251d7bbd05f85 (diff)
tdf#115007: Use [NatNum12 params...] syntax
This allows using all the libnumbertext library functions. [NatNum12] gives cardinal number names (one, two, three, ...) [NatNum12 ordinal] gives ordinal number names (first, second, third, ...) [NatNum12 ordinal-number] gives ordinal indicators (1st, 2nd, 3rd, ...) [NatNum12 money USD][$-409] gives formal English (US) money text ... etc (see numbertext.org for syntax). Change-Id: I16dbb44d8d4bdb82a1b950de6d438c8311b554ff Reviewed-on: https://gerrit.libreoffice.org/54366 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: László Németh <nemeth@numbertext.org> (cherry picked from commit 90d233b0311a208967a3e264820e00395bf057fb) Reviewed-on: https://gerrit.libreoffice.org/55624 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: László Németh <nemeth@numbertext.org>
Diffstat (limited to 'i18npool')
-rw-r--r--i18npool/inc/nativenumbersupplier.hxx17
-rw-r--r--i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx19
-rw-r--r--i18npool/source/nativenumber/nativenumbersupplier.cxx44
-rw-r--r--i18npool/util/i18npool.component1
4 files changed, 47 insertions, 34 deletions
diff --git a/i18npool/inc/nativenumbersupplier.hxx b/i18npool/inc/nativenumbersupplier.hxx
index e248a1812004..d17c39fe7490 100644
--- a/i18npool/inc/nativenumbersupplier.hxx
+++ b/i18npool/inc/nativenumbersupplier.hxx
@@ -19,7 +19,7 @@
#ifndef INCLUDED_I18NPOOL_INC_NATIVENUMBERSUPPLIER_HXX
#define INCLUDED_I18NPOOL_INC_NATIVENUMBERSUPPLIER_HXX
-#include <com/sun/star/i18n/XNativeNumberSupplier.hpp>
+#include <com/sun/star/i18n/XNativeNumberSupplier2.hpp>
#include <com/sun/star/i18n/NativeNumberMode.hpp>
#include <com/sun/star/i18n/NativeNumberXmlAttributes.hpp>
#include <cppuhelper/implbase.hxx>
@@ -32,7 +32,7 @@ namespace i18npool {
// ----------------------------------------------------
class NativeNumberSupplierService : public cppu::WeakImplHelper
<
- css::i18n::XNativeNumberSupplier,
+ css::i18n::XNativeNumberSupplier2,
css::lang::XServiceInfo
>
{
@@ -52,6 +52,11 @@ public:
virtual sal_Int16 SAL_CALL convertFromXmlAttributes(
const css::i18n::NativeNumberXmlAttributes& aAttr ) override;
+ // XNativeNumberSupplier2
+ virtual OUString SAL_CALL getNativeNumberStringParams(
+ const OUString& rNumberString, const css::lang::Locale& rLocale,
+ sal_Int16 nNativeNumberMode, const OUString& rNativeNumberParams) override;
+
//XServiceInfo
virtual OUString SAL_CALL getImplementationName() override;
virtual sal_Bool SAL_CALL supportsService(const OUString& ServiceName) override;
@@ -59,9 +64,11 @@ public:
// following methods are not for XNativeNumberSupplier, they are for calling from transliterations
/// @throws css::uno::RuntimeException
- OUString getNativeNumberString( const OUString& aNumberString,
- const css::lang::Locale& aLocale, sal_Int16 nNativeNumberMode,
- css::uno::Sequence< sal_Int32 >& offset );
+ OUString getNativeNumberString(const OUString& rNumberString,
+ const css::lang::Locale& rLocale,
+ sal_Int16 nNativeNumberMode,
+ css::uno::Sequence<sal_Int32>& offset,
+ const OUString& rNativeNumberParams = OUString());
/// @throws css::uno::RuntimeException
sal_Unicode getNativeNumberChar( const sal_Unicode inChar,
const css::lang::Locale& aLocale, sal_Int16 nNativeNumberMode ) ;
diff --git a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
index af4e27d0f69f..45a222ce9efd 100644
--- a/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
+++ b/i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx
@@ -585,6 +585,7 @@ DefaultNumberingProvider::makeNumberingString( const Sequence<beans::PropertyVal
const sal_Unicode *table = nullptr; // initialize to avoid compiler warning
bool bRecycleSymbol = false;
bool bCapitalize = false;
+ OUString sNatNumParams;
Locale locale;
OUString prefix;
@@ -635,18 +636,20 @@ DefaultNumberingProvider::makeNumberingString( const Sequence<beans::PropertyVal
case CHARS_LOWER_LETTER:
lcl_formatChars( lowerLetter, 26, number-1, result );
break;
- case TEXT_NUMBER:
- natNum = NativeNumberMode::NATNUM14; // ordinal indicators (1st, 2nd, 3rd, ...)
+ case TEXT_NUMBER: // ordinal indicators (1st, 2nd, 3rd, ...)
+ natNum = NativeNumberMode::NATNUM12;
+ sNatNumParams = "ordinal-number";
locale = aLocale;
bCapitalize = true;
break;
- case TEXT_CARDINAL:
- natNum = NativeNumberMode::NATNUM12; // cardinal number names (one, two, three, ...)
+ case TEXT_CARDINAL: // cardinal number names (one, two, three, ...)
+ natNum = NativeNumberMode::NATNUM12;
locale = aLocale;
bCapitalize = true;
break;
- case TEXT_ORDINAL:
- natNum = NativeNumberMode::NATNUM13; // ordinal number names (first, second, third, ...)
+ case TEXT_ORDINAL: // ordinal number names (first, second, third, ...)
+ natNum = NativeNumberMode::NATNUM12;
+ sNatNumParams = "ordinal";
locale = aLocale;
bCapitalize = true;
break;
@@ -909,8 +912,8 @@ DefaultNumberingProvider::makeNumberingString( const Sequence<beans::PropertyVal
if (natNum) {
rtl::Reference<NativeNumberSupplierService> xNatNum(new NativeNumberSupplierService);
- OUString aNum
- = xNatNum->getNativeNumberString(OUString::number(number), locale, natNum);
+ OUString aNum = xNatNum->getNativeNumberStringParams(OUString::number(number), locale,
+ natNum, sNatNumParams);
if (bCapitalize)
{
if (!xCharClass.is())
diff --git a/i18npool/source/nativenumber/nativenumbersupplier.cxx b/i18npool/source/nativenumber/nativenumbersupplier.cxx
index 7862edb48f77..0de111165adc 100644
--- a/i18npool/source/nativenumber/nativenumbersupplier.cxx
+++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx
@@ -557,17 +557,15 @@ Separators getLocaleSeparators(const Locale& rLocale, const OUString& rLocStr)
return it->second;
}
-OUString getNumberText(const Locale& aLocale, sal_Int16 numType, const OUString& rNumberString)
+OUString getNumberText(const Locale& rLocale, const OUString& rNumberString,
+ const OUString& sNumberTextParams)
{
- assert(numType == NativeNumberMode::NATNUM12 || numType == NativeNumberMode::NATNUM13
- || numType == NativeNumberMode::NATNUM14);
-
sal_Int32 i, count = 0;
const sal_Int32 len = rNumberString.getLength();
const sal_Unicode* src = rNumberString.getStr();
- OUString aLoc = LanguageTag::convertToBcp47(aLocale);
- Separators aSeparators = getLocaleSeparators(aLocale, aLoc);
+ OUString aLoc = LanguageTag::convertToBcp47(rLocale);
+ Separators aSeparators = getLocaleSeparators(rLocale, aLoc);
OUStringBuffer sBuf(len);
for (i = 0; i < len; i++)
@@ -600,11 +598,9 @@ OUString getNumberText(const Locale& aLocale, sal_Int16 numType, const OUString&
static auto xNumberText
= css::linguistic2::NumberText::create(comphelper::getProcessComponentContext());
- OUString numbertext_prefix;
- if (numType == NativeNumberMode::NATNUM14)
- numbertext_prefix = "ordinal-number ";
- else if (numType == NativeNumberMode::NATNUM13)
- numbertext_prefix = "ordinal ";
+ OUString numbertext_prefix = sNumberTextParams;
+ if (!numbertext_prefix.isEmpty())
+ numbertext_prefix += " ";
// Several hundreds of headings could result typing lags because
// of the continuous update of the multiple number names during typing.
// We fix this by buffering the result of the conversion.
@@ -613,7 +609,7 @@ OUString getNumberText(const Locale& aLocale, sal_Int16 numType, const OUString&
auto& rItem = rItems[numbertext_prefix + aLoc];
if (rItem.isEmpty())
{
- rItem = xNumberText->getNumberText(numbertext_prefix + aNumberStr, aLocale);
+ rItem = xNumberText->getNumberText(numbertext_prefix + aNumberStr, rLocale);
// use number at missing number to text conversion
if (rItem.isEmpty())
rItem = aNumberStr;
@@ -626,15 +622,15 @@ OUString getNumberText(const Locale& aLocale, sal_Int16 numType, const OUString&
}
OUString NativeNumberSupplierService::getNativeNumberString(const OUString& aNumberString, const Locale& rLocale,
- sal_Int16 nNativeNumberMode, Sequence< sal_Int32 >& offset)
+ sal_Int16 nNativeNumberMode,
+ Sequence<sal_Int32>& offset,
+ const OUString& rNativeNumberParams)
{
if (!isValidNatNum(rLocale, nNativeNumberMode))
return aNumberString;
- if (nNativeNumberMode == NativeNumberMode::NATNUM12
- || nNativeNumberMode == NativeNumberMode::NATNUM13
- || nNativeNumberMode == NativeNumberMode::NATNUM14)
- return getNumberText(rLocale, nNativeNumberMode, aNumberString);
+ if (nNativeNumberMode == NativeNumberMode::NATNUM12)
+ return getNumberText(rLocale, aNumberString, rNativeNumberParams);
sal_Int16 langnum = getLanguageNumber(rLocale);
if (langnum == -1)
@@ -722,6 +718,14 @@ OUString SAL_CALL NativeNumberSupplierService::getNativeNumberString(const OUStr
return getNativeNumberString(aNumberString, rLocale, nNativeNumberMode, offset);
}
+OUString SAL_CALL NativeNumberSupplierService::getNativeNumberStringParams(
+ const OUString& rNumberString, const css::lang::Locale& rLocale, sal_Int16 nNativeNumberMode,
+ const OUString& rNativeNumberParams)
+{
+ Sequence<sal_Int32> offset;
+ return getNativeNumberString(rNumberString, rLocale, nNativeNumberMode, offset, rNativeNumberParams);
+}
+
sal_Unicode NativeNumberSupplierService::getNativeNumberChar( const sal_Unicode inChar, const Locale& rLocale, sal_Int16 nNativeNumberMode )
{
if (nNativeNumberMode == NativeNumberMode::NATNUM0) { // Ascii
@@ -773,9 +777,7 @@ sal_Bool SAL_CALL NativeNumberSupplierService::isValidNatNum( const Locale& rLoc
switch (nNativeNumberMode) {
case NativeNumberMode::NATNUM0: // Ascii
case NativeNumberMode::NATNUM3: // Char, FullWidth
- case NativeNumberMode::NATNUM12: // Cardinal number names (one, two, three, ...)
- case NativeNumberMode::NATNUM13: // Ordinal number names (first, second, third, ...)
- case NativeNumberMode::NATNUM14: // Ordinal indicators (1st, 2nd, 3rd, ...)
+ case NativeNumberMode::NATNUM12: // Spell number
return true;
case NativeNumberMode::NATNUM1: // Char, Lower
return (langnum >= 0);
@@ -1158,7 +1160,7 @@ NativeNumberSupplierService::supportsService(const OUString& rServiceName)
Sequence< OUString > SAL_CALL
NativeNumberSupplierService::getSupportedServiceNames()
{
- Sequence< OUString > aRet {implementationName};
+ Sequence< OUString > aRet {implementationName, "com.sun.star.i18n.NativeNumberSupplier2"};
return aRet;
}
diff --git a/i18npool/util/i18npool.component b/i18npool/util/i18npool.component
index 3598ffa8b781..d4e7ea7b0a35 100644
--- a/i18npool/util/i18npool.component
+++ b/i18npool/util/i18npool.component
@@ -133,6 +133,7 @@
<implementation name="com.sun.star.i18n.NativeNumberSupplier"
constructor="com_sun_star_i18n_NativeNumberSupplier_get_implementation">
<service name="com.sun.star.i18n.NativeNumberSupplier"/>
+ <service name="com.sun.star.i18n.NativeNumberSupplier2"/>
</implementation>
<implementation name="com.sun.star.i18n.NumberFormatCodeMapper"
constructor="com_sun_star_i18n_NumberFormatCodeMapper_get_implementation">