utf8: add helper call for counting display width of strings

This commit is contained in:
Lennart Poettering 2018-04-11 19:50:53 +02:00
parent b77f5e2773
commit 3f536d5bae
2 changed files with 22 additions and 0 deletions

View file

@ -35,6 +35,7 @@
#include <string.h>
#include "alloc-util.h"
#include "gunicode.h"
#include "hexdecoct.h"
#include "macro.h"
#include "utf8.h"
@ -414,3 +415,23 @@ size_t utf8_n_codepoints(const char *str) {
return n;
}
size_t utf8_console_width(const char *str) {
size_t n = 0;
/* Returns the approximate width a string will take on screen when printed on a character cell
* terminal/console. */
while (*str != 0) {
char32_t c;
if (utf8_encoded_to_unichar(str, &c) < 0)
return (size_t) -1;
str = utf8_next_char(str);
n += unichar_iswide(c) ? 2 : 1;
}
return n;
}

View file

@ -48,3 +48,4 @@ static inline char32_t utf16_surrogate_pair_to_unichar(char16_t lead, char16_t t
}
size_t utf8_n_codepoints(const char *str);
size_t utf8_console_width(const char *str);