diff options
author | Christian Persch <chpe@cvs.gnome.org> | 2005-10-10 20:48:49 +0800 |
---|---|---|
committer | Christian Persch <chpe@src.gnome.org> | 2005-10-10 20:48:49 +0800 |
commit | c42c18f05cccabccd3b812f2ddf768d166db259c (patch) | |
tree | 5cff27d0e00fc4b886bb9148a4c30f226b433b9a /lib | |
parent | d22a95c092b87ad574dadaa91167912a963aa528 (diff) | |
download | gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.gz gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.bz2 gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.lz gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.xz gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.tar.zst gsoc2013-epiphany-c42c18f05cccabccd3b812f2ddf768d166db259c.zip |
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')
-rw-r--r-- | lib/ephy-string.c | 49 | ||||
-rw-r--r-- | lib/ephy-string.h | 9 |
2 files changed, 55 insertions, 3 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; +} diff --git a/lib/ephy-string.h b/lib/ephy-string.h index 36e23d1c3..86ab9eafc 100644 --- a/lib/ephy-string.h +++ b/lib/ephy-string.h @@ -25,10 +25,13 @@ G_BEGIN_DECLS -gboolean ephy_string_to_int (const char *string, - gulong *integer); +gboolean ephy_string_to_int (const char *string, + gulong *integer); -char *ephy_string_blank_chr (char *source); +char *ephy_string_blank_chr (char *source); + +char *ephy_string_shorten (const char *str, + gsize target_length); G_END_DECLS |