Improvements to cording
This commit is contained in:
parent
cf70dac0be
commit
45d646be10
@ -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, ", ");
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user