summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorXavier G <xavier.github@kindwolf.org>2016-05-13 02:47:26 +0200
committerXavier G <xavier.github@kindwolf.org>2016-05-13 02:47:26 +0200
commit35b3ccc6a407f83eba4f0c3787cc5c174bd3385c (patch)
tree94e9a946b78f3942678e468959a8bebb7b6e714f /src/core
parent21c07c006066115af4604e26cd89cf60f94a7d53 (diff)
downloadirssi-35b3ccc6a407f83eba4f0c3787cc5c174bd3385c.zip
Introduce string_length() and string_width().
Diffstat (limited to 'src/core')
-rw-r--r--src/core/utf8.c34
-rw-r--r--src/core/utf8.h9
2 files changed, 43 insertions, 0 deletions
diff --git a/src/core/utf8.c b/src/core/utf8.c
index c9303d19..7c75c374 100644
--- a/src/core/utf8.c
+++ b/src/core/utf8.c
@@ -55,3 +55,37 @@ int string_policy(const char *str)
}
return TREAT_STRING_AS_BYTES;
}
+
+int string_length(const char *str, int policy)
+{
+ g_return_val_if_fail(str != NULL, 0);
+
+ if (policy == -1) {
+ policy = string_policy(str);
+ }
+
+ if (policy == TREAT_STRING_AS_UTF8) {
+ return g_utf8_strlen(str, -1);
+ }
+ else {
+ /* Assume TREAT_STRING_AS_BYTES: */
+ return strlen(str);
+ }
+}
+
+int string_width(const char *str, int policy)
+{
+ int len;
+
+ g_return_val_if_fail(str != NULL, 0);
+
+ if (policy == -1) {
+ policy = string_policy(str);
+ }
+
+ len = 0;
+ while (*str != '\0') {
+ len += string_advance(&str, policy);
+ }
+ return len;
+}
diff --git a/src/core/utf8.h b/src/core/utf8.h
index f1a8f0e1..6f02c5a0 100644
--- a/src/core/utf8.h
+++ b/src/core/utf8.h
@@ -33,6 +33,15 @@ int string_advance(char const **str, int policy);
*/
int string_policy(const char *str);
+/* Return the length of the str string according to the given policy; if policy
+ * is -1, this function will call string_policy().
+ */
+int string_length(const char *str, int policy);
+/* Return the screen width of the str string according to the given policy; if
+ * policy is -1, this function will call string_policy().
+ */
+int string_width(const char *str, int policy);
+
#define unichar_isprint(c) (((c) & ~0x80) >= 32)
#define is_utf8_leading(c) (((c) & 0xc0) != 0x80)