diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2014-06-13 10:09:41 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2014-06-13 14:12:25 +0000 |
commit | 6a4e688c84a12ced4113ea28f9d8837d2d616690 (patch) | |
tree | 11d1c9b110dd06e14c50a0527bef63928c9d5b6a | |
parent | d6c55b4b2c549f19fe5bb7ab06d823ae5eced5df (diff) |
fdo#77979: Make rtl_TextEncodingToWinCharsetRTF work for non-Unicode
"LC_ALL=C make CppunitTest_sw_rtfexport" was still failing after
e47a02b1524061143d8e77a54eb95c77f2e6dae2 "fdo#77979: sw: RTF export: write non-
ASCII font names encoded," so for each given eTextEncoding determine a Windows
charset that can at least encode the font's name, and not only for Unicode-
related eTextEncodings.
Change-Id: If547566bb0cffc60411d8f667d76749a904f7a3f
(cherry picked from commit 0dc7d6367dcedff8741b64f5b8775ebf26f7f14f)
Reviewed-on: https://gerrit.libreoffice.org/9763
Reviewed-by: Michael Stahl <mstahl@redhat.com>
Tested-by: Michael Stahl <mstahl@redhat.com>
-rw-r--r-- | sw/source/filter/ww8/writerwordglue.cxx | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/sw/source/filter/ww8/writerwordglue.cxx b/sw/source/filter/ww8/writerwordglue.cxx index f4141e59b3c7..0f4c133f84ca 100644 --- a/sw/source/filter/ww8/writerwordglue.cxx +++ b/sw/source/filter/ww8/writerwordglue.cxx @@ -725,38 +725,31 @@ namespace sw OUString const& rFontName, OUString const& rAltName, rtl_TextEncoding eTextEncoding) { - static struct { rtl_TextEncoding enc; sal_uInt8 charset; } + sal_uInt8 nRet = + rtl_getBestWindowsCharsetFromTextEncoding(eTextEncoding); + rtl_TextEncoding enc2 = rtl_getTextEncodingFromWindowsCharset(nRet); + if (!(CanEncode(rFontName, enc2) && CanEncode(rAltName, enc2))) + { + static struct { rtl_TextEncoding enc; sal_uInt8 charset; } const s_fallbacks [] = { { RTL_TEXTENCODING_MS_932, 0x80 }, // Shift-JIS { RTL_TEXTENCODING_MS_936, 0x86 }, // GB-2312 { RTL_TEXTENCODING_MS_950, 0x88 }, // Big5 { RTL_TEXTENCODING_MS_949, 0x81 }, // EUC-KR }; - sal_uInt8 nRet = - rtl_getBestWindowsCharsetFromTextEncoding(eTextEncoding); - switch (eTextEncoding) - { - case RTL_TEXTENCODING_DONTKNOW: - case RTL_TEXTENCODING_UCS2: - case RTL_TEXTENCODING_UTF7: - case RTL_TEXTENCODING_UTF8: - case RTL_TEXTENCODING_JAVA_UTF8: - for (size_t i = 0; i < SAL_N_ELEMENTS(s_fallbacks); ++i) + for (size_t i = 0; i < SAL_N_ELEMENTS(s_fallbacks); ++i) + { + // fall back to a charset that can at least encode the + // font's name + if (CanEncode(rFontName, s_fallbacks[i].enc) + && CanEncode(rAltName, s_fallbacks[i].enc)) { - // fall back to a charset that can at least encode - // the font's name - if (CanEncode(rFontName, s_fallbacks[i].enc) - && CanEncode(rAltName, s_fallbacks[i].enc)) - { - return s_fallbacks[i].charset; - } + return s_fallbacks[i].charset; } - SAL_INFO("sw.rtf", "no fallback charset found for font: " - << rFontName << " " << rAltName); - nRet = 0x01; // all hope lost: "default", whatever that is - break; - default: - break; + } + SAL_INFO("sw.rtf", "no fallback charset found for font: " + << rFontName << " " << rAltName); + nRet = 0x01; // all hope lost: "default", whatever that is } return nRet; } |