diff options
Diffstat (limited to 'src/format.c')
-rw-r--r-- | src/format.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/format.c b/src/format.c index 2c97b72..6e33521 100644 --- a/src/format.c +++ b/src/format.c @@ -188,7 +188,7 @@ void grecs_format_locus(grecs_locus_t *locus, FILE *fp) { if (locus) - fprintf(fp, "%s:%d:", locus->file, locus->line); + fprintf(fp, "%s:%d", locus->file, locus->line); } void @@ -222,6 +222,8 @@ grecs_format_value(struct grecs_value *val, int flags, FILE *fp) &need_quote); if (flags & GRECS_NODE_FLAG_QUOTE) need_quote = 1; + else if (flags & GRECS_NODE_FLAG_NOQUOTE) + need_quote = 0; if (need_quote) { char *cbuf = grecs_malloc(clen + 1); wordsplit_c_quote_copy(cbuf, val->v.string, @@ -257,6 +259,8 @@ grecs_format_value(struct grecs_value *val, int flags, FILE *fp) void grecs_format_node(struct grecs_node *node, int flags, FILE *fp) { + const char *delim_str = NULL; + if (!flags) flags = GRECS_NODE_FLAG_DEFAULT; switch (node->type) { @@ -271,15 +275,19 @@ grecs_format_node(struct grecs_node *node, int flags, FILE *fp) case grecs_node_stmt: if (flags & GRECS_NODE_FLAG_LOCUS) { grecs_format_locus(&node->locus, fp); - fputc(' ', fp); + delim_str = ": "; } if (flags & GRECS_NODE_FLAG_PATH) { + if (delim_str) + fprintf(fp, "%s", delim_str); grecs_format_node_path(node, flags, fp); - fputc(':', fp); - fputc(' ', fp); + delim_str = ": "; } - if (flags & GRECS_NODE_FLAG_VALUE) + if (flags & GRECS_NODE_FLAG_VALUE) { + if (delim_str) + fprintf(fp, "%s", delim_str); grecs_format_value(&node->value, flags, fp); + } } } |