diff options
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/string.cpp | 27 | ||||
-rw-r--r-- | src/util/string.h | 44 |
2 files changed, 35 insertions, 36 deletions
diff --git a/src/util/string.cpp b/src/util/string.cpp index c8f528a77..2c4143c76 100644 --- a/src/util/string.cpp +++ b/src/util/string.cpp @@ -729,33 +729,6 @@ 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 9e59ab20a..40ef3e4d3 100644 --- a/src/util/string.h +++ b/src/util/string.h @@ -387,14 +387,6 @@ 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. * * @param str The string to (potentially) modify. @@ -476,7 +468,7 @@ inline std::string wrap_rows(const std::string &from, * Removes backslashes from an escaped string (FormSpec strings) */ template <typename T> -inline std::basic_string<T> unescape_string(std::basic_string<T> &s) +inline std::basic_string<T> unescape_string(const std::basic_string<T> &s) { std::basic_string<T> res; @@ -492,6 +484,40 @@ inline std::basic_string<T> unescape_string(std::basic_string<T> &s) return res; } +/** + * Remove all escape sequences in \p s. + * + * @param s The string in which to remove escape sequences. + * @return \p s, with escape sequences removed. + */ +template <typename T> +std::basic_string<T> unescape_enriched(const std::basic_string<T> &s) +{ + std::basic_string<T> output; + size_t i = 0; + while (i < s.length()) { + if (s[i] == '\x1b') { + ++i; + if (i == s.length()) continue; + if (s[i] == '(') { + ++i; + while (i < s.length() && s[i] != ')') { + if (s[i] == '\\') { + ++i; + } + ++i; + } + ++i; + } else { + ++i; + } + continue; + } + output += s[i]; + ++i; + } + return output; +} /** * Checks that all characters in \p to_check are a decimal digits. |