$lines = explode("\n", $line);
$quote = str_repeat($mark, $level);
foreach ($lines as &$line) {
- $line = $quote . $line;
+ $line = $quote . ' ' . $line;
}
return implode("\n", $lines);
}
'strong' => array('\B\*\b', '\b\*\B'));
$url = Banana::$msgshow_url;
preg_match_all("/$url/ui", $text, $urls);
- $text = str_replace($urls[0], "&&&urls&&&", $text);
+ $urls = $urls[0];
+ $replace = $urls;
+ rsort($replace);
+ $text = str_replace($replace, "&&&urls&&&", $text);
foreach ($formatting as $mark=>$limit) {
list($ll, $lr) = $limit;
$text = preg_replace('/' . $ll . '(\w+?)' . $lr . '/us',
"<$mark>\\1</$mark>", $text);
}
- return preg_replace('/&&&urls&&&/e', 'array_shift($urls[0])', $text);
+ return preg_replace('/&&&urls&&&/e', 'array_shift($urls)', $text);
}
/** Build a flowed text from plain text
$text = '';
while (!is_null($line = array_shift($lines))) {
if ($line != '-- ') {
- $text .= rtrim(str_replace("\n", " \n", banana_wordwrap($line))) . "\n";
+ $level = 0;
+ $line = banana_removeQuotes($line, $level);
+ $text .= rtrim(str_replace("\n", " \n", banana_wordwrap($line, $level))) . "\n";
} else {
$text .= $line . "\n";
}
$mid = '<' . $email . '>';
if (isset(Banana::$spool->ids[$mid])) {
return Banana::$page->makeLink(Array('group' => Banana::$group,
- 'artid' => Banana::$spool->ids[$mid],
+ 'artid' => Banana::$spool->ids[$mid]->id,
'text' => $email));
} elseif (strpos($email, '$') !== false) {
return $email;
$text = banana_catchURLs($text);
$text = banana_catchQuotes($text, $strict);
$text = banana_catchSignature($text);
- return banana_cleanHtml('<pre>' . $text . '</pre>');
+ return '<pre>' . $text . '</pre>';
}
function banana_wrap($text, $base_level = 0, $strict = true)
if (!empty($buffer)) {
$text .= banana_wordwrap(implode("\n", $buffer), $level + $base_level) . "\n";
$buffer = array();
- }
+ }
$level = $lvl;
}
$buffer[] = $line;
return $text;
}
-function banana_formatPlainText(BananaMimePart &$part, $base_level = 0)
+function banana_formatPlainText(BananaMimePart $part, $base_level = 0)
{
$text = $part->getText();
if ($part->isFlowed()) {
$text = banana_unflowed($text);
}
- $text = banana_wrap($text, $base_level, $part->isFlowed());
- return banana_plainTextToHtml($text, $part->isFlowed());
+ if (function_exists('hook_formatPart') && ($ret = hook_formatPart($text, $part, $base_level))) {
+ return $ret;
+ } else {
+ $text = banana_wrap($text, $base_level, $part->isFlowed());
+ return banana_plainTextToHtml($text, $part->isFlowed());
+ }
}
-function banana_quotePlainText(BananaMimePart &$part)
+function banana_quotePlainText(BananaMimePart $part)
{
$text = $part->getText();
if ($part->isFlowed()) {
$text = banana_unflowed($text);
}
- return banana_wrap($text, 1);
+ return banana_quote($text, 1);
}
// }}}
} else {
$style = '';
}
- $attributes = str_replace("\n", ' ', stripslashes($attributes));
- $attributes = str_replace('= "', '="', $attributes);
+ $attributes = str_replace(array("\n", "\r"), ' ', stripslashes($attributes));
+ $attributes = str_replace(array('= "', '= \''), array('="', '=\''), $attributes);
foreach ($conv as $att=>$stl) {
$pattern = '/\b' . preg_quote($att, '/') . '=([\'"])?(.+?)(?(1)\1|(?:$| ))/i';
if (preg_match($pattern, $attributes, $matches)) {
$attributes = preg_replace($pattern, '', $attributes);
$val = $matches[2];
if ($att == 'cellspacing' && strpos($style, 'border-collapse') === false) {
- $style .= "border-collapse: separate; border-spacing: $val $val; ";
+ $style = "border-collapse: separate; border-spacing: $val $val; " . $style;
} elseif ($att == 'cellpadding' && $tag == 'table') {
$td_style[0] = "$stl: {$val}px; ";
} elseif ($att == 'style') {
$style .= "$val; ";
} elseif ($att == 'size') {
$val = $size_conv[$val];
- $style .= "$stl: $val; ";
+ $style = "$stl: $val; " . $style;
} elseif (is_numeric($val)) {
- $style .= "$stl: {$val}px; ";
+ $style = "$stl: {$val}px; " . $style;
} else {
- $style .= "$stl: $val; ";
+ $style = "$stl: $val; " . $style;
}
}
}
}
return $css;
}
-
+
/**
* @return string
* @param string
$tidy_config = array('drop-empty-paras' => true,
'drop-proprietary-attributes' => true,
'hide-comments' => true,
- 'logical-emphasis' => true,
+ 'logical-emphasis' => true,
'output-xhtml' => true,
'replace-color' => true,
'join-classes' => false,
}
tidy_set_encoding('utf8');
$source = tidy_repair_string($source);
+
} else { // Tidy 2.0
$source = tidy_repair_string($source, $tidy_config, 'utf8');
}
// Use inlined style instead of old html attributes
if ($to_xhtml) {
- $source = preg_replace('/<(\/?\w+)(.*?)(\/?>)/uise', "'<\\1' . banana_cleanStyles('\\1', '\\2') . '\\3'", $source);
- }
+ $source = preg_replace('/<(\/?\w+)(.*?)(\/?>)/muise', "'<\\1' . banana_cleanStyles('\\1', '\\2') . '\\3'", $source);
+ }
return preg_replace('/<(.*?)>/ie', "'<'.banana_removeEvilAttributes('\\1').'>'", $source);
}
$res = trim(strip_tags($res, '<div><br><p><blockquote>'));
$res = preg_replace("@</?(br|p|div).*?>@si", "\n", $res);
$res = banana__convertQuotes($res);
- return banana_html_entity_decode($res);
+ return banana_html_entity_decode($res);
}
-function banana_formatHtml(BananaMimePart &$part)
+function banana_formatHtml(BananaMimePart $part)
{
$text = $part->getText();
$text = banana_catchHtmlSignature($text);
if (!Banana::$msgshow_externalimages) {
$text = banana_hideExternalImages($text);
- }
+ }
$text = banana_catchPartLinks($text);
return banana_cleanHtml($text, true);
}
-function banana_quoteHtml(BananaMimePart &$part)
+function banana_quoteHtml(BananaMimePart $part)
{
$text = $part->getText();
$text = banana_htmlToPlainText($text);
- return banana_wrap($text, 1);
+ return banana_quote($text, 1);
}
// }}}
return banana_cleanHtml($source);
}
-function banana_formatRichText(BananaMimePart &$part)
+function banana_formatRichText(BananaMimePart $part)
{
$text = $part->getText();
$text = banana_richtextToHtml($text);
return banana_cleanHtml($text);
}
-function banana_quoteRichtText(BananaMimePart &$part)
+function banana_quoteRichtText(BananaMimePart $part)
{
$text = $part->getText();
$text = banana_richtextToHtml($text);
$text = banana_htmlToPlainText($text);
- return banana_wrap($text, 1);
+ return banana_quote($text, 1);
}
// }}}