use Symfony\Component\HttpKernel\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Asset\Packages;
+use Twig\TwigFilter;
class PackExtension extends \Twig_Extension {
- public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface) {
+ public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, Packages $assetsPackages) {
//Set file locator
$this->fileLocator = $fileLocator;
//Set container interface
$this->containerInterface = $containerInterface;
+ //Set assets packages
+ $this->assetsPackages = $assetsPackages;
//Set default prefix
$this->prefix = '@RapsysPackBundle/Resources/public/';
public function getTokenParsers() {
return array(
- new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'stylesheet', $this->coutput, $this->cfilter),
- new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'javascript', $this->joutput, $this->jfilter),
- new PackTokenParser($this->fileLocator, $this->containerInterface, $this->prefix, 'image', $this->ioutput, $this->ifilter),
+ new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'stylesheet', $this->coutput, $this->cfilter),
+ new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'javascript', $this->joutput, $this->jfilter),
+ new PackTokenParser($this->fileLocator, $this->containerInterface, $this->assetsPackages, $this->prefix, 'image', $this->ioutput, $this->ifilter)
+ );
+ }
+
+ public function getFilters() {
+ return array(
+ new TwigFilter(
+ 'bb2html',
+ function($text) {
+ $ctx = bbcode_create(
+ array(
+ '' => array('type' => BBCODE_TYPE_ROOT),
+ 'code' => array(
+ 'type' => BBCODE_TYPE_OPTARG,
+ 'open_tag' => '<pre class="{PARAM}">',
+ 'close_tag' => '</pre>',
+ 'default_arg' => '{CONTENT}'
+ ),
+ 'ul' => array(
+ 'type' => BBCODE_TYPE_NOARG,
+ 'open_tag' => '<ul>',
+ 'close_tag' => '</ul>',
+ 'childs' => 'li'
+ ),
+ 'li' => array(
+ 'type' => BBCODE_TYPE_NOARG,
+ 'open_tag' => '<li>',
+ 'close_tag' => '</li>',
+ 'parent' => 'ul',
+ 'childs' => 'url'
+ ),
+ 'url' => array(
+ 'type' => BBCODE_TYPE_OPTARG,
+ 'open_tag' => '<a href="{PARAM}">',
+ 'close_tag' => '</a>',
+ 'default_arg' => '{CONTENT}',
+ 'parent' => 'p,li'
+ )
+ )
+ );
+ $text = nl2br(bbcode_parse($ctx, htmlspecialchars($text)));
+ if (preg_match_all('#\<pre[^>]*\>(.*?)\</pre\>#s', $text, $matches) && !empty($matches[1])) {
+ foreach($matches[1] as $string) {
+ $text = str_replace($string, str_replace('<br />', '', $string), $text);
+ }
+ }
+ if (preg_match_all('#\<ul[^>]*\>(.*?)\</ul\>#s', $text, $matches) && !empty($matches[1])) {
+ foreach($matches[1] as $string) {
+ $text = str_replace($string, str_replace('<br />', '', $string), $text);
+ }
+ }
+ $text = preg_replace(
+ array('#(<br />(\r?\n?))*<pre#s', '#</pre>(<br />(\r?\n?))*#', '#(<br />(\r?\n?))*<ul#s', '#</ul>(<br />(\r?\n?))*#', '#(<br />(\r?\n?)){2,}#'),
+ array('</p>\2<pre', '</pre>\2<p>', '</p>\2<ul', '</ul>\2<p>', '</p>\2<p>'),
+ $text
+ );
+ return $text;
+ },
+ array('is_safe' => array('html'))
+ )
);
}
}
use Symfony\Component\HttpKernel\Config\FileLocator;
use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\Asset\Packages;
class PackTokenParser extends \Twig_TokenParser {
private $tag;
* Constructor.
*
* @param class $fileLocator The FileLocator instance
+ * @param class $containerInterface The Container Interface instance
* @param class $assetsPackages The Assets Packages instance
* @param string $prefix The prefix path
* @param string $tag The tag name
* @param string $output The default output string
* @param array $filters The default filters array
*/
- public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, $prefix, $tag, $output, $filters) {
+ public function __construct(FileLocator $fileLocator, ContainerInterface $containerInterface, Packages $assetsPackages, $prefix, $tag, $output, $filters) {
$this->fileLocator = $fileLocator;
$this->containerInterface = $containerInterface;
+ $this->assetsPackages = $assetsPackages;
$this->prefix = $prefix;
$this->tag = $tag;
$this->output = $output;
}
//Retrieve asset uri
- if (($output = $this->containerInterface->get('assets.packages')->getUrl($output, 'rapsys_pack')) === false) {
+ if (($output = $this->assetsPackages->getUrl($output, 'rapsys_pack')) === false) {
throw new \Twig_Error_Syntax(sprintf('Unable to get url for asset: %s with package %s', $output, 'rapsys_pack'), $token->getLine(), $stream->getSourceContext());
}