Updating branch refs/heads/master to 9d8836226302b78ac71dd26a525d9cca43e016b9 (commit) from 8637d01828b14d6a59e20df967f42456feaf61d7 (commit)
commit 9d8836226302b78ac71dd26a525d9cca43e016b9 Author: Christian Dywan <christ...@twotoasts.de> Date: Sat Feb 12 16:37:40 2011 +0100 Separate signature/ quote rendering from parsing If a message is encoded, line endings may not match real line endings in the message source. postler/postler-content.vala | 102 ++++++++++++++++++++++------------------- 1 files changed, 55 insertions(+), 47 deletions(-) diff --git a/postler/postler-content.vala b/postler/postler-content.vala index fea6419..e14025a 100644 --- a/postler/postler-content.vala +++ b/postler/postler-content.vala @@ -808,8 +808,6 @@ public class Postler.Content : WebKit.WebView { message_parts.append (message_part); } - int in_quote = 0; - bool in_signature = false; string inner_boundary = ""; string line; string previous_line = ""; @@ -893,50 +891,6 @@ public class Postler.Content : WebKit.WebView { line = GLib.convert (line, -1, "UTF-8", cset, null); } catch (GLib.ConvertError error) { } - if (message_part.plain_text) { - /* Looks like a signature */ - if (in_signature && line[0] == '\0') { - message_part.body.append ("</span>"); - in_signature = false; - } else if (!in_signature && line[0] == '-' && line[1] == '-' - && line[2] == ' ' && line[3] == '\0') { - message_part.body.append ("<span class=\"signature\">"); - in_signature = true; - line = ""; - } - /* Looks like quoting */ - if (in_quote > 0 || line.has_prefix ("> ") || line.has_prefix (">>")) { - /* Determine level of nesting */ - int quote_mark = 0; - int position = 0; - do { - if (line[position] == '>') - quote_mark++; - else if (line[position] != ' ') - break; - position++; - } while (true); - - if (quote_mark < in_quote) - message_part.body.append ("</blockquote>"); - else if (quote_mark > in_quote) - message_part.body.append ("<blockquote>"); - in_quote = quote_mark; - } - - if (in_quote > 0 && line[0] == '>' && line[1] == ' ') { - line = line.substring (2); - int position = 0; - do { - if (line[position] != '>' && line[position] != ' ') - break; - position++; - } while (true); - line = line.substring (position); - } - else if (in_quote > 0 && line[0] == '>' && line[1] == '\0') - line = line.substring (1); - } if (content_encoding == "base64") { if (message_part.plain_text) line = line.replace ("\n", "<br>"); @@ -1001,6 +955,60 @@ public class Postler.Content : WebKit.WebView { return false; } + string render_plain_text (string body) { + bool in_signature = false; + int in_quote = 0; + + var new_body = new StringBuilder ("<span class=\"plain_text\">"); + foreach (string line in body.split ("<br>")) { + /* Looks like a signature */ + if (in_signature && line[0] == '\0') { + new_body.append ("</span>"); + in_signature = false; + } else if (!in_signature && line[0] == '-' && line[1] == '-' + && line[2] == ' ' && line[3] == '\0') { + new_body.append ("<span class=\"signature\">"); + in_signature = true; + line = ""; + } + /* Looks like quoting */ + if (in_quote > 0 || line.has_prefix ("> ") || line.has_prefix (">>")) { + /* Determine level of nesting */ + int quote_mark = 0; + int position = 0; + do { + if (line[position] == '>') + quote_mark++; + else if (line[position] != ' ') + break; + position++; + } while (true); + + if (quote_mark < in_quote) + new_body.append ("</blockquote>"); + else if (quote_mark > in_quote) + new_body.append ("<blockquote>"); + in_quote = quote_mark; + } + + if (in_quote > 0 && line[0] == '>' && line[1] == ' ') { + line = line.substring (2); + int position = 0; + do { + if (line[position] != '>' && line[position] != ' ') + break; + position++; + } while (true); + line = line.substring (position); + } + else if (in_quote > 0 && line[0] == '>' && line[1] == '\0') + line = line.substring (1); + new_body.append (line + "<br>"); + } + new_body.append ("</span>"); + return new_body.str; + } + public void display_part (MessagePart message_part) { if (current_part != message_part) { current_part = message_part; @@ -1011,7 +1019,7 @@ public class Postler.Content : WebKit.WebView { if (message_part == html_part) body_chunk = message_part.body.str; else if (message_part == text_part) { - body_chunk = "<span class=\"plain_text\">" + message_part.body.str + "</span>"; + body_chunk = render_plain_text (message_part.body.str); } else { body_chunk = """ _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits