Skip to content
Snippets Groups Projects
Commit 70daee86 authored by LarsDW223's avatar LarsDW223
Browse files

Corrected compression for ++ and -- operator. Partially fixes #897.

parent b2e6a1f4
No related branches found
No related tags found
No related merge requests found
...@@ -145,6 +145,66 @@ EOF; ...@@ -145,6 +145,66 @@ EOF;
$this->assertEquals($out, js_compress($text)); $this->assertEquals($out, js_compress($text));
} }
function test_plusplus1(){
$text = 'a = 5 + ++b;';
$this->assertEquals('a=5+ ++b;',js_compress($text));
}
function test_plusplus2(){
$text = 'a = 5+ ++b;';
$this->assertEquals('a=5+ ++b;',js_compress($text));
}
function test_plusplus3(){
$text = 'a = 5++ + b;';
$this->assertEquals('a=5++ +b;',js_compress($text));
}
function test_plusplus4(){
$text = 'a = 5++ +b;';
$this->assertEquals('a=5++ +b;',js_compress($text));
}
function test_minusminus1(){
$text = 'a = 5 - --b;';
$this->assertEquals('a=5- --b;',js_compress($text));
}
function test_minusminus2(){
$text = 'a = 5- --b;';
$this->assertEquals('a=5- --b;',js_compress($text));
}
function test_minusminus3(){
$text = 'a = 5-- - b;';
$this->assertEquals('a=5-- -b;',js_compress($text));
}
function test_minusminus4(){
$text = 'a = 5-- -b;';
$this->assertEquals('a=5-- -b;',js_compress($text));
}
function test_minusplus1(){
$text = 'a = 5-- +b;';
$this->assertEquals('a=5--+b;',js_compress($text));
}
function test_minusplus2(){
$text = 'a = 5-- + b;';
$this->assertEquals('a=5--+b;',js_compress($text));
}
function test_plusminus1(){
$text = 'a = 5++ - b;';
$this->assertEquals('a=5++-b;',js_compress($text));
}
function test_plusminus2(){
$text = 'a = 5++ -b;';
$this->assertEquals('a=5++-b;',js_compress($text));
}
/** /**
* Test the files provided with the original JsStrip * Test the files provided with the original JsStrip
*/ */
......
...@@ -289,6 +289,10 @@ function js_compress($s){ ...@@ -289,6 +289,10 @@ function js_compress($s){
// items that don't need spaces next to them // items that don't need spaces next to them
$chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]"; $chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
// items which need a space if the sign before and after whitespace is equal.
// E.g. '+ ++' may not be compressed to '+++' --> syntax error.
$ops = "+-";
$regex_starters = array("(", "=", "[", "," , ":", "!"); $regex_starters = array("(", "=", "[", "," , ":", "!");
$whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B"); $whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
...@@ -389,19 +393,27 @@ function js_compress($s){ ...@@ -389,19 +393,27 @@ function js_compress($s){
// whitespaces // whitespaces
if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){ if( $ch == ' ' || $ch == "\r" || $ch == "\n" || $ch == "\t" ){
// leading spaces
if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
$i = $i + 1;
continue;
}
// trailing spaces
// if this ch is space AND the last char processed
// is special, then skip the space
$lch = substr($result,-1); $lch = substr($result,-1);
if($lch && (strpos($chars,$lch) !== false)){
$i = $i + 1; // Only consider deleting whitespace if the signs before and after
continue; // are not equal and are not an operator which may not follow itself.
if ((!$lch || $s[$i+1] == ' ')
|| $lch != $s[$i+1]
|| strpos($ops,$s[$i+1]) === false) {
// leading spaces
if($i+1 < $slen && (strpos($chars,$s[$i+1]) !== false)){
$i = $i + 1;
continue;
}
// trailing spaces
// if this ch is space AND the last char processed
// is special, then skip the space
if($lch && (strpos($chars,$lch) !== false)){
$i = $i + 1;
continue;
}
} }
// else after all of this convert the "whitespace" to // else after all of this convert the "whitespace" to
// a single space. It will get appended below // a single space. It will get appended below
$ch = ' '; $ch = ' ';
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment