diff options
author | Eike Rathke <erack@redhat.com> | 2019-08-20 19:42:39 +0200 |
---|---|---|
committer | Xisco FaulĂ <xiscofauli@libreoffice.org> | 2019-08-21 11:50:49 +0200 |
commit | 5f7e50ec1583e8b0a3fa916c1e2f41cbd544ff07 (patch) | |
tree | 695b1a4d2cd76f7916cc0b5accb9cb65bb115216 /svl | |
parent | sw undo/redo: avoid usage of pointers as a style references (diff) | |
download | core-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.cxx | 16 | ||||
-rw-r--r-- | svl/source/numbers/zformat.cxx | 18 |
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 { |