wp/wp-includes/Text/Diff.php
author ymh <ymh.work@gmail.com>
Wed, 06 Nov 2013 03:21:17 +0000
changeset 0 d970ebf37754
child 7 cf61fcea0001
permissions -rw-r--r--
first import
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
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
    function Text_Diff($engine, $params)
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
     * Returns the array of differences.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    function getDiff()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        return $this->_edits;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
     * returns the number of new (added) lines in a given diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
     * @since Text_Diff 1.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
     * @return integer The number of new lines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    function countAddedLines()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        $count = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
            if (is_a($edit, 'Text_Diff_Op_add') ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                is_a($edit, 'Text_Diff_Op_change')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                $count += $edit->nfinal();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
     * Returns the number of deleted (removed) lines in a given diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
     * @since Text_Diff 1.1.0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
     * @return integer The number of deleted lines
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    function countDeletedLines()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        $count = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
            if (is_a($edit, 'Text_Diff_Op_delete') ||
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                is_a($edit, 'Text_Diff_Op_change')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                $count += $edit->norig();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        return $count;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
     * Computes a reversed diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
     * Example:
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
     * <code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
     * $diff = new Text_Diff($lines1, $lines2);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
     * $rev = $diff->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
     * </code>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
     * @return Text_Diff  A Diff object representing the inverse of the
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
     *                    original diff.  Note that we purposely don't return a
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
     *                    reference here, since this essentially is a clone()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
     *                    method.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
    function reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
        if (version_compare(zend_version(), '2', '>')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
            $rev = clone($this);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
        } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
            $rev = $this;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
        $rev->_edits = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
            $rev->_edits[] = $edit->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
        return $rev;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
     * Checks for an empty diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
     * @return boolean  True if two sequences were identical.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
    function isEmpty()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
            if (!is_a($edit, 'Text_Diff_Op_copy')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                return false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
     * Computes the length of the Longest Common Subsequence (LCS).
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
     * This is mostly for diagnostic purposes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
     * @return integer  The length of the LCS.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
    function lcs()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
        $lcs = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
            if (is_a($edit, 'Text_Diff_Op_copy')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                $lcs += count($edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
        return $lcs;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
     * Gets the original set of lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
     * This reconstructs the $from_lines parameter passed to the constructor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
     * @return array  The original sequence of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
    function getOriginal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
        $lines = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
            if ($edit->orig) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
                array_splice($lines, count($lines), 0, $edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        return $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
     * Gets the final set of lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
     * This reconstructs the $to_lines parameter passed to the constructor.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
     * @return array  The sequence of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
    function getFinal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        $lines = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
            if ($edit->final) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
                array_splice($lines, count($lines), 0, $edit->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        return $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
     * 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
   203
     * with array_walk().
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
     * @param string $line  The line to trim.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
     * @param integer $key  The index of the line in the array. Not used.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    static function trimNewlines(&$line, $key)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
        $line = str_replace(array("\n", "\r"), '', $line);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
     * Determines the location of the system temporary directory.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
     * @static
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
     * @access protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
     * @return string  A directory name which can be used for temp files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
     *                 Returns false if one could not be found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
    function _getTempDir()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        $tmp_locations = array('/tmp', '/var/tmp', 'c:\WUTemp', 'c:\temp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
                               'c:\windows\temp', 'c:\winnt\temp');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
        /* Try PHP's upload_tmp_dir directive. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        $tmp = ini_get('upload_tmp_dir');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
        /* Otherwise, try to determine the TMPDIR environment variable. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        if (!strlen($tmp)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
            $tmp = getenv('TMPDIR');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        /* If we still cannot determine a value, then cycle through a list of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
         * preset possibilities. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
        while (!strlen($tmp) && count($tmp_locations)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
            $tmp_check = array_shift($tmp_locations);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
            if (@is_dir($tmp_check)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
                $tmp = $tmp_check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
        /* If it is still empty, we have failed, so return false; otherwise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
         * return the directory determined. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        return strlen($tmp) ? $tmp : false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
    }
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
     * Checks a diff for validity.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
     * This is here only for debugging purposes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    function _check($from_lines, $to_lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        if (serialize($from_lines) != serialize($this->getOriginal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
            trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        if (serialize($to_lines) != serialize($this->getFinal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
            trigger_error("Reconstructed final doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
        $rev = $this->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
            trigger_error("Reversed original doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        if (serialize($from_lines) != serialize($rev->getFinal())) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
            trigger_error("Reversed final doesn't match", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
        $prevtype = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        foreach ($this->_edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
            if ($prevtype == get_class($edit)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
                trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
            $prevtype = get_class($edit);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
        return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
class Text_MappedDiff extends Text_Diff {
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
     * Computes a diff between sequences of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
     * This can be used to compute things like case-insensitve diffs, or diffs
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
     * which ignore changes in white-space.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
     * @param array $from_lines         An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
     * @param array $to_lines           An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   299
     * @param array $mapped_from_lines  This array should have the same size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     *                                  number of elements as $from_lines.  The
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
     *                                  elements in $mapped_from_lines and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
     *                                  $mapped_to_lines are what is actually
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
     *                                  compared when computing the diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
     * @param array $mapped_to_lines    This array should have the same number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
     *                                  of elements as $to_lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
    function Text_MappedDiff($from_lines, $to_lines,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
                             $mapped_from_lines, $mapped_to_lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
        assert(count($from_lines) == count($mapped_from_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
        assert(count($to_lines) == count($mapped_to_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
        parent::Text_Diff($mapped_from_lines, $mapped_to_lines);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
        $xi = $yi = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
        for ($i = 0; $i < count($this->_edits); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
            $orig = &$this->_edits[$i]->orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
            if (is_array($orig)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
                $orig = array_slice($from_lines, $xi, count($orig));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
                $xi += count($orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
            $final = &$this->_edits[$i]->final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
            if (is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
                $final = array_slice($to_lines, $yi, count($final));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
                $yi += count($final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
            }
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
class Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
    var $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
    var $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
        trigger_error('Abstract method', E_USER_ERROR);
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
    function norig()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
        return $this->orig ? count($this->orig) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
    function nfinal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
        return $this->final ? count($this->final) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
class Text_Diff_Op_copy extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
    function Text_Diff_Op_copy($orig, $final = false)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
        if (!is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
            $final = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
        $this->final = $final;
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
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
class Text_Diff_Op_delete extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
    function Text_Diff_Op_delete($lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
        $this->orig = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
        $this->final = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
        $reverse = new Text_Diff_Op_add($this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
class Text_Diff_Op_add extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
    function Text_Diff_Op_add($lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
        $this->final = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
        $this->orig = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
        $reverse = new Text_Diff_Op_delete($this->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
class Text_Diff_Op_change extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
    function Text_Diff_Op_change($orig, $final)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
        $this->final = $final;
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
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   450
}