summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksander Machniak <alec@alec.pl>2013-01-20 11:57:46 +0100
committerAleksander Machniak <alec@alec.pl>2013-01-21 11:56:06 +0100
commit7ebed11b05fe9b3659d18ed797572e7ffccad5a3 (patch)
tree1dc9a706523764328368648ab4456f7872e2f03e
parentaabd62828672c055205292c77f1463260f3b0c51 (diff)
More improvements to format=flowed handling + fix in wordwrap() used internally by format_flowed()
-rw-r--r--program/lib/Roundcube/rcube_mime.php17
-rw-r--r--tests/src/format-flowed-unfolded.txt2
-rw-r--r--tests/src/format-flowed.txt2
3 files changed, 14 insertions, 7 deletions
diff --git a/program/lib/Roundcube/rcube_mime.php b/program/lib/Roundcube/rcube_mime.php
index fd91ca979..e9d5cf148 100644
--- a/program/lib/Roundcube/rcube_mime.php
+++ b/program/lib/Roundcube/rcube_mime.php
@@ -477,9 +477,10 @@ class rcube_mime
foreach ($text as $idx => $line) {
if ($line[0] == '>') {
- $len = strlen($line);
- $line = preg_replace('/^>+ {0,1}/', '', $line);
- $q = $len - strlen($line);
+ // remove quote chars, store level in $q
+ $line = preg_replace('/^>+/', '', $line, -1, $q);
+ // remove (optional) space-staffing
+ $line = preg_replace('/^ /', '', $line);
// The same paragraph (We join current line with the previous one) when:
// - the same level of quoting
@@ -540,10 +541,12 @@ class rcube_mime
foreach ($text as $idx => $line) {
if ($line != '-- ') {
- if ($line[0] == '>' && preg_match('/^(>+ {0,1})+/', $line, $regs)) {
- $level = substr_count($regs[0], '>');
+ if ($line[0] == '>') {
+ // remove quote chars, store level in $level
+ $line = preg_replace('/^>+/', '', $line, -1, $level);
+ // remove (optional) space-staffing
+ $line = preg_replace('/^ /', '', $line);
$prefix = str_repeat('>', $level) . ' ';
- $line = rtrim(substr($line, strlen($regs[0])));
$line = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix", false, $charset);
}
else if ($line) {
@@ -583,7 +586,7 @@ class rcube_mime
while (count($para)) {
$line = array_shift($para);
if ($line[0] == '>') {
- $string .= $line.$break;
+ $string .= $line . (count($para) ? $break : '');
continue;
}
diff --git a/tests/src/format-flowed-unfolded.txt b/tests/src/format-flowed-unfolded.txt
index b422f981b..14e526be4 100644
--- a/tests/src/format-flowed-unfolded.txt
+++ b/tests/src/format-flowed-unfolded.txt
@@ -13,5 +13,7 @@ On XX.YY.YYYY Y:YY, Somebody wrote:
>
> ... and this one as well.
+> > text
+
--
Sig
diff --git a/tests/src/format-flowed.txt b/tests/src/format-flowed.txt
index d3bd90eed..a390ffd11 100644
--- a/tests/src/format-flowed.txt
+++ b/tests/src/format-flowed.txt
@@ -15,5 +15,7 @@ On XX.YY.YYYY Y:YY, Somebody wrote:
>
> ... and this one as well.
+> > text
+
--
Sig