# HG changeset patch # User zas_ # Date 1214607468 0 # Node ID c879a9a4f1863e4010745082e7db1f1f9568d9ae # Parent 8d0c91a0f46117fb6a8125f93361bf0f90ad2b18 image_osd_mkinfo(): pipe replacement by " - " separator was fixed to work correctly with empty first element. diff -r 8d0c91a0f461 -r c879a9a4f186 src/image-overlay.c --- a/src/image-overlay.c Fri Jun 27 21:35:21 2008 +0000 +++ b/src/image-overlay.c Fri Jun 27 22:57:48 2008 +0000 @@ -210,7 +210,7 @@ gchar delim = '%', imp = '|', sep[] = " - "; gchar *start, *end; guint pos, prev; - guint last; + gboolean want_separator = FALSE; gchar *name, *data; GString *new; gchar *ret; @@ -220,7 +220,6 @@ new = g_string_new(str); prev = 0; - last = FALSE; while (TRUE) { @@ -294,6 +293,7 @@ data = exif_get_data_as_text(exif, name); exif_free_fd(imd->image_fd, exif); } + if (data && *data && limit > 0 && strlen(data) > limit + 3) { gchar *new_data = g_strdup_printf("%-*.*s...", limit, limit, data); @@ -364,21 +364,31 @@ } g_string_erase(new, pos, end-start+1); - if (data) - g_string_insert(new, pos, data); - - if (pos-prev >= 2 && new->str[pos-1] == imp) + if (data && *data) { - g_string_erase(new, --pos, 1); - if (last && data && *data) + if (want_separator) { + /* insert separator */ g_string_insert(new, pos, sep); pos += strlen(sep); } - } + + g_string_insert(new, pos, data); + pos += strlen(data); + } + + want_separator = FALSE; - prev = data ? pos+strlen(data)-1 : pos-1; - last = data ? TRUE : last; + if (pos-prev >= 1 && new->str[pos] == imp) + { + /* pipe character is replaced by a separator, delete it + * and raise a flag if needed */ + g_string_erase(new, pos--, 1); + want_separator = (data && *data); + } + + prev = pos - 1; + g_free(name); g_free(data); }