wp/wp-includes/Text/Diff.php
author ymh <ymh.work@gmail.com>
Mon, 14 Oct 2019 17:39:30 +0200
changeset 7 cf61fcea0001
parent 0 d970ebf37754
child 18 be944660c56a
permissions -rw-r--r--
resynchronize code repo with production
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * General API for generating and formatting diffs - the differences between
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 * two sequences of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * The original PHP version of this code was written by Geoffrey T. Dairiki
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * <dairiki@dairiki.org>, and is used/adapted with his permission.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * Copyright 2004 Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 * See the enclosed file COPYING for license information (LGPL). If you did
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * not receive this file, see http://opensource.org/licenses/lgpl-license.php.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
class Text_Diff {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
     * Array of changes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
     * @var array
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    var $_edits;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
     * Computes diffs between sequences of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
     * @param string $engine     Name of the diffing engine to use.  'auto'
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
     *                           will automatically select the best.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
     * @param array $params      Parameters to pass to the diffing engine.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
     *                           Normally an array of two arrays, each
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
     *                           containing the lines from a file.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
     */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    36
    function __construct( $engine, $params )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
        // Backward compatibility workaround.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
        if (!is_string($engine)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            $params = array($engine, $params);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
            $engine = 'auto';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
        if ($engine == 'auto') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
            $engine = extension_loaded('xdiff') ? 'xdiff' : 'native';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
            $engine = basename($engine);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        // WP #7391
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        require_once dirname(__FILE__).'/Diff/Engine/' . $engine . '.php';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
        $class = 'Text_Diff_Engine_' . $engine;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        $diff_engine = new $class();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        $this->_edits = call_user_func_array(array($diff_engine, 'diff'), $params);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    58
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    59
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    60
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    61
	public function Text_Diff( $engine, $params ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    62
		self::__construct( $engine, $params );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    63
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    64
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
     * Returns the array of differences.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    function getDiff()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
        return $this->_edits;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
     * returns the number of new (added) lines in a given diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
     * @since Text_Diff 1.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
     * @return integer The number of new lines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
    function countAddedLines()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        $count = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            if (is_a($edit, 'Text_Diff_Op_add') ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                is_a($edit, 'Text_Diff_Op_change')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                $count += $edit->nfinal();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
     * Returns the number of deleted (removed) lines in a given diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
     * @since Text_Diff 1.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
     * @return integer The number of deleted lines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    function countDeletedLines()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        $count = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
            if (is_a($edit, 'Text_Diff_Op_delete') ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                is_a($edit, 'Text_Diff_Op_change')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                $count += $edit->norig();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
     * Computes a reversed diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
     * Example:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
     * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
     * $diff = new Text_Diff($lines1, $lines2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
     * $rev = $diff->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
     * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
     * @return Text_Diff  A Diff object representing the inverse of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
     *                    original diff.  Note that we purposely don't return a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
     *                    reference here, since this essentially is a clone()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
     *                    method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
    function reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
        if (version_compare(zend_version(), '2', '>')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
            $rev = clone($this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
            $rev = $this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        $rev->_edits = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
            $rev->_edits[] = $edit->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
        return $rev;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
     * Checks for an empty diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
     * @return boolean  True if two sequences were identical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
    function isEmpty()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
                return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
        return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
     * Computes the length of the Longest Common Subsequence (LCS).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
     * This is mostly for diagnostic purposes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
     * @return integer  The length of the LCS.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
    function lcs()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
        $lcs = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
            if (is_a($edit, 'Text_Diff_Op_copy')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
                $lcs += count($edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
        return $lcs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
     * Gets the original set of lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
     * This reconstructs the $from_lines parameter passed to the constructor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
     * @return array  The original sequence of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
    function getOriginal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        $lines = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
            if ($edit->orig) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
                array_splice($lines, count($lines), 0, $edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
        return $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
     * Gets the final set of lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
     * This reconstructs the $to_lines parameter passed to the constructor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
     * @return array  The sequence of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
    function getFinal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
        $lines = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
            if ($edit->final) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
                array_splice($lines, count($lines), 0, $edit->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
        return $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
     * Removes trailing newlines from a line of text. This is meant to be used
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
     * with array_walk().
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
     * @param string $line  The line to trim.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
     * @param integer $key  The index of the line in the array. Not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
    static function trimNewlines(&$line, $key)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        $line = str_replace(array("\n", "\r"), '', $line);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
     * Determines the location of the system temporary directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
     * @static
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
     * @access protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
     * @return string  A directory name which can be used for temp files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
     *                 Returns false if one could not be found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
    function _getTempDir()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        $tmp_locations = array('/tmp', '/var/tmp', 'c:\WUTemp', 'c:\temp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
                               'c:\windows\temp', 'c:\winnt\temp');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        /* Try PHP's upload_tmp_dir directive. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        $tmp = ini_get('upload_tmp_dir');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        /* Otherwise, try to determine the TMPDIR environment variable. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        if (!strlen($tmp)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
            $tmp = getenv('TMPDIR');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        /* If we still cannot determine a value, then cycle through a list of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
         * preset possibilities. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
        while (!strlen($tmp) && count($tmp_locations)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
            $tmp_check = array_shift($tmp_locations);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
            if (@is_dir($tmp_check)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
                $tmp = $tmp_check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
        /* If it is still empty, we have failed, so return false; otherwise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
         * return the directory determined. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
        return strlen($tmp) ? $tmp : false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
     * Checks a diff for validity.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
     * This is here only for debugging purposes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    function _check($from_lines, $to_lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
        if (serialize($from_lines) != serialize($this->getOriginal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
            trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        if (serialize($to_lines) != serialize($this->getFinal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
            trigger_error("Reconstructed final doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
        $rev = $this->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
            trigger_error("Reversed original doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
        if (serialize($from_lines) != serialize($rev->getFinal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
            trigger_error("Reversed final doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
        $prevtype = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            if ($prevtype == get_class($edit)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
                trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
            $prevtype = get_class($edit);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
class Text_MappedDiff extends Text_Diff {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
     * Computes a diff between sequences of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
     * This can be used to compute things like case-insensitve diffs, or diffs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
     * which ignore changes in white-space.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
     * @param array $from_lines         An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
     * @param array $to_lines           An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
     * @param array $mapped_from_lines  This array should have the same size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
     *                                  number of elements as $from_lines.  The
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
     *                                  elements in $mapped_from_lines and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
     *                                  $mapped_to_lines are what is actually
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
     *                                  compared when computing the diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
     * @param array $mapped_to_lines    This array should have the same number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
     *                                  of elements as $to_lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
     */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   314
    function __construct($from_lines, $to_lines,
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
                             $mapped_from_lines, $mapped_to_lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
        assert(count($from_lines) == count($mapped_from_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
        assert(count($to_lines) == count($mapped_to_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
        $xi = $yi = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
        for ($i = 0; $i < count($this->_edits); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
            $orig = &$this->_edits[$i]->orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
            if (is_array($orig)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
                $orig = array_slice($from_lines, $xi, count($orig));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
                $xi += count($orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
            $final = &$this->_edits[$i]->final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
            if (is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
                $final = array_slice($to_lines, $yi, count($final));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
                $yi += count($final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   338
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   339
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   340
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   341
	public function Text_MappedDiff( $from_lines, $to_lines,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   342
                             $mapped_from_lines, $mapped_to_lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   343
		self::__construct( $from_lines, $to_lines,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
                             $mapped_from_lines, $mapped_to_lines );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   345
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   346
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
class Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
    var $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    var $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
        trigger_error('Abstract method', E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
    function norig()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
        return $this->orig ? count($this->orig) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    function nfinal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
        return $this->final ? count($this->final) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
class Text_Diff_Op_copy extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   385
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   386
	 * PHP5 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   387
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   388
    function __construct( $orig, $final = false )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
        if (!is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
            $final = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
        $this->final = $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   397
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   398
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   399
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   400
	public function Text_Diff_Op_copy( $orig, $final = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   401
		self::__construct( $orig, $final );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   402
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   403
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
class Text_Diff_Op_delete extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   420
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   421
	 * PHP5 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   422
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   423
	function __construct( $lines )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
        $this->orig = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
        $this->final = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   429
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   430
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   431
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   432
	public function Text_Diff_Op_delete( $lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   433
		self::__construct( $lines );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   434
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   435
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
        $reverse = new Text_Diff_Op_add($this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
class Text_Diff_Op_add extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   451
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   452
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   453
	 * PHP5 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   454
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   455
    function __construct( $lines )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
        $this->final = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
        $this->orig = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   461
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   462
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   463
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   464
	public function Text_Diff_Op_add( $lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   465
		self::__construct( $lines );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   466
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   467
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
        $reverse = new Text_Diff_Op_delete($this->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   472
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   473
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   475
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
class Text_Diff_Op_change extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   484
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   485
	 * PHP5 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   486
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   487
    function __construct( $orig, $final )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
        $this->final = $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   491
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   492
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   493
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   494
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   495
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   496
	public function Text_Diff_Op_change( $orig, $final ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   497
		self::__construct( $orig, $final );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   498
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   499
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
}