From 69ec0aecc1ddd1e70dac63e7c96fc42bac0bcca1 Mon Sep 17 00:00:00 2001 From: Birunthan Mohanathas Date: Sun, 13 May 2012 12:17:00 +0300 Subject: [PATCH] String: Fixed StringCase=UPPER/LOWER/PROPER with non-Latin chars --- Library/MeterString.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/Library/MeterString.cpp b/Library/MeterString.cpp index 69a34377..44d61384 100644 --- a/Library/MeterString.cpp +++ b/Library/MeterString.cpp @@ -32,30 +32,28 @@ std::unordered_map CMeterString::c_Fonts; void StringToUpper(std::wstring& str) { - _wcsupr(&str[0]); + WCHAR* srcAndDest = &str[0]; + int strAndDestLen = (int)str.length(); + LCMapString(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, srcAndDest, strAndDestLen, srcAndDest, strAndDestLen); } void StringToLower(std::wstring& str) { - _wcslwr(&str[0]); + WCHAR* srcAndDest = &str[0]; + int strAndDestLen = (int)str.length(); + LCMapString(LOCALE_USER_DEFAULT, LCMAP_LOWERCASE, srcAndDest, strAndDestLen, srcAndDest, strAndDestLen); } void StringToProper(std::wstring& str) { if (!str.empty()) { - str[0] = towupper(str[0]); + LCMapString(LOCALE_USER_DEFAULT, LCMAP_UPPERCASE, &str[0], 1, &str[0], 1); for (size_t i = 1; i < str.length(); ++i) { - if (str[i-1] == L' ') - { - str[i] = towupper(str[i]); - } - else - { - str[i] = towlower(str[i]); - } + WCHAR* srcAndDest = &str[i]; + LCMapString(LOCALE_USER_DEFAULT, (str[i - 1] == L' ') ? LCMAP_UPPERCASE : LCMAP_LOWERCASE, srcAndDest, 1, srcAndDest, 1); } } }