[Xfce4-commits] <postler:master> Render nested blocks of quotes

Christian Dywan noreply at xfce.org
Sun Aug 1 17:14:01 CEST 2010


Updating branch refs/heads/master
         to a0b632ee8bdb94f548dbf90bc6162a8c5df567ec (commit)
       from d2184aa24128fb47ab42da46fb99209b11bc873a (commit)

commit a0b632ee8bdb94f548dbf90bc6162a8c5df567ec
Author: Christian Dywan <christian at twotoasts.de>
Date:   Wed Jul 28 13:31:57 2010 +0200

    Render nested blocks of quotes

 postler/postler-content.vala |   39 +++++++++++++++++++++++++++++----------
 1 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/postler/postler-content.vala b/postler/postler-content.vala
index 084cd5f..9dd34b9 100644
--- a/postler/postler-content.vala
+++ b/postler/postler-content.vala
@@ -550,7 +550,7 @@ public class Postler.Content : WebKit.WebView {
             }
 
             bool plain_text = mime_type == "text/plain";
-            bool in_quote = false;
+            int in_quote = 0;
             bool in_signature = false;
             string inner_boundary = "";
             while ((line = stream.read_line (null, null)) != null) {
@@ -633,17 +633,36 @@ public class Postler.Content : WebKit.WebView {
                         line = "";
                     }
                     /* Looks like quoting */
-                    if (in_quote && !line.has_prefix (">")) {
-                        body[body_parts].append ("</blockquote>");
-                        in_quote = false;
+                    if (in_quote > 0 || 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)
+                            body[body_parts].append ("</blockquote>");
+                        else if (quote_mark > in_quote)
+                            body[body_parts].append ("<blockquote>");
+                        in_quote = quote_mark;
                     }
-                    else if (!in_quote && line.has_prefix (">")) {
-                        body[body_parts].append ("<blockquote>");
-                        in_quote = true;
-                    }
-                    if (in_quote && line[0] == '>' && line[1] == ' ')
+
+                    if (in_quote > 0 && line[0] == '>' && line[1] == ' ') {
                         line = line.substring (2);
-                    else if (in_quote && line[0] == '>' && line[1] == '\0')
+                        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);
                 }
                 body[body_parts].append (line);



More information about the Xfce4-commits mailing list