wp/wp-includes/Text/Diff/Renderer.php
author ymh <ymh.work@gmail.com>
Mon, 14 Oct 2019 17:39:30 +0200
changeset 7 cf61fcea0001
parent 0 d970ebf37754
child 21 48c4eec2b7e6
permissions -rw-r--r--
resynchronize code repo with production
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
<?php
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
/**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * A class to render Diffs in different formats.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * This class renders the diff in classic diff format. It is intended that
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * this class be customized via inheritance, to obtain fancier outputs.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * See the enclosed file COPYING for license information (LGPL). If you did
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 * not receive this file, see http://opensource.org/licenses/lgpl-license.php.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
 *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 * @package Text_Diff
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
class Text_Diff_Renderer {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
     * Number of leading context "lines" to preserve.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
     * This should be left at zero for this class, but subclasses may want to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
     * set this to other values.
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 $_leading_context_lines = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
     * Number of trailing context "lines" to preserve.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
     * This should be left at zero for this class, but subclasses may want to
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
     * set this to other values.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    var $_trailing_context_lines = 0;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
     * Constructor.
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( $params = array() )
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
        foreach ($params as $param => $value) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
            $v = '_' . $param;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
            if (isset($this->$v)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
                $this->$v = $value;
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
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
7
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    46
	/**
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    47
	 * PHP4 constructor.
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    48
	 */
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    49
	public function Text_Diff_Renderer( $params = array() ) {
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    50
		self::__construct( $params );
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    51
	}
cf61fcea0001 resynchronize code repo with production
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    52
0
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
     * Get any renderer parameters.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
     * @return array  All parameters of this renderer object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    function getParams()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
        $params = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        foreach (get_object_vars($this) as $k => $v) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
            if ($k[0] == '_') {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
                $params[substr($k, 1)] = $v;
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
        return $params;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    /**
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
     * Renders a diff.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
     * @param Text_Diff $diff  A Text_Diff object.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
     *
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
     * @return string  The formatted output.
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
     */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    function render($diff)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
        $xi = $yi = 1;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        $block = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        $context = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        $nlead = $this->_leading_context_lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        $ntrail = $this->_trailing_context_lines;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        $output = $this->_startDiff();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        $diffs = $diff->getDiff();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        foreach ($diffs as $i => $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
            /* If these are unchanged (copied) lines, and we want to keep
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
             * leading or trailing context lines, extract them from the copy
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
             * block. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
            if (is_a($edit, 'Text_Diff_Op_copy')) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                /* Do we have any diff blocks yet? */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                if (is_array($block)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                    /* How many lines to keep as context from the copy
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                     * block. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                    $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                    if (count($edit->orig) <= $keep) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                        /* We have less lines in the block than we want for
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
                         * context => keep the whole block. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
                        $block[] = $edit;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                    } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                        if ($ntrail) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                            /* Create a new block with as many lines as we need
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
                             * for the trailing context. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                            $context = array_slice($edit->orig, 0, $ntrail);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                            $block[] = new Text_Diff_Op_copy($context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
                        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
                        /* @todo */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                        $output .= $this->_block($x0, $ntrail + $xi - $x0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
                                                 $y0, $ntrail + $yi - $y0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
                                                 $block);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
                        $block = false;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
                    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
                }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
                /* Keep the copy block as the context for the next block. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                $context = $edit->orig;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
            } else {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                /* Don't we have any diff blocks yet? */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                if (!is_array($block)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                    /* Extract context lines from the preceding copy block. */
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
                    $context = array_slice($context, count($context) - $nlead);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                    $x0 = $xi - count($context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                    $y0 = $yi - count($context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                    $block = array();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                    if ($context) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                        $block[] = new Text_Diff_Op_copy($context);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                $block[] = $edit;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
            if ($edit->orig) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
                $xi += count($edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
            if ($edit->final) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
                $yi += count($edit->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
        if (is_array($block)) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
            $output .= $this->_block($x0, $xi - $x0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
                                     $y0, $yi - $y0,
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
                                     $block);
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
        return $output . $this->_endDiff();
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
    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
        $output = $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
        foreach ($edits as $edit) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
            switch (strtolower(get_class($edit))) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
            case 'text_diff_op_copy':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                $output .= $this->_context($edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
            case 'text_diff_op_add':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
                $output .= $this->_added($edit->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
                break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
            case 'text_diff_op_delete':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
                $output .= $this->_deleted($edit->orig);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
                break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
            case 'text_diff_op_change':
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                $output .= $this->_changed($edit->orig, $edit->final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
                break;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
            }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        return $output . $this->_endBlock();
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    function _startDiff()
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 '';
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
    function _endDiff()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
        return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        if ($xlen > 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
            $xbeg .= ',' . ($xbeg + $xlen - 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        if ($ylen > 1) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
            $ybeg .= ',' . ($ybeg + $ylen - 1);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
        // this matches the GNU Diff behaviour
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
        if ($xlen && !$ylen) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
            $ybeg--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        } elseif (!$xlen) {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
            $xbeg--;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
    function _startBlock($header)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
        return $header . "\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
    function _endBlock()
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
        return '';
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
    function _lines($lines, $prefix = ' ')
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
        return $prefix . implode("\n$prefix", $lines) . "\n";
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
    function _context($lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        return $this->_lines($lines, '  ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
    function _added($lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        return $this->_lines($lines, '> ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
    function _deleted($lines)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        return $this->_lines($lines, '< ');
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
    function _changed($orig, $final)
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
    {
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        return $this->_deleted($orig) . "---\n" . $this->_added($final);
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
    }
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
d970ebf37754 first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
}