Fixed: Fx::uncolor() optimization

This commit is contained in:
aristocratos 2022-02-09 22:08:27 +01:00
parent 897769a90d
commit 08f3957817

View file

@ -144,15 +144,17 @@ namespace Fx {
string uncolor(const string& s) {
string out = s;
for (size_t offset = 0, start_pos = 0, end_pos = 0;;) {
start_pos = out.find('\x1b', offset);
start_pos = (offset == 0) ? out.find('\x1b') : offset;
if (start_pos == string::npos)
break;
offset = start_pos + 1;
end_pos = out.find('m', offset);
if (end_pos == string::npos)
break;
else if (auto next_pos = out.find('\x1b', offset); not isdigit(out[end_pos - 1]) or end_pos > next_pos)
continue;
else if (auto next_pos = out.find('\x1b', offset); not isdigit(out[end_pos - 1]) or end_pos > next_pos) {
offset = next_pos;
continue;
}
out.erase(start_pos, (end_pos - start_pos)+1);
offset = 0;