1 diff.inc private DiffEngine::diffLocal($from_lines, $to_lines)

Parameters

$from_lines:

$to_lines:

File

core/includes/diff.inc, line 223
A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)

Class

DiffEngine
Class used internally by Diff to actually compute the diffs.

Code

private function diffLocal($from_lines, $to_lines) {
  $n_from = count($from_lines);
  $n_to = count($to_lines);
  $this->xchanged = $this->ychanged = array();
  $this->xv = $this->yv = array();
  $this->xind = $this->yind = array();
  unset($this->seq);
  unset($this->in_seq);
  unset($this->lcs);

  // Skip leading common lines.
  for ($skip = 0; $skip < $n_from && $skip < $n_to; $skip++) {
    if ($from_lines[$skip] !== $to_lines[$skip]) {
      break;
    }
    $this->xchanged[$skip] = $this->ychanged[$skip] = FALSE;
  }
  // Skip trailing common lines.
  $xi = $n_from;
  $yi = $n_to;
  for ($endskip = 0; --$xi > $skip && --$yi > $skip; $endskip++) {
    if ($from_lines[$xi] !== $to_lines[$yi]) {
      break;
    }
    $this->xchanged[$xi] = $this->ychanged[$yi] = FALSE;
  }

  // Ignore lines which do not exist in both files.
  for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
    $xhash[$this->lineHash($from_lines[$xi])] = 1;
  }

  for ($yi = $skip; $yi < $n_to - $endskip; $yi++) {
    $line = $to_lines[$yi];
    if (($this->ychanged[$yi] = empty($xhash[$this->lineHash($line)]))) {
      continue;
    }
    $yhash[$this->lineHash($line)] = 1;
    $this->yv[] = $line;
    $this->yind[] = $yi;
  }
  for ($xi = $skip; $xi < $n_from - $endskip; $xi++) {
    $line = $from_lines[$xi];
    if (($this->xchanged[$xi] = empty($yhash[$this->lineHash($line)]))) {
      continue;
    }
    $this->xv[] = $line;
    $this->xind[] = $xi;
  }

  // Find the LCS.
  $this->compareSeq(0, count($this->xv), 0, count($this->yv));
}