diff options
Diffstat (limited to 'src/UniConversion.cxx')
| -rw-r--r-- | src/UniConversion.cxx | 12 | 
1 files changed, 12 insertions, 0 deletions
| diff --git a/src/UniConversion.cxx b/src/UniConversion.cxx index 1287aa612..3b7472638 100644 --- a/src/UniConversion.cxx +++ b/src/UniConversion.cxx @@ -37,6 +37,18 @@ size_t UTF8Length(std::wstring_view wsv) {  	return len;  } +size_t UTF8PositionFromUTF16Position(std::string_view u8Text, size_t positionUTF16) noexcept { +	size_t positionUTF8 = 0; +	for (size_t lengthUTF16 = 0; (positionUTF8 < u8Text.length()) && (lengthUTF16 < positionUTF16);) { +		const unsigned char uch = u8Text[positionUTF8]; +		const unsigned int byteCount = UTF8BytesOfLead[uch]; +		lengthUTF16 += UTF16LengthFromUTF8ByteCount(byteCount); +		positionUTF8 += byteCount; +	} + +	return positionUTF8; +} +  void UTF8FromUTF16(std::wstring_view wsv, char *putf, size_t len) {  	size_t k = 0;  	for (size_t i = 0; i < wsv.length() && wsv[i];) { | 
