1
0
mirror of https://github.com/luanti-org/luanti.git synced 2025-11-05 01:35:29 +01:00

Add core.strip_escapes() (#16485)

This commit is contained in:
sfan5
2025-09-14 23:01:43 +02:00
committed by GitHub
parent cc6b56b034
commit d932f34693
8 changed files with 52 additions and 17 deletions

View File

@@ -592,27 +592,25 @@ inline std::basic_string<T> unescape_string(const std::basic_string<T> &s)
*/
template <typename T>
[[nodiscard]]
std::basic_string<T> unescape_enriched(const std::basic_string<T> &s)
std::basic_string<T> unescape_enriched(std::basic_string_view<T> s)
{
std::basic_string<T> output;
output.reserve(s.size());
size_t i = 0;
while (i < s.length()) {
if (s[i] == '\x1b') {
if (s[i] == static_cast<T>('\x1b')) {
++i;
if (i == s.length()) continue;
if (s[i] == '(') {
if (i == s.length())
continue;
if (s[i] == static_cast<T>('(')) {
++i;
while (i < s.length() && s[i] != ')') {
if (s[i] == '\\') {
while (i < s.length() && s[i] != static_cast<T>(')')) {
if (s[i] == static_cast<T>('\\'))
++i;
}
++i;
}
++i;
} else {
++i;
}
++i;
continue;
}
output += s[i];
@@ -621,6 +619,18 @@ std::basic_string<T> unescape_enriched(const std::basic_string<T> &s)
return output;
}
// (same templating issue here)
[[nodiscard]]
inline std::string unescape_enriched(std::string_view s)
{
return unescape_enriched<char>(s);
}
[[nodiscard]]
inline std::wstring unescape_enriched(std::wstring_view s)
{
return unescape_enriched<wchar_t>(s);
}
template <typename T>
[[nodiscard]]
std::vector<std::basic_string<T> > split(const std::basic_string<T> &s, T delim)