Catch message-id as a link to read the message
[banana.git] / banana / misc.inc.php
index c91dba9..df81a6d 100644 (file)
@@ -300,7 +300,7 @@ function formatDisplayHeader($_header,$_text) {
 
         case "from":
             return formatFrom($_text);
-        
+
         case "references":
             $rsl     = "";
             $ndx     = 1;
@@ -426,7 +426,7 @@ function displayTabs()
     }
     $ret = '<ul id="onglet">';
     foreach ($res as $name=>$onglet) {
-        if ($name != $page) {
+        if ($name != @$page) {
             $ret .= '<li>' . $onglet[0] . '</li>';
         } else {
             $ret .= '<li class="actif">' . $onglet[1] . '</li>';
@@ -479,16 +479,14 @@ function makeTable($text)
  *  FORMATTING STUFF : BODY
  */
 
-function autoformat($text, $part = false)
+function autoformat($text)
 {
     global $banana;
     $length = $banana->wrap;
-    $all = null;
-    if (!$part) {
-        $all = ', all=1';
-    }
     
-    $cmd = "echo ".escapeshellarg($text)." | perl -MText::Autoformat -e 'autoformat {left=>1, right=>$length$all };'";
+    $cmd = 'echo ' . escapeshellarg($text)
+         . ' | perl -MText::Autoformat -e \'autoformat {left=>1, right=>' . $length . ', all=>1 };\'';
+
     exec($cmd, $result, $ret);
     if ($ret != 0) {
         $result = split("\n", $text);
@@ -505,7 +503,7 @@ function wrap($text, $_prefix="", $_force=false)
     } else {
         $sign = '';
     }
-   
+
     global $banana;
     $url    = $banana->url_regexp;
     $length = $banana->wrap;
@@ -541,12 +539,8 @@ function wrap($text, $_prefix="", $_force=false)
                     }
                 }
             } else {
-                if (strlen($line) > 2 * $max) {
-                    $next = array_merge($next, autoformat($line, true));
-                } else {
-                    $format = true;
-                    array_push($next, $line);
-                }
+                array_push($next, $line);
+                $format = true;
             }
         } else {
             array_push($next, $line);
@@ -577,6 +571,27 @@ function cleanurl($url)
     return '<a href="'.$url.'" title="'.$url.'">'.cutlink($url).'</a>';
 }
 
+function catchMailLink($email)
+{
+    global $banana;
+    $mid = '<' . $email . '>';
+    if (isset($banana->spool->ids[$mid])) {
+        return makeHREF(Array('group' => $banana->state['group'],
+                              'artid' => $banana->spool->ids[$mid]),
+                        $email);
+    } elseif (strpos($email, '$') !== false) {
+        return $email;
+    }   
+    return '<a href="mailto:' . $email . '">' . $email . '</a>';
+}
+
+/** Remove quotation marks
+ */
+function replaceQuotes($text)
+{
+    return stripslashes(preg_replace("@(^|<pre>|\n)&gt;[ \t\r]*@i", '\1', $text));
+}
+
 function formatbody($_text, $format='plain', $flowed=false)
 {
     if ($format == 'html') {
@@ -593,7 +608,9 @@ function formatbody($_text, $format='plain', $flowed=false)
         $url  = $banana->url_regexp;
         $res  = preg_replace("/(&lt;|&gt;|&quot;)/", " \\1 ", $res);
         $res  = preg_replace("!$url!ie", "'\\1'.cleanurl('\\2').'\\3'", $res);
-        $res  = preg_replace('/(["\[])?(?:mailto:)?([a-z0-9.\-+_]+@[a-z0-9.\-+_]+)(["\]])?/i', '\1<a href="mailto:\2">\2</a>\3', $res);
+        $res  = preg_replace('/(["\[])?(?:mailto:|news:)?([a-z0-9.\-+_\$]+@([\-.+_]?[a-z0-9])+)(["\]])?/ie',
+                             "'\\1' . catchMailLink('\\2') . '\\4'",
+                             $res);
         $res  = preg_replace("/ (&lt;|&gt;|&quot;) /", "\\1", $res);
 
         if ($format == 'richtext') {
@@ -611,8 +628,8 @@ function formatbody($_text, $format='plain', $flowed=false)
         while (preg_match("@(^|<pre>|\n)&gt;@i", $res)) {
             $res  = preg_replace("@(^|<pre>|\n)((&gt;[^\n]*\n)+)@ie",
                 "'\\1</pre><blockquote><pre>'"
-                .".stripslashes(preg_replace('@(^|<pre>|\n)&gt;[ \\t\\r]*@i', '\\1', '\\2'))"
-                .".'</pre></blockquote><pre>'",
+                ." . replaceQuotes('\\2')"
+                ." . '</pre></blockquote><pre>'",
                 $res);
         }
         $res = preg_replace("@<pre>-- ?\n@", "<pre>\n-- \n", $res);