diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2005-10-10 12:48:49 +0000 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2005-10-10 12:48:49 +0000 |
commit | c42c18f05cccabccd3b812f2ddf768d166db259c (patch) | |
tree | 5cff27d0e00fc4b886bb9148a4c30f226b433b9a /lib/ephy-string.c | |
parent | d22a95c092b87ad574dadaa91167912a963aa528 (diff) | |
download | epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.gz |
Bring back ephy_string_shorten.
2005-10-10 Christian Persch <chpe@cvs.gnome.org>
* 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.
Diffstat (limited to 'lib/ephy-string.c')
-rw-r--r-- | lib/ephy-string.c | 49 |
1 files changed, 49 insertions, 0 deletions
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 <stdlib.h> #include <glib.h> +#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; +} |