update stuff
This commit is contained in:
parent
6d36aa4442
commit
95d74c2ef4
13 changed files with 1196 additions and 48 deletions
78
pretty_print.c
Normal file
78
pretty_print.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
#include "pretty_print.h"
|
||||
|
||||
#include <stdarg.h>
|
||||
#include "core.h"
|
||||
#include "os.h"
|
||||
#include "str.h"
|
||||
|
||||
|
||||
strview_t pretty__colour[LOG_COL__COUNT] = {
|
||||
[LOG_COL_BLACK] = cstrv("black"),
|
||||
[LOG_COL_BLUE] = cstrv("blue"),
|
||||
[LOG_COL_GREEN] = cstrv("green"),
|
||||
[LOG_COL_CYAN] = cstrv("cyan"),
|
||||
[LOG_COL_RED] = cstrv("red"),
|
||||
[LOG_COL_MAGENTA] = cstrv("magenta"),
|
||||
[LOG_COL_YELLOW] = cstrv("yellow"),
|
||||
[LOG_COL_GREY] = cstrv("grey"),
|
||||
|
||||
[LOG_COL_DARK_GREY] = cstrv("dark_grey"),
|
||||
[LOG_COL_WHITE] = cstrv("white"),
|
||||
[LOG_COL_LIGHT_BLUE] = cstrv("light_blue"),
|
||||
[LOG_COL_LIGHT_GREEN] = cstrv("light_green"),
|
||||
[LOG_COL_LIGHT_CYAN] = cstrv("light_cyan"),
|
||||
[LOG_COL_LIGHT_RED] = cstrv("light_red"),
|
||||
[LOG_COL_LIGHT_MAGENTA] = cstrv("light_magenta"),
|
||||
[LOG_COL_LIGHT_YELLOW] = cstrv("light_yellow"),
|
||||
|
||||
[LOG_COL_RESET] = cstrv("/"),
|
||||
};
|
||||
|
||||
void pretty_print(arena_t scratch, const char *fmt, ...) {
|
||||
va_list args;
|
||||
va_start(args, fmt);
|
||||
pretty_printv(scratch, fmt, args);
|
||||
va_end(args);
|
||||
}
|
||||
|
||||
void pretty_printv(arena_t scratch, const char *fmt, va_list args) {
|
||||
va_list tmp_args;
|
||||
va_copy(tmp_args, args);
|
||||
int len = fmt_bufferv(NULL, 0, fmt, tmp_args);
|
||||
va_end(tmp_args);
|
||||
|
||||
char *buf = alloc(&scratch, char, len + 1);
|
||||
|
||||
fmt_bufferv(buf, len + 1, fmt, args);
|
||||
|
||||
oshandle_t out = os_stdout();
|
||||
instream_t in = istr_init(strv(buf, len));
|
||||
while (!istr_is_finished(&in)) {
|
||||
strview_t part = istr_get_view(&in, '<');
|
||||
bool has_escape = strv_ends_with(part, '\\');
|
||||
|
||||
if (has_escape) {
|
||||
part.len -= 1;
|
||||
}
|
||||
|
||||
os_file_write(out, part.buf, part.len);
|
||||
istr_skip(&in, 1);
|
||||
|
||||
if (has_escape) {
|
||||
os_file_putc(out, '<');
|
||||
continue;
|
||||
}
|
||||
|
||||
strview_t tag = istr_get_view(&in, '>');
|
||||
|
||||
for (usize i = 0; i < arrlen(pretty__colour); ++i) {
|
||||
if (strv_equals(tag, pretty__colour[i])) {
|
||||
os_log_set_colour(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
istr_skip(&in, 1);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue