From b2e477d8d4f62bd64fade1892ae8fe763b9e4e62 Mon Sep 17 00:00:00 2001 From: "lina.wolf" Date: Sat, 25 Nov 2023 09:51:18 +0100 Subject: [PATCH] [TASK] Split Anchor link resolvers depends on #717 --- packages/guides/resources/config/guides.php | 3 ++ .../AnchorHyperlinkResolver.php | 52 +++++++++++++++++++ .../AnchorReferenceResolver.php | 16 +++--- 3 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 packages/guides/src/ReferenceResolvers/AnchorHyperlinkResolver.php diff --git a/packages/guides/resources/config/guides.php b/packages/guides/resources/config/guides.php index 4815e5c7b..f290b5399 100644 --- a/packages/guides/resources/config/guides.php +++ b/packages/guides/resources/config/guides.php @@ -19,6 +19,7 @@ use phpDocumentor\Guides\NodeRenderers\Html\TableNodeRenderer; use phpDocumentor\Guides\NodeRenderers\OutputAwareDelegatingNodeRenderer; use phpDocumentor\Guides\Parser; +use phpDocumentor\Guides\ReferenceResolvers\AnchorHyperlinkResolver; use phpDocumentor\Guides\ReferenceResolvers\AnchorReducer; use phpDocumentor\Guides\ReferenceResolvers\AnchorReferenceResolver; use phpDocumentor\Guides\ReferenceResolvers\DelegatingReferenceResolver; @@ -121,6 +122,8 @@ ->set(EmailReferenceResolver::class) + ->set(AnchorHyperlinkResolver::class) + ->set(AnchorReferenceResolver::class) ->set(InternalReferenceResolver::class) diff --git a/packages/guides/src/ReferenceResolvers/AnchorHyperlinkResolver.php b/packages/guides/src/ReferenceResolvers/AnchorHyperlinkResolver.php new file mode 100644 index 000000000..261c8f627 --- /dev/null +++ b/packages/guides/src/ReferenceResolvers/AnchorHyperlinkResolver.php @@ -0,0 +1,52 @@ +anchorReducer->reduceAnchor($node->getTargetReference()); + $target = $renderContext->getProjectNode()->getInternalTarget($reducedAnchor); + + if ($target === null) { + return false; + } + + $node->setUrl($this->urlGenerator->generateCanonicalOutputUrl($renderContext, $target->getDocumentPath(), $target->getAnchor())); + if ($node->getValue() === '') { + $node->setValue($target->getTitle() ?? ''); + } + + return true; + } + + public static function getPriority(): int + { + return self::PRIORITY; + } +} diff --git a/packages/guides/src/ReferenceResolvers/AnchorReferenceResolver.php b/packages/guides/src/ReferenceResolvers/AnchorReferenceResolver.php index fff18506a..0fbbb3da0 100644 --- a/packages/guides/src/ReferenceResolvers/AnchorReferenceResolver.php +++ b/packages/guides/src/ReferenceResolvers/AnchorReferenceResolver.php @@ -26,18 +26,14 @@ public function __construct( public function resolve(LinkInlineNode $node, RenderContext $renderContext): bool { - $reducedAnchor = $this->anchorReducer->reduceAnchor($node->getTargetReference()); - if ($node instanceof ReferenceNode) { - if ($node->getInterlinkDomain() !== '') { - return false; - } - - $target = $renderContext->getProjectNode()->getInternalTarget($reducedAnchor, $node->getLinkType()); - } else { - // Todo: move this to a separate resolver? - $target = $renderContext->getProjectNode()->getInternalTarget($reducedAnchor); + if (!$node instanceof ReferenceNode) { + return false; } + $reducedAnchor = $this->anchorReducer->reduceAnchor($node->getTargetReference()); + + $target = $renderContext->getProjectNode()->getInternalTarget($reducedAnchor, $node->getLinkType()); + if ($target === null) { return false; }