|
|
@ -726,71 +726,74 @@ function rcmail_plain_body($body, $flowed=false)
|
|
|
|
$body = preg_replace_callback($replacer->mailto_pattern, array($replacer, 'mailto_callback'), $body);
|
|
|
|
$body = preg_replace_callback($replacer->mailto_pattern, array($replacer, 'mailto_callback'), $body);
|
|
|
|
|
|
|
|
|
|
|
|
// split body into single lines
|
|
|
|
// split body into single lines
|
|
|
|
$a_lines = preg_split('/\r?\n/', $body);
|
|
|
|
$body = preg_split('/\r?\n/', $body);
|
|
|
|
$quote_level = 0;
|
|
|
|
$quote_level = 0;
|
|
|
|
$last = -1;
|
|
|
|
$last = -1;
|
|
|
|
|
|
|
|
|
|
|
|
// find/mark quoted lines...
|
|
|
|
// find/mark quoted lines...
|
|
|
|
for ($n=0, $cnt=count($a_lines); $n < $cnt; $n++) {
|
|
|
|
for ($n=0, $cnt=count($body); $n < $cnt; $n++) {
|
|
|
|
if ($a_lines[$n][0] == '>' && preg_match('/^(>+\s*)+/', $a_lines[$n], $regs)) {
|
|
|
|
if ($body[$n][0] == '>' && preg_match('/^(>+\s*)+/', $body[$n], $regs)) {
|
|
|
|
$q = strlen(preg_replace('/\s/', '', $regs[0]));
|
|
|
|
$q = strlen(preg_replace('/\s/', '', $regs[0]));
|
|
|
|
$a_lines[$n] = substr($a_lines[$n], strlen($regs[0]));
|
|
|
|
$body[$n] = substr($body[$n], strlen($regs[0]));
|
|
|
|
|
|
|
|
|
|
|
|
if ($q > $quote_level)
|
|
|
|
if ($q > $quote_level) {
|
|
|
|
$a_lines[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
$body[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
str_repeat('<blockquote>', $q - $quote_level))) . $a_lines[$n];
|
|
|
|
str_repeat('<blockquote>', $q - $quote_level))) . $body[$n];
|
|
|
|
else if ($q < $quote_level)
|
|
|
|
}
|
|
|
|
$a_lines[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
else if ($q < $quote_level) {
|
|
|
|
str_repeat('</blockquote>', $quote_level - $q))) . $a_lines[$n];
|
|
|
|
$body[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
|
|
|
|
str_repeat('</blockquote>', $quote_level - $q))) . $body[$n];
|
|
|
|
|
|
|
|
}
|
|
|
|
else if ($flowed) {
|
|
|
|
else if ($flowed) {
|
|
|
|
// previous line is flowed
|
|
|
|
// previous line is flowed
|
|
|
|
if (isset($a_lines[$last]) && $a_lines[$n]
|
|
|
|
if (isset($body[$last]) && $body[$n]
|
|
|
|
&& $a_lines[$last][strlen($a_lines[$last])-1] == ' ') {
|
|
|
|
&& $body[$last][strlen($body[$last])-1] == ' ') {
|
|
|
|
// merge lines
|
|
|
|
// merge lines
|
|
|
|
$a_lines[$last] .= $a_lines[$n];
|
|
|
|
$body[$last] .= $body[$n];
|
|
|
|
unset($a_lines[$n]);
|
|
|
|
unset($body[$n]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else {
|
|
|
|
$last = $n;
|
|
|
|
$last = $n;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
$q = 0;
|
|
|
|
$q = 0;
|
|
|
|
if ($flowed) {
|
|
|
|
if ($flowed) {
|
|
|
|
// sig separator - line is fixed
|
|
|
|
// sig separator - line is fixed
|
|
|
|
if ($a_lines[$n] == '-- ') {
|
|
|
|
if ($body[$n] == '-- ') {
|
|
|
|
$last = $n;
|
|
|
|
$last = $last_sig = $n;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
// remove space-stuffing
|
|
|
|
// remove space-stuffing
|
|
|
|
if ($a_lines[$n][0] == ' ')
|
|
|
|
if ($body[$n][0] == ' ')
|
|
|
|
$a_lines[$n] = substr($a_lines[$n], 1);
|
|
|
|
$body[$n] = substr($body[$n], 1);
|
|
|
|
|
|
|
|
|
|
|
|
// previous line is flowed?
|
|
|
|
// previous line is flowed?
|
|
|
|
if (isset($a_lines[$last]) && $a_lines[$n]
|
|
|
|
if (isset($body[$last]) && $body[$n]
|
|
|
|
&& $a_lines[$last] != '-- '
|
|
|
|
&& $last != $last_sig
|
|
|
|
&& $a_lines[$last][strlen($a_lines[$last])-1] == ' '
|
|
|
|
&& $body[$last][strlen($body[$last])-1] == ' '
|
|
|
|
) {
|
|
|
|
) {
|
|
|
|
$a_lines[$last] .= $a_lines[$n];
|
|
|
|
$body[$last] .= $body[$n];
|
|
|
|
unset($a_lines[$n]);
|
|
|
|
unset($body[$n]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
else {
|
|
|
|
$last = $n;
|
|
|
|
$last = $n;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if ($quote_level > 0)
|
|
|
|
if ($quote_level > 0)
|
|
|
|
$a_lines[$last] = $replacer->get_replacement($replacer->add(
|
|
|
|
$body[$last] = $replacer->get_replacement($replacer->add(
|
|
|
|
str_repeat('</blockquote>', $quote_level))) . $a_lines[$last];
|
|
|
|
str_repeat('</blockquote>', $quote_level))) . $body[$last];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if ($quote_level > 0)
|
|
|
|
else if ($quote_level > 0)
|
|
|
|
$a_lines[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
$body[$n] = $replacer->get_replacement($replacer->add(
|
|
|
|
str_repeat('</blockquote>', $quote_level))) . $a_lines[$n];
|
|
|
|
str_repeat('</blockquote>', $quote_level))) . $body[$n];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$quote_level = $q;
|
|
|
|
$quote_level = $q;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$body = join("\n", $a_lines);
|
|
|
|
$body = join("\n", $body);
|
|
|
|
|
|
|
|
|
|
|
|
// quote plain text (don't use Q() here, to display entities "as is")
|
|
|
|
// quote plain text (don't use Q() here, to display entities "as is")
|
|
|
|
$table = get_html_translation_table(HTML_SPECIALCHARS);
|
|
|
|
$table = get_html_translation_table(HTML_SPECIALCHARS);
|
|
|
|