diff options
author | ZEN <ZEN-ROOT@users.noreply.github.com> | 2014-06-09 16:46:49 +0300 |
---|---|---|
committer | Andrew Shadura <andrewsh@debian.org> | 2016-10-29 14:07:30 +0200 |
commit | 0915ea4eaeefec5662898087a38dc72be31e35d6 (patch) | |
tree | 264754a8418847017e22e2b1efe0aa35993c2338 | |
parent | d3e334aefb411e6cb99b06e92bc0731dcc5aa8d0 (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.c | 48 |
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 */ |