function DiffFormatter::format

Format a diff.

Parameters

$diff object A Diff object.:

Return value

string The formatted output.

File

drupal/core/lib/Drupal/Component/Diff/DiffEngine.php, line 800
A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)

Class

DiffFormatter
A class to format Diffs

Code

function format($diff) {
  $xi = $yi = 1;
  $block = FALSE;
  $context = array();
  $nlead = $this->leading_context_lines;
  $ntrail = $this->trailing_context_lines;
  $this
    ->_start_diff();
  foreach ($diff->edits 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 _DiffOp_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, sizeof($context) - $nlead);
        $x0 = $xi - sizeof($context);
        $y0 = $yi - sizeof($context);
        $block = array();
        if ($context) {
          $block[] = new _DiffOp_Copy($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;
}