Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F4048720
Diff.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
Diff.php
View Options
<?php
/**
* A PHP diff engine for phpwiki. (Taken from phpwiki-1.3.3)
*
* Copyright © 2000, 2001 Geoffrey T. Dairiki <dairiki@dairiki.org>
* You may copy this code freely under the conditions of the GPL.
*
* @license GPL-2.0-or-later
* @file
* @ingroup DifferenceEngine
*/
namespace
Wikimedia\Diff
;
/**
* Class representing a 'diff' between two sequences of strings.
* @newable
* @ingroup DifferenceEngine
*/
class
Diff
{
/**
* @var DiffOp[]
*/
public
$edits
;
/**
* @var int If this diff complexity is exceeded, a ComplexityException is thrown
* 0 means no limit.
*/
protected
$bailoutComplexity
=
0
;
/**
* Computes diff between sequences of strings.
*
* @stable to call
* @todo Don't do work in the constructor, use a service to create diffs instead (T257472).
*
* @param string[] $from_lines An array of strings.
* Typically these are lines from a file.
* @param string[] $to_lines An array of strings.
* @throws ComplexityException
*/
public
function
__construct
(
$from_lines
,
$to_lines
)
{
$eng
=
new
DiffEngine
;
$eng
->
setBailoutComplexity
(
$this
->
bailoutComplexity
);
$this
->
edits
=
$eng
->
diff
(
$from_lines
,
$to_lines
);
}
/**
* @return DiffOp[]
*/
public
function
getEdits
()
{
return
$this
->
edits
;
}
/**
* Compute reversed Diff.
*
* SYNOPSIS:
*
* $diff = new Diff($lines1, $lines2);
* $rev = $diff->reverse();
*
* @return self A Diff object representing the inverse of the
* original diff.
*/
public
function
reverse
()
{
$rev
=
$this
;
$rev
->
edits
=
[];
/** @var DiffOp $edit */
foreach
(
$this
->
edits
as
$edit
)
{
$rev
->
edits
[]
=
$edit
->
reverse
();
}
return
$rev
;
}
/**
* Check for empty diff.
*
* @return bool True if two sequences were identical.
*/
public
function
isEmpty
()
{
foreach
(
$this
->
edits
as
$edit
)
{
if
(
$edit
->
type
!=
'copy'
)
{
return
false
;
}
}
return
true
;
}
/**
* Compute the length of the Longest Common Subsequence (LCS).
*
* This is mostly for diagnostic purposed.
*
* @return int The length of the LCS.
*/
public
function
lcs
()
{
$lcs
=
0
;
foreach
(
$this
->
edits
as
$edit
)
{
if
(
$edit
->
type
==
'copy'
)
{
$lcs
+=
count
(
$edit
->
orig
);
}
}
return
$lcs
;
}
/**
* Get the original set of lines.
*
* This reconstructs the $from_lines parameter passed to the
* constructor.
*
* @return string[] The original sequence of strings.
*/
public
function
orig
()
{
$lines
=
[];
foreach
(
$this
->
edits
as
$edit
)
{
if
(
$edit
->
orig
)
{
array_splice
(
$lines
,
count
(
$lines
),
0
,
$edit
->
orig
);
}
}
return
$lines
;
}
/**
* Get the closing set of lines.
*
* This reconstructs the $to_lines parameter passed to the
* constructor.
*
* @return string[] The sequence of strings.
*/
public
function
closing
()
{
$lines
=
[];
foreach
(
$this
->
edits
as
$edit
)
{
if
(
$edit
->
closing
)
{
array_splice
(
$lines
,
count
(
$lines
),
0
,
$edit
->
closing
);
}
}
return
$lines
;
}
}
/** @deprecated class alias since 1.41 */
class_alias
(
Diff
::
class
,
'Diff'
);
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Aug 15 2026, 14:26 (12 w, 3 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
2c/13/8e0a2d7c28a44d0bf70bf24ff47b
Default Alt Text
Diff.php (3 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment