Another Page
+ +Lorem Ipsum Dolor.
+diff --git a/packages/guides-restructured-text/resources/config/guides-restructured-text.php b/packages/guides-restructured-text/resources/config/guides-restructured-text.php index a88b41d97..d744f29dc 100644 --- a/packages/guides-restructured-text/resources/config/guides-restructured-text.php +++ b/packages/guides-restructured-text/resources/config/guides-restructured-text.php @@ -81,6 +81,7 @@ use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\DateFieldListItemRule; use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\DedicationFieldListItemRule; use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\FieldListItemRule; +use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\NavigationTitleFieldListItemRule; use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\NocommentsFieldListItemRule; use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\NosearchFieldListItemRule; use phpDocumentor\Guides\RestructuredText\Parser\Productions\FieldList\OrganizationFieldListItemRule; @@ -320,6 +321,9 @@ ->set(DedicationFieldListItemRule::class) ->tag('phpdoc.guides.parser.rst.fieldlist') + ->set(NavigationTitleFieldListItemRule::class) + ->tag('phpdoc.guides.parser.rst.fieldlist') + ->set(NocommentsFieldListItemRule::class) ->tag('phpdoc.guides.parser.rst.fieldlist') diff --git a/packages/guides-restructured-text/src/RestructuredText/Parser/Productions/FieldList/NavigationTitleFieldListItemRule.php b/packages/guides-restructured-text/src/RestructuredText/Parser/Productions/FieldList/NavigationTitleFieldListItemRule.php new file mode 100644 index 000000000..76070ec1e --- /dev/null +++ b/packages/guides-restructured-text/src/RestructuredText/Parser/Productions/FieldList/NavigationTitleFieldListItemRule.php @@ -0,0 +1,34 @@ +getTerm()) === 'navigation-title'; + } + + public function apply(FieldListItemNode $fieldListItemNode, BlockContext $blockContext): MetadataNode + { + return new NavigationTitleNode($fieldListItemNode->getPlaintextContent()); + } +} diff --git a/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php b/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php index 1a01611ec..1095565cc 100644 --- a/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php +++ b/packages/guides/src/Compiler/NodeTransformers/DocumentEntryRegistrationTransformer.php @@ -44,7 +44,7 @@ public function leaveNode(Node $node, CompilerContext $compilerContext): Node|nu $this->logger->warning('Document has no title', $compilerContext->getLoggerInformation()); } - $entry = new DocumentEntryNode($node->getFilePath(), $node->getTitle() ?? TitleNode::emptyNode(), $node->isRoot()); + $entry = new DocumentEntryNode($node->getFilePath(), $node->getTitle() ?? TitleNode::emptyNode(), $node->isRoot(), $node->getNavigationTitle() ?? $node->getFilePath()); $compilerContext->getProjectNode()->addDocumentEntry($entry); return $node->setDocumentEntry($entry); diff --git a/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/InternalMenuEntryNodeTransformer.php b/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/InternalMenuEntryNodeTransformer.php index 82245cc99..8f2fa3c23 100644 --- a/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/InternalMenuEntryNodeTransformer.php +++ b/packages/guides/src/Compiler/NodeTransformers/MenuNodeTransformers/InternalMenuEntryNodeTransformer.php @@ -19,6 +19,7 @@ use phpDocumentor\Guides\Nodes\Menu\MenuNode; use phpDocumentor\Guides\Nodes\Menu\TocNode; use phpDocumentor\Guides\Nodes\Node; +use phpDocumentor\Guides\Nodes\TitleNode; use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface; use Psr\Log\LoggerInterface; @@ -66,7 +67,7 @@ protected function handleMenuEntry(MenuNode $currentMenu, MenuEntryNode $entryNo $documentEntriesInTree[] = $documentEntry; $newEntryNode = new InternalMenuEntryNode( $documentEntry->getFile(), - $entryNode->getValue() ?? $documentEntry->getTitle(), + $entryNode->getValue() ?? TitleNode::fromString($documentEntry->getNavigationTitle()), [], false, 1, diff --git a/packages/guides/src/Nodes/DocumentNode.php b/packages/guides/src/Nodes/DocumentNode.php index 1acead6b5..fd449ed9e 100644 --- a/packages/guides/src/Nodes/DocumentNode.php +++ b/packages/guides/src/Nodes/DocumentNode.php @@ -19,6 +19,7 @@ use phpDocumentor\Guides\Nodes\DocumentTree\SectionEntryNode; use phpDocumentor\Guides\Nodes\Menu\TocNode; use phpDocumentor\Guides\Nodes\Metadata\MetadataNode; +use phpDocumentor\Guides\Nodes\Metadata\NavigationTitleNode; use function array_filter; use function max; @@ -52,6 +53,8 @@ final class DocumentNode extends CompoundNode private int $maxFootnoteNumber = 0; private int $lastReturnedAnonymousFootnoteNumber = -1; + private string|null $navigationTitle = null; + /** * Variables are replacements in a document or project. * @@ -97,6 +100,19 @@ public function getNodes(string $nodeType = Node::class): array return array_filter($this->value, static fn ($node): bool => $node instanceof $nodeType); } + public function getNavigationTitle(): string|null + { + if ($this->navigationTitle !== null) { + return $this->navigationTitle; + } + + if ($this->getTitle() instanceof TitleNode) { + return $this->getTitle()->toString(); + } + + return null; + } + public function getPageTitle(): string|null { if ($this->metaTitle !== null) { @@ -132,6 +148,10 @@ public function setMetaTitle(string $metaTitle): void public function addHeaderNode(MetadataNode $node): void { + if ($node instanceof NavigationTitleNode) { + $this->navigationTitle = $node->getValue(); + } + $this->headerNodes[] = $node; } diff --git a/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php b/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php index 0bb498b9c..70e67e939 100644 --- a/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php +++ b/packages/guides/src/Nodes/DocumentTree/DocumentEntryNode.php @@ -30,7 +30,13 @@ public function __construct( private readonly string $file, private readonly TitleNode $titleNode, private readonly bool $isRoot = false, + private string $navigationTitle = '', ) { + if ($this->navigationTitle !== '') { + return; + } + + $this->navigationTitle = $titleNode->toString(); } public function getTitle(): TitleNode @@ -81,4 +87,9 @@ public function isRoot(): bool { return $this->isRoot; } + + public function getNavigationTitle(): string + { + return $this->navigationTitle; + } } diff --git a/packages/guides/src/Nodes/Metadata/NavigationTitleNode.php b/packages/guides/src/Nodes/Metadata/NavigationTitleNode.php new file mode 100644 index 000000000..95cb0b656 --- /dev/null +++ b/packages/guides/src/Nodes/Metadata/NavigationTitleNode.php @@ -0,0 +1,26 @@ + + +
+Lorem Ipsum Dolor.
+Lorem Ipsum Dolor.
+ +Lorem Ipsum Dolor.
+