mirror of
https://github.com/twigphp/Twig.git
synced 2026-08-25 05:06:27 +00:00
Added configuration for commonmark use in twig-extra-bundle.
This commit is contained in:
@@ -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;
|
||||
@@ -35,6 +36,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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -39,6 +39,12 @@ class TwigExtraExtension extends Extension
|
||||
|
||||
if ('markdown' === $extension && \class_exists(CommonMarkConverter::class)) {
|
||||
$loader->load('markdown_league.php');
|
||||
|
||||
if ($container->hasDefinition('twig.markdown.league_common_mark_converter_factory')) {
|
||||
$container
|
||||
->getDefinition('twig.markdown.league_common_mark_converter_factory')
|
||||
->setArgument('$config', $config['commonmark'] ?? []);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,17 +21,20 @@ final class LeagueCommonMarkConverterFactory
|
||||
{
|
||||
private $extensions;
|
||||
|
||||
private $config;
|
||||
|
||||
/**
|
||||
* @param ExtensionInterface[] $extensions
|
||||
*/
|
||||
public function __construct(iterable $extensions)
|
||||
public function __construct(iterable $extensions, array $config = [])
|
||||
{
|
||||
$this->extensions = $extensions;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
public function __invoke(): CommonMarkConverter
|
||||
{
|
||||
$converter = new CommonMarkConverter();
|
||||
$converter = new CommonMarkConverter($this->config);
|
||||
|
||||
foreach ($this->extensions as $extension) {
|
||||
$converter->getEnvironment()->addExtension($extension);
|
||||
|
||||
@@ -26,7 +26,29 @@ class TwigExtraExtensionTest extends TestCase
|
||||
'kernel.debug' => false,
|
||||
]));
|
||||
$container->registerExtension(new TwigExtraExtension());
|
||||
$container->loadFromExtension('twig_extra');
|
||||
$container->loadFromExtension('twig_extra', [
|
||||
'commonmark' => [
|
||||
'extra_key' => true,
|
||||
'renderer' => [
|
||||
'block_separator' => "\n",
|
||||
'inner_separator' => "\n",
|
||||
'soft_break' => "\n",
|
||||
],
|
||||
'commonmark' => [
|
||||
'enable_em' => true,
|
||||
'enable_strong' => true,
|
||||
'use_asterisk' => true,
|
||||
'use_underscore' => true,
|
||||
'unordered_list_markers' => ['-', '*', '+'],
|
||||
],
|
||||
'html_input' => 'escape',
|
||||
'allow_unsafe_links' => false,
|
||||
'max_nesting_level' => PHP_INT_MAX,
|
||||
'slug_normalizer' => [
|
||||
'max_length' => 255,
|
||||
],
|
||||
],
|
||||
]);
|
||||
$container->getCompilerPassConfig()->setOptimizationPasses([]);
|
||||
$container->getCompilerPassConfig()->setRemovingPasses([]);
|
||||
$container->getCompilerPassConfig()->setAfterRemovingPasses([]);
|
||||
|
||||
Reference in New Issue
Block a user