Skip to content

Commit

Permalink
moved Webonyx custom code from local SVN to here so that we can merge…
Browse files Browse the repository at this point in the history
… with original branch
  • Loading branch information
hungkoala authored and hungkoala committed Jan 23, 2015
1 parent 30e103d commit 0a9b6b3
Show file tree
Hide file tree
Showing 8 changed files with 99 additions and 128 deletions.
16 changes: 12 additions & 4 deletions lib/Diff.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,19 @@ class Diff
*
* @param array $a Array containing the lines of the first string to compare.
* @param array $b Array containing the lines for the second string to compare.
* @param array $options
* @param array $options
*/
public function __construct($a, $b, $options=array())
{
$this->a = $a;
if (is_string($a)) {
$a = explode("\n", $a);
}

if (is_string($b)) {
$b = explode("\n", $b);
}

$this->a = $a;
$this->b = $b;

$this->options = array_merge($this->defaultOptions, $options);
Expand All @@ -93,7 +101,7 @@ public function __construct($a, $b, $options=array())
/**
* Render a diff using the supplied rendering class and return it.
*
* @param Diff_Renderer_Abstract $renderer An instance of the rendering object to use for generating the diff.
* @param object $renderer An instance of the rendering object to use for generating the diff.
* @return mixed The generated diff. Exact return value depends on the rendered.
*/
public function render(Diff_Renderer_Abstract $renderer)
Expand Down Expand Up @@ -171,7 +179,7 @@ public function getGroupedOpcodes()

require_once dirname(__FILE__).'/Diff/SequenceMatcher.php';
$sequenceMatcher = new Diff_SequenceMatcher($this->a, $this->b, null, $this->options);
$this->groupedCodes = $sequenceMatcher->getGroupedOpcodes();
$this->groupedCodes = $sequenceMatcher->getGroupedOpcodes($this->options['context']);
return $this->groupedCodes;
}
}
Empty file modified lib/Diff/Renderer/Abstract.php
100644 → 100755
Empty file.
9 changes: 4 additions & 5 deletions lib/Diff/Renderer/Html/Array.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -175,22 +175,21 @@ private function getChangeExtent($fromLine, $toLine)
private function formatLines($lines)
{
$lines = array_map(array($this, 'ExpandTabs'), $lines);
$lines = array_map(array($this, 'HtmlSafe'), $lines);
//$lines = array_map(array($this, 'HtmlSafe'), $lines);
foreach($lines as &$line) {
$line = preg_replace_callback('# ( +)|^ #', __CLASS__."::fixSpaces", $line);
$line = preg_replace('# ( +)|^ #e', "\$this->fixSpaces('\\1')", $line);
}
return $lines;
}

/**
* Replace a string containing spaces with a HTML representation using  .
*
* @param string $matches Regex matches array.
* @param string $spaces The string of spaces.
* @return string The HTML representation of the string.
*/
public static function fixSpaces($matches)
function fixSpaces($spaces='')
{
$spaces = isset($matches[1]) ? $matches[1] : '';
$count = strlen($spaces);
if($count == 0) {
return '';
Expand Down
188 changes: 79 additions & 109 deletions lib/Diff/Renderer/Html/Inline.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -5,31 +5,31 @@
* PHP version 5
*
* Copyright (c) 2009 Chris Boulton <[email protected]>
*
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the Chris Boulton nor the names of its contributors
* may be used to endorse or promote products derived from this software
* - Neither the name of the Chris Boulton nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
* @package DiffLib
Expand All @@ -40,104 +40,74 @@
* @link http://github.com/chrisboulton/php-diff
*/

require_once dirname(__FILE__).'/Array.php';
require_once dirname(__FILE__) . '/Array.php';

class Diff_Renderer_Html_Inline extends Diff_Renderer_Html_Array
{
/**
* 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>';
}
/**
* 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;
}

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 .= '<div class="diff diff-empty"></div>';
}

foreach ($blocks as $change) {

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>';
}
}
// Added lines only on the right side
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>';
}
}
// Show deleted lines only on the left side
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>';
}
}
// Show modified lines on both sides
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>';
}
// Equal changes should be shown on both sides of the diff
if ($change['tag'] == 'equal') {
foreach ($change['base']['lines'] as $no => $line) {
$html .= '<div class="diff diff-equal">'
. $line
. '</div>';
}
} // Added lines only on the right side
else if ($change['tag'] == 'insert') {
foreach ($change['changed']['lines'] as $no => $line) {
$html .= '<div class="diff diff-added" style="background-color: #DDFADE;">'
. '<ins style="background: #9e9; text-decoration: none !important;">'
. $line
. '</ins>&nbsp;</div>';
}
} // Show deleted lines only on the left side
else if ($change['tag'] == 'delete') {
foreach ($change['base']['lines'] as $no => $line) {
$html .= '<div class="diff diff-removed" style="background-color: #FFE7E7;">'
. '<del style="background: #e99; text-decoration: line-through;">'
. $line
. '</del>&nbsp;</div>';
}
} // Show modified lines on both sides
else if ($change['tag'] == 'replace') {
foreach ($change['base']['lines'] as $no => $line) {
$html .= '<div class="diff diff-removed" style="background-color: #FFE7E7;"><span>'
. $line
. '</span></div>';
}

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;
}
foreach ($change['changed']['lines'] as $no => $line) {
$html .= '<div class="diff diff-added" style="background-color: #DDFADE;"><span>'
. $line
. '</span></div>';
}
}
}
}
return $html;
}
}
Empty file modified lib/Diff/Renderer/Html/SideBySide.php
100644 → 100755
Empty file.
Empty file modified lib/Diff/Renderer/Text/Context.php
100644 → 100755
Empty file.
Empty file modified lib/Diff/Renderer/Text/Unified.php
100644 → 100755
Empty file.
14 changes: 4 additions & 10 deletions lib/Diff/SequenceMatcher.php
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,6 @@ class Diff_SequenceMatcher
* @param string|array $a A string or array containing the lines to compare against.
* @param string|array $b A string or array containing the lines to compare.
* @param string|array $junkCallback Either an array or string that references a callback function (if there is one) to determine 'junk' characters.
* @param array $options
*/
public function __construct($a, $b, $junkCallback=null, $options)
{
Expand All @@ -94,11 +93,6 @@ public function __construct($a, $b, $junkCallback=null, $options)
$this->setSequences($a, $b);
}

/**
* Set new options
*
* @param array $options
*/
public function setOptions($options)
{
$this->options = array_merge($this->defaultOptions, $options);
Expand Down Expand Up @@ -212,8 +206,8 @@ private function chainB()
/**
* Checks if a particular character is in the junk dictionary
* for the list of junk characters.
* @param $b
* @return boolean True if the character is considered junk. False if not.
*
* @return boolean $b True if the character is considered junk. False if not.
*/
private function isBJunk($b)
{
Expand Down Expand Up @@ -637,7 +631,7 @@ private function quickRatio()
{
if($this->fullBCount === null) {
$this->fullBCount = array();
$bLength = count ($this->b);
$bLength = count ($b);
for($i = 0; $i < $bLength; ++$i) {
$char = $this->b[$i];
$this->fullBCount[$char] = $this->arrayGetDefault($this->fullBCount, $char, 0) + 1;
Expand Down Expand Up @@ -735,7 +729,7 @@ private function tupleSort($a, $b)
}
}

if(count($a) == count($b)) {
if(count($a) == $count($b)) {
return 0;
}
else if(count($a) < count($b)) {
Expand Down

0 comments on commit 0a9b6b3

Please sign in to comment.