private function Parser::getNextEmbedBlock in Lockr 7.3
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::doParse in vendor/
symfony/ yaml/ Parser.php
File
- vendor/
symfony/ yaml/ Parser.php, line 559
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 = null;
$movements = 0;
do {
$EOF = false;
// empty and comment-like lines do not influence the indentation depth
if ($this
->isCurrentLineEmpty() || $this
->isCurrentLineComment()) {
$EOF = !$this
->moveToNextLine();
if (!$EOF) {
++$movements;
}
}
else {
$newIndent = $this
->getCurrentLineIndentation();
}
} while (!$EOF && null === $newIndent);
for ($i = 0; $i < $movements; ++$i) {
$this
->moveToPreviousLine();
}
$unindentedEmbedBlock = $this
->isStringUnIndentedCollectionItem();
if (!$this
->isCurrentLineEmpty() && 0 === $newIndent && !$unindentedEmbedBlock) {
throw new ParseException('Indentation problem.', $this
->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
}
}
else {
$newIndent = $indentation;
}
$data = [];
if ($this
->getCurrentLineIndentation() >= $newIndent) {
$data[] = substr($this->currentLine, $newIndent);
}
elseif ($this
->isCurrentLineEmpty() || $this
->isCurrentLineComment()) {
$data[] = $this->currentLine;
}
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();
while ($this
->moveToNextLine()) {
$indent = $this
->getCurrentLineIndentation();
if ($isItUnindentedCollection && !$this
->isCurrentLineEmpty() && !$this
->isStringUnIndentedCollectionItem() && $newIndent === $indent) {
$this
->moveToPreviousLine();
break;
}
if ($this
->isCurrentLineBlank()) {
$data[] = substr($this->currentLine, $newIndent);
continue;
}
if ($indent >= $newIndent) {
$data[] = substr($this->currentLine, $newIndent);
}
elseif ($this
->isCurrentLineComment()) {
$data[] = $this->currentLine;
}
elseif (0 == $indent) {
$this
->moveToPreviousLine();
break;
}
else {
throw new ParseException('Indentation problem.', $this
->getRealCurrentLineNb() + 1, $this->currentLine, $this->filename);
}
}
return implode("\n", $data);
}