Performance improvements in format_flowed() and unfold_flowed()

pull/5248/head
Aleksander Machniak 9 years ago
parent afd090672c
commit 3d0d5dbd0f

@ -3,8 +3,8 @@
/**
+-----------------------------------------------------------------------+
| This file is part of the Roundcube Webmail client |
| Copyright (C) 2005-2014, The Roundcube Dev Team |
| Copyright (C) 2011-2014, Kolab Systems AG |
| Copyright (C) 2005-2016, The Roundcube Dev Team |
| Copyright (C) 2011-2016, Kolab Systems AG |
| |
| Licensed under the GNU General Public License version 3 or |
| any later version with exceptions for skins & plugins. |
@ -101,8 +101,9 @@ class rcube_mime
// Special chars as defined by RFC 822 need to in quoted string (or escaped).
$special_chars = '[\(\)\<\>\\\.\[\]@,;:"]';
if (!is_array($a))
if (!is_array($a)) {
return $out;
}
foreach ($a as $val) {
$j++;
@ -273,16 +274,17 @@ class rcube_mime
public static function parse_headers($headers)
{
$a_headers = array();
$headers = preg_replace('/\r?\n(\t| )+/', ' ', $headers);
$lines = explode("\n", $headers);
$c = count($lines);
$headers = preg_replace('/\r?\n(\t| )+/', ' ', $headers);
$lines = explode("\n", $headers);
$count = count($lines);
for ($i=0; $i<$c; $i++) {
for ($i=0; $i<$count; $i++) {
if ($p = strpos($lines[$i], ': ')) {
$field = strtolower(substr($lines[$i], 0, $p));
$value = trim(substr($lines[$i], $p+1));
if (!empty($value))
if (!empty($value)) {
$a_headers[$field] = $value;
}
}
}
@ -448,12 +450,11 @@ class rcube_mime
$marks = array();
foreach ($text as $idx => $line) {
if (preg_match('/^(>+)/', $line, $m)) {
if ($q = strspn($line, '>')) {
// remove quote chars
$q = strlen($m[1]);
$line = preg_replace('/^>+/', '', $line);
$line = substr($line, $q);
// remove (optional) space-staffing
$line = preg_replace('/^ /', '', $line);
if ($line[0] === ' ') $line = substr($line, 1);
// The same paragraph (We join current line with the previous one) when:
// - the same level of quoting
@ -475,13 +476,12 @@ class rcube_mime
}
}
else {
$q = 0;
if ($line == '-- ') {
$last = $idx;
}
else {
// remove space-stuffing
$line = preg_replace('/^ /', '', $line);
if ($line[0] === ' ') $line = substr($line, 1);
if (isset($text[$last]) && $line && !$q_level
&& $text[$last] != '-- '
@ -527,12 +527,13 @@ class rcube_mime
foreach ($text as $idx => $line) {
if ($line != '-- ') {
if (preg_match('/^(>+)/', $line, $m)) {
if ($level = strspn($line, '>')) {
// remove quote chars
$level = strlen($m[1]);
$line = preg_replace('/^>+/', '', $line);
$line = substr($line, $level);
// remove (optional) space-staffing and spaces before the line end
$line = preg_replace('/(^ | +$)/', '', $line);
$line = rtrim($line, ' ');
if ($line[0] === ' ') $line = substr($line, 1);
$prefix = str_repeat('>', $level) . ' ';
$line = $prefix . self::wordwrap($line, $length - $level - 2, " \r\n$prefix", false, $charset);
}

Loading…
Cancel
Save