From 23c6d0c31f2e0a4a6032b0afb02fab1d5f9c517b Mon Sep 17 00:00:00 2001 From: Maksim Date: Fri, 17 Apr 2020 23:46:30 +0200 Subject: [PATCH] Android: fix handling non-latin characters on older Android devices (#9309) --- src/server.cpp | 8 ++++++++ src/util/string.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/src/server.cpp b/src/server.cpp index b3992b9b..c32aa530 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -3031,8 +3031,16 @@ std::wstring Server::handleChat(const std::string &name, const std::wstring &wna line += L"-!- You don't have permission to shout."; broadcast_line = false; } else { + /* + Workaround for fixing chat on Android. Lua doesn't handle + the Cyrillic alphabet and some characters on older Android devices + */ +#ifdef __ANDROID__ + line += L"<" + wname + L"> " + wmessage; +#else line += narrow_to_wide(m_script->formatChatMessage(name, wide_to_narrow(wmessage))); +#endif } /* diff --git a/src/util/string.cpp b/src/util/string.cpp index e6c52585..2ee3ec73 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -209,6 +209,9 @@ wchar_t *narrow_to_wide_c(const char *str) } std::wstring narrow_to_wide(const std::string &mbs) { +#ifdef __ANDROID__ + return utf8_to_wide(mbs); +#else size_t wcl = mbs.size(); Buffer wcs(wcl + 1); size_t len = mbstowcs(*wcs, mbs.c_str(), wcl); @@ -216,11 +219,15 @@ std::wstring narrow_to_wide(const std::string &mbs) { return L""; wcs[len] = 0; return *wcs; +#endif } std::string wide_to_narrow(const std::wstring &wcs) { +#ifdef __ANDROID__ + return wide_to_utf8(wcs); +#else size_t mbl = wcs.size() * 4; SharedBuffer mbs(mbl+1); size_t len = wcstombs(*mbs, wcs.c_str(), mbl); @@ -229,6 +236,7 @@ std::string wide_to_narrow(const std::wstring &wcs) mbs[len] = 0; return *mbs; +#endif }