gchar delim = '%', imp = '|', sep[] = " - ";
gchar *start, *end;
guint pos, prev;
- guint last;
+ gboolean want_separator = FALSE;
gchar *name, *data;
GString *new;
gchar *ret;
new = g_string_new(str);
prev = 0;
- last = FALSE;
while (TRUE)
{
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);
}
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;
+
+ 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;
- prev = data ? pos+strlen(data)-1 : pos-1;
- last = data ? TRUE : last;
g_free(name);
g_free(data);
}