You are here

public static function Inline::parseScalar in Lockr 7.3

Parses a YAML scalar.

@internal

Parameters

string $scalar:

int $flags:

string[] $delimiters:

int &$i:

bool $evaluate:

array $references:

Return value

string

Throws

ParseException When malformed inline YAML string is parsed

7 calls to Inline::parseScalar()
Inline::evaluateBinaryScalar in vendor/symfony/yaml/Inline.php
@internal
Inline::evaluateScalar in vendor/symfony/yaml/Inline.php
Evaluates scalars and replaces magic values.
Inline::parse in vendor/symfony/yaml/Inline.php
Converts a YAML string to a PHP value.
Inline::parseMapping in vendor/symfony/yaml/Inline.php
Parses a YAML mapping.
Inline::parseSequence in vendor/symfony/yaml/Inline.php
Parses a YAML sequence.

... See full list

File

vendor/symfony/yaml/Inline.php, line 321

Class

Inline
Inline implements a YAML parser/dumper for the YAML inline syntax.

Namespace

Symfony\Component\Yaml

Code

public static function parseScalar($scalar, $flags = 0, $delimiters = null, &$i = 0, $evaluate = true, $references = [], $legacyOmittedKeySupport = false) {
  if (\in_array($scalar[$i], [
    '"',
    "'",
  ])) {

    // quoted scalar
    $output = self::parseQuotedScalar($scalar, $i);
    if (null !== $delimiters) {
      $tmp = ltrim(substr($scalar, $i), ' ');
      if ('' === $tmp) {
        throw new ParseException(sprintf('Unexpected end of line, expected one of "%s".', implode('', $delimiters)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
      }
      if (!\in_array($tmp[0], $delimiters)) {
        throw new ParseException(sprintf('Unexpected characters (%s).', substr($scalar, $i)), self::$parsedLineNumber + 1, $scalar, self::$parsedFilename);
      }
    }
  }
  else {

    // "normal" string
    if (!$delimiters) {
      $output = substr($scalar, $i);
      $i += \strlen($output);

      // remove comments
      if (Parser::preg_match('/[ \\t]+#/', $output, $match, PREG_OFFSET_CAPTURE)) {
        $output = substr($output, 0, $match[0][1]);
      }
    }
    elseif (Parser::preg_match('/^(.' . ($legacyOmittedKeySupport ? '+' : '*') . '?)(' . implode('|', $delimiters) . ')/', substr($scalar, $i), $match)) {
      $output = $match[1];
      $i += \strlen($output);
    }
    else {
      throw new ParseException(sprintf('Malformed inline YAML string: %s.', $scalar), self::$parsedLineNumber + 1, null, self::$parsedFilename);
    }

    // a non-quoted string cannot start with @ or ` (reserved) nor with a scalar indicator (| or >)
    if ($output && ('@' === $output[0] || '`' === $output[0] || '|' === $output[0] || '>' === $output[0])) {
      throw new ParseException(sprintf('The reserved indicator "%s" cannot start a plain scalar; you need to quote the scalar.', $output[0]), self::$parsedLineNumber + 1, $output, self::$parsedFilename);
    }
    if ($output && '%' === $output[0]) {
      @trigger_error(self::getDeprecationMessage(sprintf('Not quoting the scalar "%s" starting with the "%%" indicator character is deprecated since Symfony 3.1 and will throw a ParseException in 4.0.', $output)), E_USER_DEPRECATED);
    }
    if ($evaluate) {
      $output = self::evaluateScalar($output, $flags, $references);
    }
  }
  return $output;
}