1<?php 2 3/* 4 * This file is part of the Symfony package. 5 * 6 * (c) Fabien Potencier <fabien@symfony.com> 7 * 8 * For the full copyright and license information, please view the LICENSE 9 * file that was distributed with this source code. 10 */ 11 12namespace Symfony\Component\Console\Descriptor; 13 14use Symfony\Component\Console\Application; 15use Symfony\Component\Console\Command\Command; 16use Symfony\Component\Console\Exception\InvalidArgumentException; 17use Symfony\Component\Console\Input\InputArgument; 18use Symfony\Component\Console\Input\InputDefinition; 19use Symfony\Component\Console\Input\InputOption; 20use Symfony\Component\Console\Output\OutputInterface; 21 22/** 23 * @author Jean-François Simon <jeanfrancois.simon@sensiolabs.com> 24 * 25 * @internal 26 */ 27abstract class Descriptor implements DescriptorInterface 28{ 29 /** 30 * @var OutputInterface 31 */ 32 protected $output; 33 34 /** 35 * {@inheritdoc} 36 */ 37 public function describe(OutputInterface $output, $object, array $options = []) 38 { 39 $this->output = $output; 40 41 switch (true) { 42 case $object instanceof InputArgument: 43 $this->describeInputArgument($object, $options); 44 break; 45 case $object instanceof InputOption: 46 $this->describeInputOption($object, $options); 47 break; 48 case $object instanceof InputDefinition: 49 $this->describeInputDefinition($object, $options); 50 break; 51 case $object instanceof Command: 52 $this->describeCommand($object, $options); 53 break; 54 case $object instanceof Application: 55 $this->describeApplication($object, $options); 56 break; 57 default: 58 throw new InvalidArgumentException(sprintf('Object of type "%s" is not describable.', \get_class($object))); 59 } 60 } 61 62 /** 63 * Writes content to output. 64 * 65 * @param string $content 66 * @param bool $decorated 67 */ 68 protected function write($content, $decorated = false) 69 { 70 $this->output->write($content, false, $decorated ? OutputInterface::OUTPUT_NORMAL : OutputInterface::OUTPUT_RAW); 71 } 72 73 /** 74 * Describes an InputArgument instance. 75 */ 76 abstract protected function describeInputArgument(InputArgument $argument, array $options = []); 77 78 /** 79 * Describes an InputOption instance. 80 */ 81 abstract protected function describeInputOption(InputOption $option, array $options = []); 82 83 /** 84 * Describes an InputDefinition instance. 85 */ 86 abstract protected function describeInputDefinition(InputDefinition $definition, array $options = []); 87 88 /** 89 * Describes a Command instance. 90 */ 91 abstract protected function describeCommand(Command $command, array $options = []); 92 93 /** 94 * Describes an Application instance. 95 */ 96 abstract protected function describeApplication(Application $application, array $options = []); 97} 98