[Scummvm-git-logs] scummvm master -> 1674e8722b91aefb7af48a59b8bfeab78a6d0873

elasota noreply at scummvm.org
Sun Jun 26 03:57:59 UTC 2022


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:
1674e8722b MTROPOLIS: Make TextWork case insensitive


Commit: 1674e8722b91aefb7af48a59b8bfeab78a6d0873
    https://github.com/scummvm/scummvm/commit/1674e8722b91aefb7af48a59b8bfeab78a6d0873
Author: elasota (ejlasota at gmail.com)
Date: 2022-06-25T23:57:22-04:00

Commit Message:
MTROPOLIS: Make TextWork case insensitive

Changed paths:
    engines/mtropolis/plugin/obsidian.cpp
    engines/mtropolis/runtime.cpp
    engines/mtropolis/runtime.h


diff --git a/engines/mtropolis/plugin/obsidian.cpp b/engines/mtropolis/plugin/obsidian.cpp
index 6d6ab0da27f..77bdfe60e05 100644
--- a/engines/mtropolis/plugin/obsidian.cpp
+++ b/engines/mtropolis/plugin/obsidian.cpp
@@ -126,11 +126,11 @@ bool TextWorkModifier::readAttribute(MiniscriptThread *thread, DynamicValue &res
 		}
 		return true;
 	} else if (attrib == "exists") {
-		bool exists = (_string.find(_token) != Common::String::npos);
+		bool exists = (caseInsensitiveFind(_string, _token) != Common::String::npos);
 		result.setInt(exists ? 1 : 0);
 		return true;
 	} else if (attrib == "index") {
-		size_t index = _string.find(_token);
+		size_t index = caseInsensitiveFind(_string, _token);
 		if (index == Common::String::npos)
 			index = 0;
 		else
diff --git a/engines/mtropolis/runtime.cpp b/engines/mtropolis/runtime.cpp
index 658d07158c8..68318b55b5c 100644
--- a/engines/mtropolis/runtime.cpp
+++ b/engines/mtropolis/runtime.cpp
@@ -220,7 +220,6 @@ Common::String toCaseInsensitive(const Common::String &str) {
 	return Common::String(&lowered[0], strLen);
 }
 
-
 bool caseInsensitiveEqual(const Common::String& str1, const Common::String& str2) {
 	size_t length1 = str1.size();
 	size_t length2 = str2.size();
@@ -235,6 +234,31 @@ bool caseInsensitiveEqual(const Common::String& str1, const Common::String& str2
 	return true;
 }
 
+size_t caseInsensitiveFind(const Common::String &strToSearch, const Common::String &stringToFind) {
+	if (stringToFind.size() > strToSearch.size())
+		return Common::String::npos;
+
+	size_t lastValidStart = strToSearch.size() - stringToFind.size();
+	size_t searchLength = stringToFind.size();
+
+	for (size_t startIndex = 0; startIndex <= lastValidStart; startIndex++) {
+		bool matches = true;
+		for (size_t i = 0; i < searchLength; i++) {
+			char ca = strToSearch[i + startIndex];
+			char cb = stringToFind[i];
+			if (ca != cb && invariantToLower(ca) != invariantToLower(cb)) {
+				matches = false;
+				break;
+			}
+		}
+
+		if (matches)
+			return startIndex;
+	}
+
+	return Common::String::npos;
+}
+
 bool EventIDs::isCommand(EventID eventID) {
 	switch (eventID) {
 	case kElementShow:
diff --git a/engines/mtropolis/runtime.h b/engines/mtropolis/runtime.h
index 9fdafa0c3f9..136f7ceef01 100644
--- a/engines/mtropolis/runtime.h
+++ b/engines/mtropolis/runtime.h
@@ -119,6 +119,7 @@ class DebugPrimaryTaskList;
 char invariantToLower(char c);
 Common::String toCaseInsensitive(const Common::String &str);
 bool caseInsensitiveEqual(const Common::String &str1, const Common::String &str2);
+size_t caseInsensitiveFind(const Common::String &stringToSearch, const Common::String &stringToFind);
 
 enum ColorDepthMode {
 	kColorDepthMode1Bit,




More information about the Scummvm-git-logs mailing list