Skip to content

Commit e39a1d5

Browse files
committed
[FEATURE] Delegate URL Handling to UrlGenerators
1 parent d8f003f commit e39a1d5

File tree

77 files changed

+1269
-577
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+1269
-577
lines changed

packages/guides-restructured-text/resources/config/guides-restructured-text.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
use phpDocumentor\Guides\Graphs\Directives\UmlDirective;
66
use phpDocumentor\Guides\NodeRenderers\NodeRenderer;
7+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
78
use phpDocumentor\Guides\RestructuredText\Directives\AdmonitionDirective;
89
use phpDocumentor\Guides\RestructuredText\Directives\AttentionDirective;
910
use phpDocumentor\Guides\RestructuredText\Directives\BaseDirective;
@@ -106,7 +107,6 @@
106107
use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
107108
use phpDocumentor\Guides\RestructuredText\Toc\GlobSearcher;
108109
use phpDocumentor\Guides\RestructuredText\Toc\ToctreeBuilder;
109-
use phpDocumentor\Guides\UrlGeneratorInterface;
110110
use Psr\Log\LoggerInterface;
111111
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
112112

@@ -166,7 +166,7 @@
166166
])
167167
->set(ContainerDirective::class)
168168
->set(ContentsDirective::class)
169-
->arg('$urlGenerator', service(UrlGeneratorInterface::class))
169+
->arg('$documentNameResolver', service(DocumentNameResolverInterface::class))
170170
->set(CsvTableDirective::class)
171171
->arg('$productions', service('phpdoc.guides.parser.rst.body_elements'))
172172
->set(DangerDirective::class)

packages/guides-restructured-text/src/RestructuredText/Directives/ContentsDirective.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
use phpDocumentor\Guides\Nodes\Menu\ContentMenuNode;
88
use phpDocumentor\Guides\Nodes\Node;
9+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
910
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1011
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
11-
use phpDocumentor\Guides\UrlGeneratorInterface;
1212

1313
/**
1414
* Standarad rst `contents` directive
@@ -17,8 +17,9 @@
1717
*/
1818
class ContentsDirective extends BaseDirective
1919
{
20-
public function __construct(private readonly UrlGeneratorInterface $urlGenerator)
21-
{
20+
public function __construct(
21+
private readonly DocumentNameResolverInterface $documentNameResolver,
22+
) {
2223
}
2324

2425
public function getName(): string
@@ -32,7 +33,7 @@ public function process(
3233
Directive $directive,
3334
): Node|null {
3435
$options = $directive->getOptions();
35-
$absoluteUrl = $this->urlGenerator->absoluteUrl(
36+
$absoluteUrl = $this->documentNameResolver->absoluteUrl(
3637
$blockContext->getDocumentParserContext()->getContext()->getDirName(),
3738
$blockContext->getDocumentParserContext()->getContext()->getCurrentFileName(),
3839
);

packages/guides-restructured-text/src/RestructuredText/Directives/ImageDirective.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66

77
use phpDocumentor\Guides\Nodes\ImageNode;
88
use phpDocumentor\Guides\Nodes\Node;
9+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
910
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1011
use phpDocumentor\Guides\RestructuredText\Parser\Directive;
11-
use phpDocumentor\Guides\UrlGeneratorInterface;
1212

1313
use function dirname;
1414

@@ -21,8 +21,9 @@
2121
*/
2222
class ImageDirective extends BaseDirective
2323
{
24-
public function __construct(private readonly UrlGeneratorInterface $urlGenerator)
25-
{
24+
public function __construct(
25+
private readonly DocumentNameResolverInterface $documentNameResolver,
26+
) {
2627
}
2728

2829
public function getName(): string
@@ -36,7 +37,7 @@ public function processNode(
3637
Directive $directive,
3738
): Node {
3839
return new ImageNode(
39-
$this->urlGenerator->absoluteUrl(
40+
$this->documentNameResolver->absoluteUrl(
4041
dirname($blockContext->getDocumentParserContext()->getContext()->getCurrentAbsolutePath()),
4142
$directive->getData(),
4243
),

packages/guides-restructured-text/src/RestructuredText/Toc/GlobSearcher.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,15 @@
66

77
use Flyfinder\Specification\Glob;
88
use phpDocumentor\Guides\ParserContext;
9-
use phpDocumentor\Guides\UrlGeneratorInterface;
9+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
1010

1111
use function rtrim;
1212

1313
class GlobSearcher
1414
{
15-
public function __construct(private readonly UrlGeneratorInterface $urlGenerator)
16-
{
15+
public function __construct(
16+
private readonly DocumentNameResolverInterface $documentNameResolver,
17+
) {
1718
}
1819

1920
/** @return string[] */
@@ -25,7 +26,7 @@ public function globSearch(ParserContext $parserContext, string $globPattern): a
2526
);
2627
$allFiles = [];
2728
foreach ($files as $file) {
28-
$allFiles[] = $this->urlGenerator->absoluteUrl($parserContext->getDirName(), $file['filename']);
29+
$allFiles[] = $this->documentNameResolver->absoluteUrl($parserContext->getDirName(), $file['filename']);
2930
}
3031

3132
return $allFiles;

packages/guides-restructured-text/tests/unit/Parser/Productions/RuleTestCase.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@
99
use phpDocumentor\Guides\Nodes\InlineCompoundNode;
1010
use phpDocumentor\Guides\Nodes\ProjectNode;
1111
use phpDocumentor\Guides\ParserContext;
12+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolver;
1213
use phpDocumentor\Guides\RestructuredText\MarkupLanguageParser;
1314
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
1415
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContext;
1516
use phpDocumentor\Guides\RestructuredText\Parser\InlineParser;
1617
use phpDocumentor\Guides\RestructuredText\Parser\LinesIterator;
1718
use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
18-
use phpDocumentor\Guides\UrlGenerator;
1919
use PHPUnit\Framework\TestCase;
2020

2121
abstract class RuleTestCase extends TestCase
@@ -41,7 +41,7 @@ protected function createContext(string $input): BlockContext
4141
'test',
4242
1,
4343
self::createStub(FilesystemInterface::class),
44-
new UrlGenerator(),
44+
new DocumentNameResolver(),
4545
);
4646
$documentParserContext = new DocumentParserContext(
4747
$parserContext,

packages/guides-restructured-text/tests/unit/Parser/Productions/SectionRuleTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@
2020
use phpDocumentor\Guides\Nodes\SectionNode;
2121
use phpDocumentor\Guides\Nodes\TitleNode;
2222
use phpDocumentor\Guides\ParserContext;
23+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
2324
use phpDocumentor\Guides\RestructuredText\MarkupLanguageParser;
2425
use phpDocumentor\Guides\RestructuredText\Parser\BlockContext;
2526
use phpDocumentor\Guides\RestructuredText\Parser\DocumentParserContext;
2627
use phpDocumentor\Guides\RestructuredText\Parser\InlineParser;
2728
use phpDocumentor\Guides\RestructuredText\TextRoles\TextRoleFactory;
28-
use phpDocumentor\Guides\UrlGeneratorInterface;
2929

3030
final class SectionRuleTest extends RuleTestCase
3131
{
@@ -196,7 +196,7 @@ private function getDocumentParserContext(string $content): BlockContext
196196
'test',
197197
1,
198198
self::createStub(FilesystemInterface::class),
199-
self::createStub(UrlGeneratorInterface::class),
199+
self::createStub(DocumentNameResolverInterface::class),
200200
);
201201

202202
$documentParserContext = new DocumentParserContext(

packages/guides/resources/config/guides.php

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727
use phpDocumentor\Guides\ReferenceResolvers\AnchorReferenceResolver;
2828
use phpDocumentor\Guides\ReferenceResolvers\DelegatingReferenceResolver;
2929
use phpDocumentor\Guides\ReferenceResolvers\DocReferenceResolver;
30+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolver;
31+
use phpDocumentor\Guides\ReferenceResolvers\DocumentNameResolverInterface;
3032
use phpDocumentor\Guides\ReferenceResolvers\EmailReferenceResolver;
3133
use phpDocumentor\Guides\ReferenceResolvers\ExternalReferenceResolver;
3234
use phpDocumentor\Guides\ReferenceResolvers\InternalReferenceResolver;
@@ -39,14 +41,17 @@
3941
use phpDocumentor\Guides\Renderer\IntersphinxRenderer;
4042
use phpDocumentor\Guides\Renderer\LatexRenderer;
4143
use phpDocumentor\Guides\Renderer\TypeRendererFactory;
44+
use phpDocumentor\Guides\Renderer\UrlGenerator\AbsoluteUrlGenerator;
45+
use phpDocumentor\Guides\Renderer\UrlGenerator\AbstractUrlGenerator;
46+
use phpDocumentor\Guides\Renderer\UrlGenerator\ConfigurableUrlGenerator;
47+
use phpDocumentor\Guides\Renderer\UrlGenerator\RelativeUrlGenerator;
48+
use phpDocumentor\Guides\Renderer\UrlGenerator\UrlGeneratorInterface;
4249
use phpDocumentor\Guides\Settings\SettingsManager;
4350
use phpDocumentor\Guides\TemplateRenderer;
4451
use phpDocumentor\Guides\Twig\AssetsExtension;
4552
use phpDocumentor\Guides\Twig\EnvironmentBuilder;
4653
use phpDocumentor\Guides\Twig\Theme\ThemeManager;
4754
use phpDocumentor\Guides\Twig\TwigTemplateRenderer;
48-
use phpDocumentor\Guides\UrlGenerator;
49-
use phpDocumentor\Guides\UrlGeneratorInterface;
5055
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
5156
use Symfony\Component\DependencyInjection\Reference;
5257
use Symfony\Component\HttpClient\HttpClient;
@@ -93,7 +98,10 @@
9398
'%vendor_dir%/phpdocumentor/guides/src/NodeRenderers',
9499
)
95100

96-
->set(UrlGeneratorInterface::class, UrlGenerator::class)
101+
->set(AbsoluteUrlGenerator::class)
102+
->set(RelativeUrlGenerator::class)
103+
->set(UrlGeneratorInterface::class, ConfigurableUrlGenerator::class)
104+
->set(DocumentNameResolverInterface::class, DocumentNameResolver::class)
97105

98106
->set(Parser::class)
99107
->arg('$parserStrategies', tagged_iterator('phpdoc.guides.parser.markupLanguageParser'))
@@ -118,7 +126,7 @@
118126
->set(HttpClientInterface::class)
119127
->factory([HttpClient::class, 'create'])
120128

121-
->set(UrlGenerator::class)
129+
->set(AbstractUrlGenerator::class)
122130

123131
->set(ExternalReferenceResolver::class)
124132

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{%- for child in node.children -%}
2+
{{- renderNode(child) -}}
3+
{%- endfor -%}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{{- node.value -}}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{%- apply spaceless -%}
2+
{%- set headingLevel = node.level -%}
3+
\{% if headingLevel == 1 %}section{% elseif headingLevel == 2 %}subsection{% elseif headingLevel == 3 %}subsubsection{% elseif headingLevel == 4 %}paragraph{% elseif headingLevel == 5 %}subparagraph{% elseif headingLevel == 6 %}subparagraph{% endif %}{
4+
{{- renderNode(node.value) -}}
5+
}
6+
{%- endapply -%}

0 commit comments

Comments
 (0)