* @ingroup DifferenceEngine
*/
abstract class DiffFormatter {
- /**
- * Number of leading context "lines" to preserve.
+
+ /** @var int Number of leading context "lines" to preserve.
*
* This should be left at zero for this class, but subclasses
* may want to set this to other values.
*/
protected $leadingContextLines = 0;
- /**
- * Number of trailing context "lines" to preserve.
+ /** @var int Number of trailing context "lines" to preserve.
*
* This should be left at zero for this class, but subclasses
* may want to set this to other values.
/**
* Format a diff.
*
- * @param $diff Diff A Diff object.
+ * @param Diff $diff A Diff object.
+ *
* @return string The formatted output.
*/
public function format( $diff ) {
$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 ) ) {
} else {
if ( $ntrail ) {
$context = array_slice( $edit->orig, 0, $ntrail );
- $block[] = new DiffOp_Copy( $context );
+ $block[] = new DiffOpCopy( $context );
}
$this->block( $x0, $ntrail + $xi - $x0,
$y0, $ntrail + $yi - $y0,
$y0 = $yi - count( $context );
$block = array();
if ( $context ) {
- $block[] = new DiffOp_Copy( $context );
+ $block[] = new DiffOpCopy( $context );
}
}
$block[] = $edit;
$end = $this->endDiff();
wfProfileOut( __METHOD__ );
+
return $end;
}
/**
- * @param $xbeg
- * @param $xlen
- * @param $ybeg
- * @param $ylen
+ * @param int $xbeg
+ * @param int $xlen
+ * @param int $ybeg
+ * @param int $ylen
* @param $edits
+ *
+ * @throws MWException If the edit type is not known.
*/
protected function block( $xbeg, $xlen, $ybeg, $ylen, &$edits ) {
wfProfileIn( __METHOD__ );
protected function endDiff() {
$val = ob_get_contents();
ob_end_clean();
+
return $val;
}
/**
- * @param $xbeg
- * @param $xlen
- * @param $ybeg
- * @param $ylen
+ * @param int $xbeg
+ * @param int $xlen
+ * @param int $ybeg
+ * @param int $ylen
+ *
* @return string
*/
protected function blockHeader( $xbeg, $xlen, $ybeg, $ylen ) {
return $xbeg . ( $xlen ? ( $ylen ? 'c' : 'd' ) : 'a' ) . $ybeg;
}
+ /**
+ * Called at the start of a block of connected edits.
+ * This default implementation writes the header and a newline to the output buffer.
+ *
+ * @param string $header
+ */
protected function startBlock( $header ) {
echo $header . "\n";
}
+ /**
+ * Called at the end of a block of connected edits.
+ * This default implementation does nothing.
+ */
protected function endBlock() {
}
/**
- * @param $lines
- * @param $prefix string
+ * Writes all (optionally prefixed) lines to the output buffer, separated by newlines.
+ *
+ * @param string[] $lines
+ * @param string $prefix
*/
protected function lines( $lines, $prefix = ' ' ) {
foreach ( $lines as $line ) {
}
/**
- * @param $lines
+ * @param string[] $lines
*/
protected function context( $lines ) {
$this->lines( $lines );
}
/**
- * @param $lines
+ * @param string[] $lines
*/
protected function added( $lines ) {
$this->lines( $lines, '>' );
}
/**
- * @param $lines
+ * @param string[] $lines
*/
protected function deleted( $lines ) {
$this->lines( $lines, '<' );
}
/**
- * @param $orig
- * @param $closing
+ * Writes the two sets of lines to the output buffer, separated by "---" and a newline.
+ *
+ * @param string[] $orig
+ * @param string[] $closing
*/
protected function changed( $orig, $closing ) {
$this->deleted( $orig );
echo "---\n";
$this->added( $closing );
}
+
}