diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2018-05-13 03:09:43 +0300 |
---|---|---|
committer | Eike Rathke <erack@redhat.com> | 2018-06-11 22:59:12 +0200 |
commit | 90385c35cc6bea312eedeea2de33529e76cd6f2a (patch) | |
tree | 8770c7c27d5776c2c98bf96626d32130c9c27eaa /svl | |
parent | 3aa6a43a59ea940fa079231b0a0251d7bbd05f85 (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 'svl')
-rw-r--r-- | svl/qa/unit/svl.cxx | 4 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 35 |
2 files changed, 32 insertions, 7 deletions
diff --git a/svl/qa/unit/svl.cxx b/svl/qa/unit/svl.cxx index 737c3dcc379d..0ace5c7e1bb4 100644 --- a/svl/qa/unit/svl.cxx +++ b/svl/qa/unit/svl.cxx @@ -1388,10 +1388,10 @@ void Test::testUserDefinedNumberFormats() sCode = "[NatNum12]0.00"; sExpected = "one hundred twenty-three point four five"; checkPreviewString(aFormatter, sCode, 123.45, eLang, sExpected); - sCode = "[NatNum13]0"; + sCode = "[NatNum12 ordinal]0"; sExpected = "one hundred twenty-third"; checkPreviewString(aFormatter, sCode, 123, eLang, sExpected); - sCode = "[NatNum14]0"; + sCode = "[NatNum12 ordinal-number]0"; sExpected = "123rd"; checkPreviewString(aFormatter, sCode, 123, eLang, sExpected); #endif diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx index 1a0b80e30a34..c9bcf82a88c6 100644 --- a/svl/source/numbers/zformat.cxx +++ b/svl/source/numbers/zformat.cxx @@ -33,6 +33,7 @@ #include <com/sun/star/i18n/CalendarDisplayIndex.hpp> #include <com/sun/star/i18n/CalendarDisplayCode.hpp> #include <com/sun/star/i18n/AmPmValue.hpp> +#include <com/sun/star/i18n/NativeNumberMode.hpp> #include <svl/zformat.hxx> #include "zforscan.hxx" @@ -751,6 +752,13 @@ OUString SvNumberformat::ImpObtainCalendarAndNumerals( OUStringBuffer& rString, return sCalendar; } +namespace +{ +bool NatNumTakesParameters(sal_Int16 nNum) +{ + return (nNum == css::i18n::NativeNumberMode::NATNUM12); +} +} SvNumberformat::SvNumberformat(OUString& rString, ImpSvNumberformatScan* pSc, @@ -928,11 +936,27 @@ SvNumberformat::SvNumberformat(OUString& rString, } else { - sStr = "NatNum"; + OUString sParams; + sal_Int32 nSpacePos = sStr.indexOf(' '); + if (nSpacePos >= 0) + { + sParams = sStr.copy(nSpacePos+1).trim(); + } //! eSymbolType is negative sal_uInt8 nNum = static_cast<sal_uInt8>(0 - (eSymbolType - BRACKET_SYMBOLTYPE_NATNUM0)); - sStr += OUString::number( nNum ); + if (!sParams.isEmpty() && !NatNumTakesParameters(nNum)) + { + bCancel = true; // break for + nCheckPos = nPosOld; + break; + } + sStr = "NatNum" + OUString::number(nNum); NumFor[nIndex].SetNatNumNum( nNum, false ); + if (!sParams.isEmpty()) + { + NumFor[nIndex].SetNatNumParams(sParams); + sStr += " " + sParams; + } } break; case BRACKET_SYMBOLTYPE_DBNUM1 : @@ -5350,8 +5374,8 @@ OUString SvNumberformat::impTransliterateImpl(const OUString& rStr, const SvNumberNatNum& rNum ) const { css::lang::Locale aLocale( LanguageTag( rNum.GetLang() ).getLocale() ); - return GetFormatter().GetNatNum()->getNativeNumberString( rStr, - aLocale, rNum.GetNatNum() ); + return GetFormatter().GetNatNum()->getNativeNumberStringParams(rStr, aLocale, rNum.GetNatNum(), + rNum.GetParams()); } void SvNumberformat::impTransliterateImpl(OUStringBuffer& rStr, @@ -5360,7 +5384,8 @@ void SvNumberformat::impTransliterateImpl(OUStringBuffer& rStr, css::lang::Locale aLocale( LanguageTag( rNum.GetLang() ).getLocale() ); OUString sTemp(rStr.makeStringAndClear()); - sTemp = GetFormatter().GetNatNum()->getNativeNumberString( sTemp, aLocale, rNum.GetNatNum() ); + sTemp = GetFormatter().GetNatNum()->getNativeNumberStringParams( + sTemp, aLocale, rNum.GetNatNum(), rNum.GetParams()); rStr.append(sTemp); } |