From aabd62828672c055205292c77f1463260f3b0c51 Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Mon, 21 Jan 2013 05:55:57 -0500
Subject: [PATCH] Improve format=flowed text unfolding, add test for signature separator handling

---
 tests/src/format-flowed-unfolded.txt |    3 +++
 tests/src/format-flowed.txt          |    3 +++
 program/lib/Roundcube/rcube_mime.php |   16 ++++++++++------
 3 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php
index d5fb35b..fd91ca9 100644
--- a/program/lib/Roundcube/rcube_mime.php
+++ b/program/lib/Roundcube/rcube_mime.php
@@ -476,14 +476,18 @@
         $q_level = 0;
 
         foreach ($text as $idx => $line) {
-            if ($line[0] == '>' && preg_match('/^(>+\s*)/', $line, $regs)) {
-                $q = strlen(str_replace(' ', '', $regs[0]));
-                $line = substr($line, strlen($regs[0]));
+            if ($line[0] == '>') {
+                $len  = strlen($line);
+                $line = preg_replace('/^>+ {0,1}/', '', $line);
+                $q    = $len - strlen($line);
 
+                // The same paragraph (We join current line with the previous one) when:
+                // - the same level of quoting
+                // - previous line was flowed
+                // - previous line contains more than only one single space (and quote char(s))
                 if ($q == $q_level
-                    && strlen($line[$last]) > 1  // don't hit if line only consist of one single white space
-                    && isset($text[$last])
-                    && $text[$last][strlen($text[$last])-1] == ' '
+                    && isset($text[$last]) && $text[$last][strlen($text[$last])-1] == ' '
+                    && !preg_match('/^>+ {0,1}$/', $text[$last])
                 ) {
                     $text[$last] .= $line;
                     unset($text[$idx]);
diff --git a/tests/src/format-flowed-unfolded.txt b/tests/src/format-flowed-unfolded.txt
index 8245d59..b422f98 100644
--- a/tests/src/format-flowed-unfolded.txt
+++ b/tests/src/format-flowed-unfolded.txt
@@ -12,3 +12,6 @@
 > xxxxxxxxxx. xxxx xxxxx xxxxx xxxx xx xx.xx. xxxxxx xxxxxxxxxxxx, xxxx xx
 > 
 > ... and this one as well.
+
+-- 
+Sig
diff --git a/tests/src/format-flowed.txt b/tests/src/format-flowed.txt
index 522f829..d3bd90e 100644
--- a/tests/src/format-flowed.txt
+++ b/tests/src/format-flowed.txt
@@ -14,3 +14,6 @@
 > xxxxxxxxxx. xxxx xxxxx xxxxx xxxx xx xx.xx. xxxxxx xxxxxxxxxxxx, xxxx xx
 > 
 > ... and this one as well.
+
+-- 
+Sig

--
Gitblit v1.9.1