diff --git a/lib/Diff/Renderer/Html/Array.php b/lib/Diff/Renderer/Html/Array.php index 521601c6..b36bf4da 100644 --- a/lib/Diff/Renderer/Html/Array.php +++ b/lib/Diff/Renderer/Html/Array.php @@ -65,6 +65,9 @@ public function render() // we're not going to destroy the original data $a = $this->diff->getA(); $b = $this->diff->getB(); + // empty all entries for a1/b1 (we just need the count) + $a1 = array_fill(0, count($a), null); + $b1 = array_fill(0, count($a), null); $changes = array(); $opCodes = $this->diff->getGroupedOpcodes(); @@ -90,19 +93,23 @@ public function render() $toLine = substr_replace($toLine, "\1", $last + 1, 0); $a[$i1 + $i] = $fromLine; $b[$j1 + $i] = $toLine; + // store the detail start/end location + $a1[$i1 + $i] = array ('start' => $start, 'end' => $end + strlen($fromLine) + 1); + $b1[$j1 + $i] = array ('start' => $start, 'end' => $end + strlen($toLine) + 1); } } } - if($tag != $lastTag) { $blocks[] = array( 'tag' => $tag, 'base' => array( 'offset' => $i1, + 'location' => array (), 'lines' => array() ), 'changed' => array( 'offset' => $j1, + 'location' => array (), 'lines' => array() ) ); @@ -123,6 +130,9 @@ public function render() $lines = $this->formatLines($lines); $lines = str_replace(array("\0", "\1"), array('', ''), $lines); $blocks[$lastBlock]['base']['lines'] += $lines; + // store the detail start/end locations + $locations = array_slice($a1, $i1, ($i2 - $i1)); + $blocks[$lastBlock]['base']['location'] += $locations; } if($tag == 'replace' || $tag == 'insert') { @@ -130,6 +140,9 @@ public function render() $lines = $this->formatLines($lines); $lines = str_replace(array("\0", "\1"), array('', ''), $lines); $blocks[$lastBlock]['changed']['lines'] += $lines; + // store the detail start/end locations + $locations = array_slice($b1, $j1, ($j2 - $j1)); + $blocks[$lastBlock]['changed']['location'] += $locations; } } }