private function Parser::getNextEmbedBlock in Zircon Profile 8
Same name and namespace in other branches
- 8.0 vendor/symfony/yaml/Parser.php \Symfony\Component\Yaml\Parser::getNextEmbedBlock()
Returns the next embed block of YAML.
Parameters
int $indentation The indent level at which the block is to be read, or null for default:
bool $inSequence True if the enclosing data structure is a sequence:
Return value
string A YAML string
Throws
ParseException When indentation problem are detected
1 call to Parser::getNextEmbedBlock()
- Parser::parse in vendor/
symfony/ yaml/ Parser.php - Parses a YAML string to a PHP value.
File
- vendor/
symfony/ yaml/ Parser.php, line 339
Class
- Parser
- Parser parses YAML strings to convert them to PHP arrays.
Namespace
Symfony\Component\YamlCode
private function getNextEmbedBlock($indentation = null, $inSequence = false) {
$oldLineIndentation = $this
->getCurrentLineIndentation();
if (!$this
->moveToNextLine()) {
return;
}
if (null === $indentation) {
$newIndent = $this
->getCurrentLineIndentation();
$unindentedEmbedBlock = $this
->isStringUnIndentedCollectionItem($this->currentLine);
if (!$this
->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) {
throw new ParseException('Indentation problem.', $this
->getRealCurrentLineNb() + 1, $this->currentLine);
}
}
else {
$newIndent = $indentation;
}
$data = array();
if ($this
->getCurrentLineIndentation() >= $newIndent) {
$data[] = substr($this->currentLine, $newIndent);
}
else {
$this
->moveToPreviousLine();
return;
}
if ($inSequence && $oldLineIndentation === $newIndent && isset($data[0][0]) && '-' === $data[0][0]) {
// the previous line contained a dash but no item content, this line is a sequence item with the same indentation
// and therefore no nested list or mapping
$this
->moveToPreviousLine();
return;
}
$isItUnindentedCollection = $this
->isStringUnIndentedCollectionItem($this->currentLine);
// Comments must not be removed inside a block scalar
$removeCommentsPattern = '~' . self::BLOCK_SCALAR_HEADER_PATTERN . '$~';
$removeComments = !preg_match($removeCommentsPattern, $this->currentLine);
while ($this
->moveToNextLine()) {
$indent = $this
->getCurrentLineIndentation();
if ($indent === $newIndent) {
$removeComments = !preg_match($removeCommentsPattern, $this->currentLine);
}
if ($isItUnindentedCollection && !$this
->isStringUnIndentedCollectionItem($this->currentLine) && $newIndent === $indent) {
$this
->moveToPreviousLine();
break;
}
if ($this
->isCurrentLineBlank()) {
$data[] = substr($this->currentLine, $newIndent);
continue;
}
if ($removeComments && $this
->isCurrentLineComment()) {
continue;
}
if ($indent >= $newIndent) {
$data[] = substr($this->currentLine, $newIndent);
}
elseif (0 == $indent) {
$this
->moveToPreviousLine();
break;
}
else {
throw new ParseException('Indentation problem.', $this
->getRealCurrentLineNb() + 1, $this->currentLine);
}
}
return implode("\n", $data);
}