#!/usr/local/bin/php -Cq * @copyright 2004-2005 Claudio Bustos * @link http://pear.php.net/package/PHP_Beautifier * @link http://clbustos.dotgeek.org * @license http://www.php.net/license/3_0.txt PHP License 3.0 * @version CVS: $Id:$ */ // First, test if the interpreter is the cli one if (php_sapi_name() != 'cli') { echo "You have to use php_beautifier with cli version of php. If you only have the cgi version, see Beautifier.php to use this software within a script\n"; exit(); } /** * Require PEAR Class */ require_once 'PEAR.php'; /** * Require for PEAR Getopt class */ require_once 'Console/Getopt.php'; /** * Require for PEAR System class */ require_once 'System.php'; /** * Require the beautify_php class.... */ require_once 'PHP/Beautifier.php'; /** * Require for PHP_Beautifier_Batch */ require_once 'PHP/Beautifier/Batch.php'; define('PHP_Beautifier_WINDOWS', substr(PHP_OS, 0, 3) == 'WIN'); error_reporting(E_ALL); // get log object $oLog = PHP_Beautifier_Common::getLog(); //default_options $aInputFiles = STDIN; $sOutputFile = STDOUT; $sIndentChar = ' '; $iIndentNumber = 4; $aFilters = array(); $bRecursive = false; $sCompress = false; $aFiltersDirectory = array(); $iVerbose=PEAR_LOG_WARNING; //end default_options $argv = Console_Getopt::readPHPArgv(); $aLongOptions = array( 'input=', 'output=', 'indent_tabs==', 'indent_spaces==', 'filters=', 'directory_filters=', 'recursive', 'help', 'compress==', 'verbose' ); $options = Console_Getopt::getopt($argv, "f:o:d:l:t::s::c::r?hv", $aLongOptions); if (PEAR::isError($options)) { usage($options); } foreach($options[0] as $opt) { $sArgument = str_replace('-', '', $opt[0]); $sParam = $opt[1]; $oLog->log("Arg: ".$sArgument."[$sParam]", PEAR_LOG_DEBUG); switch ($sArgument) { case 'input': case 'f': $aInputFiles = ($sParam == '-') ? STDIN : array( $sParam ); break; case 'output': case 'o': $sOutputFile = ($sParam == '-') ? STDOUT : $sParam; break; case 'indent_tabs': case 't': $sIndentChar = "\t"; $iIndentNumber = ($sParam) ? (int)$sParam : 1; break; case 'indent_spaces': case 's': $sIndentChar = " "; $iIndentNumber = ($sParam) ? (int)$sParam : 4; break; case 'filters': case 'l': $aBruteFilters = explode(' ', $sParam); foreach($aBruteFilters as $sFilter) { $sNombre = ''; preg_match("/([^(]*)(\((.*)\))*/", $sFilter, $aMatch); $sFilterName = $aMatch[1]; $aFilterArgs = array(); if (!empty($aMatch[3])) { $aSubArgs = explode(',', $aMatch[3]); foreach($aSubArgs as $sSubArg) { list($sKey, $sValue) = explode('=', $sSubArg); $aFilterArgs[$sKey] = $sValue; } } $aFilters[$sFilterName] = $aFilterArgs; } break; case 'directory_filters': case 'd': $sep = (PHP_Beautifier_WINDOWS) ? ';' : ':'; $aFiltersDirectory = explode($sep, $sParam); break; case 'recursive': case 'r': $oLog->log('Recursive: on'); $bRecursive = true; break; case 'compress': case 'c': $sCompress = ($sParam) ? $sParam : 'gz'; break; case 'help': case '?': case 'h': usage(); break; case 'v': case 'verbose': $iVerbose=PEAR_LOG_INFO; break; } } // add the console logger $oLogConsole = Log::factory('console', '', 'php_beautifier', array( 'stream'=>STDERR ) , $iVerbose); $oLog->addChild($oLogConsole); if (!empty($options[1])) { $aFiles = $options[1]; if (count($options[1]) == 1) { $aInputFiles = ($aFiles[0] == '-') ? STDIN : array( $aFiles[0] ); $sOutputFile = STDOUT; } else { $aInputFiles = array_slice($aFiles, 0, count($aFiles) -1); $sOut = end($aFiles); $sOutputFile = ($sOut == '-') ? STDOUT : $sOut; } } $oLog->log("In :".@implode(',', $aInputFiles) , PEAR_LOG_INFO); $oLog->log("Out:".$sOutputFile, PEAR_LOG_INFO); $start = time(); ini_set('max_execution_time', 0); // start script try { $oBeautSingle = new PHP_Beautifier(); $oBeaut = new PHP_Beautifier_Batch($oBeautSingle); $oBeaut->setRecursive($bRecursive); $oBeaut->setInputFile($aInputFiles); $oBeaut->setOutputFile($sOutputFile); $oBeaut->setIndentChar($sIndentChar); $oBeaut->setIndentNumber($iIndentNumber); $oBeaut->setCompress($sCompress); if ($aFiltersDirectory) { foreach($aFiltersDirectory as $sDirectory) { $oBeaut->addFilterDirectory($sDirectory); } } if ($aFilters) { foreach($aFilters as $sName=>$aArgs) { $oBeaut->addFilter($sName, $aArgs); } } $oBeaut->process(); $oBeaut->save(); $sNameOut = ($sOutputFile == STDOUT) ? 'STDOUT' : $sOutputFile; $sNameIn = ($aInputFiles == STDIN) ? 'STDIN' : implode(',', $aInputFiles); // Log if ($aFilters) { $oLog->log("Filters used: ".implode(',', array_keys($aFilters)) , PEAR_LOG_INFO); } $oLog->log($sNameIn." to $sNameOut done"); $oLog->log(round(time() -$start, 2) ." seconds needed\n"); } catch(Exception $oExp) { $oLog->log($oExp->getMessage() , PEAR_LOG_ERR); $aBacktrace = $oExp->getTrace(); foreach($aBacktrace as $iIndex=>$aTrace) { $oLog->log(sprintf("#%d %s(%d):%s%s%s()", $iIndex, $aTrace['file'], $aTrace['line'], @$aTrace['class'], @$aTrace['type'], $aTrace['function']) , PEAR_LOG_DEBUG); } } function usage($obj = null) { if ($obj !== null) { fputs(STDERR, $obj->getMessage()); } // php_beautifier->setBeautify(false) fputs(STDERR, "\nUsage: php_beautifier [options] \n". " and/or can be '-', which means stdin/stdout.\n". " you can use ? and * for batch processing\n". " can be a dir (ending with '/' or a real dir)\n". " or a file (without '/')\n". " multiple ins and one out = merge all files in one output\n". "Options:\n". " --input or -f input file - default: stdin\n". " --output or -o output dir or file - default: stdout\n". " --indent_tabs or -t indent with tabs\n". " --indent_spaces or -s indent with spaces - default\n". " --filters or -l Add filter(s)\n". " --directory_filters or -d Include dirs for filters\n". " --compress or -c Compress output\n". " --recursive or -r Search in subdir recursively\n". " --help or -? display help/usage (this message)\n\n". "Filter definition:\n". " --filters \"Filter1(setting1=value1,setting2=value2) Filter2()\"". "\n"); // php_beautifier->setBeautify(true) exit; } ?>