Author: manx
Date: Tue Jun 25 16:02:34 2024
New Revision: 21062
URL: https://source.openmpt.org/browse/openmpt/?op=revision&rev=21062
Log:
[Fix] mpt/string_transcode/transcode.hpp: Fix 7bit/8bit to/from UTF16 transcoding of non-BMP codepoints.
Modified:
trunk/OpenMPT/src/mpt/string_transcode/transcode.hpp
Modified: trunk/OpenMPT/src/mpt/string_transcode/transcode.hpp
==============================================================================
--- trunk/OpenMPT/src/mpt/string_transcode/transcode.hpp Tue Jun 25 16:01:40 2024 (r21061)
+++ trunk/OpenMPT/src/mpt/string_transcode/transcode.hpp Tue Jun 25 16:02:34 2024 (r21062)
@@ -575,7 +575,7 @@
for (std::size_t i = 0; i < str.length(); ++i) {
std::size_t c = static_cast<std::size_t>(mpt::char_value(str[i]));
if (c < std::size(table)) {
- res.push_back(static_cast<mpt::widechar>(table[c]));
+ encode_single_wide(res, table[c]);
} else {
res.push_back(replacement);
}
@@ -588,7 +588,7 @@
Tdststring res;
res.reserve(str.length());
for (std::size_t i = 0; i < str.length(); ++i) {
- char32_t c = static_cast<char32_t>(str[i]);
+ char32_t c = decode_single_wide(i, str);
bool found = false;
// Try non-control characters first.
// In cases where there are actual characters mirrored in this range (like in AMS/AMS2 character sets),
@@ -626,7 +626,7 @@
if ((0x80 <= c) && (c <= 0x9f)) {
res.push_back(replacement);
} else if (c < std::size(table)) {
- res.push_back(static_cast<mpt::widechar>(table[c]));
+ encode_single_wide(res, table[c]);
} else {
res.push_back(replacement);
}
@@ -639,7 +639,7 @@
Tdststring res;
res.reserve(str.length());
for (std::size_t i = 0; i < str.length(); ++i) {
- char32_t c = static_cast<char32_t>(str[i]);
+ char32_t c = decode_single_wide(i, str);
bool found = false;
// Try non-control characters first.
// In cases where there are actual characters mirrored in this range (like in AMS/AMS2 character sets),
@@ -678,7 +678,7 @@
for (std::size_t i = 0; i < str.length(); ++i) {
uint8 c = mpt::char_value(str[i]);
if (c <= 0x7f) {
- res.push_back(static_cast<mpt::widechar>(static_cast<uint32>(c)));
+ encode_single_wide(res, static_cast<char32_t>(static_cast<uint32>(c)));
} else {
res.push_back(replacement);
}
@@ -691,9 +691,9 @@
Tdststring res;
res.reserve(str.length());
for (std::size_t i = 0; i < str.length(); ++i) {
- char32_t c = static_cast<char32_t>(str[i]);
+ char32_t c = decode_single_wide(i, str);
if (c <= 0x7f) {
- res.push_back(static_cast<typename Tdststring::value_type>(static_cast<uint8>(c)));
+ res.push_back(static_cast<typename Tdststring::value_type>(static_cast<uint8>(static_cast<uint32>(c))));
} else {
res.push_back(replacement);
}
@@ -708,7 +708,7 @@
res.reserve(str.length());
for (std::size_t i = 0; i < str.length(); ++i) {
uint8 c = mpt::char_value(str[i]);
- res.push_back(static_cast<mpt::widechar>(static_cast<uint32>(c)));
+ encode_single_wide(res, static_cast<char32_t>(static_cast<uint32>(c)));
}
return res;
}
@@ -718,7 +718,7 @@
Tdststring res;
res.reserve(str.length());
for (std::size_t i = 0; i < str.length(); ++i) {
- char32_t c = static_cast<char32_t>(str[i]);
+ char32_t c = decode_single_wide(i, str);
if (c <= 0xff) {
res.push_back(static_cast<typename Tdststring::value_type>(static_cast<uint8>(c)));
} else {
|