Minor bugfixes:
authorfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 10 Oct 2000 17:46:57 +0000 (17:46 +0000)
committerfidian <fidian@7612ce4b-ef26-0410-bec9-ea0150e637f0>
Tue, 10 Oct 2000 17:46:57 +0000 (17:46 +0000)
 - Single word lines would have been wrong (count($words) <= 1)
 - $beginning_spaces doubled on first line that was wrapped
 - Skips leading spaces on wrapped lines, preserving them on the first line

git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@788 7612ce4b-ef26-0410-bec9-ea0150e637f0

functions/strings.php

index 94e7d05..5d45013 100644 (file)
    // you do character translation.
    // Specifically, &#039 comes up as 5 characters instead of 1.
    function sqWordWrap(&$line, $wrap) {
-      preg_match("/^(\s|>)+/", $line, $regs);
-      $beginning_spaces = $regs[0];
-      
-      $words = explode(" ", $line);
+      preg_match("/^([\s>]+)([^\s>].*)/", $line, $regs);
+      $beginning_spaces = $regs[1];
+      $words = explode(" ", $regs[2]);
 
       $i = 0;
       $line = $beginning_spaces;
             $line_len = strlen($beginning_spaces) + strlen($words[$i]) +
                 strlen($words[$i + 1]) + 2;
             $i ++;
+            
+            // Add more words (as long as they fit)
             while ($line_len < $wrap && $i < count($words)) {
                $line .= $words[$i] . ' ';
                $i++;
                $line_len += strlen($words[$i]) + 1;
             }
-            if ($i < count($words)) {  // If there's more to do, worry about it
+            
+            // Skip spaces if they are the first thing on a continued line
+            while (!$words[$i] && $i < count($words))
+            {
+               $i ++;
+            }
+            
+            if ($i < count($words)) {
                $line .= "\n$beginning_spaces";
             }
          }
       } else {
-         $line = $words[0];
+         $line .= $words[0];
       }
    }