Blame | Letzte Änderung | Log anzeigen | RSS feed
#!@php_bin@<?php/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: *//*** Console highlighter class generator** PHP versions 4 and 5** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @category Text* @package Text_Highlighter* @author Andrey Demenev <demenev@gmail.com>* @copyright 2004 Andrey Demenev* @license http://www.php.net/license/3_0.txt PHP License* @version CVS: $Id: generate,v 1.1 2007/06/03 02:35:28 ssttoo Exp $* @link http://pear.php.net/package/Text_Highlighter*/require_once 'Text/Highlighter/Generator.php';require_once 'Console/Getopt.php';$options = Console_Getopt::getopt($argv, 'x:p:d:h', array('xml=', 'php=','dir=', 'help'));if (PEAR::isError($options)) {$message = str_replace('Console_Getopt: ','',$options->message);usage($message);}$source = array();$dest = array();$dir = '';$expectp = false;$expectx = false;$unexpectedx = false;$unexpectedp = false;$si = $di = 0;foreach ($options[0] as $option) {switch ($option[0]) {case 'x':case '--xml':$source[$si] = $option[1];if ($si) {$di++;}$si++;if ($expectp) {$unexpectedx = true;}$expectp = true;$expectx = false;break;case 'p':case '--php':if ($expectx) {$unexpectedp = true;}$dest[$di] = $option[1];$expectp = false;$expectx = true;break;case 'd':case '--dir':$dir = $option[1];break;case 'h':case '--help':usage();break;}}if ($unexpectedx && !$dir) {usage('Unexpected -x or --xml', STDERR);}if ($unexpectedp) {usage('Unexpected -p or --php', STDERR);}$nsource = count($source);$ndest = count($dest);if (!$nsource && !$ndest) {$source[]='php://stdin';if (!$dir) {$dest[]='php://stdout';} else {$dest[] = null;}} elseif ($expectp && !$dir && $nsource > 1) {usage('-x or --xml without following -p or --php', STDERR);} elseif ($nsource == 1 && !$ndest && !$dir) {$dest[]='php://stdout';}if ($dir && substr($dir,-1)!='/' && substr($dir,-1)!=='\\' ) {$dir .= DIRECTORY_SEPARATOR;}foreach ($source as $i => $xmlfile){$gen =& new Text_Highlighter_Generator;$gen->setInputFile($xmlfile);if ($gen->hasErrors()) {break;}$gen->generate();if ($gen->hasErrors()) {break;}if (isset($dest[$i])) {$phpfile = $dest[$i];} else {$phpfile = $dir . $gen->language . '.php';}$gen->saveCode($phpfile);if ($gen->hasErrors()) {break;}}if ($gen->hasErrors()) {$errors = $gen->getErrors();foreach ($errors as $error) {fwrite (STDERR, $error . "\n");}exit(1);}function usage($message='', $file=STDOUT){$code = 0;if ($message) {$message .= "\n\n";$code = 1;}$message .= <<<MSGGenerates a highlighter class from XML sourceUsage:generate optionsOptions:-x filename, --xml=filenamesource XML file. Multiple input files can be specified, in whichcase each -x option must be followed by -p unless -d is specifiedDefaults to stdin-p filename, --php=filenamedestination PHP file. Defaults to stdout. If specied multiple times,each -p must follow -x-d dirname, --dir=dirnameDefault destination directory. File names will be taken from XML input("lang" attribute of <highlight> tag)-h, --helpThis helpMSG;fwrite ($file, $message);exit($code);}?>