[Libreoffice-commits] .: filter/inc filter/source sw/source writerfilter/source

Caolán McNamara caolan at kemper.freedesktop.org
Wed Apr 25 05:18:59 PDT 2012


 filter/inc/filter/msfilter/util.hxx            |    7 +++++--
 filter/source/msfilter/util.cxx                |   10 +++++-----
 sw/source/filter/ww8/ww8par.cxx                |    9 +++++++--
 writerfilter/source/rtftok/rtfdocumentimpl.cxx |    2 +-
 4 files changed, 18 insertions(+), 10 deletions(-)

New commits:
commit d88493adfd549ec77f08ee919df609e645011b8b
Author: Caolán McNamara <caolanm at redhat.com>
Date:   Wed Apr 25 13:18:02 2012 +0100

    rework GetDefaultTextEncoding etc -> getBestTextEncodingFromLocale

diff --git a/filter/inc/filter/msfilter/util.hxx b/filter/inc/filter/msfilter/util.hxx
index 33a6658..01ff373 100644
--- a/filter/inc/filter/msfilter/util.hxx
+++ b/filter/inc/filter/msfilter/util.hxx
@@ -30,13 +30,16 @@
 #define INCLUDED_MSFILTER_UTIL_HXX
 
 #include <rtl/textenc.h>
+#include <com/sun/star/lang/Locale.hpp>
 #include "filter/msfilter/msfilterdllapi.h"
 
 namespace msfilter {
 namespace util {
 
-/// Returns the default encoding, based on the application's locale.
-MSFILTER_DLLPUBLIC rtl_TextEncoding GetDefaultTextEncoding();
+/// Returns the best-fit default 8bit encoding for a given locale
+/// i.e. useful when dealing with legacy formats which use legacy text encodings without recording
+/// what the encoding is, but you know or can guess the language
+MSFILTER_DLLPUBLIC rtl_TextEncoding getBestTextEncodingFromLocale(const ::com::sun::star::lang::Locale &rLocale);
 
 }
 }
diff --git a/filter/source/msfilter/util.cxx b/filter/source/msfilter/util.cxx
index a5fb209..62edc7f 100644
--- a/filter/source/msfilter/util.cxx
+++ b/filter/source/msfilter/util.cxx
@@ -33,10 +33,11 @@
 namespace msfilter {
 namespace util {
 
-rtl_TextEncoding GetDefaultTextEncoding()
+rtl_TextEncoding getBestTextEncodingFromLocale(const ::com::sun::star::lang::Locale &rLocale)
 {
-    const rtl::OUString& rLanguage = Application::GetSettings().GetLocale().Language;
-
+    //Obviously not comprehensive, feel free to expand these, they're for ultimate fallbacks
+    //in last-ditch broken-file-format cases to guess the right 8bit encodings
+    const rtl::OUString &rLanguage = rLocale.Language;
     if (rLanguage == "cs" || rLanguage == "hu" || rLanguage == "pl")
         return RTL_TEXTENCODING_MS_1250;
     if (rLanguage == "ru" || rLanguage == "uk")
@@ -45,8 +46,7 @@ rtl_TextEncoding GetDefaultTextEncoding()
         return RTL_TEXTENCODING_MS_1253;
     if (rLanguage == "tr")
         return RTL_TEXTENCODING_MS_1254;
-    else
-        return RTL_TEXTENCODING_MS_1252;
+    return RTL_TEXTENCODING_MS_1252;
 }
 
 }
diff --git a/sw/source/filter/ww8/ww8par.cxx b/sw/source/filter/ww8/ww8par.cxx
index c4513f1..e7ae45c 100644
--- a/sw/source/filter/ww8/ww8par.cxx
+++ b/sw/source/filter/ww8/ww8par.cxx
@@ -31,6 +31,8 @@
 #include <com/sun/star/embed/ElementModes.hpp>
 #include <com/sun/star/embed/XStorage.hpp>
 
+#include <i18npool/mslangid.hxx>
+
 #include <unotools/ucbstreamhelper.hxx>
 #include <tools/solar.h>
 #include <rtl/tencinfo.h>
@@ -2365,7 +2367,7 @@ CharSet SwWW8ImplReader::GetCurrentCharSet()
         if ((eSrcCharSet == RTL_TEXTENCODING_DONTKNOW) && StyleExists(nAktColl) && nAktColl < vColl.size())
             eSrcCharSet = vColl[nAktColl].GetCharSet();
         if (eSrcCharSet == RTL_TEXTENCODING_DONTKNOW)
-        { // patch from cmc for #i52786#
+        {
             /*
              #i22206#/#i52786#
              The (default) character set used for a run of text is the default
@@ -2376,7 +2378,10 @@ CharSet SwWW8ImplReader::GetCurrentCharSet()
              correctly set in the character runs involved, so its hard to reproduce
              documents that require this to be sure of the process involved.
             */
-            eSrcCharSet = msfilter::util::GetDefaultTextEncoding();
+            const SvxLanguageItem *pLang = (const SvxLanguageItem*)GetFmtAttr(RES_CHRATR_LANGUAGE);
+            LanguageType eLang = pLang ? pLang->GetLanguage() : LANGUAGE_SYSTEM;
+            ::com::sun::star::lang::Locale aLocale(MsLangId::convertLanguageToLocale(eLang));
+            eSrcCharSet = msfilter::util::getBestTextEncodingFromLocale(aLocale);
         }
     }
     return eSrcCharSet;
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index ba4db68..4ec43a0 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -520,7 +520,7 @@ rtl_TextEncoding RTFDocumentImpl::getEncoding(sal_uInt32 nFontIndex)
     {
         if (nFontIndex < m_aFontEncodings.size())
             return m_aFontEncodings[nFontIndex];
-        return msfilter::util::GetDefaultTextEncoding();
+        return msfilter::util::getBestTextEncodingFromLocale(Application::GetSettings().GetLocale());
     }
     else
         return m_pSuperstream->getEncoding(nFontIndex);


More information about the Libreoffice-commits mailing list