summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZEN <ZEN-ROOT@users.noreply.github.com>2014-06-09 16:46:49 +0300
committerAndrew Shadura <andrewsh@debian.org>2016-10-29 14:07:30 +0200
commit0915ea4eaeefec5662898087a38dc72be31e35d6 (patch)
tree264754a8418847017e22e2b1efe0aa35993c2338
parentd3e334aefb411e6cb99b06e92bc0731dcc5aa8d0 (diff)
Fixed work with utf8 strings
From 497351fcb27e4b3c779a83f154fd0b085fbbe268 Mon Sep 17 00:00:00 2001 From: ZEN <admin@linuxhub.ru> Date: Sun, 22 Nov 2015 01:17:08 +0200 Subject: [PATCH] Fixed comparison of string length by using the 'str_len' variable instead of 'string->len' Refactored the code from merge #30. Now by default working with string in utf8 mode. Gbp-Pq: Name utf8-ellipsize.patch
-rw-r--r--src/utils.c48
1 files changed, 29 insertions, 19 deletions
diff --git a/src/utils.c b/src/utils.c
index 41f2636..e072907 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -68,25 +68,35 @@ gboolean is_hyperlink(gchar *text)
/* Ellipsize a string according to the settings */
GString *ellipsize_string(GString *string)
{
- if (string->len > prefs.item_length)
- {
- switch (prefs.ellipsize)
- {
- case PANGO_ELLIPSIZE_START:
- string = g_string_erase(string, 0, string->len-(prefs.item_length));
- string = g_string_prepend(string, "...");
- break;
- case PANGO_ELLIPSIZE_MIDDLE:
- string = g_string_erase(string, (prefs.item_length/2), string->len-(prefs.item_length));
- string = g_string_insert(string, (string->len/2), "...");
- break;
- case PANGO_ELLIPSIZE_END:
- string = g_string_truncate(string, prefs.item_length);
- string = g_string_append(string, "...");
- break;
- }
- }
- return string;
+ gchar *start = NULL,
+ *end = NULL;
+
+ gint str_len = g_utf8_strlen(string->str, -1);
+ if (str_len > prefs.item_length)
+ {
+ switch (prefs.ellipsize)
+ {
+ case PANGO_ELLIPSIZE_START:
+ end = g_utf8_substring(string->str, str_len - prefs.item_length, str_len);
+ g_string_printf(string, "...%s", end);
+ break;
+ case PANGO_ELLIPSIZE_MIDDLE:
+ start = g_utf8_substring(string->str, 0, prefs.item_length/2);
+ end = g_utf8_substring(string->str, str_len - prefs.item_length/2, str_len);
+ g_string_printf(string, "%s...%s", start, end);
+ break;
+ case PANGO_ELLIPSIZE_END:
+ start = g_utf8_substring(string->str, 0, prefs.item_length);
+ g_string_assign(string, start);
+ string = g_string_append(string, "...");
+ break;
+ }
+ }
+
+ g_free(start);
+ g_free(end);
+
+ return string;
}
/* Remove newlines from string */