Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Component\Diff;
|
Chris@0
|
4
|
Chris@0
|
5 /**
|
Chris@0
|
6 * FIXME: bad name.
|
Chris@0
|
7 * @todo document
|
Chris@0
|
8 * @private
|
Chris@0
|
9 * @subpackage DifferenceEngine
|
Chris@0
|
10 */
|
Chris@0
|
11 class MappedDiff extends Diff {
|
Chris@0
|
12
|
Chris@0
|
13 /**
|
Chris@0
|
14 * Constructor.
|
Chris@0
|
15 *
|
Chris@0
|
16 * Computes diff between sequences of strings.
|
Chris@0
|
17 *
|
Chris@0
|
18 * This can be used to compute things like
|
Chris@0
|
19 * case-insensitive diffs, or diffs which ignore
|
Chris@0
|
20 * changes in white-space.
|
Chris@0
|
21 *
|
Chris@0
|
22 * @param array $from_lines
|
Chris@0
|
23 * An array of strings.
|
Chris@0
|
24 * (Typically these are lines from a file.)
|
Chris@0
|
25 * @param array $to_lines
|
Chris@0
|
26 * An array of strings.
|
Chris@0
|
27 * @param array $mapped_from_lines
|
Chris@0
|
28 * This array should have the same size number of elements as $from_lines.
|
Chris@0
|
29 * The elements in $mapped_from_lines and $mapped_to_lines are what is
|
Chris@0
|
30 * actually compared when computing the diff.
|
Chris@0
|
31 * @param array $mapped_to_lines
|
Chris@0
|
32 * This array should have the same number of elements as $to_lines.
|
Chris@0
|
33 */
|
Chris@0
|
34 public function __construct($from_lines, $to_lines, $mapped_from_lines, $mapped_to_lines) {
|
Chris@0
|
35
|
Chris@0
|
36 assert(sizeof($from_lines) == sizeof($mapped_from_lines));
|
Chris@0
|
37 assert(sizeof($to_lines) == sizeof($mapped_to_lines));
|
Chris@0
|
38
|
Chris@0
|
39 parent::__construct($mapped_from_lines, $mapped_to_lines);
|
Chris@0
|
40
|
Chris@0
|
41 $xi = $yi = 0;
|
Chris@0
|
42 for ($i = 0; $i < sizeof($this->edits); $i++) {
|
Chris@0
|
43 $orig = &$this->edits[$i]->orig;
|
Chris@0
|
44 if (is_array($orig)) {
|
Chris@0
|
45 $orig = array_slice($from_lines, $xi, sizeof($orig));
|
Chris@0
|
46 $xi += sizeof($orig);
|
Chris@0
|
47 }
|
Chris@0
|
48
|
Chris@0
|
49 $closing = &$this->edits[$i]->closing;
|
Chris@0
|
50 if (is_array($closing)) {
|
Chris@0
|
51 $closing = array_slice($to_lines, $yi, sizeof($closing));
|
Chris@0
|
52 $yi += sizeof($closing);
|
Chris@0
|
53 }
|
Chris@0
|
54 }
|
Chris@0
|
55 }
|
Chris@0
|
56
|
Chris@0
|
57 }
|