166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?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\OutputFormatterInterface;
 | |
| use Symfony\Component\Console\Formatter\OutputFormatter;
 | |
| 
 | |
| /**
 | |
|  * 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;
 | |
| 
 | |
|     /**
 | |
|      * Constructor.
 | |
|      *
 | |
|      * @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;
 | |
|     }
 | |
| 
 | |
|     public function isQuiet()
 | |
|     {
 | |
|         return self::VERBOSITY_QUIET === $this->verbosity;
 | |
|     }
 | |
| 
 | |
|     public function isVerbose()
 | |
|     {
 | |
|         return self::VERBOSITY_VERBOSE <= $this->verbosity;
 | |
|     }
 | |
| 
 | |
|     public function isVeryVerbose()
 | |
|     {
 | |
|         return self::VERBOSITY_VERY_VERBOSE <= $this->verbosity;
 | |
|     }
 | |
| 
 | |
|     public function isDebug()
 | |
|     {
 | |
|         return self::VERBOSITY_DEBUG <= $this->verbosity;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * {@inheritdoc}
 | |
|      */
 | |
|     public function writeln($messages, $options = self::OUTPUT_NORMAL)
 | |
|     {
 | |
|         $this->write($messages, true, $options);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * {@inheritdoc}
 | |
|      */
 | |
|     public function write($messages, $newline = false, $options = self::OUTPUT_NORMAL)
 | |
|     {
 | |
|         $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()) {
 | |
|             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);
 | |
| }
 | 
