summaryrefslogtreecommitdiff
path: root/lib/exe/js.php
diff options
context:
space:
mode:
authorGerrit Uitslag <klapinklapin@gmail.com>2014-12-09 17:26:28 +0100
committerGerrit Uitslag <klapinklapin@gmail.com>2014-12-09 17:26:28 +0100
commit8702de7f7e170bddfdb622c393c3cac3446fd1c5 (patch)
treec7269ea61f5d4230a6f916dbabee4ce412e0a9fb /lib/exe/js.php
parent1cc82e5c76ae7fcd646e448404afdc0fd458bf55 (diff)
parent9a0ca2cfd8ac42895af3be2efbd2cab7e6d33578 (diff)
downloadrpg-8702de7f7e170bddfdb622c393c3cac3446fd1c5.tar.gz
rpg-8702de7f7e170bddfdb622c393c3cac3446fd1c5.tar.bz2
Merge remote-tracking branch 'origin/master' into scrutinizerissues
Conflicts: inc/media.php inc/plugin.php inc/template.php lib/plugins/authplain/_test/escaping.test.php lib/plugins/syntax.php
Diffstat (limited to 'lib/exe/js.php')
-rw-r--r--lib/exe/js.php36
1 files changed, 24 insertions, 12 deletions
diff --git a/lib/exe/js.php b/lib/exe/js.php
index 97f2b52c3..ec236e98f 100644
--- a/lib/exe/js.php
+++ b/lib/exe/js.php
@@ -305,7 +305,11 @@ function js_compress($s){
// items that don't need spaces next to them
$chars = "^&|!+\-*\/%=\?:;,{}()<>% \t\n\r'\"[]";
- $regex_starters = array("(", "=", "[", "," , ":", "!");
+ // 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");
@@ -405,19 +409,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 = ' ';