| 
<?php
 /*
 * This file is part of the Symfony package.
 *
 * (c) Fabien Potencier <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace Symfony\Component\Console\Helper;
 
 use Symfony\Component\Console\Descriptor\DescriptorInterface;
 use Symfony\Component\Console\Descriptor\JsonDescriptor;
 use Symfony\Component\Console\Descriptor\MarkdownDescriptor;
 use Symfony\Component\Console\Descriptor\TextDescriptor;
 use Symfony\Component\Console\Descriptor\XmlDescriptor;
 use Symfony\Component\Console\Output\OutputInterface;
 use Symfony\Component\Console\Exception\InvalidArgumentException;
 
 /**
 * This class adds helper method to describe objects in various formats.
 *
 * @author Jean-François Simon <[email protected]>
 */
 class DescriptorHelper extends Helper
 {
 /**
 * @var DescriptorInterface[]
 */
 private $descriptors = array();
 
 /**
 * Constructor.
 */
 public function __construct()
 {
 $this
 ->register('txt', new TextDescriptor())
 ->register('xml', new XmlDescriptor())
 ->register('json', new JsonDescriptor())
 ->register('md', new MarkdownDescriptor())
 ;
 }
 
 /**
 * Describes an object if supported.
 *
 * Available options are:
 * * format: string, the output format name
 * * raw_text: boolean, sets output type as raw
 *
 * @param OutputInterface $output
 * @param object          $object
 * @param array           $options
 *
 * @throws InvalidArgumentException when the given format is not supported
 */
 public function describe(OutputInterface $output, $object, array $options = array())
 {
 $options = array_merge(array(
 'raw_text' => false,
 'format' => 'txt',
 ), $options);
 
 if (!isset($this->descriptors[$options['format']])) {
 throw new InvalidArgumentException(sprintf('Unsupported format "%s".', $options['format']));
 }
 
 $descriptor = $this->descriptors[$options['format']];
 $descriptor->describe($output, $object, $options);
 }
 
 /**
 * Registers a descriptor.
 *
 * @param string              $format
 * @param DescriptorInterface $descriptor
 *
 * @return $this
 */
 public function register($format, DescriptorInterface $descriptor)
 {
 $this->descriptors[$format] = $descriptor;
 
 return $this;
 }
 
 /**
 * {@inheritdoc}
 */
 public function getName()
 {
 return 'descriptor';
 }
 }
 
 |