You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
phpcommandline/Argument/Option/Value.class.php

84 lines
2.5 KiB
PHP

<?php
/**
* Déclaration de la classe CommandLine\Argument\Option\Value
*/
namespace CommandLine\Argument\Option;
use Fidit\v3\Exception\InvalidArgument;
use CommandLine\Exception\IncorrectParse;
use CommandLine\Argument\IArgumentValueDescription;
use CommandLine\Argument\Parser\IValueParser;
use CommandLine\Argument\ParseResult;
/**
* Option contenant une valeur.
*
* @property IValueParser $valueParser Le parseur de valeur.
*
* @package CommandLine\Argument\Option
*/
class Value extends OptionAbstract implements IArgumentValueDescription {
/**
* @var IValueParser Parseur pour la valeur
*/
protected $_valueParser;
/**
* Crée un nouvel argument de type option.
*
* @param string $name Le nom.
* @param string|null $description La description.
* @param IValueParser $valueParser Le parseur de valeur.
* @param string|null $tagLong Le tag long.
* @param string|null $tagShort Le tag court.
*
* @throws \Fidit\v3\Exception\InvalidArgument Si l'un des paramètres n'est pas correct
*/
public function __construct ($name, $description, IValueParser $valueParser, $tagLong = null, $tagShort = null) {
parent::__construct($name, $description, $tagLong, $tagShort);
$this->setValueParser($valueParser);
}
public function parse ($args) {
try {
if(!$this->_parseTag($args[0]))
return null;
if(count($args) < 2 || is_null($args[1]))
throw new IncorrectParse($this,null, 'Seconde valeur de l\'argument manquante');
return new ParseResult($this->_valueParser->parseValue($args[1]), 2);
}
catch (InvalidArgument $e) {
throw IncorrectParse::createFromInvalidArgument($this, $e);
}
}
public function getValueDescription () {
return $this->_valueParser->getValueDescription();
}
/**
* Le parseur de valeur.
*
* @return IValueParser Le parseur.
*
* @see $_valueParser
*/
public function getValueParser() {
return $this->_valueParser;
}
/**
* Définit le parseur de valeur
*
* @param IValueParser $valueParser Le parseur
*
* @return $this
*
* @see $_valueParser
*/
public function setValueParser(IValueParser $valueParser) {
$this->_valueParser = $valueParser;
return $this;
}
}