wrap plus intelligent... evite de couper les url en particulier
authorx2003bruneau <x2003bruneau@9869982d-c50d-0410-be91-f2a2ec7c7c7b>
Tue, 7 Mar 2006 09:27:34 +0000 (09:27 +0000)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Fri, 4 Jan 2008 23:34:39 +0000 (00:34 +0100)
git-svn-id: svn+ssh://murphy/home/svn/banana/trunk@35 9869982d-c50d-0410-be91-f2a2ec7c7c7b

banana/misc.inc.php

index f68b0d3..c073c25 100644 (file)
@@ -286,6 +286,19 @@ function displayshortcuts($first = -1) {
  *  FORMATTING STUFF : BODY
  */
 
+function autoformat($text)
+{
+    global $banana;
+    $length = $banana->wrap;
+        
+    $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);
+    }
+    return $result;
+}                                
+
 function wrap($text, $_prefix="", $_force=false)
 {
     $parts = preg_split("/\n-- ?\n/", $text);
@@ -301,18 +314,46 @@ function wrap($text, $_prefix="", $_force=false)
     $length = $banana->wrap;
     $max    = $length + ($length/10);
     $splits = split("\n", $text);
-    $ret    = -1;
+    $result = array();
+    $next   = array();
+    $format = false;
     foreach ($splits as $line) {
         if ($_force || strlen($line) > $max) {
-            if (!preg_match("!^\\s*$url\\s*$!i", $line)) {
-                $cmd = "echo ".escapeshellarg($text)." | perl -MText::Autoformat -e 'autoformat {left=>1, right=>$length, all=>1 };'";
-                exec($cmd, $result, $ret);
-                break;
+            if (preg_match("!^(.*)($url)(.*)!i", $line, $matches) && strlen($matches[2]) > $length && strlen($matches) < 900) {
+                if (strlen($matches[1]) != 0) {
+                    array_push($next, rtrim($matches[1]));
+                    if (strlen($matches[1]) > $max) {
+                        $format = true;
+                    }
+                }
+                    
+                if ($format) {
+                    $result = array_merge($result, autoformat(join("\n", $next)));
+                } else {
+                    $result = array_merge($result, $next);
+                }
+                $format = false;
+                $next   = array();
+                array_push($result, $matches[2]);
+                    
+                if (strlen($matches[6]) != 0) {
+                    array_push($next, ltrim($matches[6]));
+                    if (strlen($matches[6]) > $max) {
+                        $format = true;
+                    }
+                }
+            } else {
+                $format = true;
+                array_push($next, $line);
             }
+        } else {
+            array_push($next, $line);
         }
     }
-    if ($ret != 0) {
-        $result = $splits;
+    if ($format) {
+        $result = array_merge($result, autoformat(join("\n", $next)));
+    } else {
+        $result = array_merge($result, $next);
     }
 
     return $_prefix.join("\n$_prefix", $result).($_prefix ? '' : $sign);