Better support of multipart emails for rendering and quoting
[banana.git] / banana / message.func.inc.php
index 7f33856..8164172 100644 (file)
@@ -39,13 +39,9 @@ function banana_removeQuotes($line, &$quote_level, $strict = true)
 function banana_quote($line, $level, $mark = '>')
 {
     $lines = explode("\n", $line);
+    $quote = str_repeat($mark, $level);
     foreach ($lines as &$line) {
-        if ($level > 0 && substr($line, 0, strlen($mark)) != $mark) {
-            $line = ' ' . $line;
-        }
-        for ($i = 0 ; $i < $level ; $i++) {
-            $line = $mark . $line;
-        }
+        $line = $quote . $line;
     }
     return implode("\n", $lines);
 }
@@ -59,11 +55,17 @@ function banana_unflowed($text)
         $line = banana_removeQuotes($line, $level);
         while (banana_isFlowed($line)) {
             $lvl = 0;
-            if (is_null($nl = array_shift($lines))) {
+            if (empty($lines)) {
                 break;
             }
+            $nl  = $lines[0];
             $nl = banana_removeQuotes($nl, $lvl);
-            $line .= $nl;
+            if ($lvl == $level) {
+                $line .= $nl;
+                array_shift($lines);
+            } else {
+                break;
+            }
         }
         $text .= banana_quote($line, $level) . "\n";
     }
@@ -86,7 +88,7 @@ function banana_catchFormats($text)
                         '_' => 'u',
                         '*' => 'strong');
     $url = Banana::$msgshow_url;
-    preg_match_all("/$url/i", $text, $urls);
+    preg_match_all("/$url/ui", $text, $urls);
     $text = str_replace($urls[0], "&&&urls&&&", $text);
     foreach ($formatting as $limit=>$mark) {
         $limit = preg_quote($limit, '/');
@@ -136,7 +138,7 @@ function banana_catchURLs($text)
     $url  = Banana::$msgshow_url;
 
     $res  = preg_replace("/&(lt|gt|quot);/", " &\\1; ", $text);
-    $res  = preg_replace("/$url/ie", "'\\1'.banana__cleanurl('\\2').'\\3'", $res);
+    $res  = preg_replace("/$url/uie", "'\\1'.banana__cleanurl('\\2').'\\3'", $res);
     $res  = preg_replace('/(["\[])?(?:mailto:|news:)?([a-z0-9.\-+_\$]+@([\-.+_]?[a-z0-9])+)(["\]])?/ie',
                          "'\\1' . banana__catchMailLink('\\2') . '\\4'",
                           $res);
@@ -197,10 +199,12 @@ function banana_wrap($text, $base_level = 0, $strict = true)
     while (!is_null($line = array_shift($lines))) {
         $lvl = 0;
         $line = banana_removeQuotes($line, $lvl, $strict);
-        if($lvl != $level && !empty($buffer)) {
-            $text  .= banana_wordwrap(implode("\n", $buffer), $level + $base_level) . "\n";
+        if($lvl != $level) {
+            if (!empty($buffer)) {
+                $text  .= banana_wordwrap(implode("\n", $buffer), $level + $base_level) . "\n";
+                $buffer = array();
+            }    
             $level  = $lvl;
-            $buffer = array();
         }
         $buffer[] = $line;
     }
@@ -409,7 +413,15 @@ function banana_formatRichText(BananaMimePart &$part)
     return banana_cleanHtml($text);
 }
 
+function banana_quoteRichtText(BananaMimePart &$part)
+{
+    $text = $part->getText();
+    $text = banana_richtextToHtml($text);
+    $text = banana_htmlToPlainText($text);
+    return banana_wrap($text, 1);
+}
+
 // }}}
 
-// vim:set et sw=4 sts=4 ts=4:
+// vim:set et sw=4 sts=4 ts=4 enc=utf-8:
 ?>