[Libreoffice-commits] core.git: sc/source unotools/source

Mike Kaganski (via logerrit) logerrit at kemper.freedesktop.org
Thu May 7 10:24:19 UTC 2020


 sc/source/filter/excel/excel.cxx         |    6 +++++-
 sc/source/filter/excel/impop.cxx         |    6 ------
 sc/source/filter/excel/xistyle.cxx       |    4 +---
 unotools/source/misc/defaultencoding.cxx |    6 ++++++
 4 files changed, 12 insertions(+), 10 deletions(-)

New commits:
commit ac0112ecefd64094b150390fc36f9f56d19a4d87
Author:     Mike Kaganski <mike.kaganski at collabora.com>
AuthorDate: Thu May 7 09:26:42 2020 +0300
Commit:     Mike Kaganski <mike.kaganski at collabora.com>
CommitDate: Thu May 7 12:23:40 2020 +0200

    tdf#132796: use LO language settings to set default XLS language
    
    This partially reverts fixes for i#63105 and i#71033, i.e. parts of
    commits 6ca96e7aee937affef218e0bb892e6904f4ef358 and
    35777f0b401ba7bee21a24c32739e86598ba608b.
    
    Instead of using hard-coded Win-1252 for Excel files by default, use
    LibreOffice locale language or default document language (as used for
    old WMF, DXF and RTF files - see
    20f6a6b159c69771dc0e087f63b6c701908e32e2,
    1a9a77f84cac68bd5374df3e9ee4df88dc87a0ac, and
    f26bbdb386f9e66b1a154d0589b1a446ea2dd8d5).
    
    When a font in XLS specifies ANSI_CHARSET (0), allow using the default
    encoding, not the corresponding Win-1252. This mimics Excel behaviour
    for such fonts.
    
    Do not use first font's encoding as file default encoding, as Excel
    doesn't do that.
    
    Do not consider font-specified encoding in ImportExcel::Rstring to
    mimic Excel behaviour for cell number formats (but keep using it in
    ImportExcel::ReadLabel for cell content).
    
    Change-Id: I9860013a1244dc12f06f30c81a67909012c04913
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/93612
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>

diff --git a/sc/source/filter/excel/excel.cxx b/sc/source/filter/excel/excel.cxx
index ca87efc2988c..386342988060 100644
--- a/sc/source/filter/excel/excel.cxx
+++ b/sc/source/filter/excel/excel.cxx
@@ -26,6 +26,8 @@
 #include <tools/globname.hxx>
 #include <com/sun/star/ucb/ContentCreationException.hpp>
 #include <unotools/streamwrap.hxx>
+#include <unotools/defaultencoding.hxx>
+#include <unotools/wincodepage.hxx>
 #include <osl/diagnose.h>
 #include <filter.hxx>
 #include <document.hxx>
@@ -118,7 +120,9 @@ ErrCode ScFormatFilterPluginImpl::ScImportExcel( SfxMedium& rMedium, ScDocument*
     {
         pBookStrm->SetBufferSize( 0x8000 );     // still needed?
 
-        XclImpRootData aImpData( eBiff, rMedium, xRootStrg, *pDocument, RTL_TEXTENCODING_MS_1252 );
+        XclImpRootData aImpData(
+            eBiff, rMedium, xRootStrg, *pDocument,
+            utl_getWinTextEncodingFromLangStr(utl_getLocaleForGlobalDefaultEncoding()));
         std::unique_ptr< ImportExcel > xFilter;
         switch( eBiff )
         {
diff --git a/sc/source/filter/excel/impop.cxx b/sc/source/filter/excel/impop.cxx
index f130a39fccdd..5151232e108d 100644
--- a/sc/source/filter/excel/impop.cxx
+++ b/sc/source/filter/excel/impop.cxx
@@ -908,13 +908,7 @@ void ImportExcel::Rstring()
     {
         // unformatted Unicode string with separate formatting information
         XclImpString aString;
-
-        // #i63105# use text encoding from FONT record
-        rtl_TextEncoding eOldTextEnc = GetTextEncoding();
-        if( const XclImpFont* pFont = GetXFBuffer().GetFont( nXFIdx ) )
-            SetTextEncoding( pFont->GetFontEncoding() );
         aString.Read( maStrm );
-        SetTextEncoding( eOldTextEnc );
 
         // character formatting runs
         if( !aString.IsRich() )
diff --git a/sc/source/filter/excel/xistyle.cxx b/sc/source/filter/excel/xistyle.cxx
index 886f20dc5551..798dd8359ced 100644
--- a/sc/source/filter/excel/xistyle.cxx
+++ b/sc/source/filter/excel/xistyle.cxx
@@ -445,7 +445,7 @@ void XclImpFont::ReadFontData5( XclImpStream& rStrm )
     maData.mbStrikeout  = ::get_flag( nFlags, EXC_FONTATTR_STRIKEOUT );
     maData.mbOutline    = ::get_flag( nFlags, EXC_FONTATTR_OUTLINE );
     maData.mbShadow     = ::get_flag( nFlags, EXC_FONTATTR_SHADOW );
-    mbHasCharSet = true;
+    mbHasCharSet = maData.mnCharSet != 0;
 }
 
 void XclImpFont::ReadFontColor( XclImpStream& rStrm )
@@ -578,8 +578,6 @@ void XclImpFontBuffer::ReadFont( XclImpStream& rStrm )
     if( maFontList.size() == 1 )
     {
         UpdateAppFont( rFont.GetFontData(), rFont.HasCharSet() );
-        // #i71033# set text encoding from application font, if CODEPAGE is missing
-        SetAppFontEncoding( rFont.GetFontEncoding() );
     }
 }
 
diff --git a/unotools/source/misc/defaultencoding.cxx b/unotools/source/misc/defaultencoding.cxx
index b0e473d099bd..552f3b8c40d7 100644
--- a/unotools/source/misc/defaultencoding.cxx
+++ b/unotools/source/misc/defaultencoding.cxx
@@ -13,14 +13,20 @@
 #include <unotools/defaultencoding.hxx>
 #include <officecfg/Office/Linguistic.hxx>
 #include <officecfg/Setup.hxx>
+#include <officecfg/System.hxx>
 
 OUString utl_getLocaleForGlobalDefaultEncoding()
 {
     if (utl::ConfigManager::IsFuzzing())
         return "en-US";
+    // First try document default language
     OUString result(officecfg::Office::Linguistic::General::DefaultLocale::get());
+    // Fallback to LO locale
     if (result.isEmpty())
         result = officecfg::Setup::L10N::ooSetupSystemLocale::get();
+    // Fallback to system locale
+    if (result.isEmpty())
+        result = officecfg::System::L10N::Locale::get();
     return result;
 }
 


More information about the Libreoffice-commits mailing list