53 lines
2.0 KiB
PHP
53 lines
2.0 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Copyright 2007-2012 Horde LLC (http://www.horde.org/)
|
||
|
*
|
||
|
* See the enclosed file COPYING for license information (LGPL). If you did
|
||
|
* not receive this file, see http://www.horde.org/licenses/lgpl21.
|
||
|
*
|
||
|
* @package Text_Diff
|
||
|
* @author Geoffrey T. Dairiki <dairiki@dairiki.org>
|
||
|
*/
|
||
|
class Horde_Text_Diff_Mapped extends Horde_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.
|
||
|
*/
|
||
|
public function __construct($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::__construct($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);
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|