mirror of
https://github.com/atlanticbiomedical/portal-legacy.git
synced 2025-07-02 01:47:28 -04:00
initial commit
This commit is contained in:
274
lib/symfony/vendor/pake/pakeGetopt.class.php
vendored
Executable file
274
lib/symfony/vendor/pake/pakeGetopt.class.php
vendored
Executable file
@ -0,0 +1,274 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @package pake
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @copyright 2004-2005 Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @license see the LICENSE file included in the distribution
|
||||
* @version SVN: $Id: pakeGetopt.class.php 1791 2006-08-23 21:17:06Z fabien $
|
||||
*/
|
||||
|
||||
if (class_exists('pakeGetopt'))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* Console options parsing class.
|
||||
*
|
||||
* @package pake
|
||||
* @author Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @copyright 2004-2005 Fabien Potencier <fabien.potencier@symfony-project.com>
|
||||
* @license see the LICENSE file included in the distribution
|
||||
* @version SVN: $Id: pakeGetopt.class.php 1791 2006-08-23 21:17:06Z fabien $
|
||||
*/
|
||||
class pakeGetopt
|
||||
{
|
||||
const NO_ARGUMENT = 0;
|
||||
const REQUIRED_ARGUMENT = 1;
|
||||
const OPTIONAL_ARGUMENT = 2;
|
||||
private $short_options = array();
|
||||
private $long_options = array();
|
||||
private $args = '';
|
||||
private $options = array();
|
||||
private $arguments = array();
|
||||
|
||||
public function __construct($options)
|
||||
{
|
||||
$this->args = '';
|
||||
foreach ($options as $option)
|
||||
{
|
||||
if (!$option[0])
|
||||
{
|
||||
throw new pakeException(sprintf("pakeGetopt: You must define a long option name! for option %s (%s).", $option[1], $option[3]));
|
||||
}
|
||||
|
||||
$this->add_option($option[0], $option[1], $option[2], $option[3]);
|
||||
}
|
||||
}
|
||||
|
||||
public function add_option($long_opt, $short_opt, $mode = self::NO_ARGUMENT, $comment = '')
|
||||
{
|
||||
if ($long_opt{0} == '-' && $long_opt{1} == '-')
|
||||
{
|
||||
$long_opt = substr($long_opt, 2);
|
||||
}
|
||||
|
||||
if ($short_opt)
|
||||
{
|
||||
if ($short_opt{0} == '-')
|
||||
{
|
||||
$short_opt = substr($short_opt, 1);
|
||||
}
|
||||
$this->short_options[$short_opt] = array('mode' => $mode, 'comment' => $comment, 'name' => $long_opt);
|
||||
}
|
||||
|
||||
$this->long_options[$long_opt] = array('mode' => $mode, 'comment' => $comment, 'name' => $long_opt);
|
||||
}
|
||||
|
||||
public function parse($args = null)
|
||||
{
|
||||
if (is_string($args))
|
||||
{
|
||||
// hack to split arguments with spaces : --test="with some spaces"
|
||||
$args = preg_replace('/(\'|")(.+?)\\1/e', "str_replace(' ', '=PLACEHOLDER=', '\\2')", $args);
|
||||
$args = preg_split('/\s+/', $args);
|
||||
$args = str_replace('=PLACEHOLDER=', ' ', $args);
|
||||
}
|
||||
else if (!$args)
|
||||
{
|
||||
$args = $this->read_php_argv();
|
||||
|
||||
// we strip command line program
|
||||
if (isset($args[0]) && $args[0]{0} != '-')
|
||||
{
|
||||
array_shift($args);
|
||||
}
|
||||
}
|
||||
|
||||
$this->args = $args;
|
||||
|
||||
$this->options = array();
|
||||
$this->arguments = array();
|
||||
|
||||
while ($arg = array_shift($this->args))
|
||||
{
|
||||
/* '--' stop options parsing. */
|
||||
if ($arg == '--')
|
||||
{
|
||||
$this->arguments = array_merge($this->arguments, $this->args);
|
||||
break;
|
||||
}
|
||||
|
||||
if ($arg{0} != '-' || (strlen($arg) > 1 && $arg{1} == '-' && !$this->long_options))
|
||||
{
|
||||
$this->arguments = array_merge($this->arguments, array($arg), $this->args);
|
||||
break;
|
||||
}
|
||||
elseif (strlen($arg) > 1 && $arg{1} == '-')
|
||||
{
|
||||
$this->parse_long_option(substr($arg, 2));
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->parse_short_option(substr($arg, 1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public function has_option($option)
|
||||
{
|
||||
return (array_key_exists($option, $this->options) ? true : false);
|
||||
}
|
||||
|
||||
public function get_option($option)
|
||||
{
|
||||
// is it a long option?
|
||||
if (array_key_exists($option, $this->long_options) && $this->long_options[$option]['mode'] != self::NO_ARGUMENT)
|
||||
{
|
||||
return (array_key_exists($option, $this->options) ? $this->options[$option] : '');
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new pakeException('pakeGetopt: You cannot get a value for a NO_ARGUMENT option.');
|
||||
}
|
||||
}
|
||||
|
||||
public function get_options()
|
||||
{
|
||||
return $this->options;
|
||||
}
|
||||
|
||||
public function get_arguments()
|
||||
{
|
||||
return $this->arguments;
|
||||
}
|
||||
|
||||
private function parse_short_option($arg)
|
||||
{
|
||||
for ($i = 0; $i < strlen($arg); $i++)
|
||||
{
|
||||
$opt = $arg{$i};
|
||||
$opt_arg = true;
|
||||
|
||||
/* option exists? */
|
||||
if (!array_key_exists($opt, $this->short_options))
|
||||
{
|
||||
throw new pakeException(sprintf("pakeGetopt: unrecognized option -%s.", $opt));
|
||||
}
|
||||
|
||||
/* required or optional argument? */
|
||||
if ($this->short_options[$opt]['mode'] == self::REQUIRED_ARGUMENT)
|
||||
{
|
||||
if ($i + 1 < strlen($arg))
|
||||
{
|
||||
$this->options[$this->short_options[$opt]['name']] = substr($arg, $i + 1);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
// take next element as argument (if it doesn't start with a -)
|
||||
if (count($this->args) && $this->args[0]{0} != '-')
|
||||
{
|
||||
$this->options[$this->short_options[$opt]['name']] = array_shift($this->args);
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new pakeException(sprintf("pakeGetopt: option -%s requires an argument", $opt));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ($this->short_options[$opt]['mode'] == self::OPTIONAL_ARGUMENT)
|
||||
{
|
||||
if (substr($arg, $i + 1) != '')
|
||||
{
|
||||
$this->options[$this->short_options[$opt]['name']] = substr($arg, $i + 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
// take next element as argument (if it doesn't start with a -)
|
||||
if (count($this->args) && $this->args[0]{0} != '-')
|
||||
{
|
||||
$this->options[$this->short_options[$opt]['name']] = array_shift($this->args);
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->options[$this->short_options[$opt]['name']] = true;
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
$this->options[$this->short_options[$opt]['name']] = $opt_arg;
|
||||
}
|
||||
}
|
||||
|
||||
private function parse_long_option($arg)
|
||||
{
|
||||
@list($opt, $opt_arg) = explode('=', $arg);
|
||||
|
||||
if (!$opt_arg)
|
||||
{
|
||||
$opt_arg = true;
|
||||
}
|
||||
|
||||
/* option exists? */
|
||||
if (!array_key_exists($opt, $this->long_options))
|
||||
{
|
||||
throw new pakeException(sprintf("pakeGetopt: unrecognized option --%s.", $opt));
|
||||
}
|
||||
|
||||
/* required or optional argument? */
|
||||
if ($this->long_options[$opt]['mode'] == self::REQUIRED_ARGUMENT)
|
||||
{
|
||||
if ($opt_arg)
|
||||
{
|
||||
$this->options[$this->long_options[$opt]['name']] = $opt_arg;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new pakeException(sprintf("pakeGetopt: option --%s requires an argument.", $opt));
|
||||
}
|
||||
}
|
||||
else if ($this->long_options[$opt]['mode'] == self::OPTIONAL_ARGUMENT)
|
||||
{
|
||||
$this->options[$this->long_options[$opt]['name']] = $opt_arg;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->options[$this->long_options[$opt]['name']] = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Function from PEAR::Console_Getopt.
|
||||
* Safely read the $argv PHP array across different PHP configurations.
|
||||
* Will take care on register_globals and register_argc_argv ini directives
|
||||
*
|
||||
* @access public
|
||||
* @return mixed the $argv PHP array
|
||||
*/
|
||||
private function read_php_argv()
|
||||
{
|
||||
global $argv;
|
||||
if (!is_array($argv))
|
||||
{
|
||||
if (!@is_array($_SERVER['argv']))
|
||||
{
|
||||
if (!@is_array($GLOBALS['HTTP_SERVER_VARS']['argv']))
|
||||
{
|
||||
throw new pakeException("pakeGetopt: Could not read cmd args (register_argc_argv=Off?).");
|
||||
}
|
||||
|
||||
return $GLOBALS['HTTP_SERVER_VARS']['argv'];
|
||||
}
|
||||
return $_SERVER['argv'];
|
||||
}
|
||||
return $argv;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user