123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- @echo off
- rem vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
- rem Console highlighter class generator
- rem PHP versions 4 and 5
- rem LICENSE: This source file is subject to version 3.0 of the PHP license
- rem that is available through the world-wide-web at the following URI:
- rem http://www.php.net/license/3_0.txt. If you did not receive a copy of
- rem the PHP License and are unable to obtain it through the web, please
- rem send a note to license@php.net so we can mail you a copy immediately.
- rem @category Text
- rem @package Text_Highlighter
- rem @author Andrey Demenev <demenev@gmail.com>
- rem @copyright 2004 Andrey Demenev
- rem @license http://www.php.net/license/3_0.txt PHP License
- rem @version CVS: $Id: generate.bat,v 1.1 2007/06/03 02:35:28 ssttoo Exp $
- rem @link http://pear.php.net/package/Text_Highlighter
- set "MHL_PARAMS="
- :doshift
- set "MHL_PARAMS=%MHL_PARAMS% %1"
- shift
- if -%1- == -- GOTO noshift
- GOTO doshift
- :noshift
- @php_bin@ -q -d output_buffering=1 -d include_path="@php_dir@" @bin_dir@/Text/Highlighter/generate.bat %MHL_PARAMS%
- GOTO finish
- <?php
- ob_end_clean();
- if (!defined('STDOUT')) {
- define('STDOUT', fopen('php://stdout', 'wb'));
- define('STDERR', fopen('php://stderr', 'wb'));
- }
- 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);
- }
- exit(0);
- function usage($message='', $file=STDOUT)
- {
- $code = 0;
- if ($message) {
- $message .= "\n\n";
- $code = 1;
- }
- $message .= <<<MSG
- Generates a highlighter class from XML source
- Usage:
- generate options
- Options:
- -x filename, --xml=filename
- source XML file. Multiple input files can be specified, in which
- case each -x option must be followed by -p unless -d is specified
- Defaults to stdin
- -p filename, --php=filename
- destination PHP file. Defaults to stdout. If specied multiple times,
- each -p must follow -x
- -d dirname, --dir=dirname
- Default destination directory. File names will be taken from XML input
- ("lang" attribute of <highlight> tag)
- -h, --help
- This help
- MSG;
- fwrite ($file, $message);
- exit($code);
- }
- ?>
- :finish
|