'; } 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 ''; if ($h[1] == 1) echo "Line: " . $h[0]; else { $h[1] = $h[0] + $h[1] - 1; echo "Lines: " . $h[0] . '-' . $h[1]; } echo ''; if ($h[3] == 1) echo "Line: " . $h[2]; else { $h[3] = $h[2] + $h[3] - 1; echo "Lines: " . $h[2] . '-' . $h[3]; } 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); } }