diff options
Diffstat (limited to 'src/util/string.h')
-rw-r--r-- | src/util/string.h | 44 |
1 files changed, 35 insertions, 9 deletions
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. |