| 178 |
} |
} |
| 179 |
} |
} |
| 180 |
|
|
| 181 |
#define CHECK_AND_APPEND_OUTPUT(out_buf, out_buf_len, out_buf_offset, tag_out, tag_out_len) \ |
#define CHECK_AND_APPEND_OUTPUT(out_buf, out_buf_len, out_buf_offset, tag_out, tag_out_len) \ |
| 182 |
{ \ |
{ \ |
| 183 |
if ((out_buf_offset) + (tag_out_len) >= (out_buf_len)) \ |
if ((out_buf_offset) + (tag_out_len) >= (out_buf_len)) \ |
| 184 |
{ \ |
{ \ |
| 185 |
log_error("Buffer is not longer enough for output string %d >= %d\n", (out_buf_offset) + (tag_out_len), (out_buf_len)); \ |
log_error("Buffer is not longer enough for output string %d >= %d\n", (out_buf_offset) + (tag_out_len), (out_buf_len)); \ |
| 186 |
out_buf[out_buf_offset] = '\0'; \ |
out_buf[out_buf_offset] = '\0'; \ |
| 187 |
return (out_buf_offset); \ |
return (out_buf_offset); \ |
| 188 |
} \ |
} \ |
| 189 |
memcpy((out_buf) + (out_buf_offset), (tag_out), (size_t)(tag_out_len)); \ |
memcpy((out_buf) + (out_buf_offset), (tag_out), (size_t)(tag_out_len)); \ |
| 190 |
(out_buf_offset) += (tag_out_len); \ |
(out_buf_offset) += (tag_out_len); \ |
| 191 |
} |
} |
| 192 |
|
|
| 193 |
int lml_render(const char *str_in, char *str_out, int buf_len, int quote_mode) |
int lml_render(const char *str_in, char *str_out, int buf_len, int quote_mode) |
| 194 |
{ |
{ |
| 237 |
|
|
| 238 |
if (str_in[i] == '\033' && str_in[i + 1] == '[') // Escape sequence -- copy directly |
if (str_in[i] == '\033' && str_in[i + 1] == '[') // Escape sequence -- copy directly |
| 239 |
{ |
{ |
| 240 |
for (k = i + 2; str_in[k] != '\0' && str_in[k] != 'm'; k++) |
for (k = i + 2; str_in[k] != '\0' && str_in[k] != 'm' && str_in[k] != '\033'; k++) |
| 241 |
; |
; |
| 242 |
|
|
| 243 |
if (str_in[k] == 'm') // Valid |
if (str_in[k] != 'm') // invalid |
| 244 |
{ |
{ |
| 245 |
CHECK_AND_APPEND_OUTPUT(str_out, buf_len, j, str_in + i, k - i + 1); |
k--; |
|
i = k; |
|
|
continue; |
|
|
} |
|
|
else // reach end of string |
|
|
{ |
|
|
break; |
|
| 246 |
} |
} |
| 247 |
|
|
| 248 |
|
CHECK_AND_APPEND_OUTPUT(str_out, buf_len, j, str_in + i, k - i + 1); |
| 249 |
|
i = k; |
| 250 |
|
continue; |
| 251 |
} |
} |
| 252 |
|
|
| 253 |
if (str_in[i] == '\n') // jump out of tag at end of line |
if (str_in[i] == '\n') // jump out of tag at end of line |