';
}
protected function _endDiff() {
echo '';
$val = ob_get_contents();
ob_end_clean();
return $val;
}
protected function _blockHeader($xbeg, $xlen, $ybeg, $ylen) {
return "$xbeg,$xlen,$ybeg,$ylen";
}
protected function _startBlock($header) {
$h = split(",", $header);
echo '
';
}
protected function _endBlock() {
}
protected function _lines($type, $lines, $prefix = '') {
if ($type == 'context') {
foreach ($lines as $line) {
if (!empty($line))
echo "| | $line | | $line |
\n";
}
} elseif ($type == 'added') {
foreach ($lines as $line) {
if (!empty($line))
echo "| | $prefix | $line |
\n";
}
} elseif ($type == 'deleted') {
foreach ($lines as $line) {
if (!empty($line))
echo "| $prefix | $line | |
\n";
}
} elseif ($type == 'change-deleted') {
echo '| ' . $prefix . ' | ' . implode(" ", $lines) .
" | \n";
} elseif ($type == 'change-added') {
echo '' . $prefix . ' | ' . implode(" ", $lines) . " |
\n";
}
}
protected function _context($lines) {
$this->_lines('context', $lines);
}
protected function _added($lines, $changemode = false) {
if ($changemode) {
$this->_lines('change-added', $lines, '+');
} else {
$this->_lines('added', $lines, '+');
}
}
protected function _deleted($lines, $changemode = false) {
if ($changemode) {
$this->_lines('change-deleted', $lines, '-');
} else {
$this->_lines('deleted', $lines, '-');
}
}
protected function _changed($orig, $final) {
if ($this->_character_diff) {
$lines = $this->diffChar($orig, $final);
$this->_deleted([$lines[0]], true);
$this->_added([$lines[1]], true);
} else {
$this->_deleted($orig, true);
$this->_added($final, true);
}
}
//refactor!!!
public function diffChar($orig, $final) {
$line1 = preg_split('//', implode("
", $orig), -1, PREG_SPLIT_NO_EMPTY);
$line2 = preg_split('//', implode("
", $final), -1, PREG_SPLIT_NO_EMPTY);
$z = new Horde_Text_Diff($line1, $line2);
if ($z->isEmpty()) {
return [$orig[0], $final[0]];
}
// echo "";print_r($z);echo "
";
$renderer = new Horde_Text_Diff_Renderer_Character(10000);
return $renderer->render($z);
}
}