Files
Twig/extra/twig-extra-bundle/DependencyInjection/Configuration.php
T
Fabien Potencier 3cdf26fe76 feature #3737 Added configuration for commonmark use in twig-extra-bundle. (doekenorg)
This PR was merged into the 3.x branch.

Discussion
----------

Added configuration for commonmark use in twig-extra-bundle.

Following this tweet: https://twitter.com/ramsey/status/1561894460560138241, this PR adds the configuration options for `commonmark` to the `twig-extra-bundle`.

The configuration is added to the `LeagueCommonMarkConverterFactory` and in turn injected in the `CommonMarkConverter`. This way a user can provide the configuration for usage inside twig.

I'm not sure if adding the configuration inside the extension is the way to go.

Hope this helps out at least `@ramsey` :-)

Added `ignoreExtraKeys` to be somewhat future proof in case extra configuration is added later on, and also to be able to provide de configuration for extensions.

Commits
-------

6f20629622 Added configuration for commonmark use in twig-extra-bundle.
2025-02-08 10:44:24 +01:00

96 lines
3.9 KiB
PHP

<?php
/*
* This file is part of Twig.
*
* (c) Fabien Potencier
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Twig\Extra\TwigExtraBundle\DependencyInjection;
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;
use Twig\Extra\TwigExtraBundle\Extensions;
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder(): TreeBuilder
{
$treeBuilder = new TreeBuilder('twig_extra');
$rootNode = $treeBuilder->getRootNode();
foreach (Extensions::getClasses() as $name => $class) {
$rootNode
->children()
->arrayNode($name)
->{class_exists($class) ? 'canBeDisabled' : 'canBeEnabled'}()
->end()
->end()
;
}
$this->addCommonMarkConfiguration($rootNode);
return $treeBuilder;
}
/**
* Full configuration from {@link https://commonmark.thephpleague.com/2.3/configuration}.
*/
private function addCommonMarkConfiguration(ArrayNodeDefinition $rootNode): void
{
$rootNode
->children()
->arrayNode('commonmark')
->ignoreExtraKeys()
->children()
->arrayNode('renderer')
->info('Array of options for rendering HTML.')
->children()
->scalarNode('block_separator')->end()
->scalarNode('inner_separator')->end()
->scalarNode('soft_break')->end()
->end()
->end()
->enumNode('html_input')
->info('How to handle HTML input.')
->values(['strip','allow','escape'])
->end()
->booleanNode('allow_unsafe_links')
->info('Remove risky link and image URLs by setting this to false.')
->defaultTrue()
->end()
->integerNode('max_nesting_level')
->info('The maximum nesting level for blocks.')
->defaultValue(PHP_INT_MAX)
->end()
->arrayNode('slug_normalizer')
->info('Array of options for configuring how URL-safe slugs are created.')
->children()
->variableNode('instance')->end()
->integerNode('max_length')->defaultValue(255)->end()
->variableNode('unique')->end()
->end()
->end()
->arrayNode('commonmark')
->info('Array of options for configuring the CommonMark core extension.')
->children()
->booleanNode('enable_em')->defaultTrue()->end()
->booleanNode('enable_strong')->defaultTrue()->end()
->booleanNode('use_asterisk')->defaultTrue()->end()
->booleanNode('use_underscore')->defaultTrue()->end()
->arrayNode('unordered_list_markers')
->scalarPrototype()->end()
->defaultValue([['-', '*', '+']])->end()
->end()
->end()
->end()
->end()
->end();
}
}