summaryrefslogtreecommitdiffstats
path: root/svl
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2019-08-20 19:42:39 +0200
committerXisco FaulĂ­ <xiscofauli@libreoffice.org>2019-08-21 11:50:49 +0200
commit5f7e50ec1583e8b0a3fa916c1e2f41cbd544ff07 (patch)
tree695b1a4d2cd76f7916cc0b5accb9cb65bb115216 /svl
parentsw undo/redo: avoid usage of pointers as a style references (diff)
downloadcore-5f7e50ec1583e8b0a3fa916c1e2f41cbd544ff07.tar.gz
core-5f7e50ec1583e8b0a3fa916c1e2f41cbd544ff07.zip
Resolves: tdf#122110 convert condition decimal separator to target locale
Otherwise re-scanning the format code in the target locale failed. Change-Id: Ia4face1b5630c197f68b1f521e62b163550301e6 Reviewed-on: https://gerrit.libreoffice.org/77852 Reviewed-by: Eike Rathke <erack@redhat.com> Tested-by: Jenkins (cherry picked from commit 152c4fcbf1aa5b7454834581927056cfc9d1d7e5) Reviewed-on: https://gerrit.libreoffice.org/77858 Reviewed-by: Bartosz Kosiorek <gang65@poczta.onet.pl>
Diffstat (limited to 'svl')
-rw-r--r--svl/source/numbers/zforlist.cxx16
-rw-r--r--svl/source/numbers/zformat.cxx18
2 files changed, 31 insertions, 3 deletions
diff --git a/svl/source/numbers/zforlist.cxx b/svl/source/numbers/zforlist.cxx
index 705e0624c785..d69f481b751e 100644
--- a/svl/source/numbers/zforlist.cxx
+++ b/svl/source/numbers/zforlist.cxx
@@ -2052,20 +2052,30 @@ OUString SvNumberFormatter::GetFormatDecimalSep( sal_uInt32 nFormat ) const
{
::osl::MutexGuard aGuard( GetInstanceMutex() );
const SvNumberformat* pFormat = GetFormatEntry(nFormat);
- if ( !pFormat || pFormat->GetLanguage() == ActLnge )
+ if (!pFormat)
+ {
+ return GetNumDecimalSep();
+ }
+ return GetLangDecimalSep( pFormat->GetLanguage());
+}
+
+OUString SvNumberFormatter::GetLangDecimalSep( LanguageType nLang ) const
+{
+ ::osl::MutexGuard aGuard( GetInstanceMutex() );
+ if (nLang == ActLnge)
{
return GetNumDecimalSep();
}
OUString aRet;
LanguageType eSaveLang = xLocaleData.getCurrentLanguage();
- if ( pFormat->GetLanguage() == eSaveLang )
+ if (nLang == eSaveLang)
{
aRet = xLocaleData->getNumDecimalSep();
}
else
{
LanguageTag aSaveLocale( xLocaleData->getLanguageTag() );
- const_cast<SvNumberFormatter*>(this)->xLocaleData.changeLocale( LanguageTag( pFormat->GetLanguage()) );
+ const_cast<SvNumberFormatter*>(this)->xLocaleData.changeLocale( LanguageTag( nLang));
aRet = xLocaleData->getNumDecimalSep();
const_cast<SvNumberFormatter*>(this)->xLocaleData.changeLocale( aSaveLocale );
}
diff --git a/svl/source/numbers/zformat.cxx b/svl/source/numbers/zformat.cxx
index daa9791dba3c..c90c8479657c 100644
--- a/svl/source/numbers/zformat.cxx
+++ b/svl/source/numbers/zformat.cxx
@@ -791,8 +791,11 @@ SvNumberformat::SvNumberformat(OUString& rString,
sBuff.replace( cNNBSp, ' ');
}
+ OUString aConvertFromDecSep;
+ OUString aConvertToDecSep;
if (rScan.GetConvertMode())
{
+ aConvertFromDecSep = GetFormatter().GetNumDecimalSep();
maLocale.meLanguage = rScan.GetNewLnge();
eLan = maLocale.meLanguage; // Make sure to return switch
}
@@ -853,6 +856,7 @@ SvNumberformat::SvNumberformat(OUString& rString,
sal_Int32 nCntChars = ImpGetNumber(sBuff, nPos, sStr);
if (nCntChars > 0)
{
+ sal_Int32 nDecPos;
SvNumFormatType F_Type = SvNumFormatType::UNDEFINED;
if (!pISc->IsNumberFormat(sStr, F_Type, fNumber, nullptr) ||
( F_Type != SvNumFormatType::NUMBER &&
@@ -864,6 +868,20 @@ SvNumberformat::SvNumberformat(OUString& rString,
sBuff.insert(nPos, '0');
nPos++;
}
+ else if (rScan.GetConvertMode() && ((nDecPos = sStr.indexOf( aConvertFromDecSep)) >= 0))
+ {
+ if (aConvertToDecSep.isEmpty())
+ aConvertToDecSep = GetFormatter().GetLangDecimalSep( rScan.GetNewLnge());
+ if (aConvertToDecSep != aConvertFromDecSep)
+ {
+ const OUString aStr( sStr.replaceAt( nDecPos,
+ aConvertFromDecSep.getLength(), aConvertToDecSep));
+ nPos = nPos - nCntChars;
+ sBuff.remove(nPos, nCntChars);
+ sBuff.insert(nPos, aStr);
+ nPos += aStr.getLength();
+ }
+ }
}
else
{