98 if (isset($this->arguments[$argument->
getName()])) {
99 throw new \LogicException(sprintf(
'An argument with name "%s" already exist.', $argument->
getName()));
102 if ($this->hasAnArrayArgument) {
103 throw new \LogicException(
'Cannot add an argument after an array argument.');
106 if ($argument->
isRequired() && $this->hasOptional) {
107 throw new \LogicException(
'Cannot add a required argument after an optional one.');
111 $this->hasAnArrayArgument =
true;
117 $this->hasOptional =
true;
120 $this->arguments[$argument->
getName()] = $argument;
349 $shortcut = $option->getShortcut() ? sprintf(
'-%s|', $option->getShortcut()) :
'';
350 $elements[] = sprintf(
'['.($option->isValueRequired() ?
'%s--%s="..."' : ($option->isValueOptional() ?
'%s--%s[="..."]' :
'%s--%s')).
']', $shortcut, $option->getName());
354 $elements[] = sprintf($argument->isRequired() ?
'%s' :
'[%s]', $argument->getName().($argument->isArray() ?
'1' :
''));
356 if ($argument->isArray()) {
357 $elements[] = sprintf(
'... [%sN]', $argument->getName());
361 return implode(
' ', $elements);
374 $max = strlen($option->getName()) + 2 > $max ? strlen($option->getName()) + 2 : $max;
377 $max = strlen($argument->getName()) > $max ? strlen($argument->getName()) : $max;
384 $text[] =
'<comment>Arguments:</comment>';
386 if (
null !== $argument->getDefault() && (!is_array($argument->getDefault()) || count($argument->getDefault()))) {
387 $default = sprintf(
'<comment> (default: %s)</comment>', is_array($argument->getDefault()) ? str_replace(
"\n",
'', var_export($argument->getDefault(),
true)): $argument->getDefault());
392 $text[] = sprintf(
" <info>%-${max}s</info> %s%s", $argument->getName(), $argument->getDescription(), $default);
399 $text[] =
'<comment>Options:</comment>';
402 if ($option->acceptValue() &&
null !== $option->getDefault() && (!is_array($option->getDefault()) || count($option->getDefault()))) {
403 $default = sprintf(
'<comment> (default: %s)</comment>', is_array($option->getDefault()) ? str_replace(
"\n",
'', print_r($option->getDefault(),
true)): $option->getDefault());
408 $multiple = $option->isArray() ?
'<comment> (multiple values allowed)</comment>' :
'';
409 $text[] = sprintf(
' %-'.$max.
's %s%s%s%s',
'<info>--'.$option->getName().
'</info>', $option->getShortcut() ? sprintf(
'(-%s) ', $option->getShortcut()) :
'', $option->getDescription(), $default, $multiple);
415 return implode(
"\n", $text);
425 public function asXml($asDom =
false)
427 $dom = new \DOMDocument(
'1.0',
'UTF-8');
428 $dom->formatOutput =
true;
429 $dom->appendChild($definitionXML = $dom->createElement(
'definition'));
431 $definitionXML->appendChild($argumentsXML = $dom->createElement(
'arguments'));
433 $argumentsXML->appendChild($argumentXML = $dom->createElement(
'argument'));
434 $argumentXML->setAttribute(
'name', $argument->getName());
435 $argumentXML->setAttribute(
'is_required', $argument->isRequired() ? 1 : 0);
436 $argumentXML->setAttribute(
'is_array', $argument->isArray() ? 1 : 0);
437 $argumentXML->appendChild($descriptionXML = $dom->createElement(
'description'));
438 $descriptionXML->appendChild($dom->createTextNode($argument->getDescription()));
440 $argumentXML->appendChild($defaultsXML = $dom->createElement(
'defaults'));
441 $defaults = is_array($argument->getDefault()) ? $argument->getDefault() : ($argument->getDefault() ? array($argument->getDefault()) : array());
442 foreach ($defaults as $default) {
443 $defaultsXML->appendChild($defaultXML = $dom->createElement(
'default'));
444 $defaultXML->appendChild($dom->createTextNode($default));
448 $definitionXML->appendChild($optionsXML = $dom->createElement(
'options'));
450 $optionsXML->appendChild($optionXML = $dom->createElement(
'option'));
451 $optionXML->setAttribute(
'name',
'--'.$option->getName());
452 $optionXML->setAttribute(
'shortcut', $option->getShortcut() ?
'-'.$option->getShortcut() :
'');
453 $optionXML->setAttribute(
'accept_value', $option->acceptValue() ? 1 : 0);
454 $optionXML->setAttribute(
'is_value_required', $option->isValueRequired() ? 1 : 0);
455 $optionXML->setAttribute(
'is_multiple', $option->isArray() ? 1 : 0);
456 $optionXML->appendChild($descriptionXML = $dom->createElement(
'description'));
457 $descriptionXML->appendChild($dom->createTextNode($option->getDescription()));
459 if ($option->acceptValue()) {
460 $optionXML->appendChild($defaultsXML = $dom->createElement(
'defaults'));
461 $defaults = is_array($option->getDefault()) ? $option->getDefault() : ($option->getDefault() ? array($option->getDefault()) : array());
462 foreach ($defaults as $default) {
463 $defaultsXML->appendChild($defaultXML = $dom->createElement(
'default'));
464 $defaultXML->appendChild($dom->createTextNode($default));
469 return $asDom ? $dom : $dom->saveXml();