188 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Batchfile
		
	
	
	
	
	
			
		
		
	
	
			188 lines
		
	
	
	
		
			4.5 KiB
		
	
	
	
		
			Batchfile
		
	
	
	
	
	
@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
 |