Improvements to cording

This commit is contained in:
Bruce Hill 2024-02-13 13:15:28 -05:00
parent cf70dac0be
commit 45d646be10
2 changed files with 9 additions and 5 deletions

View File

@ -279,9 +279,14 @@ CORD compile(ast_t *ast)
}
code = CORD_cat(code, "};\n");
CORD_sprintf(&code,
"%rCORD %s__cord(%s_t *obj, void *userdata) {\n"
"%rCORD %s__cord(%s_t *obj, bool use_color) {\n"
"\tif (!obj) return \"%s\";\n"
"\treturn CORD_asprintf(\"%s(", code, def->name, def->name, def->name, def->name);
"\treturn CORD_asprintf(use_color ? \"\\x1b[0;1m%s\\x1b[m(", code, def->name, def->name, def->name, def->name);
for (arg_ast_t *field = def->fields; field; field = field->next) {
CORD_sprintf(&code, "%r%s=\\x1b[35m%%r\\x1b[m", code, field->name);
if (field->next) code = CORD_cat(code, ", ");
}
CORD_appendf(&code, ")\" : \"%s(", def->name);
for (arg_ast_t *field = def->fields; field; field = field->next) {
CORD_sprintf(&code, "%r%s=%%r", code, field->name);
if (field->next) code = CORD_cat(code, ", ");

View File

@ -6,7 +6,7 @@
#include "../util.h"
typedef CORD (*custom_cord_func)(void *x, void *userdata);
typedef CORD (*custom_cord_func)(void *x, bool use_color);
typedef struct {
void *data;
@ -84,8 +84,7 @@ static CORD vas_cord(void *x, bool use_color, const char **fmt, va_list args)
}
case '_': {
custom_cord_func fn = va_arg(args, custom_cord_func);
void *arg = va_arg(args, void*);
return fn(x, arg);
return fn(x, use_color);
}
case ' ': return "?";
default: errx(1, "Unsupported format specifier: '%c'", c);