[ Index ]

PHP Cross Reference of Joomla 4.2.2 documentation

title

Body

[close]

/libraries/vendor/symfony/yaml/ -> Dumper.php (source)

   1  <?php
   2  
   3  /*
   4   * This file is part of the Symfony package.
   5   *
   6   * (c) Fabien Potencier <[email protected]>
   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\Yaml;
  13  
  14  use Symfony\Component\Yaml\Tag\TaggedValue;
  15  
  16  /**
  17   * Dumper dumps PHP variables to YAML strings.
  18   *
  19   * @author Fabien Potencier <[email protected]>
  20   *
  21   * @final
  22   */
  23  class Dumper
  24  {
  25      /**
  26       * The amount of spaces to use for indentation of nested nodes.
  27       *
  28       * @var int
  29       */
  30      protected $indentation;
  31  
  32      public function __construct(int $indentation = 4)
  33      {
  34          if ($indentation < 1) {
  35              throw new \InvalidArgumentException('The indentation must be greater than zero.');
  36          }
  37  
  38          $this->indentation = $indentation;
  39      }
  40  
  41      /**
  42       * Dumps a PHP value to YAML.
  43       *
  44       * @param mixed $input  The PHP value
  45       * @param int   $inline The level where you switch to inline YAML
  46       * @param int   $indent The level of indentation (used internally)
  47       * @param int   $flags  A bit field of Yaml::DUMP_* constants to customize the dumped YAML string
  48       */
  49      public function dump($input, int $inline = 0, int $indent = 0, int $flags = 0): string
  50      {
  51          $output = '';
  52          $prefix = $indent ? str_repeat(' ', $indent) : '';
  53          $dumpObjectAsInlineMap = true;
  54  
  55          if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($input instanceof \ArrayObject || $input instanceof \stdClass)) {
  56              $dumpObjectAsInlineMap = empty((array) $input);
  57          }
  58  
  59          if ($inline <= 0 || (!\is_array($input) && !$input instanceof TaggedValue && $dumpObjectAsInlineMap) || empty($input)) {
  60              $output .= $prefix.Inline::dump($input, $flags);
  61          } else {
  62              $dumpAsMap = Inline::isHash($input);
  63  
  64              foreach ($input as $key => $value) {
  65                  if ('' !== $output && "\n" !== $output[-1]) {
  66                      $output .= "\n";
  67                  }
  68  
  69                  if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value) && false !== strpos($value, "\n") && false === strpos($value, "\r")) {
  70                      // If the first line starts with a space character, the spec requires a blockIndicationIndicator
  71                      // http://www.yaml.org/spec/1.2/spec.html#id2793979
  72                      $blockIndentationIndicator = (' ' === substr($value, 0, 1)) ? (string) $this->indentation : '';
  73  
  74                      if (isset($value[-2]) && "\n" === $value[-2] && "\n" === $value[-1]) {
  75                          $blockChompingIndicator = '+';
  76                      } elseif ("\n" === $value[-1]) {
  77                          $blockChompingIndicator = '';
  78                      } else {
  79                          $blockChompingIndicator = '-';
  80                      }
  81  
  82                      $output .= sprintf('%s%s%s |%s%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', '', $blockIndentationIndicator, $blockChompingIndicator);
  83  
  84                      foreach (explode("\n", $value) as $row) {
  85                          if ('' === $row) {
  86                              $output .= "\n";
  87                          } else {
  88                              $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
  89                          }
  90                      }
  91  
  92                      continue;
  93                  }
  94  
  95                  if ($value instanceof TaggedValue) {
  96                      $output .= sprintf('%s%s !%s', $prefix, $dumpAsMap ? Inline::dump($key, $flags).':' : '-', $value->getTag());
  97  
  98                      if (Yaml::DUMP_MULTI_LINE_LITERAL_BLOCK & $flags && \is_string($value->getValue()) && false !== strpos($value->getValue(), "\n") && false === strpos($value->getValue(), "\r\n")) {
  99                          // If the first line starts with a space character, the spec requires a blockIndicationIndicator
 100                          // http://www.yaml.org/spec/1.2/spec.html#id2793979
 101                          $blockIndentationIndicator = (' ' === substr($value->getValue(), 0, 1)) ? (string) $this->indentation : '';
 102                          $output .= sprintf(' |%s', $blockIndentationIndicator);
 103  
 104                          foreach (explode("\n", $value->getValue()) as $row) {
 105                              $output .= sprintf("\n%s%s%s", $prefix, str_repeat(' ', $this->indentation), $row);
 106                          }
 107  
 108                          continue;
 109                      }
 110  
 111                      if ($inline - 1 <= 0 || null === $value->getValue() || is_scalar($value->getValue())) {
 112                          $output .= ' '.$this->dump($value->getValue(), $inline - 1, 0, $flags)."\n";
 113                      } else {
 114                          $output .= "\n";
 115                          $output .= $this->dump($value->getValue(), $inline - 1, $dumpAsMap ? $indent + $this->indentation : $indent + 2, $flags);
 116                      }
 117  
 118                      continue;
 119                  }
 120  
 121                  $dumpObjectAsInlineMap = true;
 122  
 123                  if (Yaml::DUMP_OBJECT_AS_MAP & $flags && ($value instanceof \ArrayObject || $value instanceof \stdClass)) {
 124                      $dumpObjectAsInlineMap = empty((array) $value);
 125                  }
 126  
 127                  $willBeInlined = $inline - 1 <= 0 || !\is_array($value) && $dumpObjectAsInlineMap || empty($value);
 128  
 129                  $output .= sprintf('%s%s%s%s',
 130                      $prefix,
 131                      $dumpAsMap ? Inline::dump($key, $flags).':' : '-',
 132                      $willBeInlined ? ' ' : "\n",
 133                      $this->dump($value, $inline - 1, $willBeInlined ? 0 : $indent + $this->indentation, $flags)
 134                  ).($willBeInlined ? "\n" : '');
 135              }
 136          }
 137  
 138          return $output;
 139      }
 140  }


Generated: Wed Sep 7 05:41:13 2022 Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer