#include <regex.h>
#include <modest-tny-platform-factory.h>
#include <modest-text-utils.h>
+#include <modest-account-mgr-helpers.h>
#include <modest-runtime.h>
#include <ctype.h>
const gchar *from,
time_t sent_date)
{
- gchar *retval;
- gchar *tmp_sig;
-
+ gchar *retval, *tmp;
+
g_return_val_if_fail (text, NULL);
g_return_val_if_fail (content_type, NULL);
-
- if (!signature) {
- tmp_sig = g_strdup (text);
- } else {
- tmp_sig = g_strconcat (text, "\n", MODEST_TEXT_UTILS_SIGNATURE_MARKER, "\n", signature, NULL);
- }
if (strcmp (content_type, "text/html") == 0) {
- retval = modest_text_utils_convert_to_html_body (tmp_sig, -1, TRUE);
- g_free (tmp_sig);
+ tmp = modest_text_utils_convert_to_html_body (text, -1, TRUE);
+ if (signature) {
+ gchar *colored_signature = modest_text_utils_create_colored_signature (signature);
+ retval = g_strconcat (tmp, colored_signature, NULL);
+ g_free (colored_signature);
+ g_free (tmp);
+ } else {
+ retval = tmp;
+ }
} else {
- retval = tmp_sig;
+ if (signature)
+ retval = g_strconcat (text, "\n", MODEST_TEXT_UTILS_SIGNATURE_MARKER, "\n", signature, NULL);
+ else
+ retval = g_strdup (text);
}
return retval;
gchar *tmp, *subject_dup, *retval, *prefix;
const gchar *untranslated_prefix;
gint prefix_len, untranslated_prefix_len;
- gboolean translated_found = FALSE;
- gboolean first_time;
+ gboolean found = FALSE;
if (!subject || subject[0] == '\0')
subject = _("mail_va_no_subject");
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 */
- 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;
-
- /* We need this to properly check the cases of
- some clients adding FW: instead of Fw: for
- example */
- prefix_down = g_utf8_strdown (prefix, -1);
- tmp_down = g_utf8_strdown (tmp, -1);
- if (g_str_has_prefix (tmp_down, prefix_down)) {
- tmp += prefix_len;
- tmp = g_strchug (tmp);
- g_free (prefix_down);
- g_free (tmp_down);
- } else {
- g_free (prefix_down);
- g_free (tmp_down);
- break;
- }
- }
- first_time = FALSE;
- } while (tmp);
+ if (g_str_has_prefix (tmp, prefix) ||
+ g_str_has_prefix (tmp, untranslated_prefix)) {
+ found = TRUE;
+ } else {
+ gchar *prefix_down, *tmp_down, *untranslated_down;
- if (!g_strcmp0 (subject, tmp)) {
- /* normal case */
- retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp);
+ prefix_down = g_utf8_strdown (prefix, -1);
+ untranslated_down = g_utf8_strdown (untranslated_prefix, -1);
+ tmp_down = g_utf8_strdown (tmp, -1);
+ if (g_str_has_prefix (tmp_down, prefix_down) ||
+ g_str_has_prefix (tmp_down, untranslated_down) ||
+ (!is_reply && g_str_has_prefix (tmp_down, "fwd:")))
+ found = TRUE;
+
+ g_free (prefix_down);
+ g_free (untranslated_down);
+ g_free (tmp_down);
+ }
+
+ if (found) {
+ /* If the prefix is already present do not touch the subject */
+ retval = subject_dup;
} 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);
- }
+ /* Normal case, add the prefix */
+ retval = g_strdup_printf ("%s %s", untranslated_prefix, tmp);
+ g_free (subject_dup);
}
- g_free (subject_dup);
g_free (prefix);
return retval;
quote_len = strlen (quote_symbol);
while (p[0]) {
if (g_str_has_prefix (p, quote_symbol)) {
- if (p[quote_len] == ' ') {
- p += quote_len;
+ p+=quote_len;
+ while (p[0] && p[0] == ' ') {
+ p++;
}
+ continue;
} else {
break;
}
{
GString *result_string;
- result_string =
+ result_string =
g_string_new ( \
"<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n" \
"<html>\n" \
- "<body>\n<br/>\n");
+ "<body>\n");
if (text || cite || signature) {
GString *quoted_text;
g_string_append (result_string, "<pre>\n");
if (signature) {
- quote_html_add_to_gstring (result_string, MODEST_TEXT_UTILS_SIGNATURE_MARKER);
- quote_html_add_to_gstring (result_string, signature);
+ gchar *colored_signature = modest_text_utils_create_colored_signature (signature);
+ g_string_append_printf (result_string, "%s<br/>", colored_signature);
+ g_free (colored_signature);
}
quote_html_add_to_gstring (result_string, cite);
quoted_text = g_string_new ("");
return retval;
}
+
+gchar *
+modest_text_utils_create_colored_signature (const gchar *signature)
+{
+ gchar *gray_color_markup = NULL, *retval;
+ GdkColor color;
+ GtkWidget *widget;
+
+ /* Get color from widgets */
+ widget = (GtkWidget *) modest_window_mgr_get_current_top (modest_runtime_get_window_mgr ());
+ if (widget && gtk_style_lookup_color (gtk_widget_get_style (widget), "SecondaryTextColor", &color))
+ gray_color_markup = modest_text_utils_get_color_string (&color);
+
+ retval = g_strdup_printf ("<br/>\n<font color=\"%s\">%s<br/>\n%s<br/>\n</font>",
+ (gray_color_markup) ? gray_color_markup : "#babababababa",
+ MODEST_TEXT_UTILS_SIGNATURE_MARKER,
+ signature);
+
+ if (gray_color_markup)
+ g_free (gray_color_markup);
+
+ return retval;
+}
+
+gboolean
+modest_text_utils_live_search_find (const gchar *haystack, const gchar *needles)
+{
+ gchar *haystack_fold;
+ gchar *needles_fold;
+ gchar **needle, **current;
+ gboolean match;
+
+ match = FALSE;
+
+ haystack_fold = g_utf8_casefold (haystack, -1);
+ needles_fold = g_utf8_casefold (needles, -1);
+
+ needle = g_strsplit (needles_fold, " ", -1);
+
+ current = needle;
+ while (current && *current != NULL) {
+
+ if (g_strstr_len (haystack_fold, -1, *current) != NULL) {
+ match = TRUE;
+ } else {
+ match = FALSE;
+ break;
+ }
+ current++;
+ }
+
+ g_strfreev (needle);
+ g_free (needles_fold);
+ g_free (haystack_fold);
+
+ return match;
+}