From cf5bdd1f8f3919f06ee3f8de9d71ff156fada0ab Mon Sep 17 00:00:00 2001 From: xue <> Date: Fri, 31 Mar 2006 16:16:36 +0000 Subject: Updated the script for generating pradolite.php. --- buildscripts/phpbuilder/build.php | 184 ++++++++++++++++++++++++-------------- 1 file changed, 115 insertions(+), 69 deletions(-) (limited to 'buildscripts/phpbuilder/build.php') diff --git a/buildscripts/phpbuilder/build.php b/buildscripts/phpbuilder/build.php index 4f427388..e95b9ea7 100644 --- a/buildscripts/phpbuilder/build.php +++ b/buildscripts/phpbuilder/build.php @@ -3,8 +3,15 @@ /** * Prado build file. * - * This script compresses a list of Prado PHP script files - * and merges them into one for performance redistribution. + * This is a command line script that can be run simply by "php build.php". + * + * This script expands prado.php into a file that contains the content + * of prado.php and all its included (directly or indirectly) files. + * Comments and trace statements are stripped off to further improve + * performance. + * + * The generated file is named pradolite.php and is placed under the + * 'framework' directory. * * @author Qiang Xue * @link http://www.pradosoft.com/ @@ -14,89 +21,128 @@ * @package Tools */ -/** - * The merged file name - */ -define('OUTPUT_FILE','pradolite.php'); /** * The framework directory */ define('FRAMEWORK_DIR',realpath(dirname(__FILE__).'/../../framework')); /** - * The file containing script list to be built + * The merged file name */ -define('SCRIPT_FILES',dirname(__FILE__).'/files.txt'); +define('OUTPUT_FILE','pradolite.php'); -if(FRAMEWORK_DIR===false) + +if(FRAMEWORK_DIR===false || !is_file(FRAMEWORK_DIR.'/prado.php')) die('Unable to determine the installation directory of Prado Framework.'); -if(!is_file(SCRIPT_FILES)) - die('Unable to read '.SCRIPT_FILES.'.'); -$output=''; +$lastupdate=date('Y/m/d H:i:s'); +$comments=" +/** + * File Name: pradolite.php + * Last Update: $lastupdate + * Generated By: buildscripts/phpbuilder/build.php + * + * This file is used in lieu of prado.php to boost PRADO application performance. + * It is generated by expanding prado.php with included files. + * Comments and trace statements are stripped off. + * + * Do not modify this file manually. + */ +"; -$lines=file(SCRIPT_FILES); -foreach($lines as $line) -{ - $line=trim($line); - if($line==='' || $line[0]==='#') - continue; - echo 'adding '.FRAMEWORK_DIR.'/'.$line."\n"; - $input=file_get_contents(FRAMEWORK_DIR.'/'.$line); - $input = strip_comments($input); - $input=strtr($input,"\r",''); - $input=preg_replace("/\s*(\n+\s*){2,}\s*/m","\n",$input); - $input=preg_replace('/^Prado::using\([^\*]*?\);/mu','',$input); - $input=preg_replace('/^(require|require_once)\s*\(.*?;/mu','',$input); - $input=preg_replace('/^(include|include_once)\s*\(.*?;/mu','',$input); - $input=preg_replace('/^\s*/m','',$input); +$content=unfold_file(FRAMEWORK_DIR.'/prado.php'); +$content="|<\?php)/mu','',$content)."\n?>"; +$content=strip_comments($content); +$content=preg_replace('/^\s*Prado::trace.*\s*;\s*$/mu','',$content); +$content=strip_empty_lines($content); +$content=substr_replace($content,$comments,5,0); +file_put_contents(FRAMEWORK_DIR.'/'.OUTPUT_FILE,$content); +echo "Done.\n"; - //remove internal logging - $input=preg_replace('/^\s*Prado::trace.*\s*;\s*$/mu','',$input); +exit(); - $output.=$input; +function strip_comments($source) +{ + $tokens = token_get_all($source); + /* T_ML_COMMENT does not exist in PHP 5. + * The following three lines define it in order to + * preserve backwards compatibility. + * + * The next two lines define the PHP 5-only T_DOC_COMMENT, + * which we will mask as T_ML_COMMENT for PHP 4. + */ + if (!defined('T_ML_COMMENT')) { + @define('T_ML_COMMENT', T_COMMENT); + } else { + @define('T_DOC_COMMENT', T_ML_COMMENT); + } + $output = ''; + foreach ($tokens as $token) { + if (is_string($token)) { + // simple 1-character token + $output .= $token; + } else { + // token array + list($id, $text) = $token; + switch ($id) { + case T_COMMENT: + case T_ML_COMMENT: // we've defined this + case T_DOC_COMMENT: // and this + // no action on comments + break; + default: + // anything else -> output "as is" + $output .= $text; + break; + } + } + } + return $output; } -$output=str_replace('?> output "as is" - $output .= $text; - break; - } - } - } - return $output; + static $unfoldedFiles=array(); + $pattern='^(Prado::using|require_once|include_once)\s*\(([^\*]*?)\);'; + echo "adding $fileName...\n"; + $content=file_get_contents($fileName); + while(preg_match("/$pattern/m",$content,$matches,PREG_OFFSET_CAPTURE)) + { + $offset=$matches[0][1]; + $length=strlen($matches[0][0]); + $type=$matches[1][0]; + $file=trim($matches[2][0],"'\""); + if($type==='Prado::using') + { + $file=substr_replace(strtr($file,'.','/'),FRAMEWORK_DIR,0,6).'.php'; + } + else + { + $file=strtr($file,'"',"'"); + if(($pos=strpos($file,"'"))!==false) + $file=FRAMEWORK_DIR.'/'.substr($file,$pos+1); + else + die('Unable to process file '.$fileName.' about '.$matches[0][0]); + } + if(($file=realpath($file))===false || !is_file($file)) + die('Unable to process file '.$fileName.' about '.$matches[0][0]); + if(isset($unfoldedFiles[$file])) + { + $content=substr_replace($content,'',$offset,$length); + } + else + { + $unfoldedFiles[$file]=true; + $content=substr_replace($content,unfold_file($file),$offset,$length); + } + } + return $content; } ?> \ No newline at end of file -- cgit v1.2.3