diff options
| author | Neil <nyamatongwe@gmail.com> | 2019-03-20 19:18:57 +1100 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2019-03-20 19:18:57 +1100 | 
| commit | a09fe66e667ed2b91a4c953e74cf6b1abaaa919f (patch) | |
| tree | ee20504b3c678e28da9c8510669479d135bb7240 /src/UniConversion.cxx | |
| parent | 37e58367e8b48e53032f1849de570668811e81fb (diff) | |
| download | scintilla-mirror-a09fe66e667ed2b91a4c953e74cf6b1abaaa919f.tar.gz | |
Implement WStringFromUTF8 to simplify code that creates wstring objects for
regular expressions and calling the Win32 API.
Diffstat (limited to 'src/UniConversion.cxx')
| -rw-r--r-- | src/UniConversion.cxx | 25 | 
1 files changed, 25 insertions, 0 deletions
| diff --git a/src/UniConversion.cxx b/src/UniConversion.cxx index 58475687b..a695b0f3c 100644 --- a/src/UniConversion.cxx +++ b/src/UniConversion.cxx @@ -175,6 +175,17 @@ size_t UTF16FromUTF8(std::string_view sv, wchar_t *tbuf, size_t tlen) {  	return ui;  } +size_t UTF32Length(std::string_view svu8) noexcept { +	size_t ulen = 0; +	for (size_t i = 0; i < svu8.length();) { +		const unsigned char ch = svu8[i]; +		const unsigned int byteCount = UTF8BytesOfLead[ch]; +		i += byteCount; +		ulen++; +	} +	return ulen; +} +  size_t UTF32FromUTF8(std::string_view sv, unsigned int *tbuf, size_t tlen) {  	size_t ui = 0;  	for (size_t i = 0; i < sv.length();) { @@ -228,6 +239,20 @@ size_t UTF32FromUTF8(std::string_view sv, unsigned int *tbuf, size_t tlen) {  	return ui;  } +std::wstring WStringFromUTF8(std::string_view svu8) { +	if constexpr (sizeof(wchar_t) == 2) { +		const size_t len16 = UTF16Length(svu8); +		std::wstring ws(len16, 0); +		UTF16FromUTF8(svu8, &ws[0], len16); +		return ws; +	} else { +		const size_t len32 = UTF32Length(svu8); +		std::wstring ws(len32, 0); +		UTF32FromUTF8(svu8, reinterpret_cast<unsigned int *>(&ws[0]), len32); +		return ws; +	} +} +  unsigned int UTF16FromUTF32Character(unsigned int val, wchar_t *tbuf) noexcept {  	if (val < SUPPLEMENTAL_PLANE_FIRST) {  		tbuf[0] = static_cast<wchar_t>(val); | 
