2015-08-17 17:00:26 -07:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Console\Descriptor ;
use Symfony\Component\Console\Application ;
use Symfony\Component\Console\Command\Command ;
2017-02-02 16:28:38 -08:00
use Symfony\Component\Console\Helper\Helper ;
2015-08-17 17:00:26 -07:00
use Symfony\Component\Console\Input\InputArgument ;
use Symfony\Component\Console\Input\InputDefinition ;
use Symfony\Component\Console\Input\InputOption ;
/**
* Markdown descriptor .
*
* @ author Jean - François Simon < contact @ jfsimon . fr >
*
* @ internal
*/
class MarkdownDescriptor extends Descriptor
{
/**
* { @ inheritdoc }
*/
protected function describeInputArgument ( InputArgument $argument , array $options = array ())
{
$this -> write (
'**' . $argument -> getName () . ':**' . " \n \n "
. '* Name: ' . ( $argument -> getName () ? : '<none>' ) . " \n "
. '* Is required: ' . ( $argument -> isRequired () ? 'yes' : 'no' ) . " \n "
. '* Is array: ' . ( $argument -> isArray () ? 'yes' : 'no' ) . " \n "
2015-10-08 11:40:12 -07:00
. '* Description: ' . preg_replace ( '/\s*[\r\n]\s*/' , " \n " , $argument -> getDescription () ? : '<none>' ) . " \n "
2015-08-17 17:00:26 -07:00
. '* Default: `' . str_replace ( " \n " , '' , var_export ( $argument -> getDefault (), true )) . '`'
);
}
/**
* { @ inheritdoc }
*/
protected function describeInputOption ( InputOption $option , array $options = array ())
{
$this -> write (
'**' . $option -> getName () . ':**' . " \n \n "
. '* Name: `--' . $option -> getName () . '`' . " \n "
. '* Shortcut: ' . ( $option -> getShortcut () ? '`-' . implode ( '|-' , explode ( '|' , $option -> getShortcut ())) . '`' : '<none>' ) . " \n "
. '* Accept value: ' . ( $option -> acceptValue () ? 'yes' : 'no' ) . " \n "
. '* Is value required: ' . ( $option -> isValueRequired () ? 'yes' : 'no' ) . " \n "
. '* Is multiple: ' . ( $option -> isArray () ? 'yes' : 'no' ) . " \n "
2015-10-08 11:40:12 -07:00
. '* Description: ' . preg_replace ( '/\s*[\r\n]\s*/' , " \n " , $option -> getDescription () ? : '<none>' ) . " \n "
2015-08-17 17:00:26 -07:00
. '* Default: `' . str_replace ( " \n " , '' , var_export ( $option -> getDefault (), true )) . '`'
);
}
/**
* { @ inheritdoc }
*/
protected function describeInputDefinition ( InputDefinition $definition , array $options = array ())
{
if ( $showArguments = count ( $definition -> getArguments ()) > 0 ) {
$this -> write ( '### Arguments:' );
foreach ( $definition -> getArguments () as $argument ) {
$this -> write ( " \n \n " );
$this -> write ( $this -> describeInputArgument ( $argument ));
}
}
if ( count ( $definition -> getOptions ()) > 0 ) {
if ( $showArguments ) {
$this -> write ( " \n \n " );
}
$this -> write ( '### Options:' );
foreach ( $definition -> getOptions () as $option ) {
$this -> write ( " \n \n " );
$this -> write ( $this -> describeInputOption ( $option ));
}
}
}
/**
* { @ inheritdoc }
*/
protected function describeCommand ( Command $command , array $options = array ())
{
$command -> getSynopsis ();
$command -> mergeApplicationDefinition ( false );
$this -> write (
$command -> getName () . " \n "
2017-02-02 16:28:38 -08:00
. str_repeat ( '-' , Helper :: strlen ( $command -> getName ())) . " \n \n "
2015-08-17 17:00:26 -07:00
. '* Description: ' . ( $command -> getDescription () ? : '<none>' ) . " \n "
. '* Usage:' . " \n \n "
. array_reduce ( array_merge ( array ( $command -> getSynopsis ()), $command -> getAliases (), $command -> getUsages ()), function ( $carry , $usage ) {
2017-02-02 16:28:38 -08:00
return $carry . ' * `' . $usage . '`' . " \n " ;
2015-08-17 17:00:26 -07:00
})
);
if ( $help = $command -> getProcessedHelp ()) {
$this -> write ( " \n " );
$this -> write ( $help );
}
if ( $command -> getNativeDefinition ()) {
$this -> write ( " \n \n " );
$this -> describeInputDefinition ( $command -> getNativeDefinition ());
}
}
/**
* { @ inheritdoc }
*/
protected function describeApplication ( Application $application , array $options = array ())
{
$describedNamespace = isset ( $options [ 'namespace' ]) ? $options [ 'namespace' ] : null ;
$description = new ApplicationDescription ( $application , $describedNamespace );
2017-02-02 16:28:38 -08:00
$this -> write ( $application -> getName () . " \n " . str_repeat ( '=' , Helper :: strlen ( $application -> getName ())));
2015-08-17 17:00:26 -07:00
foreach ( $description -> getNamespaces () as $namespace ) {
if ( ApplicationDescription :: GLOBAL_NAMESPACE !== $namespace [ 'id' ]) {
$this -> write ( " \n \n " );
$this -> write ( '**' . $namespace [ 'id' ] . ':**' );
}
$this -> write ( " \n \n " );
$this -> write ( implode ( " \n " , array_map ( function ( $commandName ) {
return '* ' . $commandName ;
}, $namespace [ 'commands' ])));
}
foreach ( $description -> getCommands () as $command ) {
$this -> write ( " \n \n " );
$this -> write ( $this -> describeCommand ( $command ));
}
}
}