/**
  * @param $value
  * @param $filter
  * @throws \Twig_Error_Runtime
  * @return \FM\BbcodeBundle\Decoda\Decoda
  */
 public function filter($value, $filter)
 {
     if (!is_string($value)) {
         throw new \Twig_Error_Runtime('The filter can be applied to strings only.');
     }
     $messages = $this->container->getParameter('fm_bbcode.config.messages');
     $messages = empty($messages) ? array() : json_decode(\file_get_contents($messages), true);
     $code = new Decoda($value, $messages);
     $current_filter = $this->filter_sets[$filter];
     $locale = $current_filter['locale'];
     $xhtml = $current_filter['xhtml'];
     if (empty($locale)) {
         // apply locale from the session
         if ('default' == $this->locale) {
             $code->setLocale($this->container->get('session')->getLocale());
             // apply locale defined in the configuration
         } else {
             // apply locale from the template
             $code->setLocale($this->locale);
         }
     } else {
         $code->setLocale($locale);
     }
     if (true === $xhtml) {
         $code->setXhtml(true);
     }
     $decoda_manager = new DecodaManager($code, $current_filter['filters'], $current_filter['hooks'], $current_filter['whitelist']);
     return $decoda_manager->getResult()->parse();
 }
 /**
  * Strip tags.
  *
  * @param $value
  * @param $filterSet
  *
  * @return string
  *
  * @throws \Twig_Error_Runtime
  */
 public function clean($value, $filterSet = DecodaManager::DECODA_DEFAULT)
 {
     if (!is_string($value)) {
         throw new \Twig_Error_Runtime('The filter can be applied to strings only.');
     }
     return $this->decodaManager->get($value, $filterSet)->strip(true);
 }
 public function testSetHook()
 {
     $hook = $this->getMock('Decoda\\Hook');
     $this->object->setHook('foo', $hook);
     $this->assertTrue($this->object->hasHook('foo'));
     $this->assertSame($hook, $this->object->getHook('foo'));
 }