From 0a9b6b3dd7735c910504ca283dd0f73352449a21 Mon Sep 17 00:00:00 2001 From: hungkoala Date: Fri, 23 Jan 2015 17:28:14 +0700 Subject: [PATCH] moved Webonyx custom code from local SVN to here so that we can merge with original branch --- lib/Diff.php | 16 ++- lib/Diff/Renderer/Abstract.php | 0 lib/Diff/Renderer/Html/Array.php | 9 +- lib/Diff/Renderer/Html/Inline.php | 188 +++++++++++--------------- lib/Diff/Renderer/Html/SideBySide.php | 0 lib/Diff/Renderer/Text/Context.php | 0 lib/Diff/Renderer/Text/Unified.php | 0 lib/Diff/SequenceMatcher.php | 14 +- 8 files changed, 99 insertions(+), 128 deletions(-) mode change 100644 => 100755 lib/Diff.php mode change 100644 => 100755 lib/Diff/Renderer/Abstract.php mode change 100644 => 100755 lib/Diff/Renderer/Html/Array.php mode change 100644 => 100755 lib/Diff/Renderer/Html/Inline.php mode change 100644 => 100755 lib/Diff/Renderer/Html/SideBySide.php mode change 100644 => 100755 lib/Diff/Renderer/Text/Context.php mode change 100644 => 100755 lib/Diff/Renderer/Text/Unified.php mode change 100644 => 100755 lib/Diff/SequenceMatcher.php diff --git a/lib/Diff.php b/lib/Diff.php old mode 100644 new mode 100755 index d6cecb79..82b7c796 --- a/lib/Diff.php +++ b/lib/Diff.php @@ -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); @@ -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) @@ -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; } } \ No newline at end of file diff --git a/lib/Diff/Renderer/Abstract.php b/lib/Diff/Renderer/Abstract.php old mode 100644 new mode 100755 diff --git a/lib/Diff/Renderer/Html/Array.php b/lib/Diff/Renderer/Html/Array.php old mode 100644 new mode 100755 index 7113a174..cf5add0f --- a/lib/Diff/Renderer/Html/Array.php +++ b/lib/Diff/Renderer/Html/Array.php @@ -175,9 +175,9 @@ 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; } @@ -185,12 +185,11 @@ private function formatLines($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 ''; diff --git a/lib/Diff/Renderer/Html/Inline.php b/lib/Diff/Renderer/Html/Inline.php old mode 100644 new mode 100755 index 60e8005a..987a5d30 --- a/lib/Diff/Renderer/Html/Inline.php +++ b/lib/Diff/Renderer/Html/Inline.php @@ -5,10 +5,10 @@ * PHP version 5 * * Copyright (c) 2009 Chris Boulton - * + * * 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, @@ -16,20 +16,20 @@ * - 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 @@ -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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } + /** + * 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 .= '
'; + } + + foreach ($blocks as $change) { - foreach($blocks as $change) { - $html .= ''; - // 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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } - } - // 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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } - } - // 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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } - } - // 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 .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } + // Equal changes should be shown on both sides of the diff + if ($change['tag'] == 'equal') { + foreach ($change['base']['lines'] as $no => $line) { + $html .= '
' + . $line + . '
'; + } + } // Added lines only on the right side + else if ($change['tag'] == 'insert') { + foreach ($change['changed']['lines'] as $no => $line) { + $html .= '
' + . '' + . $line + . ' 
'; + } + } // Show deleted lines only on the left side + else if ($change['tag'] == 'delete') { + foreach ($change['base']['lines'] as $no => $line) { + $html .= '
' + . '' + . $line + . ' 
'; + } + } // Show modified lines on both sides + else if ($change['tag'] == 'replace') { + foreach ($change['base']['lines'] as $no => $line) { + $html .= '
' + . $line + . '
'; + } - foreach($change['changed']['lines'] as $no => $line) { - $toLine = $change['changed']['offset'] + $no + 1; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - $html .= ''; - } - } - $html .= ''; - } - } - $html .= '
OldNewDifferences
 
'.$fromLine.''.$toLine.''.$line.'
 '.$toLine.''.$line.' 
'.$fromLine.' '.$line.' 
'.$fromLine.' '.$line.'
'.$toLine.' '.$line.'
'; - return $html; - } + foreach ($change['changed']['lines'] as $no => $line) { + $html .= '
' + . $line + . '
'; + } + } + } + } + return $html; + } } \ No newline at end of file diff --git a/lib/Diff/Renderer/Html/SideBySide.php b/lib/Diff/Renderer/Html/SideBySide.php old mode 100644 new mode 100755 diff --git a/lib/Diff/Renderer/Text/Context.php b/lib/Diff/Renderer/Text/Context.php old mode 100644 new mode 100755 diff --git a/lib/Diff/Renderer/Text/Unified.php b/lib/Diff/Renderer/Text/Unified.php old mode 100644 new mode 100755 diff --git a/lib/Diff/SequenceMatcher.php b/lib/Diff/SequenceMatcher.php old mode 100644 new mode 100755 index 67a903b3..e819e810 --- a/lib/Diff/SequenceMatcher.php +++ b/lib/Diff/SequenceMatcher.php @@ -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) { @@ -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); @@ -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) { @@ -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; @@ -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)) {