1.20.x diff.inc | public DiffFormatter::format($diff) |
Format a diff.
Parameters
Return value
string The formatted output.:
File
- includes/
diff.inc, line 1026 - A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)
Class
- DiffFormatter
- Base class for diff formatters
Code
public function format($diff) {
$xi = $yi = 1;
$block = FALSE;
$context = array();
$nlead = $this->leadingContextLines;
$ntrail = $this->trailingContextLines;
$this->startDiff();
// Initialize $x0 and $y0 to prevent IDEs from getting confused.
$x0 = $y0 = 0;
foreach ($diff->edits as $edit) {
if ($edit->type == '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 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, count($context) - $nlead);
$x0 = $xi - count($context);
$y0 = $yi - count($context);
$block = array();
if ($context) {
$block[] = new DiffOpCopy($context);
}
}
$block[] = $edit;
}
if ($edit->orig) {
$xi += count($edit->orig);
}
if ($edit->closing) {
$yi += count($edit->closing);
}
}
if (is_array($block)) {
$this->block($x0, $xi - $x0,
$y0, $yi - $y0,
$block);
}
$end = $this->endDiff();
return $end;
}