1<?php
2
3declare(strict_types=1);
4
5/*
6 * This file is part of the league/commonmark package.
7 *
8 * (c) Colin O'Dell <colinodell@gmail.com>
9 *
10 * For the full copyright and license information, please view the LICENSE
11 * file that was distributed with this source code.
12 */
13
14namespace League\CommonMark\Extension\TableOfContents;
15
16use League\CommonMark\Node\Node;
17use League\CommonMark\Renderer\ChildNodeRendererInterface;
18use League\CommonMark\Renderer\NodeRendererInterface;
19use League\CommonMark\Xml\XmlNodeRendererInterface;
20
21final class TableOfContentsRenderer implements NodeRendererInterface, XmlNodeRendererInterface
22{
23    /** @var NodeRendererInterface&XmlNodeRendererInterface */
24    private $innerRenderer;
25
26    /**
27     * @psalm-param NodeRendererInterface&XmlNodeRendererInterface $innerRenderer
28     *
29     * @phpstan-param NodeRendererInterface&XmlNodeRendererInterface $innerRenderer
30     */
31    public function __construct(NodeRendererInterface $innerRenderer)
32    {
33        $this->innerRenderer = $innerRenderer;
34    }
35
36    /**
37     * {@inheritDoc}
38     */
39    public function render(Node $node, ChildNodeRendererInterface $childRenderer)
40    {
41        return $this->innerRenderer->render($node, $childRenderer);
42    }
43
44    public function getXmlTagName(Node $node): string
45    {
46        return 'table_of_contents';
47    }
48
49    /**
50     * @return array<string, scalar>
51     */
52    public function getXmlAttributes(Node $node): array
53    {
54        return $this->innerRenderer->getXmlAttributes($node);
55    }
56}
57