[ Index ]

PHP Cross Reference of phpBB-3.2.11-deutsch

title

Body

[close]

/vendor/symfony/console/Descriptor/ -> TextDescriptor.php (source)

   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  
  12  namespace Symfony\Component\Console\Descriptor;
  13  
  14  use Symfony\Component\Console\Application;
  15  use Symfony\Component\Console\Command\Command;
  16  use Symfony\Component\Console\Formatter\OutputFormatter;
  17  use Symfony\Component\Console\Helper\Helper;
  18  use Symfony\Component\Console\Input\InputArgument;
  19  use Symfony\Component\Console\Input\InputDefinition;
  20  use Symfony\Component\Console\Input\InputOption;
  21  
  22  /**
  23   * Text descriptor.
  24   *
  25   * @author Jean-François Simon <contact@jfsimon.fr>
  26   *
  27   * @internal
  28   */
  29  class TextDescriptor extends Descriptor
  30  {
  31      /**
  32       * {@inheritdoc}
  33       */
  34      protected function describeInputArgument(InputArgument $argument, array $options = array())
  35      {
  36          if (null !== $argument->getDefault() && (!\is_array($argument->getDefault()) || \count($argument->getDefault()))) {
  37              $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($argument->getDefault()));
  38          } else {
  39              $default = '';
  40          }
  41  
  42          $totalWidth = isset($options['total_width']) ? $options['total_width'] : Helper::strlen($argument->getName());
  43          $spacingWidth = $totalWidth - \strlen($argument->getName());
  44  
  45          $this->writeText(sprintf('  <info>%s</info>  %s%s%s',
  46              $argument->getName(),
  47              str_repeat(' ', $spacingWidth),
  48              // + 4 = 2 spaces before <info>, 2 spaces after </info>
  49              preg_replace('/\s*[\r\n]\s*/', "\n".str_repeat(' ', $totalWidth + 4), $argument->getDescription()),
  50              $default
  51          ), $options);
  52      }
  53  
  54      /**
  55       * {@inheritdoc}
  56       */
  57      protected function describeInputOption(InputOption $option, array $options = array())
  58      {
  59          if ($option->acceptValue() && null !== $option->getDefault() && (!\is_array($option->getDefault()) || \count($option->getDefault()))) {
  60              $default = sprintf('<comment> [default: %s]</comment>', $this->formatDefaultValue($option->getDefault()));
  61          } else {
  62              $default = '';
  63          }
  64  
  65          $value = '';
  66          if ($option->acceptValue()) {
  67              $value = '='.strtoupper($option->getName());
  68  
  69              if ($option->isValueOptional()) {
  70                  $value = '['.$value.']';
  71              }
  72          }
  73  
  74          $totalWidth = isset($options['total_width']) ? $options['total_width'] : $this->calculateTotalWidthForOptions(array($option));
  75          $synopsis = sprintf('%s%s',
  76              $option->getShortcut() ? sprintf('-%s, ', $option->getShortcut()) : '    ',
  77              sprintf('--%s%s', $option->getName(), $value)
  78          );
  79  
  80          $spacingWidth = $totalWidth - Helper::strlen($synopsis);
  81  
  82          $this->writeText(sprintf('  <info>%s</info>  %s%s%s%s',
  83              $synopsis,
  84              str_repeat(' ', $spacingWidth),
  85              // + 4 = 2 spaces before <info>, 2 spaces after </info>
  86              preg_replace('/\s*[\r\n]\s*/', "\n".str_repeat(' ', $totalWidth + 4), $option->getDescription()),
  87              $default,
  88              $option->isArray() ? '<comment> (multiple values allowed)</comment>' : ''
  89          ), $options);
  90      }
  91  
  92      /**
  93       * {@inheritdoc}
  94       */
  95      protected function describeInputDefinition(InputDefinition $definition, array $options = array())
  96      {
  97          $totalWidth = $this->calculateTotalWidthForOptions($definition->getOptions());
  98          foreach ($definition->getArguments() as $argument) {
  99              $totalWidth = max($totalWidth, Helper::strlen($argument->getName()));
 100          }
 101  
 102          if ($definition->getArguments()) {
 103              $this->writeText('<comment>Arguments:</comment>', $options);
 104              $this->writeText("\n");
 105              foreach ($definition->getArguments() as $argument) {
 106                  $this->describeInputArgument($argument, array_merge($options, array('total_width' => $totalWidth)));
 107                  $this->writeText("\n");
 108              }
 109          }
 110  
 111          if ($definition->getArguments() && $definition->getOptions()) {
 112              $this->writeText("\n");
 113          }
 114  
 115          if ($definition->getOptions()) {
 116              $laterOptions = array();
 117  
 118              $this->writeText('<comment>Options:</comment>', $options);
 119              foreach ($definition->getOptions() as $option) {
 120                  if (\strlen($option->getShortcut()) > 1) {
 121                      $laterOptions[] = $option;
 122                      continue;
 123                  }
 124                  $this->writeText("\n");
 125                  $this->describeInputOption($option, array_merge($options, array('total_width' => $totalWidth)));
 126              }
 127              foreach ($laterOptions as $option) {
 128                  $this->writeText("\n");
 129                  $this->describeInputOption($option, array_merge($options, array('total_width' => $totalWidth)));
 130              }
 131          }
 132      }
 133  
 134      /**
 135       * {@inheritdoc}
 136       */
 137      protected function describeCommand(Command $command, array $options = array())
 138      {
 139          $command->getSynopsis(true);
 140          $command->getSynopsis(false);
 141          $command->mergeApplicationDefinition(false);
 142  
 143          $this->writeText('<comment>Usage:</comment>', $options);
 144          foreach (array_merge(array($command->getSynopsis(true)), $command->getAliases(), $command->getUsages()) as $usage) {
 145              $this->writeText("\n");
 146              $this->writeText('  '.OutputFormatter::escape($usage), $options);
 147          }
 148          $this->writeText("\n");
 149  
 150          $definition = $command->getNativeDefinition();
 151          if ($definition->getOptions() || $definition->getArguments()) {
 152              $this->writeText("\n");
 153              $this->describeInputDefinition($definition, $options);
 154              $this->writeText("\n");
 155          }
 156  
 157          if ($help = $command->getProcessedHelp()) {
 158              $this->writeText("\n");
 159              $this->writeText('<comment>Help:</comment>', $options);
 160              $this->writeText("\n");
 161              $this->writeText('  '.str_replace("\n", "\n  ", $help), $options);
 162              $this->writeText("\n");
 163          }
 164      }
 165  
 166      /**
 167       * {@inheritdoc}
 168       */
 169      protected function describeApplication(Application $application, array $options = array())
 170      {
 171          $describedNamespace = isset($options['namespace']) ? $options['namespace'] : null;
 172          $description = new ApplicationDescription($application, $describedNamespace);
 173  
 174          if (isset($options['raw_text']) && $options['raw_text']) {
 175              $width = $this->getColumnWidth($description->getCommands());
 176  
 177              foreach ($description->getCommands() as $command) {
 178                  $this->writeText(sprintf("%-{$width}s %s", $command->getName(), $command->getDescription()), $options);
 179                  $this->writeText("\n");
 180              }
 181          } else {
 182              if ('' != $help = $application->getHelp()) {
 183                  $this->writeText("$help\n\n", $options);
 184              }
 185  
 186              $this->writeText("<comment>Usage:</comment>\n", $options);
 187              $this->writeText("  command [options] [arguments]\n\n", $options);
 188  
 189              $this->describeInputDefinition(new InputDefinition($application->getDefinition()->getOptions()), $options);
 190  
 191              $this->writeText("\n");
 192              $this->writeText("\n");
 193  
 194              $width = $this->getColumnWidth($description->getCommands());
 195  
 196              if ($describedNamespace) {
 197                  $this->writeText(sprintf('<comment>Available commands for the "%s" namespace:</comment>', $describedNamespace), $options);
 198              } else {
 199                  $this->writeText('<comment>Available commands:</comment>', $options);
 200              }
 201  
 202              // add commands by namespace
 203              foreach ($description->getNamespaces() as $namespace) {
 204                  if (!$describedNamespace && ApplicationDescription::GLOBAL_NAMESPACE !== $namespace['id']) {
 205                      $this->writeText("\n");
 206                      $this->writeText(' <comment>'.$namespace['id'].'</comment>', $options);
 207                  }
 208  
 209                  foreach ($namespace['commands'] as $name) {
 210                      $this->writeText("\n");
 211                      $spacingWidth = $width - Helper::strlen($name);
 212                      $this->writeText(sprintf('  <info>%s</info>%s%s', $name, str_repeat(' ', $spacingWidth), $description->getCommand($name)->getDescription()), $options);
 213                  }
 214              }
 215  
 216              $this->writeText("\n");
 217          }
 218      }
 219  
 220      /**
 221       * {@inheritdoc}
 222       */
 223      private function writeText($content, array $options = array())
 224      {
 225          $this->write(
 226              isset($options['raw_text']) && $options['raw_text'] ? strip_tags($content) : $content,
 227              isset($options['raw_output']) ? !$options['raw_output'] : true
 228          );
 229      }
 230  
 231      /**
 232       * Formats input option/argument default value.
 233       *
 234       * @param mixed $default
 235       *
 236       * @return string
 237       */
 238      private function formatDefaultValue($default)
 239      {
 240          if (INF === $default) {
 241              return 'INF';
 242          }
 243  
 244          if (\is_string($default)) {
 245              $default = OutputFormatter::escape($default);
 246          } elseif (\is_array($default)) {
 247              foreach ($default as $key => $value) {
 248                  if (\is_string($value)) {
 249                      $default[$key] = OutputFormatter::escape($value);
 250                  }
 251              }
 252          }
 253  
 254          if (\PHP_VERSION_ID < 50400) {
 255              return str_replace(array('\/', '\\\\'), array('/', '\\'), json_encode($default));
 256          }
 257  
 258          return str_replace('\\\\', '\\', json_encode($default, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
 259      }
 260  
 261      /**
 262       * @param Command[] $commands
 263       *
 264       * @return int
 265       */
 266      private function getColumnWidth(array $commands)
 267      {
 268          $widths = array();
 269  
 270          foreach ($commands as $command) {
 271              $widths[] = Helper::strlen($command->getName());
 272              foreach ($command->getAliases() as $alias) {
 273                  $widths[] = Helper::strlen($alias);
 274              }
 275          }
 276  
 277          return max($widths) + 2;
 278      }
 279  
 280      /**
 281       * @param InputOption[] $options
 282       *
 283       * @return int
 284       */
 285      private function calculateTotalWidthForOptions(array $options)
 286      {
 287          $totalWidth = 0;
 288          foreach ($options as $option) {
 289              // "-" + shortcut + ", --" + name
 290              $nameLength = 1 + max(\strlen($option->getShortcut()), 1) + 4 + Helper::strlen($option->getName());
 291  
 292              if ($option->acceptValue()) {
 293                  $valueLength = 1 + Helper::strlen($option->getName()); // = + value
 294                  $valueLength += $option->isValueOptional() ? 2 : 0; // [ + ]
 295  
 296                  $nameLength += $valueLength;
 297              }
 298              $totalWidth = max($totalWidth, $nameLength);
 299          }
 300  
 301          return $totalWidth;
 302      }
 303  }


Generated: Wed Nov 11 20:33:01 2020 Cross-referenced by PHPXref 0.7.1