diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2018-05-13 03:09:43 +0300 |
---|---|---|
committer | László Németh <nemeth@numbertext.org> | 2018-06-08 15:08:33 +0200 |
commit | 90d233b0311a208967a3e264820e00395bf057fb (patch) | |
tree | 62ce991f6a6f2829a068a5cfe8279a28de80c28e /i18npool | |
parent | 465fedc3501284cc5db43b03163d5bd9fc344cd7 (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>
Diffstat (limited to 'i18npool')
-rw-r--r-- | i18npool/inc/nativenumbersupplier.hxx | 17 | ||||
-rw-r--r-- | i18npool/source/defaultnumberingprovider/defaultnumberingprovider.cxx | 19 | ||||
-rw-r--r-- | i18npool/source/nativenumber/nativenumbersupplier.cxx | 44 | ||||
-rw-r--r-- | i18npool/util/i18npool.component | 1 |
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 b25007969e38..025cd0d897eb 100644 --- a/i18npool/source/nativenumber/nativenumbersupplier.cxx +++ b/i18npool/source/nativenumber/nativenumbersupplier.cxx @@ -556,17 +556,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++) @@ -599,11 +597,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. @@ -612,7 +608,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; @@ -625,15 +621,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) @@ -721,6 +717,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 @@ -772,9 +776,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); @@ -1157,7 +1159,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"> |