Merge pull request #4025 from zhaowenlan1779/port-yuzu-775
Port "string_util: Minor changes" from yuzu
This commit is contained in:
		| @@ -230,21 +230,21 @@ void SplitString(const std::string& str, const char delim, std::vector<std::stri | |||||||
|     std::istringstream iss(str); |     std::istringstream iss(str); | ||||||
|     output.resize(1); |     output.resize(1); | ||||||
|  |  | ||||||
|     while (std::getline(iss, *output.rbegin(), delim)) |     while (std::getline(iss, *output.rbegin(), delim)) { | ||||||
|         output.push_back(""); |         output.emplace_back(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     output.pop_back(); |     output.pop_back(); | ||||||
| } | } | ||||||
|  |  | ||||||
| std::string TabsToSpaces(int tab_size, const std::string& in) { | std::string TabsToSpaces(int tab_size, std::string in) { | ||||||
|     const std::string spaces(tab_size, ' '); |  | ||||||
|     std::string out(in); |  | ||||||
|  |  | ||||||
|     size_t i = 0; |     size_t i = 0; | ||||||
|     while (out.npos != (i = out.find('\t'))) |  | ||||||
|         out.replace(i, 1, spaces); |  | ||||||
|  |  | ||||||
|     return out; |     while ((i = in.find('\t')) != std::string::npos) { | ||||||
|  |         in.replace(i, 1, tab_size, ' '); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     return in; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::string ReplaceAll(std::string result, const std::string& src, const std::string& dest) { | std::string ReplaceAll(std::string result, const std::string& src, const std::string& dest) { | ||||||
| @@ -288,31 +288,37 @@ std::u16string UTF8ToUTF16(const std::string& input) { | |||||||
| } | } | ||||||
|  |  | ||||||
| static std::wstring CPToUTF16(u32 code_page, const std::string& input) { | static std::wstring CPToUTF16(u32 code_page, const std::string& input) { | ||||||
|     auto const size = |     const auto size = | ||||||
|         MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0); |         MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0); | ||||||
|  |  | ||||||
|     std::wstring output; |     if (size == 0) { | ||||||
|     output.resize(size); |         return L""; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     if (size == 0 || |     std::wstring output(size, L'\0'); | ||||||
|         size != MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), |  | ||||||
|                                     &output[0], static_cast<int>(output.size()))) |     if (size != MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), | ||||||
|  |                                     &output[0], static_cast<int>(output.size()))) { | ||||||
|         output.clear(); |         output.clear(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return output; |     return output; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::string UTF16ToUTF8(const std::wstring& input) { | std::string UTF16ToUTF8(const std::wstring& input) { | ||||||
|     auto const size = WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), |     const auto size = WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), | ||||||
|                                           nullptr, 0, nullptr, nullptr); |                                           nullptr, 0, nullptr, nullptr); | ||||||
|  |     if (size == 0) { | ||||||
|  |         return ""; | ||||||
|  |     } | ||||||
|  |  | ||||||
|     std::string output; |     std::string output(size, '\0'); | ||||||
|     output.resize(size); |  | ||||||
|  |  | ||||||
|     if (size == 0 || |     if (size != WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), | ||||||
|         size != WideCharToMultiByte(CP_UTF8, 0, input.data(), static_cast<int>(input.size()), |                                     &output[0], static_cast<int>(output.size()), nullptr, | ||||||
|                                     &output[0], static_cast<int>(output.size()), nullptr, nullptr)) |                                     nullptr)) { | ||||||
|         output.clear(); |         output.clear(); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return output; |     return output; | ||||||
| } | } | ||||||
| @@ -333,8 +339,6 @@ std::string CP1252ToUTF8(const std::string& input) { | |||||||
|  |  | ||||||
| template <typename T> | template <typename T> | ||||||
| static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& input) { | static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& input) { | ||||||
|     std::string result; |  | ||||||
|  |  | ||||||
|     iconv_t const conv_desc = iconv_open("UTF-8", fromcode); |     iconv_t const conv_desc = iconv_open("UTF-8", fromcode); | ||||||
|     if ((iconv_t)(-1) == conv_desc) { |     if ((iconv_t)(-1) == conv_desc) { | ||||||
|         LOG_ERROR(Common, "Iconv initialization failure [{}]: {}", fromcode, strerror(errno)); |         LOG_ERROR(Common, "Iconv initialization failure [{}]: {}", fromcode, strerror(errno)); | ||||||
| @@ -346,8 +350,7 @@ static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& | |||||||
|     // Multiply by 4, which is the max number of bytes to encode a codepoint |     // Multiply by 4, which is the max number of bytes to encode a codepoint | ||||||
|     const size_t out_buffer_size = 4 * in_bytes; |     const size_t out_buffer_size = 4 * in_bytes; | ||||||
|  |  | ||||||
|     std::string out_buffer; |     std::string out_buffer(out_buffer_size, '\0'); | ||||||
|     out_buffer.resize(out_buffer_size); |  | ||||||
|  |  | ||||||
|     auto src_buffer = &input[0]; |     auto src_buffer = &input[0]; | ||||||
|     size_t src_bytes = in_bytes; |     size_t src_bytes = in_bytes; | ||||||
| @@ -372,6 +375,7 @@ static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     std::string result; | ||||||
|     out_buffer.resize(out_buffer_size - dst_bytes); |     out_buffer.resize(out_buffer_size - dst_bytes); | ||||||
|     out_buffer.swap(result); |     out_buffer.swap(result); | ||||||
|  |  | ||||||
| @@ -381,8 +385,6 @@ static std::string CodeToUTF8(const char* fromcode, const std::basic_string<T>& | |||||||
| } | } | ||||||
|  |  | ||||||
| std::u16string UTF8ToUTF16(const std::string& input) { | std::u16string UTF8ToUTF16(const std::string& input) { | ||||||
|     std::u16string result; |  | ||||||
|  |  | ||||||
|     iconv_t const conv_desc = iconv_open("UTF-16LE", "UTF-8"); |     iconv_t const conv_desc = iconv_open("UTF-16LE", "UTF-8"); | ||||||
|     if ((iconv_t)(-1) == conv_desc) { |     if ((iconv_t)(-1) == conv_desc) { | ||||||
|         LOG_ERROR(Common, "Iconv initialization failure [UTF-8]: {}", strerror(errno)); |         LOG_ERROR(Common, "Iconv initialization failure [UTF-8]: {}", strerror(errno)); | ||||||
| @@ -394,8 +396,7 @@ std::u16string UTF8ToUTF16(const std::string& input) { | |||||||
|     // Multiply by 4, which is the max number of bytes to encode a codepoint |     // Multiply by 4, which is the max number of bytes to encode a codepoint | ||||||
|     const size_t out_buffer_size = 4 * sizeof(char16_t) * in_bytes; |     const size_t out_buffer_size = 4 * sizeof(char16_t) * in_bytes; | ||||||
|  |  | ||||||
|     std::u16string out_buffer; |     std::u16string out_buffer(out_buffer_size, char16_t{}); | ||||||
|     out_buffer.resize(out_buffer_size); |  | ||||||
|  |  | ||||||
|     char* src_buffer = const_cast<char*>(&input[0]); |     char* src_buffer = const_cast<char*>(&input[0]); | ||||||
|     size_t src_bytes = in_bytes; |     size_t src_bytes = in_bytes; | ||||||
| @@ -420,6 +421,7 @@ std::u16string UTF8ToUTF16(const std::string& input) { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     std::u16string result; | ||||||
|     out_buffer.resize(out_buffer_size - dst_bytes); |     out_buffer.resize(out_buffer_size - dst_bytes); | ||||||
|     out_buffer.swap(result); |     out_buffer.swap(result); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -69,7 +69,7 @@ static bool TryParse(const std::string& str, N* const output) { | |||||||
|         return false; |         return false; | ||||||
| } | } | ||||||
|  |  | ||||||
| std::string TabsToSpaces(int tab_size, const std::string& in); | std::string TabsToSpaces(int tab_size, std::string in); | ||||||
|  |  | ||||||
| void SplitString(const std::string& str, char delim, std::vector<std::string>& output); | void SplitString(const std::string& str, char delim, std::vector<std::string>& output); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Merry
					Merry