static GString* get_next_line (const char *b, const gsize blen, const gchar * iter);
static int get_indent_level (const char *l);
-static void unquote_line (GString * l);
-static void append_quoted (GString * buf, const int indent, const GString * str,
+static void unquote_line (GString * l, const gchar *quote_symbol);
+static void append_quoted (GString * buf, const gchar *quote_symbol,
+ const int indent, const GString * str,
const int cutpoint);
static int get_breakpoint_utf8 (const gchar * s, const gint indent, const gint limit);
static int get_breakpoint_ascii (const gchar * s, const gint indent, const gint limit);
g_return_val_if_fail (text, NULL);
g_return_val_if_fail (content_type, NULL);
- if (!signature)
- retval = g_strdup ("");
- else if (strcmp(content_type, "text/html") == 0) {
- tmp_sig = g_strconcat ("\n", SIGNATURE_MARKER,"\n", signature, NULL);
- retval = modest_text_utils_convert_to_html_body(tmp_sig, -1, TRUE);
+ if (!signature) {
+ tmp_sig = g_strdup (text);
+ } else {
+ tmp_sig = g_strconcat (text, "\n", 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);
} else {
- retval = g_strconcat (text, "\n", SIGNATURE_MARKER, "\n", signature, NULL);
+ retval = tmp_sig;
}
return retval;
const gchar *my_addrs = addresses;
const gchar *end;
gchar *addr;
+ gboolean after_at = FALSE;
g_return_val_if_fail (addresses, NULL);
/* nope, we are at the start of some address
* now, let's find the end of the address */
end = my_addrs + 1;
- while (end[0] && end[0] != ',' && end[0] != ';')
+ while (end[0] && end[0] != ';' && !(after_at && end[0] == ',')) {
+ if (end[0] == '\"') {
+ while (end[0] && end[0] != '\"')
+ ++end;
+ }
+ if (end[0] == '@') {
+ after_at = TRUE;
+ }
+ if ((end[0] && end[0] == '>')&&(end[1] && end[1] == ',')) {
+ ++end;
+ break;
+ }
++end;
+ }
/* we got the address; copy it and remove trailing whitespace */
addr = g_strndup (my_addrs, end - my_addrs);
}
static void
-unquote_line (GString * l)
+unquote_line (GString * l, const gchar *quote_symbol)
{
gchar *p;
+ gint quote_len;
p = l->str;
+ quote_len = strlen (quote_symbol);
while (p[0]) {
- if (p[0] == '>') {
- if (p[1] == ' ') {
- p++;
+ if (g_str_has_prefix (p, quote_symbol)) {
+ if (p[quote_len] == ' ') {
+ p += quote_len;
}
} else {
break;
}
static void
-append_quoted (GString * buf, int indent, const GString * str,
+append_quoted (GString * buf, const gchar *quote_symbol,
+ int indent, const GString * str,
const int cutpoint)
{
int i;
+ gchar *quote_concat;
indent = indent < 0 ? abs (indent) - 1 : indent;
+ quote_concat = g_strconcat (quote_symbol, " ", NULL);
for (i = 0; i <= indent; i++) {
- g_string_append (buf, "> ");
+ g_string_append (buf, quote_concat);
}
+ g_free (quote_concat);
if (cutpoint > 0) {
g_string_append_len (buf, str->str, cutpoint);
} else {
}
-static gchar *
-modest_text_utils_quote_plain_text (const gchar *text,
- const gchar *cite,
- const gchar *signature,
- GList *attachments,
- int limit)
+static GString *
+modest_text_utils_quote_body (GString *output, const gchar *text,
+ const gchar *quote_symbol,
+ int limit)
{
+
const gchar *iter;
- gint indent, breakpoint, rem_indent = 0;
- GString *q, *l, *remaining;
gsize len;
- gchar *attachments_string = NULL;
-
- q = g_string_new ("");
-
- if (signature != NULL) {
- q = g_string_append (q, "\n--\n");
- q = g_string_append (q, signature);
- }
-
- q = g_string_append (q, "\n");
- q = g_string_append (q, cite);
- q = g_string_append_c (q, '\n');
-
- /* remaining will store the rest of the line if we have to break it */
- remaining = g_string_new ("");
+ gint indent, breakpoint, rem_indent = 0;
+ GString *l, *remaining;
iter = text;
len = strlen(text);
+ remaining = g_string_new ("");
do {
l = get_next_line (text, len, iter);
iter = iter + l->len + 1;
indent = get_indent_level (l->str);
- unquote_line (l);
+ unquote_line (l, quote_symbol);
if (remaining->len) {
if (l->len && indent == rem_indent) {
get_breakpoint (remaining->str,
rem_indent,
limit);
- append_quoted (q, rem_indent,
+ append_quoted (output, quote_symbol, rem_indent,
remaining, breakpoint);
g_string_erase (remaining, 0,
breakpoint);
g_string_erase (remaining, 0, 1);
}
rem_indent = indent;
- append_quoted (q, indent, l, breakpoint);
+ append_quoted (output, quote_symbol, indent, l, breakpoint);
g_string_free (l, TRUE);
} while ((iter < text + len) || (remaining->str[0]));
+ return output;
+}
+
+static gchar *
+modest_text_utils_quote_plain_text (const gchar *text,
+ const gchar *cite,
+ const gchar *signature,
+ GList *attachments,
+ int limit)
+{
+ GString *q;
+ gchar *attachments_string = NULL;
+
+ q = g_string_new ("");
+
+ if (signature != NULL) {
+ q = g_string_append (q, "\n--\n");
+ q = g_string_append (q, signature);
+ }
+
+ q = g_string_append (q, "\n");
+ q = g_string_append (q, cite);
+ q = g_string_append_c (q, '\n');
+
+ q = modest_text_utils_quote_body (q, text, ">", limit);
+
attachments_string = quoted_attachments (attachments);
q = g_string_append (q, attachments_string);
g_free (attachments_string);
"<body>\n<br/>\n");
if (text || cite || signature) {
+ GString *quoted_text;
g_string_append (result_string, "<pre>\n");
if (signature) {
quote_html_add_to_gstring (result_string, SIGNATURE_MARKER);
quote_html_add_to_gstring (result_string, signature);
}
quote_html_add_to_gstring (result_string, cite);
- quote_html_add_to_gstring (result_string, text);
+ quoted_text = g_string_new ("");
+ quoted_text = modest_text_utils_quote_body (quoted_text, text, ">", limit);
+ quote_html_add_to_gstring (result_string, quoted_text->str);
+ g_string_free (quoted_text, TRUE);
if (attachments) {
gchar *attachments_string = quoted_attachments (attachments);
quote_html_add_to_gstring (result_string, attachments_string);
for (i = 0; address[i]; ++i) {
if (address[i] == '<') {
- if (G_UNLIKELY(i == 0))
- return; /* there's nothing else, leave it */
- else {
+ if (G_UNLIKELY(i == 0)) {
+ break; /* there's nothing else, leave it */
+ }else {
address[i] = '\0'; /* terminate the string here */
- return;
+ break;
}
}
}
+
+ g_strchomp (address);
}
/* optimization: shortcut if first char is ascii */
if (((s1[0] & 0x80) == 0) && ((s2[0] & 0x80) == 0) &&
- (s1[0] != s2[0]))
+ (tolower(s1[0]) != tolower (s2[0])))
return tolower(s1[0]) - tolower(s2[0]);
n1 = g_utf8_strdown (s1, -1);
/* if it's today, show the time, if it's not today, show the date instead */
+ /* TODO: take into account the system config for 24/12h */
if (day == date_day) /* is the date today? */
- modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%X", date);
+ modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, _HL("wdgt_va_24h_time"), date);
else
- modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, "%x", date);
+ modest_text_utils_strftime (date_buf, DATE_BUF_SIZE, _HL("wdgt_va_date"), date);
return date_buf; /* this is a static buffer, don't free! */
}
const guint GB=1024 * MB;
if (size == 0)
- return g_strdup_printf(_FM("sfil_li_size_kb"), 0);
- if (0 < size && size < KB)
- return g_strdup_printf (_FM("sfil_li_size_kb"), 1);
+ return g_strdup_printf (_FM("sfil_li_size_kb"), 0);
+ if (0 <= size && size < KB)
+ return g_strdup_printf (_FM("sfil_li_size_1kb_99kb"), 1);
else if (KB <= size && size < 100 * KB)
return g_strdup_printf (_FM("sfil_li_size_1kb_99kb"), size / KB);
else if (100*KB <= size && size < MB)