diff options
author | Aleksander Machniak <alec@alec.pl> | 2013-01-20 11:57:46 +0100 |
---|---|---|
committer | Aleksander Machniak <alec@alec.pl> | 2013-01-20 11:57:46 +0100 |
commit | 9deb663f94e9819e9a0b5c6bb2026e1e37bac5e3 (patch) | |
tree | 0424c9de71fa2584d727f7400b60cfbdae029ab5 | |
parent | 1aca4cb3ae688a7ccf887cfea0a7ae62505631d6 (diff) |
More improvements to format=flowed handling + fix in wordwrap() used internally by format_flowed()
-rw-r--r-- | program/lib/Roundcube/rcube_mime.php | 17 | ||||
-rw-r--r-- | tests/src/format-flowed-unfolded.txt | 2 | ||||
-rw-r--r-- | tests/src/format-flowed.txt | 2 |
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
|