X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-text-utils.c;h=fb4da8426d6a96c8a42a6552903a0649aff382ee;hp=7bceaf0a7c572d8b72f4c0f8a3be61206132eafd;hb=12a672c559d983c4e49a7e4054ee14c0177ecb1c;hpb=ecd414d0a70e162f5c5feea60c735db7c44b457b diff --git a/src/modest-text-utils.c b/src/modest-text-utils.c index 7bceaf0..fb4da84 100644 --- a/src/modest-text-utils.c +++ b/src/modest-text-utils.c @@ -163,6 +163,8 @@ static gchar* modest_text_utils_quote_html (const gchar *text, GList *attachments, int limit); static gchar* get_email_from_address (const gchar *address); +static void remove_extra_spaces (gchar *string); + /* ******************************************************************* */ @@ -295,12 +297,13 @@ modest_text_utils_strftime(char *s, gsize max, const char *fmt, time_t timet) } gchar * -modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix) +modest_text_utils_derived_subject (const gchar *subject, gboolean is_reply) { - gchar *tmp, *subject_dup, *retval; - gint prefix_len; - - g_return_val_if_fail (prefix, NULL); + gchar *tmp, *subject_dup, *retval, *prefix; + const gchar *untranslated_prefix; + gint prefix_len, untranslated_prefix_len; + gboolean translated_found = FALSE; + gboolean first_time; if (!subject || subject[0] == '\0') subject = _("mail_va_no_subject"); @@ -308,13 +311,27 @@ modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix) subject_dup = g_strdup (subject); tmp = g_strchug (subject_dup); + prefix = (is_reply) ? _("mail_va_re") : _("mail_va_fw"); + prefix = g_strconcat (prefix, ":", NULL); + prefix_len = g_utf8_strlen (prefix, -1); + + untranslated_prefix = (is_reply) ? "Re:" : "Fw:"; + untranslated_prefix_len = 3; + /* We do not want things like "Re: Re: Re:" or "Fw: Fw:" so delete the previous ones */ - prefix_len = strlen (prefix); + first_time = TRUE; do { if (g_str_has_prefix (tmp, prefix)) { tmp += prefix_len; tmp = g_strchug (tmp); + /* Do not consider translated prefixes in the + middle of a Re:Re:..Re: like sequence */ + if (G_UNLIKELY (first_time)) + translated_found = TRUE; + } else if (g_str_has_prefix (tmp, untranslated_prefix)) { + tmp += untranslated_prefix_len; + tmp = g_strchug (tmp); } else { gchar *prefix_down, *tmp_down; @@ -334,10 +351,22 @@ modest_text_utils_derived_subject (const gchar *subject, const gchar *prefix) break; } } + first_time = FALSE; } while (tmp); - retval = g_strdup_printf ("%s %s", prefix, tmp); + if (!g_strcmp0 (subject, tmp)) { + /* normal case */ + retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + } else { + if (translated_found) { + /* Found a translated prefix, i.e, "VS:" in Finish */ + retval = g_strdup_printf ("%s %s", prefix, tmp); + } else { + retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp); + } + } g_free (subject_dup); + g_free (prefix); return retval; } @@ -487,7 +516,7 @@ modest_text_utils_convert_buffer_to_html_start (GString *html, const gchar *data guchar kar = data[i]; if (space_seen && kar != ' ') { - g_string_append (html, " "); + g_string_append (html, " "); space_seen = FALSE; } @@ -623,7 +652,7 @@ modest_text_utils_get_addresses_indexes (const gchar *addresses, GSList **start_ gchar *next_char = g_utf8_next_char (cur); if (!g_utf8_strchr (start, (cur - start + 1), g_utf8_get_char ("@")) && - next_char && *next_char != '\n') + next_char && *next_char != '\n' && *next_char != '\0') continue; start_index = g_new0 (gint, 1); @@ -663,15 +692,16 @@ modest_text_utils_split_addresses_list (const gchar *addresses) gboolean after_at = FALSE; g_return_val_if_fail (addresses, NULL); - - /* skip any space, ',', ';' at the start */ - while (my_addrs && (my_addrs[0] == ' ' || my_addrs[0] == ',' || my_addrs[0] == ';')) + + /* skip any space, ',', ';' '\n' at the start */ + while (my_addrs && (my_addrs[0] == ' ' || my_addrs[0] == ',' || + my_addrs[0] == ';' || my_addrs[0] == '\n')) ++my_addrs; /* are we at the end of addresses list? */ if (!my_addrs[0]) return NULL; - + /* nope, we are at the start of some address * now, let's find the end of the address */ end = my_addrs + 1; @@ -694,12 +724,56 @@ modest_text_utils_split_addresses_list (const gchar *addresses) addr = g_strndup (my_addrs, end - my_addrs); g_strchomp (addr); + remove_extra_spaces (addr); + head = g_slist_append (NULL, addr); head->next = modest_text_utils_split_addresses_list (end); /* recurse */ return head; } +gchar * +modest_text_utils_join_addresses (const gchar *from, + const gchar *to, + const gchar *cc, + const gchar *bcc) +{ + GString *buffer; + gboolean add_separator = FALSE; + + buffer = g_string_new (""); + + if (from && strlen (from)) { + buffer = g_string_append (buffer, from); + add_separator = TRUE; + } + if (to && strlen (to)) { + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, to); + } + if (cc && strlen (cc)) { + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, cc); + } + if (bcc && strlen (bcc)) { + if (add_separator) + buffer = g_string_append (buffer, "; "); + else + add_separator = TRUE; + + buffer = g_string_append (buffer, bcc); + } + + return g_string_free (buffer, FALSE); +} void modest_text_utils_address_range_at_position (const gchar *recipients_list, @@ -1936,6 +2010,20 @@ remove_quotes (gchar **quotes) } } +static void +remove_extra_spaces (gchar *string) +{ + gchar *start; + + start = string; + while (start && start[0] != '\0') { + if ((start[0] == ' ') && (start[1] == ' ')) { + g_strchug (start+1); + } + start++; + } +} + gchar * modest_text_utils_escape_mnemonics (const gchar *text) { @@ -2105,8 +2193,7 @@ static void quote_name_part (GString **str, gchar **cur, gchar **start) { gchar *blank; - gint str_len = g_utf8_pointer_to_offset (*start, *cur) - - g_utf8_pointer_to_offset (*start, *start); + gint str_len = *cur - *start; while (**start == ' ') { *start = g_utf8_next_char (*start); @@ -2121,13 +2208,9 @@ quote_name_part (GString **str, gchar **cur, gchar **start) *start = g_utf8_next_char (*cur); } else { *str = g_string_append_c (*str, '"'); - *str = g_string_append_len (*str, *start, - (g_utf8_pointer_to_offset (*start, blank) - - g_utf8_pointer_to_offset (*start, *start))); + *str = g_string_append_len (*str, *start, (blank - *start)); *str = g_string_append_c (*str, '"'); - *str = g_string_append_len (*str, blank, - (g_utf8_pointer_to_offset (*start, *cur) - - g_utf8_pointer_to_offset (*start, blank))); + *str = g_string_append_len (*str, blank, (*cur - blank)); *str = g_string_append (*str, ";"); *start = g_utf8_next_char (*cur); }