#!/usr/bin/php <?php /** * Prado build file. * * This script compresses a list of Prado PHP script files * and merges them into one for performance redistribution. * * @author Qiang Xue <qiang.xue@gmail.com> * @link http://www.pradosoft.com/ * @copyright Copyright © 2005 PradoSoft * @license http://www.pradosoft.com/license/ * @version $Revision: $ $Date: $ * @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 */ define('SCRIPT_FILES',dirname(__FILE__).'/files.txt'); if(FRAMEWORK_DIR===false) die('Unable to determine the installation directory of Prado Framework.'); if(!is_file(SCRIPT_FILES)) die('Unable to read '.SCRIPT_FILES.'.'); $output=''; $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); //remove internal logging $input=preg_replace('/^\s*Prado::trace.*\s*;\s*$/mu','',$input); $output.=$input; } file_put_contents(FRAMEWORK_DIR.'/'.OUTPUT_FILE,$output); 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; } ?>