diff options
author | Caolán McNamara <caolanm@redhat.com> | 2012-04-25 13:18:02 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2012-04-25 13:18:33 +0100 |
commit | d88493adfd549ec77f08ee919df609e645011b8b (patch) | |
tree | aea030de82e8e21231fdd5e516468b16bc16b487 | |
parent | 3ba9fd39e3aa74aca63dc2ab475d37b6680e12a8 (diff) |
rework GetDefaultTextEncoding etc -> getBestTextEncodingFromLocale
-rw-r--r-- | filter/inc/filter/msfilter/util.hxx | 7 | ||||
-rw-r--r-- | filter/source/msfilter/util.cxx | 10 | ||||
-rw-r--r-- | sw/source/filter/ww8/ww8par.cxx | 9 | ||||
-rw-r--r-- | writerfilter/source/rtftok/rtfdocumentimpl.cxx | 2 |
4 files changed, 18 insertions, 10 deletions
diff --git a/filter/inc/filter/msfilter/util.hxx b/filter/inc/filter/msfilter/util.hxx index 33a66585127c..01ff3738b64a 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 a5fb20933d1d..62edc7fab9de 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 c4513f18b9dd..e7ae45cc9486 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 ba4db683e76a..4ec43a0b052e 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); |