| | |
| | | /** |
| | | +-----------------------------------------------------------------------+ |
| | | | 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. | |
| | |
| | | // 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++; |
| | |
| | | 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; |
| | | } |
| | | } |
| | | } |
| | | |
| | |
| | | $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 |
| | |
| | | } |
| | | } |
| | | 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] != '-- ' |
| | |
| | | |
| | | 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); |
| | | } |