14 if (!input || input_len == 0) {
24 char last_char[5] =
" ";
25 size_t last_char_len = 1;
28 while (i < input_len) {
30 if (input[i] ==
'\x1b' && i + 1 < input_len && input[i + 1] ==
'[') {
36 while (i < input_len && ((input[i] >=
'0' && input[i] <=
'9') || input[i] ==
';')) {
37 if (input[i] >=
'0' && input[i] <=
'9') {
38 param = param * 10 + (uint32_t)(input[i] -
'0');
39 }
else if (input[i] ==
';') {
47 char final_byte = input[i];
51 if (final_byte ==
'b' && param > 0) {
52 for (uint32_t r = 0; r < param; r++) {
53 ob_write(&ob, last_char, last_char_len);
57 ob_write(&ob, input + seq_start, i - seq_start);
62 unsigned char c = (
unsigned char)input[i];
66 if ((c & 0x80) == 0) {
68 }
else if ((c & 0xE0) == 0xC0) {
70 }
else if ((c & 0xF0) == 0xE0) {
72 }
else if ((c & 0xF8) == 0xF0) {
77 if (i + char_len > input_len) {
78 char_len = input_len - i;
85 if (c >= 0x20 && c != 0x7F) {
86 SAFE_MEMCPY(last_char,
sizeof(last_char), input + i, char_len);
87 last_char[char_len] =
'\0';
88 last_char_len = char_len;
99 if (!input || input_len == 0) {
107 while (i < input_len) {
109 if (input[i] ==
'\x1b' && i + 1 < input_len && input[i + 1] ==
'[') {
110 size_t seq_start = i;
114 while (i < input_len && ((input[i] >=
'0' && input[i] <=
'9') || input[i] ==
';')) {
124 ob_write(&ob, input + seq_start, i - seq_start);
130 if (c >= 0x20 && c != 0x7F) {
135 while (i < input_len && input[i] == c) {
145 emit_rep(&ob, (uint32_t)(run_len - 1));
148 for (
size_t k = 1; k < run_len; k++) {