Skip to content

Commit 77054c9

Browse files
authored
Merge pull request #513 from phpDocumentor/bugfix-replace
[BUGFIX] Fix the DefaultNodeRenderer for array values
2 parents 797abc2 + 29cabf9 commit 77054c9

File tree

6 files changed

+27
-6
lines changed

6 files changed

+27
-6
lines changed

packages/guides/resources/config/guides.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,8 @@
153153
->set(MenuEntryRenderer::class)
154154
->tag('phpdoc.guides.noderenderer.html')
155155

156+
->set(DefaultNodeRenderer::class)
157+
156158
->set(InMemoryNodeRendererFactory::class)
157159
->args([
158160
'$nodeRenderers' => tagged_iterator('phpdoc.guides.noderenderer.html'),
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
{{ renderNode(node.child) }}
1+
{% apply spaceless %}{{ renderNode(node.child) }}
2+
{% endapply %}

packages/guides/src/NodeRenderers/DefaultNodeRenderer.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,21 @@
1515

1616
use phpDocumentor\Guides\Nodes\Node;
1717
use phpDocumentor\Guides\RenderContext;
18+
use Psr\Log\LoggerInterface;
1819

1920
use function assert;
21+
use function is_array;
2022
use function is_string;
2123

2224
/** @implements NodeRenderer<Node> */
2325
class DefaultNodeRenderer implements NodeRenderer, NodeRendererFactoryAware
2426
{
2527
private NodeRendererFactory|null $nodeRendererFactory = null;
2628

29+
public function __construct(private readonly LoggerInterface $logger)
30+
{
31+
}
32+
2733
public function setNodeRendererFactory(NodeRendererFactory $nodeRendererFactory): void
2834
{
2935
$this->nodeRendererFactory = $nodeRendererFactory;
@@ -39,10 +45,25 @@ public function render(Node $node, RenderContext $renderContext): string
3945
return $this->nodeRendererFactory->get($value)->render($value, $renderContext);
4046
}
4147

48+
if (is_array($value)) {
49+
$returnValue = '';
50+
foreach ($value as $child) {
51+
if ($child instanceof Node) {
52+
$returnValue .= $this->render($child, $renderContext);
53+
} else {
54+
$this->logger->error('The default renderer cannot be applied to node ' . $node::class);
55+
}
56+
}
57+
58+
return $returnValue;
59+
}
60+
4261
if (is_string($value)) {
4362
return $value;
4463
}
4564

65+
$this->logger->error('The default renderer cannot be applied to node ' . $node::class);
66+
4667
return '';
4768
}
4869

tests/Integration/tests/variables-from-project/expected/index.html

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,7 @@
88
<div class="section" id="some-document">
99
<h1>Some Document</h1>
1010

11-
<p>Project My Project
12-
in version 3.14
13-
</p>
11+
<p>Project My Project in version 3.14</p>
1412
</div>
1513

1614
</body>

tests/Integration/tests/variables-replace/expected/index.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
<div class="section" id="document-title">
99
<h1>Document Title</h1>
1010

11-
<p>We are using ReStructuredText
12-
here.</p>
11+
<p>We are using ReStructuredText here.</p>
1312
</div>
1413

1514
</body>

tests/Integration/tests/variables-replace/input/skip

Whitespace-only changes.

0 commit comments

Comments
 (0)