diff options
author | Ekdohibs <nathanael.courant@laposte.net> | 2016-03-15 13:34:27 +0100 |
---|---|---|
committer | est31 <MTest31@outlook.com> | 2016-03-15 17:33:15 +0100 |
commit | 095f623fa7278375a6fa4fe01ed39d2b68cce7af (patch) | |
tree | ef8aa35d767870c6f47a115bfd1e1ca47d4deeca | |
parent | af30183124d40a969040d7de4b3a487feec466e4 (diff) | |
download | minetest-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.cpp | 3 | ||||
-rw-r--r-- | src/util/string.cpp | 27 | ||||
-rw-r--r-- | src/util/string.h | 7 |
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. |