Skip to content

Commit d837af0

Browse files
committed
!!![FEATURE] enable basic latex rendering
To be able to render different formats we needed a more flexible system to pick the correct renderers. The main change in this patch to introduce a OutputAwareDelegatingNodeRenderer as the templates are using a function to render child nodes. Where we lose the connection with the executed renderer. This new OutputAwareDelegatingNodeRenderer will take the output format from the context to select the correct DelegatingNodeRender that will find the correct renderer on its turn to render the node. To make it easier to add custom output formats using other format renders, eg. a single page html, or pdf using the html renderers. the compiler for DI is adjusted. This is now a more advanced compiler pass that will autowire the configured renderers as much as possible.
1 parent 671b944 commit d837af0

27 files changed

+343
-74
lines changed

packages/guides/resources/config/command_bus.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
use phpDocumentor\Guides\Handlers\RenderDocumentCommand;
2020
use phpDocumentor\Guides\Handlers\RenderDocumentHandler;
2121
use phpDocumentor\Guides\Handlers\RenderHandler;
22-
use phpDocumentor\Guides\NodeRenderers\DelegatingNodeRenderer;
2322
use Psr\EventDispatcher\EventDispatcherInterface;
2423
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
2524

@@ -46,7 +45,7 @@
4645

4746
->set(RenderDocumentHandler::class)
4847
->tag('phpdoc.guides.command', ['command' => RenderDocumentCommand::class])
49-
->arg('$renderer', service(DelegatingNodeRenderer::class))
48+
->arg('$renderer', service('phpdoc.guides.output_node_renderer'))
5049
->arg('$eventDispatcher', service(EventDispatcherInterface::class))
5150

5251
->set(CommandBus::class)

packages/guides/resources/config/guides.php

Lines changed: 24 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,13 @@
1212
use phpDocumentor\Guides\Interlink\InventoryLoader;
1313
use phpDocumentor\Guides\Interlink\InventoryRepository;
1414
use phpDocumentor\Guides\Interlink\JsonLoader;
15-
use phpDocumentor\Guides\NodeRenderers\DefaultNodeRenderer;
16-
use phpDocumentor\Guides\NodeRenderers\DelegatingNodeRenderer;
1715
use phpDocumentor\Guides\NodeRenderers\Html\BreadCrumbNodeRenderer;
1816
use phpDocumentor\Guides\NodeRenderers\Html\DocumentNodeRenderer;
1917
use phpDocumentor\Guides\NodeRenderers\Html\MenuEntryRenderer;
2018
use phpDocumentor\Guides\NodeRenderers\Html\MenuNodeRenderer;
2119
use phpDocumentor\Guides\NodeRenderers\Html\TableNodeRenderer;
22-
use phpDocumentor\Guides\NodeRenderers\InMemoryNodeRendererFactory;
23-
use phpDocumentor\Guides\NodeRenderers\NodeRendererFactory;
2420
use phpDocumentor\Guides\NodeRenderers\NodeRendererFactoryAware;
25-
use phpDocumentor\Guides\NodeRenderers\PreRenderers\PreNodeRendererFactory;
21+
use phpDocumentor\Guides\NodeRenderers\OutputAwareDelegatingNodeRenderer;
2622
use phpDocumentor\Guides\Parser;
2723
use phpDocumentor\Guides\ReferenceResolvers\AnchorReducer;
2824
use phpDocumentor\Guides\ReferenceResolvers\AnchorReferenceResolver;
@@ -145,18 +141,32 @@
145141
->arg('$resolvers', tagged_iterator('phpdoc.guides.reference_resolver', defaultPriorityMethod: 'getPriority'))
146142

147143
->set(HtmlRenderer::class)
148-
->tag('phpdoc.renderer.typerenderer')
144+
->tag(
145+
'phpdoc.renderer.typerenderer',
146+
[
147+
'noderender_tag' => 'phpdoc.guides.noderenderer.html',
148+
'format' => 'html',
149+
]
150+
)
149151
->args(
150152
['$commandBus' => service(CommandBus::class)],
151153
)
152154
->set(LatexRenderer::class)
153-
->tag('phpdoc.renderer.typerenderer')
154-
->args(
155-
['$commandBus' => service(CommandBus::class)],
155+
->tag(
156+
'phpdoc.renderer.typerenderer',
157+
[
158+
'noderender_tag' => 'phpdoc.guides.noderenderer.tex',
159+
'format' => 'tex',
160+
]
156161
)
157162

158163
->set(InterlinkObjectsRenderer::class)
159-
->tag('phpdoc.renderer.typerenderer')
164+
->tag(
165+
'phpdoc.renderer.typerenderer',
166+
[
167+
'format' => 'interlink',
168+
]
169+
)
160170

161171
->set(DocumentNodeRenderer::class)
162172
->tag('phpdoc.guides.noderenderer.html')
@@ -169,33 +179,21 @@
169179
->set(BreadCrumbNodeRenderer::class)
170180
->tag('phpdoc.guides.noderenderer.html')
171181

172-
->set(DefaultNodeRenderer::class)
173-
174-
->set(InMemoryNodeRendererFactory::class)
175-
->args([
176-
'$nodeRenderers' => tagged_iterator('phpdoc.guides.noderenderer.html'),
177-
'$defaultNodeRenderer' => new Reference(DefaultNodeRenderer::class),
178-
])
179-
->alias(NodeRendererFactory::class, InMemoryNodeRendererFactory::class)
180-
181-
->set(PreNodeRendererFactory::class)
182-
->decorate(NodeRendererFactory::class)
183-
->arg('$innerFactory', service('.inner'))
184-
->arg('$preRenderers', tagged_iterator('phpdoc.guides.prerenderer'))
185-
186182
->set(ReferenceResolverPreRender::class)
187183
->tag('phpdoc.guides.prerenderer')
188184

189185
->set(InMemoryRendererFactory::class)
190-
->arg('$renderSets', tagged_iterator('phpdoc.renderer.typerenderer'))
186+
->arg('$renderSets', tagged_iterator('phpdoc.renderer.typerenderer', 'format'))
191187
->alias(TypeRendererFactory::class, InMemoryRendererFactory::class)
192188

193189
->set(SluggerAnchorReducer::class)
194190
->alias(AnchorReducer::class, SluggerAnchorReducer::class)
195191

192+
->set('phpdoc.guides.output_node_renderer', OutputAwareDelegatingNodeRenderer::class)
193+
->arg('$nodeRenderers', tagged_iterator('phpdoc.guides.output_node_renderer', 'format'))
196194

197195
->set(AssetsExtension::class)
198-
->arg('$nodeRenderer', service(DelegatingNodeRenderer::class))
196+
->arg('$nodeRenderer', service('phpdoc.guides.output_node_renderer'))
199197
->tag('twig.extension')
200198
->autowire()
201199

0 commit comments

Comments
 (0)