|
|
@ -1051,8 +1051,16 @@ class CommandLine {
|
|
|
|
public function parseExplicit (array $argv): stdClass {
|
|
|
|
public function parseExplicit (array $argv): stdClass {
|
|
|
|
$stop = false;
|
|
|
|
$stop = false;
|
|
|
|
$nb_args = count($argv);
|
|
|
|
$nb_args = count($argv);
|
|
|
|
|
|
|
|
$out = new stdClass();
|
|
|
|
|
|
|
|
|
|
|
|
$out = $this->_parseOptions($argv, $this->getOptions(), $stop);
|
|
|
|
// Valeurs par défaut
|
|
|
|
|
|
|
|
foreach ($this->getOptions() as $option) {
|
|
|
|
|
|
|
|
if (!isset($out->{$option->getVarName()})) {
|
|
|
|
|
|
|
|
$out->{$option->getVarName()} = $option->getDefault();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
$this->_parseOptions($argv, $out, $this->getOptions(), $stop);
|
|
|
|
if ($stop) {
|
|
|
|
if ($stop) {
|
|
|
|
return $out;
|
|
|
|
return $out;
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1062,6 +1070,14 @@ class CommandLine {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
$values = array_values($this->getValues());
|
|
|
|
$values = array_values($this->getValues());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Valeurs par défaut
|
|
|
|
|
|
|
|
foreach ($values as $value) {
|
|
|
|
|
|
|
|
if (!isset($out->{$value->getVarName()})) {
|
|
|
|
|
|
|
|
$out->{$value->getVarName()} = $value->getDefault();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* @var int $ordre
|
|
|
|
* @var int $ordre
|
|
|
|
* @var IArgumentValue $value
|
|
|
|
* @var IArgumentValue $value
|
|
|
@ -1088,18 +1104,6 @@ class CommandLine {
|
|
|
|
throw new TooMuchValues('Trop de paramètres : ' . count($argv) . ' / ' . $nb_args);
|
|
|
|
throw new TooMuchValues('Trop de paramètres : ' . count($argv) . ' / ' . $nb_args);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// Valeurs par défaut
|
|
|
|
|
|
|
|
foreach ($this->getOptions() as $option) {
|
|
|
|
|
|
|
|
if (!isset($out->{$option->getVarName()})) {
|
|
|
|
|
|
|
|
$out->{$option->getVarName()} = $option->getDefault();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
foreach ($values as $value) {
|
|
|
|
|
|
|
|
if (!isset($out->{$value->getVarName()})) {
|
|
|
|
|
|
|
|
$out->{$value->getVarName()} = $value->getDefault();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return $out;
|
|
|
|
return $out;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
/**
|
|
|
@ -1164,16 +1168,14 @@ class CommandLine {
|
|
|
|
* Parse des arguments "option"
|
|
|
|
* Parse des arguments "option"
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @param string[] $argv La liste des arguments du script
|
|
|
|
* @param string[] $argv La liste des arguments du script
|
|
|
|
|
|
|
|
* @param stdClass $out Les valeurs de sortie
|
|
|
|
* @param IArgumentOption[] $options La liste des options
|
|
|
|
* @param IArgumentOption[] $options La liste des options
|
|
|
|
* @param boolean $stop Arrêt du parsage ?
|
|
|
|
* @param boolean $stop Arrêt du parsage ?
|
|
|
|
*
|
|
|
|
*
|
|
|
|
* @return stdClass Les options extraites
|
|
|
|
|
|
|
|
* @throws IncorrectParse Si le parsage d'une des options échoue
|
|
|
|
* @throws IncorrectParse Si le parsage d'une des options échoue
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
protected static function _parseOptions (array &$argv, array $options, bool &$stop): stdClass {
|
|
|
|
protected static function _parseOptions (array &$argv, stdClass &$out, array $options, bool &$stop): void {
|
|
|
|
$values = new stdClass();
|
|
|
|
|
|
|
|
$stop = false;
|
|
|
|
$stop = false;
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($options as $option) {
|
|
|
|
foreach ($options as $option) {
|
|
|
|
do {
|
|
|
|
do {
|
|
|
|
$argv_option = $argv;
|
|
|
|
$argv_option = $argv;
|
|
|
@ -1184,14 +1186,13 @@ class CommandLine {
|
|
|
|
|
|
|
|
|
|
|
|
if (!is_null($result)) {
|
|
|
|
if (!is_null($result)) {
|
|
|
|
if ($option->isStoppingParse()) {
|
|
|
|
if ($option->isStoppingParse()) {
|
|
|
|
$values = new stdClass();
|
|
|
|
$out = new stdClass();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
self::_setValue($values, $option, $result, $option->allowMultiple() ? 2 : 1);
|
|
|
|
self::_setValue($out, $option, $result, $option->allowMultiple() ? 2 : 1);
|
|
|
|
|
|
|
|
|
|
|
|
if ($option->isStoppingParse()) {
|
|
|
|
if ($option->isStoppingParse()) {
|
|
|
|
$stop = true;
|
|
|
|
$stop = true;
|
|
|
|
return $values;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
array_splice($argv, count($argv) - count($argv_option), $result->getConsume());
|
|
|
|
array_splice($argv, count($argv) - count($argv_option), $result->getConsume());
|
|
|
@ -1203,8 +1204,6 @@ class CommandLine {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} while (count($argv_option) > 1 && (!$find || $option->allowMultiple()));
|
|
|
|
} while (count($argv_option) > 1 && (!$find || $option->allowMultiple()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return $values;
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Parse un argument "value" X fois
|
|
|
|
* Parse un argument "value" X fois
|
|
|
@ -1218,7 +1217,7 @@ class CommandLine {
|
|
|
|
* @throws MissingArgument Si l'argument n'est pas en quantité suffisante
|
|
|
|
* @throws MissingArgument Si l'argument n'est pas en quantité suffisante
|
|
|
|
* @throws IncorrectParse Si l'argument échoue à se parser
|
|
|
|
* @throws IncorrectParse Si l'argument échoue à se parser
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
protected static function _parseXTimes (array &$argv, stdClass $out, IArgumentValue $value, int $xTimes, int $offset = 0) {
|
|
|
|
protected static function _parseXTimes (array &$argv, stdClass &$out, IArgumentValue $value, int $xTimes, int $offset = 0) {
|
|
|
|
if ($xTimes > count($argv)) {
|
|
|
|
if ($xTimes > count($argv)) {
|
|
|
|
throw new MissingArgument('L\'argument ' . $value->getName() . ' est en quantité insuffisante (' . count($argv) . ' / ' . $xTimes . ')');
|
|
|
|
throw new MissingArgument('L\'argument ' . $value->getName() . ' est en quantité insuffisante (' . count($argv) . ' / ' . $xTimes . ')');
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -1241,7 +1240,7 @@ class CommandLine {
|
|
|
|
* @param ParseResult $result Le résultat du parsage de l'argument
|
|
|
|
* @param ParseResult $result Le résultat du parsage de l'argument
|
|
|
|
* @param int|null $max Le nombre maximum de valeur autorisé
|
|
|
|
* @param int|null $max Le nombre maximum de valeur autorisé
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
protected static function _setValue (stdClass $out, IArgument $argument, ParseResult $result, ?int $max) {
|
|
|
|
protected static function _setValue (stdClass &$out, IArgument $argument, ParseResult $result, ?int $max) {
|
|
|
|
if (is_null($max) || $max > 1) {
|
|
|
|
if (is_null($max) || $max > 1) {
|
|
|
|
if (!isset($out->{$argument->getVarName()})) {
|
|
|
|
if (!isset($out->{$argument->getVarName()})) {
|
|
|
|
$out->{$argument->getVarName()} = array();
|
|
|
|
$out->{$argument->getVarName()} = array();
|
|
|
|