summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2012-04-25 13:18:02 +0100
committerCaolán McNamara <caolanm@redhat.com>2012-04-25 13:18:33 +0100
commitd88493adfd549ec77f08ee919df609e645011b8b (patch)
treeaea030de82e8e21231fdd5e516468b16bc16b487
parent3ba9fd39e3aa74aca63dc2ab475d37b6680e12a8 (diff)
rework GetDefaultTextEncoding etc -> getBestTextEncodingFromLocale
-rw-r--r--filter/inc/filter/msfilter/util.hxx7
-rw-r--r--filter/source/msfilter/util.cxx10
-rw-r--r--sw/source/filter/ww8/ww8par.cxx9
-rw-r--r--writerfilter/source/rtftok/rtfdocumentimpl.cxx2
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);