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;
$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
*/
......
......@@ -289,6 +289,10 @@ function js_compress($s){
// items that don't need spaces next to them
$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("(", "=", "[", "," , ":", "!");
$whitespaces_chars = array(" ", "\t", "\n", "\r", "\0", "\x0B");
......@@ -389,19 +393,27 @@ function js_compress($s){
// whitespaces
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);
if($lch && (strpos($chars,$lch) !== false)){
$i = $i + 1;
continue;
// Only consider deleting whitespace if the signs before and after
// 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
// a single space. It will get appended below
$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