wp/wp-includes/Text/Diff.php
author ymh <ymh.work@gmail.com>
Fri, 05 Sep 2025 18:40:08 +0200
changeset 21 48c4eec2b7e6
parent 19 3d72ae0968f4
child 22 8c2e4d02f4ef
permissions -rw-r--r--
Add CLAUDE.md documentation and sync WordPress core files - Add comprehensive CLAUDE.md documentation file with project architecture, development setup, database operations, WordPress CLI usage, file sync procedures, and Mercurial commands - Update WordPress core files from wordpress/ to wp/ directory - Sync latest WordPress admin interface, includes, and core functionality - Update plugins: portfolio plugin with latest BWS framework and fancybox integration - Maintain custom configuration and theme files 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
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
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
    13
 * not receive this file, see https://opensource.org/license/lgpl-2-1/.
0
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
     *
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    78
     * @return int The number of new lines
0
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
     *
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
    97
     * @return int The number of deleted lines
0
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
     *
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   142
     * @return bool True if two sequences were identical.
0
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
     *
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   159
     * @return int The length of the LCS.
0
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.
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   213
     * @param int    $key   The index of the line in the array. Not used.
0
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
     * @access protected
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
     * @return string  A directory name which can be used for temp files.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
     *                 Returns false if one could not be found.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
     */
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   228
    static function _getTempDir()
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        $tmp_locations = array('/tmp', '/var/tmp', 'c:\WUTemp', 'c:\temp',
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
                               'c:\windows\temp', 'c:\winnt\temp');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        /* Try PHP's upload_tmp_dir directive. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        $tmp = ini_get('upload_tmp_dir');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        /* Otherwise, try to determine the TMPDIR environment variable. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        if (!strlen($tmp)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
            $tmp = getenv('TMPDIR');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
        /* If we still cannot determine a value, then cycle through a list of
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
         * preset possibilities. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        while (!strlen($tmp) && count($tmp_locations)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
            $tmp_check = array_shift($tmp_locations);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
            if (@is_dir($tmp_check)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
                $tmp = $tmp_check;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
            }
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
        /* If it is still empty, we have failed, so return false; otherwise
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
         * return the directory determined. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
        return strlen($tmp) ? $tmp : false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
     * Checks a diff for validity.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
     * This is here only for debugging purposes.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    function _check($from_lines, $to_lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
        if (serialize($from_lines) != serialize($this->getOriginal())) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   263
            trigger_error("Reconstructed original does not match", E_USER_ERROR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        if (serialize($to_lines) != serialize($this->getFinal())) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   266
            trigger_error("Reconstructed final does not match", E_USER_ERROR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        $rev = $this->reverse();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
        if (serialize($to_lines) != serialize($rev->getOriginal())) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   271
            trigger_error("Reversed original does not match", E_USER_ERROR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        if (serialize($from_lines) != serialize($rev->getFinal())) {
19
3d72ae0968f4 upgrade wordpress to 6.0.2
ymh <ymh.work@gmail.com>
parents: 18
diff changeset
   274
            trigger_error("Reversed final does not match", E_USER_ERROR);
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
        }
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 = null;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        foreach ($this->_edits as $edit) {
18
be944660c56a Site enmi version 09/2022
ymh <ymh.work@gmail.com>
parents: 7
diff changeset
   279
            if ($edit instanceof $prevtype) {
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
                trigger_error("Edit sequence is non-optimal", E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
            $prevtype = get_class($edit);
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
        return true;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
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
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
class Text_MappedDiff extends Text_Diff {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
     * Computes a diff between sequences of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
     *
21
48c4eec2b7e6 Add CLAUDE.md documentation and sync WordPress core files
ymh <ymh.work@gmail.com>
parents: 19
diff changeset
   299
     * This can be used to compute things like case-insensitive diffs, or diffs
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
     * which ignore changes in white-space.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
     * @param array $from_lines         An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
     * @param array $to_lines           An array of strings.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
     * @param array $mapped_from_lines  This array should have the same size
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
     *                                  number of elements as $from_lines.  The
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
     *                                  elements in $mapped_from_lines and
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
     *                                  $mapped_to_lines are what is actually
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
     *                                  compared when computing the diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
     * @param array $mapped_to_lines    This array should have the same number
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   310
     *                                  of elements as $to_lines.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   311
     */
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   312
    function __construct($from_lines, $to_lines,
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
                             $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
        assert(count($from_lines) == count($mapped_from_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
        assert(count($to_lines) == count($mapped_to_lines));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
        parent::Text_Diff($mapped_from_lines, $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
        $xi = $yi = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
        for ($i = 0; $i < count($this->_edits); $i++) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
            $orig = &$this->_edits[$i]->orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
            if (is_array($orig)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
                $orig = array_slice($from_lines, $xi, count($orig));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
                $xi += count($orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
            $final = &$this->_edits[$i]->final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
            if (is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
                $final = array_slice($to_lines, $yi, count($final));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
                $yi += count($final);
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
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   336
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   337
	 * PHP4 constructor.
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
	public function Text_MappedDiff( $from_lines, $to_lines,
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   340
                             $mapped_from_lines, $mapped_to_lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   341
		self::__construct( $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
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   344
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
}
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
class Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
    var $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
    var $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
        trigger_error('Abstract method', E_USER_ERROR);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
    function norig()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
        return $this->orig ? count($this->orig) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
    function nfinal()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
        return $this->final ? count($this->final) : 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
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
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
class Text_Diff_Op_copy extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   383
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   384
	 * PHP5 constructor.
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
    function __construct( $orig, $final = false )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
        if (!is_array($final)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
            $final = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
        $this->final = $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   395
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   396
	 * PHP4 constructor.
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
	public function Text_Diff_Op_copy( $orig, $final = false ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   399
		self::__construct( $orig, $final );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   400
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   401
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
        $reverse = new Text_Diff_Op_copy($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
        return $reverse;
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
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
class Text_Diff_Op_delete extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   418
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   419
	 * PHP5 constructor.
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
	function __construct( $lines )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
        $this->orig = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
        $this->final = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   427
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   428
	 * PHP4 constructor.
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
	public function Text_Diff_Op_delete( $lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   431
		self::__construct( $lines );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   432
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   433
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
        $reverse = new Text_Diff_Op_add($this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
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
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   448
class Text_Diff_Op_add extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   449
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   450
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   451
	 * PHP5 constructor.
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
    function __construct( $lines )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
        $this->final = $lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
        $this->orig = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   459
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   460
	 * PHP4 constructor.
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
	public function Text_Diff_Op_add( $lines ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   463
		self::__construct( $lines );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   464
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   465
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
        $reverse = new Text_Diff_Op_delete($this->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   471
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
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   476
 * @author  Geoffrey T. Dairiki <dairiki@dairiki.org>
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   478
 * @access private
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   479
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   480
class Text_Diff_Op_change extends Text_Diff_Op {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   482
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   483
	 * PHP5 constructor.
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
    function __construct( $orig, $final )
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
        $this->orig = $orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
        $this->final = $final;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   491
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   492
	 * PHP4 constructor.
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
	public function Text_Diff_Op_change( $orig, $final ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   495
		self::__construct( $orig, $final );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   496
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   497
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
    function &reverse()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
        $reverse = new Text_Diff_Op_change($this->final, $this->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
        return $reverse;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
}