getDiff() public method

Returns the array of differences.
public getDiff ( )
Beispiel #1
0
 /**
  * @static
  * @param Horde_Text_Diff $diff
  * @param int $first_line_no
  * @return int
  */
 public static function getFistDiffLine($diff, $first_line_no = 1)
 {
     $edits = $diff->getDiff();
     $line = $first_line_no;
     foreach ($edits as $edit) {
         if (get_class($edit) == "Horde_Text_Diff_Op_Add") {
             return $line + 1;
         }
         if (get_class($edit) == "Horde_Text_Diff_Op_Delete") {
             return $line;
         }
         if (get_class($edit) == "Horde_Text_Diff_Op_Change") {
             return $line;
         }
         if (is_array($edit->orig)) {
             $line += substr_count(implode("\n", $edit->orig), "#ZEILE#");
         }
     }
     return 0;
 }
Beispiel #2
0
 /**
  * Renders a diff.
  *
  * @param Horde_Text_Diff $diff  A Horde_Text_Diff object.
  *
  * @return string  The formatted output.
  */
 public function render($diff)
 {
     $xi = $yi = 1;
     $block = false;
     $context = array();
     $nlead = $this->_leading_context_lines;
     $ntrail = $this->_trailing_context_lines;
     $output = $this->_startDiff();
     $diffs = $diff->getDiff();
     foreach ($diffs as $i => $edit) {
         /* If these are unchanged (copied) lines, and we want to keep
          * leading or trailing context lines, extract them from the copy
          * block. */
         if ($edit instanceof Horde_Text_Diff_Op_Copy) {
             /* Do we have any diff blocks yet? */
             if (is_array($block)) {
                 /* How many lines to keep as context from the copy
                  * block. */
                 $keep = $i == count($diffs) - 1 ? $ntrail : $nlead + $ntrail;
                 if (count($edit->orig) <= $keep) {
                     /* We have less lines in the block than we want for
                      * context => keep the whole block. */
                     $block[] = $edit;
                 } else {
                     if ($ntrail) {
                         /* Create a new block with as many lines as we need
                          * for the trailing context. */
                         $context = array_slice($edit->orig, 0, $ntrail);
                         $block[] = new Horde_Text_Diff_Op_Copy($context);
                     }
                     /* @todo */
                     $output .= $this->_block($x0, $ntrail + $xi - $x0, $y0, $ntrail + $yi - $y0, $block);
                     $block = false;
                 }
             }
             /* Keep the copy block as the context for the next block. */
             $context = $edit->orig;
         } else {
             /* Don't we have any diff blocks yet? */
             if (!is_array($block)) {
                 /* Extract context lines from the preceding copy block. */
                 $context = array_slice($context, count($context) - $nlead);
                 $x0 = $xi - count($context);
                 $y0 = $yi - count($context);
                 $block = array();
                 if ($context) {
                     $block[] = new Horde_Text_Diff_Op_Copy($context);
                 }
             }
             $block[] = $edit;
         }
         if ($edit->orig) {
             $xi += count($edit->orig);
         }
         if ($edit->final) {
             $yi += count($edit->final);
         }
     }
     if (is_array($block)) {
         $output .= $this->_block($x0, $xi - $x0, $y0, $yi - $y0, $block);
     }
     return $output . $this->_endDiff();
 }
Beispiel #3
-1
 public function testStringEngine()
 {
     $patch = file_get_contents(__DIR__ . '/fixtures/unified.patch');
     $diff = new Horde_Text_Diff('String', array($patch));
     $this->_testDiff($diff);
     $patch = file_get_contents(__DIR__ . '/fixtures/unified2.patch');
     try {
         $diff = new Horde_Text_Diff('String', array($patch));
         $this->fail('Horde_Text_Diff_Exception expected');
     } catch (Horde_Text_Diff_Exception $e) {
     }
     $diff = new Horde_Text_Diff('String', array($patch, 'unified'));
     $edits = $diff->getDiff();
     $this->assertEquals(1, count($edits));
     $this->assertInstanceof('Horde_Text_Diff_Op_Change', $edits[0]);
     $this->assertEquals('For the first time in U.S. history number of private contractors and troops are equal', $edits[0]->orig[0]);
     $this->assertEquals('Number of private contractors and troops are equal for first time in U.S. history', $edits[0]->final[0]);
     $patch = file_get_contents(__DIR__ . '/fixtures/context.patch');
     $diff = new Horde_Text_Diff('String', array($patch));
     $this->_testDiff($diff);
 }