From d401b4a40d093210d5a3a7f1f3b0379f8cafc173 Mon Sep 17 00:00:00 2001 From: Lionel Elie Mamane Date: Sun, 2 Jul 2017 11:28:09 +0200 Subject: factorisation du décodage MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I0130945b5c616beaa3eaedb34e5ca77b1bd70547 --- sc/CppunitTest_sc_ucalc.mk | 1 + sc/Library_sc.mk | 1 + sc/source/ui/unoobj/filtuno.cxx | 107 +++++++++------------------------------- 3 files changed, 25 insertions(+), 84 deletions(-) (limited to 'sc') diff --git a/sc/CppunitTest_sc_ucalc.mk b/sc/CppunitTest_sc_ucalc.mk index d918182a0c4f..d423f6c73a7b 100644 --- a/sc/CppunitTest_sc_ucalc.mk +++ b/sc/CppunitTest_sc_ucalc.mk @@ -45,6 +45,7 @@ $(eval $(call gb_CppunitTest_use_libraries,sc_ucalc, \ comphelper \ cppu \ cppuhelper \ + dbtools \ drawinglayer \ editeng \ for \ diff --git a/sc/Library_sc.mk b/sc/Library_sc.mk index 5b7d2fcf9275..c9f54638e62e 100644 --- a/sc/Library_sc.mk +++ b/sc/Library_sc.mk @@ -58,6 +58,7 @@ $(eval $(call gb_Library_use_libraries,sc,\ comphelper \ cppu \ cppuhelper \ + dbtools \ drawinglayer \ editeng \ for \ diff --git a/sc/source/ui/unoobj/filtuno.cxx b/sc/source/ui/unoobj/filtuno.cxx index de16f6b28f55..b2da4408e874 100644 --- a/sc/source/ui/unoobj/filtuno.cxx +++ b/sc/source/ui/unoobj/filtuno.cxx @@ -22,6 +22,7 @@ #include #include #include +#include #include "editutil.hxx" #include "filtuno.hxx" @@ -44,6 +45,7 @@ using namespace com::sun::star; using namespace com::sun::star::uno; +using namespace connectivity::dbase; #define SCFILTEROPTIONSOBJ_SERVICE "com.sun.star.ui.dialogs.FilterOptionsDialog" #define SCFILTEROPTIONSOBJ_IMPLNAME "com.sun.star.comp.Calc.FilterOptionsDialog" @@ -84,97 +86,34 @@ namespace charsetSource load_CharSet(rtl_TextEncoding &nCharSet, bool bExport, SvStream* dbf_Stream) { + if (dbfReadCharset(nCharSet, dbf_Stream)) { - sal_uInt8 nType=0; - dbf_Stream->ReadUChar( nType ); - - switch (nType) - { - case dBaseIII: - case dBaseIV: - case dBaseV: - case VisualFoxPro: - case VisualFoxProAuto: - case dBaseFS: - case dBaseFSMemo: - case dBaseIVMemoSQL: - case dBaseIIIMemo: - case FoxProMemo: - dbf_Stream->SetEndian(SvStreamEndian::LITTLE); - - dbf_Stream->Seek(STREAM_SEEK_TO_BEGIN + 29); - if (! dbf_Stream->IsEof()) - { - sal_uInt8 nEncoding=0; - dbf_Stream->ReadUChar( nEncoding ); - if (nEncoding != 0x00) - { - auto eEncoding(RTL_TEXTENCODING_DONTKNOW); - switch(nEncoding) - { - case 0x01: eEncoding = RTL_TEXTENCODING_IBM_437; break; // DOS USA code page 437 - case 0x02: eEncoding = RTL_TEXTENCODING_IBM_850; break; // DOS Multilingual code page 850 - case 0x03: eEncoding = RTL_TEXTENCODING_MS_1252; break; // Windows ANSI code page 1252 - case 0x04: eEncoding = RTL_TEXTENCODING_APPLE_ROMAN; break; // Standard Macintosh - case 0x64: eEncoding = RTL_TEXTENCODING_IBM_852; break; // EE MS-DOS code page 852 - case 0x65: eEncoding = RTL_TEXTENCODING_IBM_866; break; // Russian MS-DOS code page 866 - case 0x66: eEncoding = RTL_TEXTENCODING_IBM_865; break; // Nordic MS-DOS code page 865 - case 0x67: eEncoding = RTL_TEXTENCODING_IBM_861; break; // Icelandic MS-DOS - //case 0x68: eEncoding = ; break; // Kamenicky (Czech) MS-DOS - //case 0x69: eEncoding = ; break; // Mazovia (Polish) MS-DOS - case 0x6A: eEncoding = RTL_TEXTENCODING_IBM_737; break; // Greek MS-DOS (437G) - case 0x6B: eEncoding = RTL_TEXTENCODING_IBM_857; break; // Turkish MS-DOS - case 0x6C: eEncoding = RTL_TEXTENCODING_IBM_863; break; // MS-DOS, Canada - case 0x78: eEncoding = RTL_TEXTENCODING_MS_950; break; // Windows, Traditional Chinese - case 0x79: eEncoding = RTL_TEXTENCODING_MS_949; break; // Windows, Korean (Hangul) - case 0x7A: eEncoding = RTL_TEXTENCODING_MS_936; break; // Windows, Simplified Chinese - case 0x7B: eEncoding = RTL_TEXTENCODING_MS_932; break; // Windows, Japanese (Shift-jis) - case 0x7C: eEncoding = RTL_TEXTENCODING_MS_874; break; // Windows, Thai - case 0x7D: eEncoding = RTL_TEXTENCODING_MS_1255; break; // Windows, Hebrew - case 0x7E: eEncoding = RTL_TEXTENCODING_MS_1256; break; // Windows, Arabic - case 0x96: eEncoding = RTL_TEXTENCODING_APPLE_CYRILLIC; break; // Russian Macintosh - case 0x97: eEncoding = RTL_TEXTENCODING_APPLE_CENTEURO; break; // Eastern European Macintosh - case 0x98: eEncoding = RTL_TEXTENCODING_APPLE_GREEK; break; // Greek Macintosh - case 0xC8: eEncoding = RTL_TEXTENCODING_MS_1250; break; // Windows EE code page 1250 - case 0xC9: eEncoding = RTL_TEXTENCODING_MS_1251; break; // Russian Windows - case 0xCA: eEncoding = RTL_TEXTENCODING_MS_1254; break; // Turkish Windows - case 0xCB: eEncoding = RTL_TEXTENCODING_MS_1253; break; // Greek Windows - case 0xCC: eEncoding = RTL_TEXTENCODING_MS_1257; break; // Windows, Baltic - } - if(eEncoding != RTL_TEXTENCODING_DONTKNOW) - { - nCharSet = eEncoding; - return charsetSource::charset_from_file; - } - } - } - } + return charsetSource::charset_from_file; } - { - Sequence aValues; - const Any *pProperties; - Sequence aNames { DBF_CHAR_SET }; - ScLinkConfigItem aItem( OUString::createFromAscii( - bExport?DBF_SEP_PATH_EXPORT:DBF_SEP_PATH_IMPORT ) ); - aValues = aItem.GetProperties( aNames ); - pProperties = aValues.getConstArray(); + Sequence aValues; + const Any *pProperties; + Sequence aNames { DBF_CHAR_SET }; + ScLinkConfigItem aItem( OUString::createFromAscii( + bExport?DBF_SEP_PATH_EXPORT:DBF_SEP_PATH_IMPORT ) ); + + aValues = aItem.GetProperties( aNames ); + pProperties = aValues.getConstArray(); - if( pProperties[0].hasValue() ) + if( pProperties[0].hasValue() ) + { + sal_Int32 nChar = 0; + pProperties[0] >>= nChar; + if( nChar >= 0) { - sal_Int32 nChar = 0; - pProperties[0] >>= nChar; - if( nChar >= 0) - { - nCharSet = (rtl_TextEncoding) nChar; - return charsetSource::charset_from_user_setting; - } + nCharSet = (rtl_TextEncoding) nChar; + return charsetSource::charset_from_user_setting; } - - // Default choice - nCharSet = RTL_TEXTENCODING_IBM_850; - return charsetSource::charset_default; } + + // Default choice + nCharSet = RTL_TEXTENCODING_IBM_850; + return charsetSource::charset_default; } void save_CharSet( rtl_TextEncoding nCharSet, bool bExport ) -- cgit