mirror of
				https://github.com/luanti-org/luanti.git
				synced 2025-11-04 01:05:48 +01:00 
			
		
		
		
	Android: fix handling non-latin characters on older Android devices (#9309)
This commit is contained in:
		@@ -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
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
 
 | 
			
		||||
@@ -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<wchar_t> 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"<invalid multibyte string>";
 | 
			
		||||
	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<char> 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
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user