summaryrefslogtreecommitdiff
path: root/svl
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 /svl
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 'svl')
-rw-r--r--svl/qa/unit/svl.cxx4
-rw-r--r--svl/source/numbers/zformat.cxx35
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);
}