54 lines
1.1 KiB
PHP
54 lines
1.1 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Doctrine\RST\HTML\Directives;
|
|
|
|
use Doctrine\RST\Directives\SubDirective;
|
|
use Doctrine\RST\Nodes\Node;
|
|
use Doctrine\RST\Parser;
|
|
use Exception;
|
|
|
|
use function sprintf;
|
|
|
|
/**
|
|
* Renders an image, example :
|
|
*
|
|
* .. figure:: image.jpg
|
|
* :width: 100
|
|
* :title: An image
|
|
*
|
|
* Here is an awesome caption
|
|
*/
|
|
final class Figure extends SubDirective
|
|
{
|
|
public function getName(): string
|
|
{
|
|
return 'figure';
|
|
}
|
|
|
|
/** @param string[] $options */
|
|
public function processSub(
|
|
Parser $parser,
|
|
?Node $document,
|
|
string $variable,
|
|
string $data,
|
|
array $options
|
|
): ?Node {
|
|
$environment = $parser->getEnvironment();
|
|
|
|
$url = $environment->relativeUrl($data);
|
|
|
|
if ($url === null) {
|
|
throw new Exception(sprintf('Could not get relative url for %s', $data));
|
|
}
|
|
|
|
$nodeFactory = $parser->getNodeFactory();
|
|
|
|
return $parser->getNodeFactory()->createFigureNode(
|
|
$nodeFactory->createImageNode($url, $options),
|
|
$document
|
|
);
|
|
}
|
|
}
|