private function processIteration($text, ProcessorContext $context, ProcessedShortcode $parent = null)
 {
     if (null !== $this->recursionDepth && $context->recursionLevel > $this->recursionDepth) {
         return $text;
     }
     $context->parent = $parent;
     $context->text = $text;
     $filterEvent = new FilterShortcodesEvent($this->parser->parse($text), $parent);
     $this->dispatchEvent(Events::FILTER_SHORTCODES, $filterEvent);
     $shortcodes = $filterEvent->getShortcodes();
     $replaces = array();
     $baseOffset = $parent && $shortcodes ? mb_strpos($parent->getShortcodeText(), $shortcodes[0]->getText(), null, 'utf-8') - $shortcodes[0]->getOffset() + $parent->getOffset() : 0;
     foreach ($shortcodes as $shortcode) {
         $hasNamePosition = array_key_exists($shortcode->getName(), $context->namePosition);
         $context->baseOffset = $baseOffset + $shortcode->getOffset();
         $context->position++;
         $context->namePosition[$shortcode->getName()] = $hasNamePosition ? $context->namePosition[$shortcode->getName()] + 1 : 1;
         $context->shortcodeText = $shortcode->getText();
         $context->offset = $shortcode->getOffset();
         $context->shortcode = $shortcode;
         $context->textContent = $shortcode->getContent();
         $handler = $this->handlers->get($shortcode->getName());
         $replace = $this->processHandler($shortcode, $context, $handler);
         $replaces[] = new ReplacedShortcode($shortcode, $replace);
     }
     $replaces = array_filter($replaces);
     $applyEvent = new ReplaceShortcodesEvent($text, $replaces, $parent);
     $this->dispatchEvent(Events::REPLACE_SHORTCODES, $applyEvent);
     return $applyEvent->hasResult() ? $applyEvent->getResult() : $this->applyReplaces($text, $replaces);
 }
 /**
  * @param ParserInterface $parser
  * @param string $code
  * @param ParsedShortcode[] $tested
  *
  * @dataProvider provideShortcodes
  */
 public function testParser(ParserInterface $parser, $code, array $tested)
 {
     $parsed = $parser->parse($code);
     $count = count($tested);
     $this->assertSame($count, count($parsed), 'counts');
     for ($i = 0; $i < $count; $i++) {
         $this->assertSame($tested[$i]->getName(), $parsed[$i]->getName(), 'name');
         $this->assertSame($tested[$i]->getParameters(), $parsed[$i]->getParameters(), 'parameters');
         $this->assertSame($tested[$i]->getContent(), $parsed[$i]->getContent(), 'content');
         $this->assertSame($tested[$i]->getText(), $parsed[$i]->getText(), 'text');
         $this->assertSame($tested[$i]->getOffset(), $parsed[$i]->getOffset(), 'offset');
         $this->assertSame($tested[$i]->getBbCode(), $parsed[$i]->getBbCode(), 'bbCode');
     }
 }
Пример #3
0
 private function processIteration($text, ProcessorContext $context, ShortcodeInterface $parent = null)
 {
     if (null !== $this->recursionDepth && $context->recursionLevel > $this->recursionDepth) {
         return $text;
     }
     $context->parent = $parent;
     $context->text = $text;
     $filterEvent = new FilterShortcodesEvent($this->parser->parse($text), $parent);
     $this->dispatchEvent(Events::FILTER_SHORTCODES, $filterEvent);
     $shortcodes = $filterEvent->getShortcodes();
     $replaces = array();
     foreach ($shortcodes as $shortcode) {
         $this->prepareHandlerContext($shortcode, $context);
         $handler = $this->handlers->get($shortcode->getName());
         $replace = $this->processHandler($shortcode, $context, $handler);
         $replaces[] = new ReplacedShortcode($shortcode, $replace);
     }
     $replaces = array_filter($replaces);
     $applyEvent = new ReplaceShortcodesEvent($text, $replaces, $parent);
     $this->dispatchEvent(Events::REPLACE_SHORTCODES, $applyEvent);
     return $applyEvent->hasResult() ? $applyEvent->getResult() : $this->applyReplaces($text, $replaces);
 }
 public function parse($text)
 {
     return $this->parser->parse($text);
 }