utf8: add helper call for counting display width of strings
authorLennart Poettering <lennart@poettering.net>
Wed, 11 Apr 2018 17:50:53 +0000 (19:50 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 18 Apr 2018 10:35:45 +0000 (12:35 +0200)
src/basic/utf8.c
src/basic/utf8.h

index 0dc76eb..670a98a 100644 (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;
+}
index c3a7d7b..7d68105 100644 (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);