Text_Diff_Renderer::render()publicWP 1.0

Renders a diff.

Метод класса: Text_Diff_Renderer{}

Хуков нет.

Возвращает

Строку. The formatted output.

Использование

$Text_Diff_Renderer = new Text_Diff_Renderer();
$Text_Diff_Renderer->render( $diff );
$diff(Text_Diff) (обязательный)
A Text_Diff object.

Код Text_Diff_Renderer::render() WP 6.5.2

function render($diff)
{
    $xi = $yi = 1;
    $block = false;
    $context = array();

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

    $output = $this->_startDiff();

    $diffs = $diff->getDiff();
    foreach ($diffs as $i => $edit) {
        /* If these are unchanged (copied) lines, and we want to keep
         * leading or trailing context lines, extract them from the copy
         * block. */
        if (is_a($edit, 'Text_Diff_Op_copy')) {
            /* Do we have any diff blocks yet? */
            if (is_array($block)) {
                /* How many lines to keep as context from the copy
                 * block. */
                $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                if (count($edit->orig) <= $keep) {
                    /* We have less lines in the block than we want for
                     * context => keep the whole block. */
                    $block[] = $edit;
                } else {
                    if ($ntrail) {
                        /* Create a new block with as many lines as we need
                         * for the trailing context. */
                        $context = array_slice($edit->orig, 0, $ntrail);
                        $block[] = new Text_Diff_Op_copy($context);
                    }
                    /* @todo */
                    $output .= $this->_block($x0, $ntrail + $xi - $x0,
                                             $y0, $ntrail + $yi - $y0,
                                             $block);
                    $block = false;
                }
            }
            /* Keep the copy block as the context for the next block. */
            $context = $edit->orig;
        } else {
            /* Don't we have any diff blocks yet? */
            if (!is_array($block)) {
                /* Extract context lines from the preceding copy 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)) {
        $output .= $this->_block($x0, $xi - $x0,
                                 $y0, $yi - $y0,
                                 $block);
    }

    return $output . $this->_endDiff();
}