56 lines
2.1 KiB
PHP
56 lines
2.1 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* $Horde: framework/Text_Diff/Diff/Mapped.php,v 1.3.2.4 2009/01/06 15:23:41 jan Exp $
|
||
|
*
|
||
|
* Copyright 2007-2009 The Horde Project (http://www.horde.org/)
|
||
|
*
|
||
|
* See the enclosed file COPYING for license information (LGPL). If you did
|
||
|
* not receive this file, see http://opensource.org/licenses/lgpl-license.php.
|
||
|
*
|
||
|
* @package Text_Diff
|
||
|
* @author Geoffrey T. Dairiki <dairiki@dairiki.org>
|
||
|
*/
|
||
|
class Text_Diff_Mapped extends Text_Diff {
|
||
|
|
||
|
/**
|
||
|
* Computes a diff between sequences of strings.
|
||
|
*
|
||
|
* This can be used to compute things like case-insensitve diffs, or diffs
|
||
|
* which ignore changes in white-space.
|
||
|
*
|
||
|
* @param array $from_lines An array of strings.
|
||
|
* @param array $to_lines An array of strings.
|
||
|
* @param array $mapped_from_lines This array should have the same size
|
||
|
* number of elements as $from_lines. The
|
||
|
* elements in $mapped_from_lines and
|
||
|
* $mapped_to_lines are what is actually
|
||
|
* compared when computing the diff.
|
||
|
* @param array $mapped_to_lines This array should have the same number
|
||
|
* of elements as $to_lines.
|
||
|
*/
|
||
|
function Text_Diff_Mapped($from_lines, $to_lines,
|
||
|
$mapped_from_lines, $mapped_to_lines)
|
||
|
{
|
||
|
assert(count($from_lines) == count($mapped_from_lines));
|
||
|
assert(count($to_lines) == count($mapped_to_lines));
|
||
|
|
||
|
parent::Text_Diff($mapped_from_lines, $mapped_to_lines);
|
||
|
|
||
|
$xi = $yi = 0;
|
||
|
for ($i = 0; $i < count($this->_edits); $i++) {
|
||
|
$orig = &$this->_edits[$i]->orig;
|
||
|
if (is_array($orig)) {
|
||
|
$orig = array_slice($from_lines, $xi, count($orig));
|
||
|
$xi += count($orig);
|
||
|
}
|
||
|
|
||
|
$final = &$this->_edits[$i]->final;
|
||
|
if (is_array($final)) {
|
||
|
$final = array_slice($to_lines, $yi, count($final));
|
||
|
$yi += count($final);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
}
|