<?php
class jsCssCompressor {
static $block_css,$block_js;
public function makeJs($pathes,$to) {
if(file_exists($to)) unlink($to);
$fp=fopen($to,"a+");
foreach($pathes as $v) {
$data=file_get_contents($v);
fwrite($fp, self::clear($data));
}
fclose($fp);
if(file_exists($to)) {return true;}else{return false;}
}
public function makeCss($pathes,$to) {
if(file_exists($to)) unlink($to);
$fp=fopen($to,"a+");
foreach($pathes as $v) {
$data=file_get_contents($v);
fwrite($fp, self::clear($data));
}
fclose($fp);
if(file_exists($to)) {return true;}else{return false;}
}
public function compressJs($data) {
return self::clear_js($data);
}
public function compressCss($data) {
return self::clear_css($data);
}
private function clear_js($data) {
$data=self::strip_comments_js($data);
$data=self::make_one_line($data);
$data=self::strip_multipled_spaces($data);
$data=self::strip_spaces_js($data);
return $data;
}
private function clear_css($data) {
$data=self::strip_comments_css($data);
$data=self::strip_multipled_spaces($data);
$data=self::make_one_line($data);
return $data;
}
private function strip_comments_js($data) {
$data=eregi_replace("\/\/[^\n]*",'',$data);
$data=preg_replace("|\/\*[\s\S]*\*\/|iU",'',$data);
return $data;
}
private function strip_comments_css($data) {
$data=preg_replace("|\/\*[\s\S]*\*\/|iU",'',$data);
return $data;
}
private function strip_multipled_spaces($data) {
return eregi_replace("[ ]+",' ',$data);
}
private function make_one_line($data) {
return eregi_replace("[\n\r]+",' ',$data);
}
private function strip_spaces_js($data) {
$strip_r=array('function','else','typeof','case','new','var','return','in','\|\|','\&\&');
$strip_l=array('typeof','in','\|\|','\&\&','else');
$strip_ap=array('while','for','foreach','do','switch');
if(!self::$block_js) {
function strip_zap($m) {
if($m[1]=="}") {
return '};'.$m[2];
}
}
function strip_right($m) {
return ' '.$m[2].$m[3].' {*}'.$m[4].' ';
}
function strip_left($m) {
return ' '.$m[2].'{*}'.$m[3].$m[4].' ';
}
self::$block_js=1;
}
foreach($strip_r as $v) {
$f='/(([\}\{\)\(\; =]{1})('.$v.')([\}\{\)\(; ]{1}))+/i';
$data=preg_replace_callback($f,'strip_right',$data);
}
foreach($strip_l as $v) {
$f='/(([\}\{\)\(\; =]{1})('.$v.')([\}\{\)\(; ]{1}))+/i';
$data=preg_replace_callback($f,'strip_left',$data);
}
foreach($strip_ap as $v) {
$f1[0]='/([}]{1}'.$v.'( ||{*}))+/i';
$r1[0]='};'.$v;
$data=preg_replace($f1,$r1,$data);
}
$data=eregi_replace("[ ]+",'',$data);
$data=eregi_replace("\{\*\}",' ',$data);
$f='/([\}]{1})([a-z]{1})/i';
$data=preg_replace_callback($f,'strip_zap',$data);
return $data;
}
}
|