function DiffFormatter::format

Same name in other branches
  1. 9 core/lib/Drupal/Component/Diff/DiffFormatter.php \Drupal\Component\Diff\DiffFormatter::format()
  2. 10 core/lib/Drupal/Component/Diff/DiffFormatter.php \Drupal\Component\Diff\DiffFormatter::format()
  3. 11.x core/lib/Drupal/Component/Diff/DiffFormatter.php \Drupal\Component\Diff\DiffFormatter::format()

Format a diff.

Parameters

\Drupal\Component\Diff\Diff $diff: A Diff object.

Return value

string The formatted output.

File

core/lib/Drupal/Component/Diff/DiffFormatter.php, line 58

Class

DiffFormatter
A class to format Diffs

Namespace

Drupal\Component\Diff

Code

public function format(Diff $diff) {
    $xi = $yi = 1;
    $block = FALSE;
    $context = [];
    $nlead = $this->leading_context_lines;
    $ntrail = $this->trailing_context_lines;
    $this->_start_diff();
    foreach ($diff->getEdits() as $edit) {
        if ($edit->type == 'copy') {
            if (is_array($block)) {
                if (sizeof($edit->orig) <= $nlead + $ntrail) {
                    $block[] = $edit;
                }
                else {
                    if ($ntrail) {
                        $context = array_slice($edit->orig, 0, $ntrail);
                        $block[] = new DiffOpCopy($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, sizeof($context) - $nlead);
                $x0 = $xi - sizeof($context);
                $y0 = $yi - sizeof($context);
                $block = [];
                if ($context) {
                    $block[] = new DiffOpCopy($context);
                }
            }
            $block[] = $edit;
        }
        if ($edit->orig) {
            $xi += sizeof($edit->orig);
        }
        if ($edit->closing) {
            $yi += sizeof($edit->closing);
        }
    }
    if (is_array($block)) {
        $this->_block($x0, $xi - $x0, $y0, $yi - $y0, $block);
    }
    $end = $this->_end_diff();
    if (!empty($xi)) {
        $this->line_stats['counter']['x'] += $xi;
    }
    if (!empty($yi)) {
        $this->line_stats['counter']['y'] += $yi;
    }
    return $end;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.