Merge branch 'gt/utf8-width'
* gt/utf8-width: builtin-blame.c: Use utf8_strwidth for author's names utf8: add utf8_strwidth()
This commit is contained in:
commit
9242431ca0
@ -19,6 +19,7 @@
|
|||||||
#include "string-list.h"
|
#include "string-list.h"
|
||||||
#include "mailmap.h"
|
#include "mailmap.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
|
#include "utf8.h"
|
||||||
|
|
||||||
static char blame_usage[] = "git blame [options] [rev-opts] [rev] [--] file";
|
static char blame_usage[] = "git blame [options] [rev-opts] [rev] [--] file";
|
||||||
|
|
||||||
@ -1618,13 +1619,14 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
|
|||||||
printf(" %*d", max_orig_digits,
|
printf(" %*d", max_orig_digits,
|
||||||
ent->s_lno + 1 + cnt);
|
ent->s_lno + 1 + cnt);
|
||||||
|
|
||||||
if (!(opt & OUTPUT_NO_AUTHOR))
|
if (!(opt & OUTPUT_NO_AUTHOR)) {
|
||||||
printf(" (%-*.*s %10s",
|
int pad = longest_author - utf8_strwidth(ci.author);
|
||||||
longest_author, longest_author,
|
printf(" (%s%*s %10s",
|
||||||
ci.author,
|
ci.author, pad, "",
|
||||||
format_time(ci.author_time,
|
format_time(ci.author_time,
|
||||||
ci.author_tz,
|
ci.author_tz,
|
||||||
show_raw_time));
|
show_raw_time));
|
||||||
|
}
|
||||||
printf(" %*d) ",
|
printf(" %*d) ",
|
||||||
max_digits, ent->lno + 1 + cnt);
|
max_digits, ent->lno + 1 + cnt);
|
||||||
}
|
}
|
||||||
@ -1755,7 +1757,7 @@ static void find_alignment(struct scoreboard *sb, int *option)
|
|||||||
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
if (!(suspect->commit->object.flags & METAINFO_SHOWN)) {
|
||||||
suspect->commit->object.flags |= METAINFO_SHOWN;
|
suspect->commit->object.flags |= METAINFO_SHOWN;
|
||||||
get_commit_info(suspect->commit, &ci, 1);
|
get_commit_info(suspect->commit, &ci, 1);
|
||||||
num = strlen(ci.author);
|
num = utf8_strwidth(ci.author);
|
||||||
if (longest_author < num)
|
if (longest_author < num)
|
||||||
longest_author = num;
|
longest_author = num;
|
||||||
}
|
}
|
||||||
|
19
utf8.c
19
utf8.c
@ -246,6 +246,25 @@ int utf8_width(const char **start, size_t *remainder_p)
|
|||||||
return git_wcwidth(ch);
|
return git_wcwidth(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Returns the total number of columns required by a null-terminated
|
||||||
|
* string, assuming that the string is utf8. Returns strlen() instead
|
||||||
|
* if the string does not look like a valid utf8 string.
|
||||||
|
*/
|
||||||
|
int utf8_strwidth(const char *string)
|
||||||
|
{
|
||||||
|
int width = 0;
|
||||||
|
const char *orig = string;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (!string)
|
||||||
|
return strlen(orig);
|
||||||
|
if (!*string)
|
||||||
|
return width;
|
||||||
|
width += utf8_width(&string, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int is_utf8(const char *text)
|
int is_utf8(const char *text)
|
||||||
{
|
{
|
||||||
while (*text) {
|
while (*text) {
|
||||||
|
1
utf8.h
1
utf8.h
@ -5,6 +5,7 @@ typedef unsigned int ucs_char_t; /* assuming 32bit int */
|
|||||||
|
|
||||||
ucs_char_t pick_one_utf8_char(const char **start, size_t *remainder_p);
|
ucs_char_t pick_one_utf8_char(const char **start, size_t *remainder_p);
|
||||||
int utf8_width(const char **start, size_t *remainder_p);
|
int utf8_width(const char **start, size_t *remainder_p);
|
||||||
|
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);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user