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\Output ;
use Symfony\Component\Console\Formatter\OutputFormatter ;
2018-11-23 12:29:20 +00:00
use Symfony\Component\Console\Formatter\OutputFormatterInterface ;
2015-08-17 17:00:26 -07:00
/**
* Base class for output classes .
*
* There are five levels of verbosity :
*
* * normal : no option passed ( normal output )
* * verbose : - v ( more output )
* * very verbose : - vv ( highly extended output )
* * debug : - vvv ( all debug output )
* * quiet : - q ( no output )
*
* @ author Fabien Potencier < fabien @ symfony . com >
*/
abstract class Output implements OutputInterface
{
private $verbosity ;
private $formatter ;
/**
* @ param int $verbosity The verbosity level ( one of the VERBOSITY constants in OutputInterface )
* @ param bool $decorated Whether to decorate messages
* @ param OutputFormatterInterface | null $formatter Output formatter instance ( null to use default OutputFormatter )
*/
public function __construct ( $verbosity = self :: VERBOSITY_NORMAL , $decorated = false , OutputFormatterInterface $formatter = null )
{
$this -> verbosity = null === $verbosity ? self :: VERBOSITY_NORMAL : $verbosity ;
$this -> formatter = $formatter ? : new OutputFormatter ();
$this -> formatter -> setDecorated ( $decorated );
}
/**
* { @ inheritdoc }
*/
public function setFormatter ( OutputFormatterInterface $formatter )
{
$this -> formatter = $formatter ;
}
/**
* { @ inheritdoc }
*/
public function getFormatter ()
{
return $this -> formatter ;
}
/**
* { @ inheritdoc }
*/
public function setDecorated ( $decorated )
{
$this -> formatter -> setDecorated ( $decorated );
}
/**
* { @ inheritdoc }
*/
public function isDecorated ()
{
return $this -> formatter -> isDecorated ();
}
/**
* { @ inheritdoc }
*/
public function setVerbosity ( $level )
{
$this -> verbosity = ( int ) $level ;
}
/**
* { @ inheritdoc }
*/
public function getVerbosity ()
{
return $this -> verbosity ;
}
2017-02-02 16:28:38 -08:00
/**
* { @ inheritdoc }
*/
2015-08-17 17:00:26 -07:00
public function isQuiet ()
{
return self :: VERBOSITY_QUIET === $this -> verbosity ;
}
2017-02-02 16:28:38 -08:00
/**
* { @ inheritdoc }
*/
2015-08-17 17:00:26 -07:00
public function isVerbose ()
{
return self :: VERBOSITY_VERBOSE <= $this -> verbosity ;
}
2017-02-02 16:28:38 -08:00
/**
* { @ inheritdoc }
*/
2015-08-17 17:00:26 -07:00
public function isVeryVerbose ()
{
return self :: VERBOSITY_VERY_VERBOSE <= $this -> verbosity ;
}
2017-02-02 16:28:38 -08:00
/**
* { @ inheritdoc }
*/
2015-08-17 17:00:26 -07:00
public function isDebug ()
{
return self :: VERBOSITY_DEBUG <= $this -> verbosity ;
}
/**
* { @ inheritdoc }
*/
2016-04-20 09:56:34 -07:00
public function writeln ( $messages , $options = self :: OUTPUT_NORMAL )
2015-08-17 17:00:26 -07:00
{
2016-04-20 09:56:34 -07:00
$this -> write ( $messages , true , $options );
2015-08-17 17:00:26 -07:00
}
/**
* { @ inheritdoc }
*/
2016-04-20 09:56:34 -07:00
public function write ( $messages , $newline = false , $options = self :: OUTPUT_NORMAL )
2015-08-17 17:00:26 -07:00
{
2016-04-20 09:56:34 -07:00
$messages = ( array ) $messages ;
$types = self :: OUTPUT_NORMAL | self :: OUTPUT_RAW | self :: OUTPUT_PLAIN ;
$type = $types & $options ? : self :: OUTPUT_NORMAL ;
$verbosities = self :: VERBOSITY_QUIET | self :: VERBOSITY_NORMAL | self :: VERBOSITY_VERBOSE | self :: VERBOSITY_VERY_VERBOSE | self :: VERBOSITY_DEBUG ;
$verbosity = $verbosities & $options ? : self :: VERBOSITY_NORMAL ;
if ( $verbosity > $this -> getVerbosity ()) {
2015-08-17 17:00:26 -07:00
return ;
}
foreach ( $messages as $message ) {
switch ( $type ) {
case OutputInterface :: OUTPUT_NORMAL :
$message = $this -> formatter -> format ( $message );
break ;
case OutputInterface :: OUTPUT_RAW :
break ;
case OutputInterface :: OUTPUT_PLAIN :
$message = strip_tags ( $this -> formatter -> format ( $message ));
break ;
}
$this -> doWrite ( $message , $newline );
}
}
/**
* Writes a message to the output .
*
* @ param string $message A message to write to the output
* @ param bool $newline Whether to add a newline or not
*/
abstract protected function doWrite ( $message , $newline );
}