diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2020-06-18 16:03:38 +0300 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2020-06-18 17:44:49 +0200 |
commit | 21a59b59d9a40ca32d91b05e62ffcd9aef8fd324 (patch) | |
tree | e0167329d9d1046d83c02ead754c436bdcec7135 /lingucomponent | |
parent | c4a4c766483aa18119f051a3885943781a5e68ea (diff) |
tdf#133589 Numbertext: Use Win32API to avoid std::codecvt_utf8 bug
Change-Id: I45c85db44c3dfd92e0929f66c8c95cb309c91e05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96609
Reviewed-by: László Németh <nemeth@numbertext.org>
Tested-by: Jenkins
Diffstat (limited to 'lingucomponent')
-rw-r--r-- | lingucomponent/source/numbertext/numbertext.cxx | 24 |
1 files changed, 8 insertions, 16 deletions
diff --git a/lingucomponent/source/numbertext/numbertext.cxx b/lingucomponent/source/numbertext/numbertext.cxx index 89f5432624bf..34e7694601a3 100644 --- a/lingucomponent/source/numbertext/numbertext.cxx +++ b/lingucomponent/source/numbertext/numbertext.cxx @@ -21,7 +21,7 @@ #include <osl/file.hxx> #include <tools/debug.hxx> -#include <rtl/ustrbuf.hxx> +#include <o3tl/char16_t2wchar_t.hxx> #include <sal/config.h> #include <cppuhelper/factory.hxx> @@ -132,26 +132,18 @@ OUString SAL_CALL NumberText_Impl::getNumberText(const OUString& rText, const Lo if (!aCountry.isEmpty()) aCode += "-" + aCountry; OString aLangCode(OUStringToOString(aCode, RTL_TEXTENCODING_ASCII_US)); +#if defined(_WIN32) + std::wstring sResult(o3tl::toW(rText.getStr())); +#else OString aInput(OUStringToOString(rText, RTL_TEXTENCODING_UTF8)); std::wstring sResult = Numbertext::string2wstring(aInput.getStr()); +#endif bool result = m_aNumberText.numbertext(sResult, aLangCode.getStr()); DBG_ASSERT(result, "numbertext: false"); - OUString aResult = OUString::fromUtf8(Numbertext::wstring2string(sResult).c_str()); #if defined(_WIN32) - // workaround to fix non-BMP Unicode characters resulted by wstring limitation - if (!aScript.isEmpty() && aScript == "Hung") - { - OUStringBuffer aFix; - for (int i = 0; i < aResult.getLength(); ++i) - { - sal_Unicode c = aResult[i]; - if (0x0C80 <= c && c <= 0x0CFF) - aFix.append(sal_Unicode(0xD803)).append(sal_Unicode(c + 0xD000)); - else - aFix.append(c); - } - aResult = aFix.makeStringAndClear(); - } + OUString aResult(o3tl::toU(sResult.c_str())); +#else + OUString aResult = OUString::fromUtf8(Numbertext::wstring2string(sResult).c_str()); #endif return aResult; } |