ANSI escape sequence utilities.
More...
Go to the source code of this file.
ANSI escape sequence utilities.
Definition in file ansi.c.
◆ ansi_is_already_colorized()
| bool ansi_is_already_colorized |
( |
const char * |
message, |
|
|
size_t |
pos |
|
) |
| |
Definition at line 59 of file ansi.c.
59 {
60 if (!message) {
61 return false;
62 }
63
64 bool in_reset = true;
65
66
67 for (size_t i = 0; i < pos && message[i] != '\0'; i++) {
68 if (message[i] == '\x1b' && message[i + 1] == '[') {
69
70
71 size_t j = i + 2;
72 while (message[j] != '\0' && message[j] != 'm') {
73 j++;
74 }
75
76 if (message[j] == 'm') {
77
78
79 if ((j == i + 3 && message[i + 2] == '0') || (j == i + 2)) {
80
81 in_reset = true;
82 } else {
83
84 in_reset = false;
85 }
86 }
87 }
88 }
89
90
91 return !in_reset;
92}
Referenced by colorize_log_message().
◆ ansi_strip_escapes()
| char * ansi_strip_escapes |
( |
const char * |
input, |
|
|
size_t |
input_len |
|
) |
| |
Definition at line 13 of file ansi.c.
13 {
14 if (!input || input_len == 0) {
15 return NULL;
16 }
17
18
19 outbuf_t ob = {0};
21
22 size_t i = 0;
23 while (i < input_len) {
24
25 if (input[i] == '\x1b' && i + 1 < input_len && input[i + 1] == '[') {
26
27 i += 2;
28
29
30 while (i < input_len) {
31 char c = input[i];
32
33
34 if ((c >= 0x30 && c <= 0x3F) || (c >= 0x20 && c <= 0x2F)) {
35 i++;
36 } else {
37 break;
38 }
39 }
40
41
42 if (i < input_len) {
43 char final = input[i];
44 if (final >= 0x40 && final <= 0x7E) {
45 i++;
46 }
47 }
48 } else {
49
51 i++;
52 }
53 }
54
56 return ob.buf;
57}
void ob_term(outbuf_t *ob)
void ob_putc(outbuf_t *ob, char c)
void ob_reserve(outbuf_t *ob, size_t need)
References ob_putc(), ob_reserve(), and ob_term().
Referenced by display_width(), layout_print_two_column_row(), and log_mmap_write().