Add support for custom message formatter.
[banana.git] / banana / message.func.inc.php
index 31f3e47..928dbb9 100644 (file)
@@ -88,13 +88,16 @@ function banana_catchFormats($text)
                         '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
@@ -231,17 +234,21 @@ function banana_wrap($text, $base_level = 0, $strict = true)
     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()) {
@@ -485,7 +492,7 @@ function banana_htmlToPlainText($res)
     return banana_html_entity_decode($res);    
 }
 
-function banana_formatHtml(BananaMimePart &$part)
+function banana_formatHtml(BananaMimePart $part)
 {
     $text = $part->getText();
     $text = banana_catchHtmlSignature($text);
@@ -496,7 +503,7 @@ function banana_formatHtml(BananaMimePart &$part)
     return banana_cleanHtml($text, true);
 }
 
-function banana_quoteHtml(BananaMimePart &$part)
+function banana_quoteHtml(BananaMimePart $part)
 {
     $text = $part->getText();
     $text = banana_htmlToPlainText($text);
@@ -539,7 +546,7 @@ function banana_richtextToHtml($source)
     return banana_cleanHtml($source);
 }
 
-function banana_formatRichText(BananaMimePart &$part)
+function banana_formatRichText(BananaMimePart $part)
 {
     $text = $part->getText();
     $text = banana_richtextToHtml($text);
@@ -547,7 +554,7 @@ function banana_formatRichText(BananaMimePart &$part)
     return banana_cleanHtml($text);
 }
 
-function banana_quoteRichtText(BananaMimePart &$part)
+function banana_quoteRichtText(BananaMimePart $part)
 {
     $text = $part->getText();
     $text = banana_richtextToHtml($text);