From 51b80b985e0a14c904100a20b72c1a3ada946577 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Tue, 19 Sep 2023 09:29:04 +0100 Subject: [PATCH] Restore utf8proc code. --- tmux.h | 1 + utf8.c | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/tmux.h b/tmux.h index 2f730842..53f73b20 100644 --- a/tmux.h +++ b/tmux.h @@ -3343,6 +3343,7 @@ int utf8_cstrhas(const char *, const struct utf8_data *); char *osdep_get_name(int, char *); char *osdep_get_cwd(int); struct event_base *osdep_event_init(void); + /* utf8-combined.c */ int utf8_has_zwj(const struct utf8_data *); int utf8_is_zwj(const struct utf8_data *); diff --git a/utf8.c b/utf8.c index ece1bb7e..5053e459 100644 --- a/utf8.c +++ b/utf8.c @@ -409,6 +409,10 @@ utf8_width(struct utf8_data *ud, int *width) *width = 2; return (UTF8_DONE); } +#ifdef HAVE_UTF8PROC + *width = utf8proc_wcwidth(wc); + log_debug("utf8proc_wcwidth(%05X) returned %d", (u_int)wc, *width); +#else *width = wcwidth(wc); log_debug("wcwidth(%05X) returned %d", (u_int)wc, *width); if (*width < 0) { @@ -418,6 +422,7 @@ utf8_width(struct utf8_data *ud, int *width) */ *width = (wc >= 0x80 && wc <= 0x9f) ? 0 : 1; } +#endif if (*width >= 0 && *width <= 0xff) return (UTF8_DONE); return (UTF8_ERROR); @@ -427,7 +432,11 @@ utf8_width(struct utf8_data *ud, int *width) enum utf8_state utf8_towc(const struct utf8_data *ud, wchar_t *wc) { +#ifdef HAVE_UTF8PROC + switch (utf8proc_mbtowc(wc, ud->data, ud->size)) { +#else switch (mbtowc(wc, ud->data, ud->size)) { +#endif case -1: log_debug("UTF-8 %.*s, mbtowc() %d", (int)ud->size, ud->data, errno);