/usr/share/php/xajax/xajax_core/xajaxCompress.inc.php is in php-xajax 0.5-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 | <?php
/*
Function: xajaxCompressFile
<xajax> will call this function internally to compress the javascript code for
more efficient delivery.
Parameters:
$sFile - (stirng): The file to be compressed.
*/
function xajaxCompressFile($sFile)
{
//remove windows cariage returns
$sFile = str_replace("\r",'',$sFile);
//array to store replaced literal strings
$literal_strings = array();
//explode the string into lines
$lines = explode("\n",$sFile);
//loop through all the lines, building a new string at the same time as removing literal strings
$clean = '';
$inComment = false;
$literal = '';
$inQuote = false;
$escaped = false;
$quoteChar = '';
$iLen = count($lines);
for($i=0; $i<$iLen; ++$i)
{
$line = $lines[$i];
$inNormalComment = false;
//loop through line's characters and take out any literal strings, replace them with ___i___ where i is the index of this string
$jLen = strlen($line);
for($j=0; $j<$jLen; ++$j)
{
$c = substr($line,$j,1);
$d = substr($line,$j,2);
//look for start of quote
if(!$inQuote && !$inComment)
{
//is this character a quote or a comment
if(($c=='"' || $c=="'") && !$inComment && !$inNormalComment)
{
$inQuote = true;
$inComment = false;
$escaped = false;
$quoteChar = $c;
$literal = $c;
}
else if($d=="/*" && !$inNormalComment)
{
$inQuote = false;
$inComment = true;
$escaped = false;
$quoteChar = $d;
$literal = $d;
$j++;
}
else if($d=="//") //ignore string markers that are found inside comments
{
$inNormalComment = true;
}
else
{
if (!$inNormalComment)
$clean .= $c;
}
}
else //allready in a string so find end quote
{
if($c == $quoteChar && !$escaped && !$inComment)
{
$inQuote = false;
$literal .= $c;
//subsitute in a marker for the string
$clean .= "___" . count($literal_strings) . "___";
//push the string onto our array
array_push($literal_strings,$literal);
}
else if($inComment && $d=="*/")
{
$inComment = false;
$literal .= $d;
++$j;
}
else if($c == "\\" && !$escaped)
$escaped = true;
else
$escaped = false;
$literal .= $c;
}
}
if($inComment) $literal .= "\n";
$clean .= "\n";
}
//explode the clean string into lines again
$lines = explode("\n",$clean);
//now process each line at a time
$iLen = count($lines);
for($i=0; $i<$iLen; ++$i)
{
$line = $lines[$i];
//remove comments
$line = preg_replace("/\/\/(.*)/","",$line);
//strip leading and trailing whitespace
$line = trim($line);
//remove all whitespace with a single space
$line = preg_replace("/\s+/"," ",$line);
//remove any whitespace that occurs after/before an operator
$line = preg_replace("/\s*([!\}\{;,&=\|\-\+\*\/\)\(:])\s*/","\\1",$line);
$lines[$i] = $line;
}
//implode the lines
$sFile = implode("\n",$lines);
//make sure there is a max of 1 \n after each line
$sFile = preg_replace("/[\n]+/","\n",$sFile);
//strip out line breaks that immediately follow a semi-colon
$sFile = preg_replace("/;\n/",";",$sFile);
//curly brackets aren't on their own
$sFile = preg_replace("/[\n]*\{[\n]*/","{",$sFile);
//finally loop through and replace all the literal strings:
$iLen = count($literal_strings);
for($i=0; $i<$iLen; ++$i)
$sFile = str_replace('___'.$i.'___',$literal_strings[$i],$sFile);
return $sFile;
}
|