public function parse(ContextInterface $context, Cursor $cursor)
{
$container = $context->getContainer();
if (!$container instanceof Paragraph) {
return false;
}
$lines = $container->getStrings();
if (count($lines) < 1) {
return false;
}
$match = RegexHelper::matchAll(self::REGEXP_DEFINITION, $cursor->getLine(), $cursor->getFirstNonSpacePosition());
if (null === $match) {
return false;
}
$columns = $this->parseColumns($match);
$head = $this->parseRow(trim(array_pop($lines)), $columns, TableCell::TYPE_HEAD);
if (null === $head) {
return false;
}
$table = new Table(function (Cursor $cursor) use(&$table, $columns) {
$row = $this->parseRow($cursor->getLine(), $columns);
if (null === $row) {
if (null !== $table->getCaption()) {
return false;
}
if (null !== ($caption = $this->parseCaption($cursor->getLine()))) {
$table->setCaption($caption);
return true;
}
return false;
}
$table->getBody()->appendChild($row);
return true;
});
$table->getHead()->appendChild($head);
if (count($lines) >= 1) {
$paragraph = new Paragraph();
foreach ($lines as $line) {
$paragraph->addLine($line);
}
$context->replaceContainerBlock($paragraph);
$context->addBlock($table);
} else {
$context->replaceContainerBlock($table);
}
return true;
}