* @param $rcid Integer: ??? FIXME (default 0)
* @param $refreshCache boolean If set, refreshes the diff cache
*/
- function DifferenceEngine( $titleObj = null, $old = 0, $new = 0, $rcid = 0, $refreshCache = false ) {
+ function __construct( $titleObj = null, $old = 0, $new = 0, $rcid = 0, $refreshCache = false ) {
$this->mTitle = $titleObj;
wfDebug("DifferenceEngine old '$old' new '$new' rcid '$rcid'\n");
function showDiffPage( $diffOnly = false ) {
global $wgUser, $wgOut, $wgUseExternalEditor, $wgUseRCPatrol;
- $fname = 'DifferenceEngine::showDiffPage';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
# If external diffs are enabled both globally and for the user,
# we'll use the application/x-external-editor interface to call
$t = $this->mTitle->getPrefixedText() . " (Diff: {$this->mOldid}, {$this->mNewid})";
$wgOut->setPagetitle( wfMsg( 'errorpagetitle' ) );
$wgOut->addWikiMsg( 'missingarticle', "<nowiki>$t</nowiki>" );
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return;
}
if ( $this->mOldid === false ) {
$this->showFirstRevision();
$this->renderNewRevision(); // should we respect $diffOnly here or not?
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return;
}
if ( !( $this->mOldPage->userCanRead() && $this->mNewPage->userCanRead() ) ) {
$wgOut->loginToUse();
$wgOut->output();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
exit;
}
$newminor = '';
if ($this->mOldRev->mMinorEdit == 1) {
- $oldminor = wfElement( 'span', array( 'class' => 'minor' ),
- wfMsg( 'minoreditletter') ) . ' ';
+ $oldminor = Xml::span( wfMsg( 'minoreditletter'), 'minor' ) . ' ';
}
if ($this->mNewRev->mMinorEdit == 1) {
- $newminor = wfElement( 'span', array( 'class' => 'minor' ),
- wfMsg( 'minoreditletter') ) . ' ';
+ $newminor = Xml::span( wfMsg( 'minoreditletter'), 'minor' ) . ' ';
}
$rdel = ''; $ldel = '';
$revdel = SpecialPage::getTitleFor( 'Revisiondelete' );
if( !$this->mOldRev->userCan( Revision::DELETED_RESTRICTED ) ) {
// If revision was hidden from sysops
- $ldel = wfMsgHtml('rev-delundel');
+ $ldel = wfMsgHtml('rev-delundel');
} else {
$ldel = $sk->makeKnownLinkObj( $revdel,
wfMsgHtml('rev-delundel'),
if ( !$diffOnly )
$this->renderNewRevision();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
/**
*/
function renderNewRevision() {
global $wgOut;
- $fname = 'DifferenceEngine::renderNewRevision';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$wgOut->addHTML( "<hr /><h2>{$this->mPagetitle}</h2>\n" );
#add deleted rev tag if needed
$wgOut->parserOptions()->setEditSection( $oldEditSectionSetting );
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
/**
*/
function showFirstRevision() {
global $wgOut, $wgUser;
-
- $fname = 'DifferenceEngine::showFirstRevision';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
# Get article text from the DB
#
"{$this->mNewid})";
$wgOut->setPagetitle( wfMsg( 'errorpagetitle' ) );
$wgOut->addWikiMsg( 'missingarticle', "<nowiki>$t</nowiki>" );
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return;
}
if ( $this->mNewRev->isCurrent() ) {
if ( !( $this->mTitle->userCanRead() ) ) {
$wgOut->loginToUse();
$wgOut->output();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
exit;
}
$wgOut->setSubtitle( wfMsg( 'difference' ) );
$wgOut->setRobotpolicy( 'noindex,nofollow' );
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
/**
*/
function getDiffBody() {
global $wgMemc;
- $fname = 'DifferenceEngine::getDiffBody';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
// Check if the diff should be hidden from this user
if ( $this->mOldRev && !$this->mOldRev->userCan(Revision::DELETED_TEXT) ) {
return '';
wfIncrStats( 'diff_cache_hit' );
$difftext = $this->localiseLineNumbers( $difftext );
$difftext .= "\n<!-- diff cache key $key -->\n";
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $difftext;
}
} // don't try to load but save the result
// Loadtext is permission safe, this just clears out the diff
if ( !$this->loadText() ) {
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return false;
}
if ( $difftext !== false ) {
$difftext = $this->localiseLineNumbers( $difftext );
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $difftext;
}
*/
function generateDiffBody( $otext, $ntext ) {
global $wgExternalDiffEngine, $wgContLang;
- $fname = 'DifferenceEngine::generateDiffBody';
$otext = str_replace( "\r\n", "\n", $otext );
$ntext = str_replace( "\r\n", "\n", $ntext );
# Better external diff engine, the 2 may some day be dropped
# This one does the escaping and segmenting itself
if ( !function_exists( 'wikidiff2_do_diff' ) ) {
- wfProfileIn( "$fname-dl" );
+ wfProfileIn( __METHOD__ . "-dl" );
@dl('php_wikidiff2.so');
- wfProfileOut( "$fname-dl" );
+ wfProfileOut( __METHOD__ . "-dl" );
}
if ( function_exists( 'wikidiff2_do_diff' ) ) {
wfProfileIn( 'wikidiff2_do_diff' );
$tempFile1 = fopen( $tempName1, "w" );
if ( !$tempFile1 ) {
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return false;
}
$tempFile2 = fopen( $tempName2, "w" );
if ( !$tempFile2 ) {
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return false;
}
fwrite( $tempFile1, $otext );
fclose( $tempFile1 );
fclose( $tempFile2 );
$cmd = wfEscapeShellArg( $wgExternalDiffEngine, $tempName1, $tempName2 );
- wfProfileIn( "$fname-shellexec" );
+ wfProfileIn( __METHOD__ . "-shellexec" );
$difftext = wfShellExec( $cmd );
- wfProfileOut( "$fname-shellexec" );
+ wfProfileOut( __METHOD__ . "-shellexec" );
unlink( $tempName1 );
unlink( $tempName2 );
return $difftext;
* @private
* @addtogroup DifferenceEngine
*/
-class _DiffEngine
-{
+class _DiffEngine {
const MAX_XREF_LENGTH = 10000;
function diff ($from_lines, $to_lines) {
- $fname = '_DiffEngine::diff';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$n_from = sizeof($from_lines);
$n_to = sizeof($to_lines);
elseif ($add)
$edits[] = new _DiffOp_Add($add);
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $edits;
}
* of the portions it is going to specify.
*/
function _diag ($xoff, $xlim, $yoff, $ylim, $nchunks) {
- $fname = '_DiffEngine::_diag';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$flip = false;
if ($xlim - $xoff > $ylim - $yoff) {
$numer = $xlim - $xoff + $nchunks - 1;
$x = $xoff;
for ($chunk = 0; $chunk < $nchunks; $chunk++) {
- wfProfileIn( "$fname-chunk" );
+ wfProfileIn( __METHOD__ . "-chunk" );
if ($chunk > 0)
for ($i = 0; $i <= $this->lcs; $i++)
$ymids[$i][$chunk-1] = $this->seq[$i];
}
}
}
- wfProfileOut( "$fname-chunk" );
+ wfProfileOut( __METHOD__ . "-chunk" );
}
$seps[] = $flip ? array($yoff, $xoff) : array($xoff, $yoff);
}
$seps[] = $flip ? array($ylim, $xlim) : array($xlim, $ylim);
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return array($this->lcs, $seps);
}
function _lcs_pos ($ypos) {
- $fname = '_DiffEngine::_lcs_pos';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$end = $this->lcs;
if ($end == 0 || $ypos > $this->seq[$end]) {
$this->seq[++$this->lcs] = $ypos;
$this->in_seq[$ypos] = 1;
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $this->lcs;
}
$this->in_seq[$this->seq[$end]] = false;
$this->seq[$end] = $ypos;
$this->in_seq[$ypos] = 1;
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $end;
}
* All line numbers are origin-0 and discarded lines are not counted.
*/
function _compareseq ($xoff, $xlim, $yoff, $ylim) {
- $fname = '_DiffEngine::_compareseq';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
// Slide down the bottom initial diagonal.
while ($xoff < $xlim && $yoff < $ylim
$pt1 = $pt2;
}
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
/* Adjust inserts/deletes of identical lines to join changes
* This is extracted verbatim from analyze.c (GNU diffutils-2.7).
*/
function _shift_boundaries ($lines, &$changed, $other_changed) {
- $fname = '_DiffEngine::_shift_boundaries';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$i = 0;
$j = 0;
USE_ASSERTS && assert('$j >= 0 && !$other_changed[$j]');
}
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
}
* This is here only for debugging purposes.
*/
function _check ($from_lines, $to_lines) {
- $fname = 'Diff::_check';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
if (serialize($from_lines) != serialize($this->orig()))
trigger_error("Reconstructed original doesn't match", E_USER_ERROR);
if (serialize($to_lines) != serialize($this->closing()))
$lcs = $this->lcs();
trigger_error('Diff okay: LCS = '.$lcs, E_USER_NOTICE);
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
}
* have the same number of elements as $to_lines.
*/
function MappedDiff($from_lines, $to_lines,
- $mapped_from_lines, $mapped_to_lines) {
- $fname = 'MappedDiff::MappedDiff';
- wfProfileIn( $fname );
+ $mapped_from_lines, $mapped_to_lines) {
+ wfProfileIn( __METHOD__ );
assert(sizeof($from_lines) == sizeof($mapped_from_lines));
assert(sizeof($to_lines) == sizeof($mapped_to_lines));
$yi += sizeof($closing);
}
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
}
* @private
* @addtogroup DifferenceEngine
*/
-class DiffFormatter
-{
+class DiffFormatter {
/**
* Number of leading context "lines" to preserve.
*
* @return string The formatted output.
*/
function format($diff) {
- $fname = 'DiffFormatter::format';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$xi = $yi = 1;
$block = false;
$block);
$end = $this->_end_diff();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $end;
}
function _block($xbeg, $xlen, $ybeg, $ylen, &$edits) {
- $fname = 'DiffFormatter::_block';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$this->_start_block($this->_block_header($xbeg, $xlen, $ybeg, $ylen));
foreach ($edits as $edit) {
if ($edit->type == 'copy')
trigger_error('Unknown edit type', E_USER_ERROR);
}
$this->_end_block();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
function _start_diff() {
* @addtogroup DifferenceEngine
*/
-class UnifiedDiffFormatter extends DiffFormatter
-{
+class UnifiedDiffFormatter extends DiffFormatter {
var $leading_context_lines = 2;
var $trailing_context_lines = 2;
* A pseudo-formatter that just passes along the Diff::$edits array
* @addtogroup DifferenceEngine
*/
-class ArrayDiffFormatter extends DiffFormatter
-{
- function format($diff)
- {
+class ArrayDiffFormatter extends DiffFormatter {
+ function format($diff) {
$oldline = 1;
$newline = 1;
$retval = array();
foreach($diff->edits as $edit)
- switch($edit->type)
- {
+ switch($edit->type) {
case 'add':
- foreach($edit->closing as $l)
- {
+ foreach($edit->closing as $l) {
$retval[] = array(
'action' => 'add',
'new'=> $l,
}
break;
case 'delete':
- foreach($edit->orig as $l)
- {
+ foreach($edit->orig as $l) {
$retval[] = array(
'action' => 'delete',
'old' => $l,
}
break;
case 'change':
- foreach($edit->orig as $i => $l)
- {
+ foreach($edit->orig as $i => $l) {
$retval[] = array(
'action' => 'change',
'old' => $l,
$newline += count($edit->orig);
}
return $retval;
- }
+ }
}
/**
*
*/
-define('NBSP', ' '); // iso-8859-x non-breaking space.
+define('NBSP', ' '); // iso-8859-x non-breaking space.
/**
* @todo document
* @private
* @addtogroup DifferenceEngine
*/
-class WordLevelDiff extends MappedDiff
-{
+class WordLevelDiff extends MappedDiff {
const MAX_LINE_LENGTH = 10000;
function WordLevelDiff ($orig_lines, $closing_lines) {
- $fname = 'WordLevelDiff::WordLevelDiff';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
list ($orig_words, $orig_stripped) = $this->_split($orig_lines);
list ($closing_words, $closing_stripped) = $this->_split($closing_lines);
$this->MappedDiff($orig_words, $closing_words,
- $orig_stripped, $closing_stripped);
- wfProfileOut( $fname );
+ $orig_stripped, $closing_stripped);
+ wfProfileOut( __METHOD__ );
}
function _split($lines) {
- $fname = 'WordLevelDiff::_split';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$words = array();
$stripped = array();
}
}
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return array($words, $stripped);
}
function orig () {
- $fname = 'WordLevelDiff::orig';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$orig = new _HWLDF_WordAccumulator;
foreach ($this->edits as $edit) {
$orig->addWords($edit->orig, 'del');
}
$lines = $orig->getLines();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $lines;
}
function closing () {
- $fname = 'WordLevelDiff::closing';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$closing = new _HWLDF_WordAccumulator;
foreach ($this->edits as $edit) {
$closing->addWords($edit->closing, 'ins');
}
$lines = $closing->getLines();
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
return $lines;
}
}
/**
- * Wikipedia Table style diff formatter.
+ * Wikipedia Table style diff formatter.
* @todo document
* @private
* @addtogroup DifferenceEngine
*/
-class TableDiffFormatter extends DiffFormatter
-{
+class TableDiffFormatter extends DiffFormatter {
function TableDiffFormatter() {
$this->leading_context_lines = 2;
$this->trailing_context_lines = 2;
}
function _changed( $orig, $closing ) {
- $fname = 'TableDiffFormatter::_changed';
- wfProfileIn( $fname );
+ wfProfileIn( __METHOD__ );
$diff = new WordLevelDiff( $orig, $closing );
$del = $diff->orig();
echo '<tr>' . $this->emptyLine() .
$this->addedLine( $line ) . "</tr>\n";
}
- wfProfileOut( $fname );
+ wfProfileOut( __METHOD__ );
}
}