diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-02-13 13:15:28 -0500 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-02-13 13:15:28 -0500 |
| commit | 45d646be10af585b2d784b7f95f20b18e5cc59d1 (patch) | |
| tree | 19bd2875144b46cb91855bef3e96b4f402f9ae6b | |
| parent | cf70dac0be983ef8a395bd017ac9975760d3fe4b (diff) | |
Improvements to cording
| -rw-r--r-- | compile.c | 9 | ||||
| -rw-r--r-- | metamethods/cord.c | 5 |
2 files changed, 9 insertions, 5 deletions
@@ -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, ", "); diff --git a/metamethods/cord.c b/metamethods/cord.c index 82e6a6df..4fd00cd3 100644 --- a/metamethods/cord.c +++ b/metamethods/cord.c @@ -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); |
