aboutsummaryrefslogtreecommitdiff
path: root/NorthstarDLL/util/utils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'NorthstarDLL/util/utils.cpp')
-rw-r--r--NorthstarDLL/util/utils.cpp82
1 files changed, 0 insertions, 82 deletions
diff --git a/NorthstarDLL/util/utils.cpp b/NorthstarDLL/util/utils.cpp
deleted file mode 100644
index c3f90cfa..00000000
--- a/NorthstarDLL/util/utils.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-#include <ctype.h>
-#include "utils.h"
-
-bool skip_valid_ansi_csi_sgr(char*& str)
-{
- if (*str++ != '\x1B')
- return false;
- if (*str++ != '[') // CSI
- return false;
- for (char* c = str; *c; c++)
- {
- if (*c >= '0' && *c <= '9')
- continue;
- if (*c == ';' || *c == ':')
- continue;
- if (*c == 'm') // SGR
- break;
- return false;
- }
- return true;
-}
-
-void RemoveAsciiControlSequences(char* str, bool allow_color_codes)
-{
- for (char *pc = str, c = *pc; c = *pc; pc++)
- {
- // skip UTF-8 characters
- int bytesToSkip = 0;
- if ((c & 0xE0) == 0xC0)
- bytesToSkip = 1; // skip 2-byte UTF-8 sequence
- else if ((c & 0xF0) == 0xE0)
- bytesToSkip = 2; // skip 3-byte UTF-8 sequence
- else if ((c & 0xF8) == 0xF0)
- bytesToSkip = 3; // skip 4-byte UTF-8 sequence
- else if ((c & 0xFC) == 0xF8)
- bytesToSkip = 4; // skip 5-byte UTF-8 sequence
- else if ((c & 0xFE) == 0xFC)
- bytesToSkip = 5; // skip 6-byte UTF-8 sequence
-
- bool invalid = false;
- char* orgpc = pc;
- for (int i = 0; i < bytesToSkip; i++)
- {
- char next = pc[1];
-
- // valid UTF-8 part
- if ((next & 0xC0) == 0x80)
- {
- pc++;
- continue;
- }
-
- // invalid UTF-8 part or encountered \0
- invalid = true;
- break;
- }
- if (invalid)
- {
- // erase the whole "UTF-8" sequence
- for (char* x = orgpc; x <= pc; x++)
- if (*x != '\0')
- *x = ' ';
- else
- break;
- }
- if (bytesToSkip > 0)
- continue; // this byte was already handled as UTF-8
-
- // an invalid control character or an UTF-8 part outside of UTF-8 sequence
- if ((iscntrl(c) && c != '\n' && c != '\r' && c != '\x1B') || (c & 0x80) != 0)
- {
- *pc = ' ';
- continue;
- }
-
- if (c == '\x1B') // separate handling for this escape sequence...
- if (allow_color_codes && skip_valid_ansi_csi_sgr(pc)) // ...which we allow for color codes...
- pc--;
- else // ...but remove it otherwise
- *pc = ' ';
- }
-}