for-each-ref, quote: convert *_quote_print -> *_quote_buf

The print_value() function in for-each-ref.c prints values to stdout
immediately using {sq|perl|python|tcl}_quote_print().  Change these
lower-level quote functions to instead leave their results in strbuf
so that we can later add post-processing to the results of them.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Ramkumar Ramachandra <artagnon@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Nguyễn Thái Ngọc Duy
2013-07-30 14:01:25 +05:30
committed by Junio C Hamano
parent 8f6a3e5d71
commit 10d0167fef
3 changed files with 34 additions and 29 deletions

44
quote.c
View File

@ -408,72 +408,72 @@ int unquote_c_style(struct strbuf *sb, const char *quoted, const char **endp)
/* quoting as a string literal for other languages */
void perl_quote_print(FILE *stream, const char *src)
void perl_quote_buf(struct strbuf *sb, const char *src)
{
const char sq = '\'';
const char bq = '\\';
char c;
fputc(sq, stream);
strbuf_addch(sb, sq);
while ((c = *src++)) {
if (c == sq || c == bq)
fputc(bq, stream);
fputc(c, stream);
strbuf_addch(sb, bq);
strbuf_addch(sb, c);
}
fputc(sq, stream);
strbuf_addch(sb, sq);
}
void python_quote_print(FILE *stream, const char *src)
void python_quote_buf(struct strbuf *sb, const char *src)
{
const char sq = '\'';
const char bq = '\\';
const char nl = '\n';
char c;
fputc(sq, stream);
strbuf_addch(sb, sq);
while ((c = *src++)) {
if (c == nl) {
fputc(bq, stream);
fputc('n', stream);
strbuf_addch(sb, bq);
strbuf_addch(sb, 'n');
continue;
}
if (c == sq || c == bq)
fputc(bq, stream);
fputc(c, stream);
strbuf_addch(sb, bq);
strbuf_addch(sb, c);
}
fputc(sq, stream);
strbuf_addch(sb, sq);
}
void tcl_quote_print(FILE *stream, const char *src)
void tcl_quote_buf(struct strbuf *sb, const char *src)
{
char c;
fputc('"', stream);
strbuf_addch(sb, '"');
while ((c = *src++)) {
switch (c) {
case '[': case ']':
case '{': case '}':
case '$': case '\\': case '"':
fputc('\\', stream);
strbuf_addch(sb, '\\');
default:
fputc(c, stream);
strbuf_addch(sb, c);
break;
case '\f':
fputs("\\f", stream);
strbuf_addstr(sb, "\\f");
break;
case '\r':
fputs("\\r", stream);
strbuf_addstr(sb, "\\r");
break;
case '\n':
fputs("\\n", stream);
strbuf_addstr(sb, "\\n");
break;
case '\t':
fputs("\\t", stream);
strbuf_addstr(sb, "\\t");
break;
case '\v':
fputs("\\v", stream);
strbuf_addstr(sb, "\\v");
break;
}
}
fputc('"', stream);
strbuf_addch(sb, '"');
}