_leading_context_lines = $context_lines;
$this->_trailing_context_lines = $context_lines;
$this->diff = "";
$this->change = "";
}
protected function _startDiff()
{
}
protected function _endDiff()
{
return [$this->diff, $this->change];
}
protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen)
{
}
protected function _startBlock($header)
{
echo $header;
}
protected function _endBlock()
{
}
protected function _getChange($lines)
{
return str_replace("
", "↵
", join("", $lines));
}
protected function _lines($lines, $prefix = '', $suffix = '', $type = '')
{
if ($type == 'context') {
$this->diff .= join("", $lines);
} elseif ($type == 'added' || $type == 'change-added') {
$t = $this->_getChange($lines);
if (! empty($t)) {
$this->diff .= "$t";
}
} elseif ($type == 'deleted' || $type == 'change-deleted') {
$t = $this->_getChange($lines);
if (! empty($t)) {
$this->diff .= "$t";
}
} elseif ($type == 'changed') {
$t = $this->_getChange($lines[0]);
if (! empty($t)) {
$this->diff .= "$t";
}
$t = $this->_getChange($lines[1]);
if (! empty($t)) {
$this->diff .= "$t";
}
}
}
protected function _context($lines)
{
$this->_lines($lines, '', '', 'context');
}
protected function _added($lines, $changemode = false)
{
if (! $this->change) {
$this->change = "added";
}
if ($this->change != "added") {
$this->change = "changed";
}
if ($changemode) {
$this->_lines($lines, '+', '', 'change-added');
} else {
$this->_lines($lines, '+', '', 'added');
}
}
protected function _deleted($lines, $changemode = false)
{
if (! $this->change) {
$this->change = "deleted";
}
if ($this->change != "deleted") {
$this->change = "changed";
}
if ($changemode) {
$this->_lines($lines, '-', '', 'change-deleted');
} else {
$this->_lines($lines, '-', '', 'deleted');
}
}
protected function _changed($orig, $final)
{
$this->change = 'changed';
$this->_lines([$orig, $final], '*', '', 'changed');
}
}