2017-04-05 06:31:49 +02:00
|
|
|
#!/composer-php
|
2016-06-16 11:38:12 +02:00
|
|
|
<?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$
|
|
|
|
* @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 .= <<<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);
|
|
|
|
}
|
|
|
|
?>
|
|
|
|
|