aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEkdohibs <nathanael.courant@laposte.net>2016-03-15 13:34:27 +0100
committerest31 <MTest31@outlook.com>2016-03-15 17:33:15 +0100
commit095f623fa7278375a6fa4fe01ed39d2b68cce7af (patch)
treeef8aa35d767870c6f47a115bfd1e1ca47d4deeca
parentaf30183124d40a969040d7de4b3a487feec466e4 (diff)
downloadminetest-095f623fa7278375a6fa4fe01ed39d2b68cce7af.tar.gz
minetest-095f623fa7278375a6fa4fe01ed39d2b68cce7af.tar.bz2
minetest-095f623fa7278375a6fa4fe01ed39d2b68cce7af.zip
Remove chat escape sequences from chat messages, for future colored chat.
-rw-r--r--src/chat.cpp3
-rw-r--r--src/util/string.cpp27
-rw-r--r--src/util/string.h7
3 files changed, 37 insertions, 0 deletions
diff --git a/src/chat.cpp b/src/chat.cpp
index 809d4e422..495e3450b 100644
--- a/src/chat.cpp
+++ b/src/chat.cpp
@@ -679,6 +679,9 @@ ChatBackend::~ChatBackend()
void ChatBackend::addMessage(std::wstring name, std::wstring text)
{
+ name = removeChatEscapes(name);
+ text = removeChatEscapes(text);
+
// Note: A message may consist of multiple lines, for example the MOTD.
WStrfnd fnd(text);
while (!fnd.atend())
diff --git a/src/util/string.cpp b/src/util/string.cpp
index 2c4143c76..c8f528a77 100644
--- a/src/util/string.cpp
+++ b/src/util/string.cpp
@@ -729,6 +729,33 @@ static bool parseNamedColorString(const std::string &value, video::SColor &color
return true;
}
+std::wstring removeChatEscapes(const std::wstring &s) {
+ std::wstring output;
+ size_t i = 0;
+ while (i < s.length()) {
+ if (s[i] == L'\v') {
+ ++i;
+ if (i == s.length()) continue;
+ if (s[i] == L'(') {
+ ++i;
+ while (i < s.length() && s[i] != L')') {
+ if (s[i] == L'\\') {
+ ++i;
+ }
+ ++i;
+ }
+ ++i;
+ } else {
+ ++i;
+ }
+ continue;
+ }
+ output += s[i];
+ ++i;
+ }
+ return output;
+}
+
void str_replace(std::string &str, char from, char to)
{
std::replace(str.begin(), str.end(), from, to);
diff --git a/src/util/string.h b/src/util/string.h
index cf94b7f5f..9e59ab20a 100644
--- a/src/util/string.h
+++ b/src/util/string.h
@@ -386,6 +386,13 @@ inline void str_replace(std::string &str, const std::string &pattern,
}
}
+/**
+ * Remove all chat escape sequences in \p s.
+ *
+ * @param s The string in which to remove escape sequences.
+ * @return \p s, with escape sequences removed.
+ */
+std::wstring removeChatEscapes(const std::wstring &s);
/**
* Replace all occurrences of the character \p from in \p str with \p to.