Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
namespace phpDocumentor\Guides\RestructuredText\Directives;

use phpDocumentor\Guides\Nodes\Menu\ContentMenuNode;
use phpDocumentor\Guides\Nodes\Menu\MenuDefinitionLineNode;
use phpDocumentor\Guides\Nodes\Menu\SectionMenuEntryNode;
use phpDocumentor\Guides\Nodes\Node;
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
Expand Down Expand Up @@ -39,7 +39,7 @@ public function process(
$blockContext->getDocumentParserContext()->getContext()->getCurrentFileName(),
);

return (new ContentMenuNode([new MenuDefinitionLineNode($absoluteUrl)]))
return (new ContentMenuNode([new SectionMenuEntryNode($absoluteUrl)]))
->withOptions($this->optionsToArray($options))
->withCaption($directive->getDataNode());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

namespace phpDocumentor\Guides\RestructuredText\Directives;

use phpDocumentor\Guides\Nodes\Menu\MenuDefinitionLineNode;
use phpDocumentor\Guides\Nodes\Menu\GlobMenuEntryNode;
use phpDocumentor\Guides\Nodes\Menu\NavMenuNode;
use phpDocumentor\Guides\Nodes\Node;
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
Expand Down Expand Up @@ -49,7 +49,7 @@ public function process(
$options,
);
if (count($toctreeFiles) === 0) {
$toctreeFiles[] = new MenuDefinitionLineNode('/*');
$toctreeFiles[] = new GlobMenuEntryNode('/*');
}

return (new NavMenuNode($toctreeFiles))->withOptions($this->optionsToArray($options));
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?php

declare(strict_types=1);

namespace phpDocumentor\Guides\RestructuredText\Parser\Reference;

final class ReferenceData
{
public function __construct(
public readonly string $reference,
public readonly string|null $text,
) {
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,21 @@

namespace phpDocumentor\Guides\RestructuredText\Toc;

use phpDocumentor\Guides\Nodes\Menu\MenuDefinitionLineNode;
use phpDocumentor\Guides\Nodes\Menu\ExternalMenuEntryNode;
use phpDocumentor\Guides\Nodes\Menu\GlobMenuEntryNode;
use phpDocumentor\Guides\Nodes\Menu\InternalMenuEntryNode;
use phpDocumentor\Guides\Nodes\Menu\MenuEntryNode;
use phpDocumentor\Guides\Nodes\TitleNode;
use phpDocumentor\Guides\ParserContext;
use phpDocumentor\Guides\RestructuredText\Parser\LinesIterator;
use phpDocumentor\Guides\RestructuredText\Parser\References\EmbeddedReferenceParser;

use function array_filter;
use function array_map;
use function filter_var;
use function str_contains;

use const FILTER_VALIDATE_URL;

class ToctreeBuilder
{
Expand All @@ -19,7 +27,7 @@ class ToctreeBuilder
/**
* @param mixed[] $options
*
* @return MenuDefinitionLineNode[]
* @return MenuEntryNode[]
*/
public function buildToctreeEntries(
ParserContext $parserContext,
Expand All @@ -35,7 +43,7 @@ public function buildToctreeEntries(
return $toctreeEntries;
}

/** @return MenuDefinitionLineNode[] */
/** @return MenuEntryNode[] */
private function parseToctreeEntryLines(LinesIterator $lines): array
{
$linesArray = array_filter(
Expand All @@ -46,7 +54,17 @@ private function parseToctreeEntryLines(LinesIterator $lines): array
$result = [];
foreach ($linesArray as $line) {
$referenceData = $this->extractEmbeddedReference($line);
$result[] = new MenuDefinitionLineNode($referenceData->reference, $referenceData->text);
if (filter_var($referenceData->reference, FILTER_VALIDATE_URL) !== false) {
$result[] = new ExternalMenuEntryNode($referenceData->reference, TitleNode::fromString($referenceData->text ?? $referenceData->reference));
continue;
}

if (str_contains($referenceData->reference, '*')) {
$result[] = new GlobMenuEntryNode($referenceData->reference);
continue;
}

$result[] = new InternalMenuEntryNode($referenceData->reference, $referenceData->text === null ? null : TitleNode::fromString($referenceData->text));
}

return $result;
Expand Down
9 changes: 9 additions & 0 deletions packages/guides/resources/config/guides.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use phpDocumentor\Guides\Compiler\DocumentNodeTraverser;
use phpDocumentor\Guides\Compiler\NodeTransformer;
use phpDocumentor\Guides\Compiler\NodeTransformers\CustomNodeTransformerFactory;
use phpDocumentor\Guides\Compiler\NodeTransformers\MenuNodeTransformers\InternalMenuEntryNodeTransformer;
use phpDocumentor\Guides\Compiler\NodeTransformers\NodeTransformerFactory;
use phpDocumentor\Guides\Interlink\DefaultInventoryLoader;
use phpDocumentor\Guides\Interlink\DefaultInventoryRepository;
Expand Down Expand Up @@ -84,12 +85,20 @@
'phpDocumentor\\Guides\\Compiler\\NodeTransformers\\',
'%vendor_dir%/phpdocumentor/guides/src/Compiler/NodeTransformers/*Transformer.php',
)
->load(
'phpDocumentor\\Guides\\Compiler\\NodeTransformers\\MenuNodeTransformers\\',
'%vendor_dir%/phpdocumentor/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/*Transformer.php',
)

->load(
'phpDocumentor\\Guides\\Compiler\\Passes\\',
'%vendor_dir%/phpdocumentor/guides/src/Compiler/Passes/*Pass.php',
)

->set(InternalMenuEntryNodeTransformer::class)
->tag('phpdoc.guides.compiler.nodeTransformers')


->set(AbsoluteUrlGenerator::class)
->set(RelativeUrlGenerator::class)
->set(UrlGeneratorInterface::class, ConfigurableUrlGenerator::class)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
{% apply spaceless %}
<div class="contents">
{% if node.caption %}
<p class="topic-title">{{ renderNode(node.caption) }}</p>
{% endif %}
{% include "body/menu/menu-level.html.twig" %}
</div>
{% endapply %}
<div class="contents">
{% if node.caption %}
<p class="topic-title">{{ renderNode(node.caption) }}</p>
{% endif %}
{% include "body/menu/menu-level.html.twig" %}
</div>
3 changes: 3 additions & 0 deletions packages/guides/src/Compiler/NodeTransformer.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,8 @@ public function leaveNode(Node $node, CompilerContext $compilerContext): Node|nu
/** @psalm-assert-if-true T $node */
public function supports(Node $node): bool;

/**
* The higher the priority the earlier the NodeTransformer is executed.
*/
public function getPriority(): int;
}

This file was deleted.

Loading