From c42c18f05cccabccd3b812f2ddf768d166db259c Mon Sep 17 00:00:00 2001 From: Christian Persch Date: Mon, 10 Oct 2005 12:48:49 +0000 Subject: Bring back ephy_string_shorten. 2005-10-10 Christian Persch * lib/ephy-string.c: (ephy_string_blank_chr), (ephy_string_shorten): * lib/ephy-string.h: Bring back ephy_string_shorten. * src/ephy-tab.c: (ephy_tab_file_monitor_cb), (ephy_tab_set_title): Shorten overlong tab titles, hard. Increase reload delay slightly. Strip whitespace from tab title before determining if it's empty. --- lib/ephy-string.c | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) (limited to 'lib/ephy-string.c') diff --git a/lib/ephy-string.c b/lib/ephy-string.c index 2d53c25b5..f996a7fe3 100644 --- a/lib/ephy-string.c +++ b/lib/ephy-string.c @@ -27,6 +27,8 @@ #include #include +#define ELLIPSIS "\xe2\x80\xa6" + gboolean ephy_string_to_int (const char *string, gulong *integer) { @@ -85,3 +87,50 @@ ephy_string_blank_chr (char *source) return source; } + +/** + * ephy_string_shorten: shortens a string + * @str: the string to shorten, in UTF-8 + * @target_length: the length of the shortened string (in characters) + * + * If @str is already short enough, it is returned. Otherwise a new string + * is allocated and @str is consumed. + * + * Return value: a newly allocated string, not longer than target_length + * characters. + */ +char * +ephy_string_shorten (const char *str, + gsize target_length) +{ + char *new_str; + glong actual_length; + gulong bytes; + + g_return_val_if_fail (target_length > 0, NULL); + + if (!str) return NULL; + + /* FIXME: this function is a big mess. While it is utf-8 safe now, + * it can still split a sequence of combining characters. + */ + + actual_length = g_utf8_strlen (str, -1); + + /* if the string is already short enough, or if it's too short for + * us to shorten it, return a new copy */ + if (actual_length <= target_length) return g_strdup (str); + + /* create string */ + bytes = GPOINTER_TO_UINT (g_utf8_offset_to_pointer (str, target_length - 1) - str); + + new_str = g_new (gchar, bytes + strlen(ELLIPSIS) + 1); + + strncpy (new_str, str, bytes); + strncpy (new_str + bytes, ELLIPSIS, strlen (ELLIPSIS)); + new_str[bytes + strlen (ELLIPSIS)] = '\0'; + + g_free (str); + + return new_str; +} -- cgit v1.2.3