[Scummvm-cvs-logs] scummvm master -> 4af998b96cc2b0d3513ded57985c4d434cd362a4

bluegr bluegr at gmail.com
Fri Nov 8 11:18:44 CET 2013


This automated email contains information about 1 new commit which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
4af998b96c WINTERMUTE: Move the isAscii() string changing code to another function


Commit: 4af998b96cc2b0d3513ded57985c4d434cd362a4
    https://github.com/scummvm/scummvm/commit/4af998b96cc2b0d3513ded57985c4d434cd362a4
Author: Filippos Karapetis (bluegr at gmail.com)
Date: 2013-11-08T02:17:48-08:00

Commit Message:
WINTERMUTE: Move the isAscii() string changing code to another function

Changed paths:
    engines/wintermute/utils/string_util.cpp
    engines/wintermute/utils/string_util.h



diff --git a/engines/wintermute/utils/string_util.cpp b/engines/wintermute/utils/string_util.cpp
index c359b1f..d5d6c7f 100644
--- a/engines/wintermute/utils/string_util.cpp
+++ b/engines/wintermute/utils/string_util.cpp
@@ -48,11 +48,14 @@ bool StringUtil::compareNoCase(const AnsiString &str1, const AnsiString &str2) {
     return (str1lc == str2lc);
 }*/
 
-bool StringUtil::isAscii(Common::String &str) {
+Common::String StringUtil::substituteUtf8Characters(Common::String &str) {
 	uint strSize = str.size();
 	Common::String punctuation("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");
 
-	for (uint32 i = 0; i < str.size(); i++) {
+	if (isAscii(str))
+		return str;
+
+	for (uint32 i = 0; i < strSize; i++) {
 		if (!Common::isAlnum(str[i]) && str[i] != ' ' && !punctuation.contains(str[i])) {
 			// Replace some UTF-8 characters with (almost) equivalent ANSII ones
 			if ((byte)str[i] == 0xc2 && i + 1 < str.size() && (byte)str[i + 1] == 0xa9) {
@@ -60,12 +63,21 @@ bool StringUtil::isAscii(Common::String &str) {
 				str.deleteChar(i);
 				str.setChar('c', i);
 				strSize--;
-			} else {
-				return false;
 			}
 		}
 	}
 
+	return str;
+}
+
+bool StringUtil::isAscii(const Common::String &str) {
+	Common::String punctuation("!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~");
+
+	for (uint32 i = 0; i < str.size(); i++) {
+		if (!Common::isAlnum(str[i]) && str[i] != ' ' && !punctuation.contains(str[i]))
+			return false;
+	}
+
 	return true;
 }
 
@@ -74,6 +86,7 @@ WideString StringUtil::utf8ToWide(const Utf8String &Utf8Str) {
 	// WORKAROUND: Since wide strings aren't supported yet, we make this function
 	// work at least with ASCII strings. This should cover all English versions.
 	Common::String asciiString = Utf8Str;
+	asciiString = substituteUtf8Characters(asciiString);
 	if (isAscii(asciiString)) {
 		// No special (UTF-8) characters found, just return the string
 		return asciiString;
@@ -134,6 +147,7 @@ Utf8String StringUtil::wideToUtf8(const WideString &WideStr) {
 	// WORKAROUND: Since UTF-8 strings aren't supported yet, we make this function
 	// work at least with ASCII strings. This should cover all English versions.
 	Common::String asciiString = WideStr;
+	asciiString = substituteUtf8Characters(asciiString);
 	if (isAscii(asciiString)) {
 		// No special (UTF-8) characters found, just return the string
 		return asciiString;
diff --git a/engines/wintermute/utils/string_util.h b/engines/wintermute/utils/string_util.h
index 3ced6aa..05931be 100644
--- a/engines/wintermute/utils/string_util.h
+++ b/engines/wintermute/utils/string_util.h
@@ -37,7 +37,8 @@ class StringUtil {
 public:
 	static bool compareNoCase(const AnsiString &str1, const AnsiString &str2);
 	//static bool compareNoCase(const WideString &str1, const WideString &str2);
-	static bool isAscii(Common::String &str);
+	static bool isAscii(const Common::String &str);
+	static Common::String substituteUtf8Characters(Common::String &str);
 	static WideString utf8ToWide(const Utf8String &Utf8Str);
 	static Utf8String wideToUtf8(const WideString &WideStr);
 	static WideString ansiToWide(const AnsiString &str);






More information about the Scummvm-git-logs mailing list