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.
This commit is contained in:
Fabien Potencier
2025-02-08 10:44:24 +01:00
4 changed files with 92 additions and 3 deletions
@@ -11,6 +11,7 @@
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;
@@ -32,6 +33,63 @@ class Configuration implements ConfigurationInterface
;
}
$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();
}
}