コード例 #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">Old Version</th>';
     $html .= '<th colspan="2">New Version</th>';
     $html .= '</tr>';
     $html .= '</thead>';
     foreach ($changes as $i => $blocks) {
         if ($i > 0) {
             $html .= '<tbody class="Skipped">';
             $html .= '<th>&hellip;</th><td>&nbsp;</td>';
             $html .= '<th>&hellip;</th><td>&nbsp;</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 .= '<td class="Left"><span>' . $line . '</span></td>';
                     $html .= '<th>' . $toLine . '</th>';
                     $html .= '<td class="Right"><span>' . $line . '</span></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>&nbsp;</th>';
                         $html .= '<td class="Left"></td>';
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right"><ins>' . $line . '</ins></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 .= '<td class="Left"><del>' . $line . '</del></td>';
                             $html .= '<th>&nbsp;</th>';
                             $html .= '<td class="Right"></td>';
                             $html .= '</tr>';
                         }
                     } else {
                         if ($change['tag'] == '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"><span>' . $line . '</span></td>';
                                     if (!isset($change['changed']['lines'][$no])) {
                                         $toLine = '&nbsp;';
                                         $changedLine = '&nbsp;';
                                     } else {
                                         $toLine = $change['base']['offset'] + $no + 1;
                                         $changedLine = '<span>' . $change['changed']['lines'][$no] . '</span>';
                                     }
                                     $html .= '<th>' . $toLine . '</th>';
                                     $html .= '<td class="Right">' . $changedLine . '</td>';
                                     $html .= '</tr>';
                                 }
                             } else {
                                 foreach ($change['changed']['lines'] as $no => $changedLine) {
                                     if (!isset($change['base']['lines'][$no])) {
                                         $fromLine = '&nbsp;';
                                         $line = '&nbsp;';
                                     } else {
                                         $fromLine = $change['base']['offset'] + $no + 1;
                                         $line = '<span>' . $change['base']['lines'][$no] . '</span>';
                                     }
                                     $html .= '<tr>';
                                     $html .= '<th>' . $fromLine . '</th>';
                                     $html .= '<td class="Left"><span>' . $line . '</span></td>';
                                     $toLine = $change['changed']['offset'] + $no + 1;
                                     $html .= '<th>' . $toLine . '</th>';
                                     $html .= '<td class="Right">' . $changedLine . '</td>';
                                     $html .= '</tr>';
                                 }
                             }
                         }
                     }
                 }
             }
             $html .= '</tbody>';
         }
     }
     $html .= '</table>';
     return $html;
 }
コード例 #2
0
ファイル: InlineRenderer.php プロジェクト: lexuses/php-diff
 /**
  * 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>&nbsp;</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>&nbsp;</th>';
                         $html .= '<th>' . $toLine . '</th>';
                         $html .= '<td class="Right"><ins>' . $line . '</ins>&nbsp;</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>&nbsp;</th>';
                             $html .= '<td class="Left"><del>' . $line . '</del>&nbsp;</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>&nbsp;</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>' . $toLine . '</th>';
                                 $html .= '<th>&nbsp;</th>';
                                 $html .= '<td class="Right"><span>' . $line . '</span></td>';
                                 $html .= '</tr>';
                             }
                         }
                     }
                 }
             }
             $html .= '</tbody>';
         }
     }
     $html .= '</table>';
     return $html;
 }