Fixed bug #7962: Add icon to selected entry (currently icons are only shown in dropdown)
[Packages/TYPO3.CMS.git] / t3lib / class.t3lib_diff.php
index e53ca6b..42db5ed 100755 (executable)
@@ -1,22 +1,22 @@
 <?php
 /***************************************************************
 *  Copyright notice
-*  
-*  (c) 1999-2004 Kasper Skaarhoj (kasper@typo3.com)
+*
+*  (c) 1999-2008 Kasper Skaarhoj (kasperYYYY@typo3.com)
 *  All rights reserved
 *
-*  This script is part of the TYPO3 project. The TYPO3 project is 
+*  This script is part of the TYPO3 project. The TYPO3 project is
 *  free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
-* 
+*
 *  The GNU General Public License can be found at
 *  http://www.gnu.org/copyleft/gpl.html.
-*  A copy is found in the textfile GPL.txt and important notices to the license 
+*  A copy is found in the textfile GPL.txt and important notices to the license
 *  from the author is found in LICENSE.txt distributed with these scripts.
 *
-* 
+*
 *  This script is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *
 *  This copyright notice MUST APPEAR in all copies of the script!
 ***************************************************************/
-/** 
+/**
  * Contains class which has functions that generates a difference output of a content string
  *
  * $Id$
  * Revised for TYPO3 3.6 November/2003 by Kasper Skaarhoj
- * XHTML Compliant  
+ * XHTML Compliant
  *
- * @author     Kasper Skaarhoj <kasper@typo3.com>
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
  */
 /**
  * [CLASS/FUNCTION INDEX of SCRIPT]
  *
  *
  *
- *   67: class t3lib_diff 
- *   86:     function makeDiffDisplay($str1,$str2)     
- *  160:     function getDiff($str1,$str2)     
- *  187:     function addClearBuffer($clearBuffer,$last=0)     
- *  203:     function explodeStringIntoWords($str)     
- *  224:     function tagSpace($str,$rev=0)    
+ *   66: class t3lib_diff
+ *   86:     function makeDiffDisplay($str1,$str2,$wrapTag='span')
+ *  163:     function getDiff($str1,$str2)
+ *  189:     function addClearBuffer($clearBuffer,$last=0)
+ *  205:     function explodeStringIntoWords($str)
+ *  226:     function tagSpace($str,$rev=0)
  *
  * TOTAL FUNCTIONS: 5
  * (This index is automatically created/updated by the extension "extdeveval")
@@ -58,9 +58,8 @@
 
 /**
  * This class has functions which generates a difference output of a content string
- * Currently works only with LINUX/UNIX
  *
- * @author     Kasper Skaarhoj <kasper@typo3.com>
+ * @author     Kasper Skaarhoj <kasperYYYY@typo3.com>
  * @package TYPO3
  * @subpackage t3lib
  */
@@ -69,21 +68,22 @@ class t3lib_diff {
                // External, static:
        var $stripTags = 0;                     // If set, the HTML tags are stripped from the input strings first.
        var $diffOptions = '';          // Diff options. eg "--unified=3"
-       
+
                // Internal, dynamic:
        var $clearBufferIdx=0;          // This indicates the number of times the function addClearBuffer has been called - and used to detect the very first call...
-       
-       
-       
-       
+       var $differenceLgd=0;
+
+
+
        /**
         * This will produce a color-marked-up diff output in HTML from the input strings.
         *
         * @param       string          String 1
         * @param       string          String 2
+        * @param       string          Setting the wrapping tag name
         * @return      string          Formatted output.
         */
-       function makeDiffDisplay($str1,$str2)   {
+       function makeDiffDisplay($str1,$str2,$wrapTag='span')   {
                if ($this->stripTags)   {
                        $str1 = strip_tags($str1);
                        $str2 = strip_tags($str2);
@@ -100,19 +100,22 @@ class t3lib_diff {
                        reset($diffRes);
                        $c=0;
                        $diffResArray=array();
+                       $differenceStr = '';
                        while(list(,$lValue)=each($diffRes))    {
                                if (intval($lValue))    {
                                        $c=intval($lValue);
                                        $diffResArray[$c]['changeInfo']=$lValue;
                                }
                                if (substr($lValue,0,1)=='<')   {
-                                       $diffResArray[$c]['old'][]=substr($lValue,2);
+                                       $differenceStr.= $diffResArray[$c]['old'][] = substr($lValue,2);
                                }
                                if (substr($lValue,0,1)=='>')   {
-                                       $diffResArray[$c]['new'][]=substr($lValue,2);
+                                       $differenceStr.= $diffResArray[$c]['new'][] = substr($lValue,2);
                                }
                        }
-                       
+
+                       $this->differenceLgd = strlen($differenceStr);
+
                        $outString='';
                        $clearBuffer='';
                        for ($a=-1;$a<count($str1Lines);$a++)   {
@@ -124,10 +127,10 @@ class t3lib_diff {
                                        $outString.=$this->addClearBuffer($clearBuffer);
                                        $clearBuffer='';
                                        if (is_array($diffResArray[$a+1]['old']))       {
-                                               $outString.='<span class="diff-r">'.htmlspecialchars(implode(' ',$diffResArray[$a+1]['old'])).'</span> ';
+                                               $outString.='<'.$wrapTag.' class="diff-r">'.htmlspecialchars(implode(' ',$diffResArray[$a+1]['old'])).'</'.$wrapTag.'> ';
                                        }
                                        if (is_array($diffResArray[$a+1]['new']))       {
-                                               $outString.='<span class="diff-g">'.htmlspecialchars(implode(' ',$diffResArray[$a+1]['new'])).'</span> ';
+                                               $outString.='<'.$wrapTag.' class="diff-g">'.htmlspecialchars(implode(' ',$diffResArray[$a+1]['new'])).'</'.$wrapTag.'> ';
                                        }
                                        $chInfParts = explode(',',$diffResArray[$a+1]['changeInfo']);
                                        if (!strcmp($chInfParts[0],$a+1))       {
@@ -139,7 +142,7 @@ class t3lib_diff {
                                }
                        }
                        $outString.=$this->addClearBuffer($clearBuffer,1);
-                       
+
                        $outString = str_replace('  ',chr(10),$outString);
                        if (!$this->stripTags)  {
                                $outString = $this->tagSpace($outString,1);
@@ -149,7 +152,7 @@ class t3lib_diff {
        }
 
        /**
-        * Produce a diff (with the "diff" application on unix) between two strings
+        * Produce a diff (using the "diff" application) between two strings
         * The function will write the two input strings to temporary files, then execute the diff program, delete the temp files and return the result.
         *
         * @param       string          String 1
@@ -158,24 +161,23 @@ class t3lib_diff {
         * @access private
         */
        function getDiff($str1,$str2)   {
-               if (TYPO3_OS!='WIN')    {
-                               // Create file 1 and write string
-                       $file1 = t3lib_div::tempnam('diff1_');
-                       t3lib_div::writeFile($file1,$str1);
-                               // Create file 2 and write string
-                       $file2 = t3lib_div::tempnam('diff2_');
-                       t3lib_div::writeFile($file2,$str2);
-                               // Perform diff.
-                       $cmd = $GLOBALS['TYPO3_CONF_VARS']['BE']['diff_path'].' '.$this->diffOptions.' '.$file1.' '.$file2;
-                       exec($cmd,$res);
-
-                       unlink($file1);
-                       unlink($file2);
-                       
-                       return $res;
-               }
+                       // Create file 1 and write string
+               $file1 = t3lib_div::tempnam('diff1_');
+               t3lib_div::writeFile($file1,$str1);
+                       // Create file 2 and write string
+               $file2 = t3lib_div::tempnam('diff2_');
+               t3lib_div::writeFile($file2,$str2);
+                       // Perform diff.
+               $cmd = $GLOBALS['TYPO3_CONF_VARS']['BE']['diff_path'].' '.$this->diffOptions.' '.$file1.' '.$file2;
+               $res = array();
+               exec($cmd,$res);
+
+               unlink($file1);
+               unlink($file2);
+
+               return $res;
        }
-       
+
        /**
         * Will bring down the length of strings to < 150 chars if they were longer than 200 chars. This done by preserving the 70 first and last chars and concatenate those strings with "..." and a number indicating the string length
         *
@@ -186,7 +188,7 @@ class t3lib_diff {
         */
        function addClearBuffer($clearBuffer,$last=0)   {
                if (strlen($clearBuffer)>200)   {
-                       $clearBuffer=($this->clearBufferIdx?t3lib_div::fixed_lgd($clearBuffer,70):'').'['.strlen($clearBuffer).']'.(!$last?t3lib_div::fixed_lgd_pre($clearBuffer,70):'');
+                       $clearBuffer=($this->clearBufferIdx?t3lib_div::fixed_lgd_cs($clearBuffer,70):'').'['.strlen($clearBuffer).']'.(!$last?t3lib_div::fixed_lgd_cs($clearBuffer,-70):'');
                }
                $this->clearBufferIdx++;
                return $clearBuffer;