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); }
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); }
/** * @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'); } }
public function parse($text) { return $this->parser->parse($text); }