mirror of
https://github.com/KnpLabs/KnpMarkdownBundle.git
synced 2024-06-08 17:02:11 +02:00
Removing MarkdownTwigExtension dependency to MarkdownHelper
This allows the Twig extension to be used without the templating component. This also introduces a new integration test as a sanity check that all the configuration / compiler pass was setup correctly.
This commit is contained in:
parent
27d6c8c866
commit
c5f5046c8e
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -2,3 +2,4 @@ phpunit.xml
|
||||||
vendor/*
|
vendor/*
|
||||||
!vendor/parser
|
!vendor/parser
|
||||||
composer.lock
|
composer.lock
|
||||||
|
Tests/fixtures/app/cache
|
||||||
|
|
|
@ -10,7 +10,7 @@ class ParsersCompilerPass implements CompilerPassInterface
|
||||||
{
|
{
|
||||||
public function process(ContainerBuilder $container)
|
public function process(ContainerBuilder $container)
|
||||||
{
|
{
|
||||||
if (!$container->hasDefinition('templating.helper.markdown')) {
|
if (!$container->hasDefinition('markdown.parser.parser_manager')) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ class ParsersCompilerPass implements CompilerPassInterface
|
||||||
$defaultAlias = isset($defaultAlias['alias']) ? $defaultAlias['alias'] : null;
|
$defaultAlias = isset($defaultAlias['alias']) ? $defaultAlias['alias'] : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
$definition = $container->getDefinition('templating.helper.markdown');
|
$definition = $container->getDefinition('markdown.parser.parser_manager');
|
||||||
if (empty($defaultAlias)) {
|
if (empty($defaultAlias)) {
|
||||||
$definition->addMethodCall('addParser', array(new Reference('markdown.parser'), 'default'));
|
$definition->addMethodCall('addParser', array(new Reference('markdown.parser'), 'default'));
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,24 +2,17 @@
|
||||||
|
|
||||||
namespace Knp\Bundle\MarkdownBundle\Helper;
|
namespace Knp\Bundle\MarkdownBundle\Helper;
|
||||||
|
|
||||||
|
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||||
use Symfony\Component\Templating\Helper\HelperInterface;
|
use Symfony\Component\Templating\Helper\HelperInterface;
|
||||||
use Knp\Bundle\MarkdownBundle\MarkdownParserInterface;
|
|
||||||
|
|
||||||
class MarkdownHelper implements HelperInterface
|
class MarkdownHelper implements HelperInterface
|
||||||
{
|
{
|
||||||
/**
|
private $parserManager;
|
||||||
* @var MarkdownParserInterface[]
|
|
||||||
*/
|
|
||||||
private $parsers = array();
|
|
||||||
private $charset = 'UTF-8';
|
private $charset = 'UTF-8';
|
||||||
|
|
||||||
/**
|
public function __construct(ParserManager $parserManager)
|
||||||
* @param MarkdownParserInterface $parser
|
|
||||||
* @param string $alias
|
|
||||||
*/
|
|
||||||
public function addParser(MarkdownParserInterface $parser, $alias)
|
|
||||||
{
|
{
|
||||||
$this->parsers[$alias] = $parser;
|
$this->parserManager = $parserManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,17 +27,7 @@ class MarkdownHelper implements HelperInterface
|
||||||
*/
|
*/
|
||||||
public function transform($markdownText, $parserName = null)
|
public function transform($markdownText, $parserName = null)
|
||||||
{
|
{
|
||||||
if (null === $parserName) {
|
return $this->parserManager->transform($markdownText, $parserName);
|
||||||
$parserName = 'default';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!isset($this->parsers[$parserName])) {
|
|
||||||
throw new \RuntimeException(sprintf('Unknown parser selected ("%s"), available are: %s', $parserName, implode(', ', array_keys($this->parsers))));
|
|
||||||
}
|
|
||||||
|
|
||||||
$parser = $this->parsers[$parserName];
|
|
||||||
|
|
||||||
return $parser->transformMarkdown($markdownText);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
47
Parser/ParserManager.php
Normal file
47
Parser/ParserManager.php
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Knp\Bundle\MarkdownBundle\Parser;
|
||||||
|
|
||||||
|
use Knp\Bundle\MarkdownBundle\MarkdownParserInterface;
|
||||||
|
|
||||||
|
class ParserManager
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @var MarkdownParserInterface[]
|
||||||
|
*/
|
||||||
|
private $parsers = array();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param MarkdownParserInterface $parser
|
||||||
|
* @param string $alias
|
||||||
|
*/
|
||||||
|
public function addParser(MarkdownParserInterface $parser, $alias)
|
||||||
|
{
|
||||||
|
$this->parsers[$alias] = $parser;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Transforms markdown syntax to HTML
|
||||||
|
*
|
||||||
|
* @param string $markdownText The markdown syntax text
|
||||||
|
* @param null|string $parserName
|
||||||
|
*
|
||||||
|
* @return string The HTML code
|
||||||
|
*
|
||||||
|
* @throws \RuntimeException
|
||||||
|
*/
|
||||||
|
public function transform($markdownText, $parserName = null)
|
||||||
|
{
|
||||||
|
if (null === $parserName) {
|
||||||
|
$parserName = 'default';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isset($this->parsers[$parserName])) {
|
||||||
|
throw new \RuntimeException(sprintf('Unknown parser selected ("%s"), available are: %s', $parserName, implode(', ', array_keys($this->parsers))));
|
||||||
|
}
|
||||||
|
|
||||||
|
$parser = $this->parsers[$parserName];
|
||||||
|
|
||||||
|
return $parser->transformMarkdown($markdownText);
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,5 +19,8 @@
|
||||||
<service id="markdown.parser.flavored" class="Knp\Bundle\MarkdownBundle\Parser\Preset\Flavored" public="false">
|
<service id="markdown.parser.flavored" class="Knp\Bundle\MarkdownBundle\Parser\Preset\Flavored" public="false">
|
||||||
<tag name="markdown.parser" alias="flavored" />
|
<tag name="markdown.parser" alias="flavored" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
|
<!-- parsers will be injected with a compiler pass -->
|
||||||
|
<service id="markdown.parser.parser_manager" class="Knp\Bundle\MarkdownBundle\Parser\ParserManager" />
|
||||||
</services>
|
</services>
|
||||||
</container>
|
</container>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
<services>
|
<services>
|
||||||
<service id="twig.extension.exercise.twig" class="Knp\Bundle\MarkdownBundle\Twig\Extension\MarkdownTwigExtension" public="false">
|
<service id="twig.extension.exercise.twig" class="Knp\Bundle\MarkdownBundle\Twig\Extension\MarkdownTwigExtension" public="false">
|
||||||
<argument type="service" id="templating.helper.markdown" />
|
<argument type="service" id="markdown.parser.parser_manager" />
|
||||||
<tag name="twig.extension" />
|
<tag name="twig.extension" />
|
||||||
</service>
|
</service>
|
||||||
</services>
|
</services>
|
||||||
|
|
27
Tests/Parser/ParserManagerTest.php
Normal file
27
Tests/Parser/ParserManagerTest.php
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Knp\Bundle\MarkdownBundle\Tests\Parser;
|
||||||
|
|
||||||
|
use Knp\Bundle\MarkdownBundle\Tests\fixtures\app\TestKernel;
|
||||||
|
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||||
|
|
||||||
|
class ParserManagerTest extends \PHPUnit_Framework_TestCase
|
||||||
|
{
|
||||||
|
public function testIntegration()
|
||||||
|
{
|
||||||
|
require_once __DIR__.'/../fixtures/app/TestKernel.php';
|
||||||
|
|
||||||
|
$kernel = new TestKernel('dev', true);
|
||||||
|
$kernel->boot();
|
||||||
|
$container = $kernel->getContainer();
|
||||||
|
|
||||||
|
/** @var ParserManager $parserManager */
|
||||||
|
$parserManager = $container->get('markdown.parser.parser_manager');
|
||||||
|
|
||||||
|
$actual = $parserManager->transform('*hi*');
|
||||||
|
$this->assertEquals("<p><em>hi</em></p>\n", $actual, 'There is a default parser');
|
||||||
|
|
||||||
|
$actual = $parserManager->transform('*hi*', 'light');
|
||||||
|
$this->assertEquals("<p><em>hi</em></p>\n", $actual, 'Specific parsers are registered');
|
||||||
|
}
|
||||||
|
}
|
30
Tests/fixtures/app/TestKernel.php
vendored
Normal file
30
Tests/fixtures/app/TestKernel.php
vendored
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace Knp\Bundle\MarkdownBundle\Tests\fixtures\app;
|
||||||
|
|
||||||
|
use Knp\Bundle\MarkdownBundle\KnpMarkdownBundle;
|
||||||
|
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
|
||||||
|
use Symfony\Component\Config\Loader\LoaderInterface;
|
||||||
|
use Symfony\Component\DependencyInjection\ContainerBuilder;
|
||||||
|
use Symfony\Component\HttpKernel\Bundle\BundleInterface;
|
||||||
|
use Symfony\Component\HttpKernel\Kernel;
|
||||||
|
|
||||||
|
class TestKernel extends Kernel
|
||||||
|
{
|
||||||
|
public function registerBundles()
|
||||||
|
{
|
||||||
|
return array(
|
||||||
|
new FrameworkBundle(),
|
||||||
|
new KnpMarkdownBundle(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function registerContainerConfiguration(LoaderInterface $loader)
|
||||||
|
{
|
||||||
|
$loader->load(function(ContainerBuilder $c) {
|
||||||
|
$c->loadFromExtension('framework', array(
|
||||||
|
'secret' => 'MarkdownTesting'
|
||||||
|
));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,15 +2,15 @@
|
||||||
|
|
||||||
namespace Knp\Bundle\MarkdownBundle\Twig\Extension;
|
namespace Knp\Bundle\MarkdownBundle\Twig\Extension;
|
||||||
|
|
||||||
use Knp\Bundle\MarkdownBundle\Helper\MarkdownHelper;
|
use Knp\Bundle\MarkdownBundle\Parser\ParserManager;
|
||||||
|
|
||||||
class MarkdownTwigExtension extends \Twig_Extension
|
class MarkdownTwigExtension extends \Twig_Extension
|
||||||
{
|
{
|
||||||
protected $helper;
|
protected $parserManager;
|
||||||
|
|
||||||
public function __construct(MarkdownHelper $helper)
|
public function __construct(ParserManager $parserManager)
|
||||||
{
|
{
|
||||||
$this->helper = $helper;
|
$this->parserManager = $parserManager;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getFilters()
|
public function getFilters()
|
||||||
|
@ -22,7 +22,7 @@ class MarkdownTwigExtension extends \Twig_Extension
|
||||||
|
|
||||||
public function markdown($text, $parser = null)
|
public function markdown($text, $parser = null)
|
||||||
{
|
{
|
||||||
return $this->helper->transform($text, $parser);
|
return $this->parserManager->transform($text, $parser);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getName()
|
public function getName()
|
||||||
|
|
Loading…
Reference in a new issue