Esempio n. 1
0
 /**
  * Render a and return diff with changes between the two sequences
  * displayed side by side.
  *
  * @return string The generated side by side diff.
  */
 public function render()
 {
     $changes = parent::render();
     $html = '';
     if (empty($changes)) {
         return $html;
     }
     $html .= '<table class="Differences DifferencesSideBySide">';
     $html .= '<thead>';
     $html .= '<tr>';
     $html .= '<th colspan="2">' . $this->diff->options['title_a'] . '</th>';
     $html .= '<th colspan="2">' . $this->diff->options['title_b'] . '</th>';
     $html .= '</tr>';
     $html .= '</thead>';
     foreach ($changes as $i => $blocks) {
         if ($i > 0) {
             $html .= '<tbody class="Skipped">';
             $html .= '<th>&hellip;</th><td>&#xA0;</td>';
             $html .= '<th>&hellip;</th><td>&#xA0;</td>';
             $html .= '</tbody>';
         }
         foreach ($blocks as $change) {
             $html .= '<tbody class="Change' . ucfirst($change['tag']) . '">';
             // Equal changes should be shown on both sides of the diff
             switch ($change['tag']) {
                 case 'equal':
                     foreach ($change['base']['lines'] as $no => $line) {
                         $fromLine = $change['base']['offset'] + $no + 1;
                         $toLine = $change['changed']['offset'] + $no + 1;
                         $html .= '<tr>';
                         $html .= '<th>' . $fromLine . '</th>';
                         $html .= '<td class="Left">' . $line . '&#xA0;</td>';
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right">' . $line . '&#xA0;</td>';
                         $html .= '</tr>';
                     }
                     break;
                     // Added lines only on the right side
                 // Added lines only on the right side
                 case 'insert':
                     foreach ($change['changed']['lines'] as $no => $line) {
                         $toLine = $change['changed']['offset'] + $no + 1;
                         $html .= '<tr>';
                         $html .= '<th>&#xA0;</th>';
                         $html .= '<td class="Left">&#xA0;</td>';
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right"><ins>' . $line . '</ins>&#xA0;</td>';
                         $html .= '</tr>';
                     }
                     break;
                     // Show deleted lines only on the left side
                 // Show deleted lines only on the left side
                 case 'delete':
                     foreach ($change['base']['lines'] as $no => $line) {
                         $fromLine = $change['base']['offset'] + $no + 1;
                         $html .= '<tr>';
                         $html .= '<th>' . $fromLine . '</th>';
                         $html .= '<td class="Left"><del>' . $line . '</del>&#xA0;</td>';
                         $html .= '<th>&#xA0;</th>';
                         $html .= '<td class="Right">&#xA0;</td>';
                         $html .= '</tr>';
                     }
                     break;
                     // Show modified lines on both sides
                 // Show modified lines on both sides
                 case 'replace':
                     if (count($change['base']['lines']) >= count($change['changed']['lines'])) {
                         foreach ($change['base']['lines'] as $no => $line) {
                             $fromLine = $change['base']['offset'] + $no + 1;
                             $html .= '<tr>';
                             $html .= '<th>' . $fromLine . '</th>';
                             $html .= '<td class="Left">' . $line . '&#xA0;</td>';
                             if (!isset($change['changed']['lines'][$no])) {
                                 $toLine = '&#xA0;';
                                 $changedLine = '&#xA0;';
                             } else {
                                 $toLine = $change['base']['offset'] + $no + 1;
                                 $changedLine = $change['changed']['lines'][$no];
                             }
                             $html .= '<th>' . $toLine . '</th>';
                             $html .= '<td class="Right">' . $changedLine . '</td>';
                             $html .= '</tr>';
                         }
                     }
                     break;
                 default:
                     foreach ($change['changed']['lines'] as $no => $changedLine) {
                         if (!isset($change['base']['lines'][$no])) {
                             $fromLine = '&#xA0;';
                             $line = '&#xA0;';
                         } else {
                             $fromLine = $change['base']['offset'] + $no + 1;
                             $line = $change['base']['lines'][$no];
                         }
                         $html .= '<tr>';
                         $html .= '<th>' . $fromLine . '</th>';
                         $html .= '<td class="Left">' . $line . '&#xA0;</td>';
                         $toLine = $change['changed']['offset'] + $no + 1;
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right">' . $changedLine . '</td>';
                         $html .= '</tr>';
                     }
                     break;
             }
             $html .= '</tbody>';
         }
     }
     $html .= '</table>';
     return $html;
 }
Esempio n. 2
0
 /**
  * Render a and return diff with changes between the two sequences
  * displayed inline (under each other)
  *
  * @return string The generated inline diff.
  */
 public function render()
 {
     $changes = parent::render();
     $html = '';
     if (empty($changes)) {
         return $html;
     }
     $html .= '<table class="Differences DifferencesInline">';
     $html .= '<thead>';
     $html .= '<tr>';
     $html .= '<th>Old</th>';
     $html .= '<th>New</th>';
     $html .= '<th>Differences</th>';
     $html .= '</tr>';
     $html .= '</thead>';
     foreach ($changes as $i => $blocks) {
         // If this is a separate block, we're condensing code so output ...,
         // indicating a significant portion of the code has been collapsed as
         // it is the same
         if ($i > 0) {
             $html .= '<tbody class="Skipped">';
             $html .= '<th>&hellip;</th>';
             $html .= '<th>&hellip;</th>';
             $html .= '<td>&#xA0;</td>';
             $html .= '</tbody>';
         }
         foreach ($blocks as $change) {
             $html .= '<tbody class="Change' . ucfirst($change['tag']) . '">';
             // Equal changes should be shown on both sides of the diff
             if ($change['tag'] == 'equal') {
                 foreach ($change['base']['lines'] as $no => $line) {
                     $fromLine = $change['base']['offset'] + $no + 1;
                     $toLine = $change['changed']['offset'] + $no + 1;
                     $html .= '<tr>';
                     $html .= '<th>' . $fromLine . '</th>';
                     $html .= '<th>' . $toLine . '</th>';
                     $html .= '<td class="Left">' . $line . '</td>';
                     $html .= '</tr>';
                 }
             } else {
                 if ($change['tag'] == 'insert') {
                     foreach ($change['changed']['lines'] as $no => $line) {
                         $toLine = $change['changed']['offset'] + $no + 1;
                         $html .= '<tr>';
                         $html .= '<th>&#xA0;</th>';
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right"><ins>' . $line . '</ins>&#xA0;</td>';
                         $html .= '</tr>';
                     }
                 } else {
                     if ($change['tag'] == 'delete') {
                         foreach ($change['base']['lines'] as $no => $line) {
                             $fromLine = $change['base']['offset'] + $no + 1;
                             $html .= '<tr>';
                             $html .= '<th>' . $fromLine . '</th>';
                             $html .= '<th>&#xA0;</th>';
                             $html .= '<td class="Left"><del>' . $line . '</del>&#xA0;</td>';
                             $html .= '</tr>';
                         }
                     } else {
                         if ($change['tag'] == 'replace') {
                             foreach ($change['base']['lines'] as $no => $line) {
                                 $fromLine = $change['base']['offset'] + $no + 1;
                                 $html .= '<tr>';
                                 $html .= '<th>' . $fromLine . '</th>';
                                 $html .= '<th>&#xA0;</th>';
                                 $html .= '<td class="Left"><span>' . $line . '</span></td>';
                                 $html .= '</tr>';
                             }
                             foreach ($change['changed']['lines'] as $no => $line) {
                                 $toLine = $change['changed']['offset'] + $no + 1;
                                 $html .= '<tr>';
                                 $html .= '<th>&#xA0;</th>';
                                 $html .= '<th>' . $toLine . '</th>';
                                 $html .= '<td class="Right"><span>' . $line . '</span></td>';
                                 $html .= '</tr>';
                             }
                         }
                     }
                 }
             }
             $html .= '</tbody>';
         }
     }
     $html .= '</table>';
     return $html;
 }