[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