Merge branch 'jx/utf8-printf-width' into maint
* jx/utf8-printf-width: Add utf8_fprintf helper that returns correct number of columns
This commit is contained in:
commit
75288cc7e1
@ -3,6 +3,7 @@
|
|||||||
#include "cache.h"
|
#include "cache.h"
|
||||||
#include "commit.h"
|
#include "commit.h"
|
||||||
#include "color.h"
|
#include "color.h"
|
||||||
|
#include "utf8.h"
|
||||||
|
|
||||||
static int parse_options_usage(struct parse_opt_ctx_t *ctx,
|
static int parse_options_usage(struct parse_opt_ctx_t *ctx,
|
||||||
const char * const *usagestr,
|
const char * const *usagestr,
|
||||||
@ -491,7 +492,7 @@ static int usage_argh(const struct option *opts, FILE *outfile)
|
|||||||
s = literal ? "[%s]" : "[<%s>]";
|
s = literal ? "[%s]" : "[<%s>]";
|
||||||
else
|
else
|
||||||
s = literal ? " %s" : " <%s>";
|
s = literal ? " %s" : " <%s>";
|
||||||
return fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
|
return utf8_fprintf(outfile, s, opts->argh ? _(opts->argh) : _("..."));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USAGE_OPTS_WIDTH 24
|
#define USAGE_OPTS_WIDTH 24
|
||||||
@ -550,7 +551,7 @@ static int usage_with_options_internal(struct parse_opt_ctx_t *ctx,
|
|||||||
if (opts->long_name)
|
if (opts->long_name)
|
||||||
pos += fprintf(outfile, "--%s", opts->long_name);
|
pos += fprintf(outfile, "--%s", opts->long_name);
|
||||||
if (opts->type == OPTION_NUMBER)
|
if (opts->type == OPTION_NUMBER)
|
||||||
pos += fprintf(outfile, "-NUM");
|
pos += utf8_fprintf(outfile, _("-NUM"));
|
||||||
|
|
||||||
if ((opts->flags & PARSE_OPT_LITERAL_ARGHELP) ||
|
if ((opts->flags & PARSE_OPT_LITERAL_ARGHELP) ||
|
||||||
!(opts->flags & PARSE_OPT_NOARG))
|
!(opts->flags & PARSE_OPT_NOARG))
|
||||||
|
21
utf8.c
21
utf8.c
@ -429,6 +429,27 @@ int same_encoding(const char *src, const char *dst)
|
|||||||
return !strcasecmp(src, dst);
|
return !strcasecmp(src, dst);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Wrapper for fprintf and returns the total number of columns required
|
||||||
|
* for the printed string, assuming that the string is utf8.
|
||||||
|
*/
|
||||||
|
int utf8_fprintf(FILE *stream, const char *format, ...)
|
||||||
|
{
|
||||||
|
struct strbuf buf = STRBUF_INIT;
|
||||||
|
va_list arg;
|
||||||
|
int columns;
|
||||||
|
|
||||||
|
va_start(arg, format);
|
||||||
|
strbuf_vaddf(&buf, format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
|
||||||
|
columns = fputs(buf.buf, stream);
|
||||||
|
if (0 <= columns) /* keep the error from the I/O */
|
||||||
|
columns = utf8_strwidth(buf.buf);
|
||||||
|
strbuf_release(&buf);
|
||||||
|
return columns;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Given a buffer and its encoding, return it re-encoded
|
* Given a buffer and its encoding, return it re-encoded
|
||||||
* with iconv. If the conversion fails, returns NULL.
|
* with iconv. If the conversion fails, returns NULL.
|
||||||
|
1
utf8.h
1
utf8.h
@ -8,6 +8,7 @@ int utf8_strwidth(const char *string);
|
|||||||
int is_utf8(const char *text);
|
int is_utf8(const char *text);
|
||||||
int is_encoding_utf8(const char *name);
|
int is_encoding_utf8(const char *name);
|
||||||
int same_encoding(const char *, const char *);
|
int same_encoding(const char *, const char *);
|
||||||
|
int utf8_fprintf(FILE *, const char *, ...);
|
||||||
|
|
||||||
void strbuf_add_wrapped_text(struct strbuf *buf,
|
void strbuf_add_wrapped_text(struct strbuf *buf,
|
||||||
const char *text, int indent, int indent2, int width);
|
const char *text, int indent, int indent2, int width);
|
||||||
|
Loading…
Reference in New Issue
Block a user