<commit_before><?php
// $Header: /cvsroot/tikiwiki/tiki/lib/diff/renderer.php,v 1.5 2004-07-08 12:50:37 damosoft Exp $

/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended
 * that this class be customized via inheritance, to obtain fancier
 * outputs.
 *
 * $Horde: framework/Text_Diff/Diff/Renderer.php,v 1.2 2004/01/09 21:46:30 chuck Exp $
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses
     * may want to set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses
     * may want to set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Render a diff.
     *
     * @param $diff object Text_Diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $this->_startDiff();

        foreach ($diff->getDiff() as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                if (is_array($block)) {
                    if (count($edit->orig) <= $nlead + $ntrail) {
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = &new Text_Diff_Op_copy($context);
                        }
                        $this->_block($x0, $ntrail + $xi - $x0,
                                      $y0, $ntrail + $yi - $y0,
                                      $block);
                        $block = false;
                    }
                }
                $context = $edit->orig;
            } else {
                if (!is_array($block)) {
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = &new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $this->_block($x0, $xi - $x0,
                          $y0, $yi - $y0,
                          $block);
        }

        return $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));
        foreach ($edits as $edit) {
            switch (get_class($edit)) {
            case 'text_diff_op_copy':
                $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $this->_changed($edit->orig, $edit->final);
                break;

            default:
                trigger_error("Unknown edit type", E_USER_ERROR);
            }
        }
        $this->_endBlock();
    }

    function _startDiff()
    {
        ob_start();
    }

    function _endDiff()
    {
        $val = ob_get_contents();
        ob_end_clean();
        return $val;
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        echo '<div class="diffheader">' . $header . '</div><div class="diffbody">';
    }

    function _endBlock()
    {
    	echo '</div>';
    }

    function _lines($lines, $prefix = '', $suffix = '')
    {
        foreach ($lines as $line) {
            echo "$prefix$line$suffix\n";
        }
    }

    function _context($lines)
    {
        $this->_lines($lines);
    }

    function _added($lines)
    {
        $this->_lines($lines, '>');
    }

    function _deleted($lines)
    {
        $this->_lines($lines, '<');
    }

    function _changed($orig, $final)
    {
        $this->_deleted($orig);<commit_msg>the CR were lost. Why have this lib changed and not a new renderer created?<commit_after><?php
// $Header: /cvsroot/tikiwiki/tiki/lib/diff/renderer.php,v 1.6 2004-08-12 16:06:23 sylvieg Exp $

/**
 * A class to render Diffs in different formats.
 *
 * This class renders the diff in classic diff format. It is intended
 * that this class be customized via inheritance, to obtain fancier
 * outputs.
 *
 * $Horde: framework/Text_Diff/Diff/Renderer.php,v 1.2 2004/01/09 21:46:30 chuck Exp $
 *
 * @package Text_Diff
 */
class Text_Diff_Renderer {

    /**
     * Number of leading context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses
     * may want to set this to other values.
     */
    var $_leading_context_lines = 0;

    /**
     * Number of trailing context "lines" to preserve.
     *
     * This should be left at zero for this class, but subclasses
     * may want to set this to other values.
     */
    var $_trailing_context_lines = 0;

    /**
     * Render a diff.
     *
     * @param $diff object Text_Diff  A Text_Diff object.
     *
     * @return string  The formatted output.
     */
    function render($diff)
    {
        $xi = $yi = 1;
        $block = false;
        $context = array();

        $nlead = $this->_leading_context_lines;
        $ntrail = $this->_trailing_context_lines;

        $this->_startDiff();

        foreach ($diff->getDiff() as $edit) {
            if (is_a($edit, 'Text_Diff_Op_copy')) {
                if (is_array($block)) {
                    if (count($edit->orig) <= $nlead + $ntrail) {
                        $block[] = $edit;
                    } else {
                        if ($ntrail) {
                            $context = array_slice($edit->orig, 0, $ntrail);
                            $block[] = &new Text_Diff_Op_copy($context);
                        }
                        $this->_block($x0, $ntrail + $xi - $x0,
                                      $y0, $ntrail + $yi - $y0,
                                      $block);
                        $block = false;
                    }
                }
                $context = $edit->orig;
            } else {
                if (!is_array($block)) {
                    $context = array_slice($context, count($context) - $nlead);
                    $x0 = $xi - count($context);
                    $y0 = $yi - count($context);
                    $block = array();
                    if ($context) {
                        $block[] = &new Text_Diff_Op_copy($context);
                    }
                }
                $block[] = $edit;
            }

            if ($edit->orig) {
                $xi += count($edit->orig);
            }
            if ($edit->final) {
                $yi += count($edit->final);
            }
        }

        if (is_array($block)) {
            $this->_block($x0, $xi - $x0,
                          $y0, $yi - $y0,
                          $block);
        }

        return $this->_endDiff();
    }

    function _block($xbeg, $xlen, $ybeg, $ylen, &$edits)
    {
        $this->_startBlock($this->_blockHeader($xbeg, $xlen, $ybeg, $ylen));
        foreach ($edits as $edit) {
            switch (get_class($edit)) {
            case 'text_diff_op_copy':
                $this->_context($edit->orig);
                break;

            case 'text_diff_op_add':
                $this->_added($edit->final);
                break;

            case 'text_diff_op_delete':
                $this->_deleted($edit->orig);
                break;

            case 'text_diff_op_change':
                $this->_changed($edit->orig, $edit->final);
                break;

            default:
                trigger_error("Unknown edit type", E_USER_ERROR);
            }
        }
        $this->_endBlock();
    }

    function _startDiff()
    {
        ob_start();
    }

    function _endDiff()
    {
        $val = ob_get_contents();
        ob_end_clean();
        return $val;
    }

    function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
    {
        if ($xlen > 1) {
            $xbeg .= ',' . ($xbeg + $xlen - 1);
        }
        if ($ylen > 1) {
            $ybeg .= ',' . ($ybeg + $ylen - 1);
        }

        return $xbeg . ($xlen ? ($ylen ? 'c' : 'd') : 'a') . $ybeg;
    }

    function _startBlock($header)
    {
        echo '<div class="diffheader">' . $header . '</div><div class="diffbody">';
    }

    function _endBlock()
    {
    	echo '</div>';
    }

    function _lines($lines, $prefix = '', $suffix = '')
    {
        foreach ($lines as $line) {
            echo "$prefix$line$suffix\n";
        }
    }

    function _context($lines)
    {
        $this->_lines($lines, '', "<br />");
    }

    function _added($lines)
    {
        $this->_lines($lines, '>');
    }

    function _deleted($lines)
    {
        $this->_lines($lines, '<');
    }

    function _changed($orig, $final)
    {
        $this->_deleted($orig);
{'fraction_non_alphanumeric': 0.14297245484814852, 'fraction_numerical': 0.010089799212995661, 'mean_word_length': 1.36, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 78, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 6, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6472453', 'n_tokens_mistral': 3133, 'n_tokens_neox': 2910, 'n_words': 668}