public function testProcessedShortcode() { $processor = new Processor(new RegexParser(), new HandlerContainer()); $context = new ProcessorContext(); $context->shortcode = new Shortcode('code', array('arg' => 'val'), 'content'); $context->processor = $processor; $context->position = 20; $context->namePosition = array('code' => 10); $context->text = ' [code] '; $context->shortcodeText = '[code]'; $context->textOffset = 1; $context->iterationNumber = 1; $context->recursionLevel = 0; $context->parent = null; $context->contentOffset = 19; $context->slashOffset = 21; $processed = ProcessedShortcode::createFromContext($context); $this->assertSame('code', $processed->getName()); $this->assertSame(array('arg' => 'val'), $processed->getParameters()); $this->assertSame('content', $processed->getContent()); $this->assertSame(20, $processed->getPosition()); $this->assertSame(10, $processed->getNamePosition()); $this->assertSame(' [code] ', $processed->getText()); $this->assertSame(1, $processed->getOffset()); $this->assertSame('[code]', $processed->getShortcodeText()); $this->assertSame(1, $processed->getIterationNumber()); $this->assertSame(0, $processed->getRecursionLevel()); $this->assertSame(null, $processed->getParent()); $this->assertSame($processor, $processed->getProcessor()); $this->assertSame(19, $processed->getContentOffset()); $this->assertSame(21, $processed->getMarkerOffset()); }
public function testProcessedShortcodeParents() { $context = new ProcessorContext(); $context->shortcode = new Shortcode('p1', array(), null); $context->parent = null; $context->namePosition = array('p1' => 0, 'p2' => 0, 'p3' => 0); $p1 = ProcessedShortcode::createFromContext($context); $context->shortcode = new Shortcode('p2', array(), null); $context->parent = $p1; $p2 = ProcessedShortcode::createFromContext($context); $context->shortcode = new Shortcode('p3', array(), null); $context->parent = $p2; $p3 = ProcessedShortcode::createFromContext($context); $this->assertSame('p3', $p3->getName()); $this->assertSame('p2', $p3->getParent()->getName()); $this->assertSame('p1', $p3->getParent()->getParent()->getName()); $this->assertFalse($p1->hasAncestor('p3')); $this->assertFalse($p1->hasAncestor('p1')); $this->assertTrue($p2->hasAncestor('p1')); $this->assertFalse($p2->hasAncestor('p3')); $this->assertTrue($p3->hasAncestor('p1')); $this->assertTrue($p3->hasAncestor('p2')); $this->assertFalse($p3->hasAncestor('p4')); }
private function processHandler(ParsedShortcodeInterface $parsed, ProcessorContext $context, $handler) { $processed = ProcessedShortcode::createFromContext(clone $context); $processed = $this->processRecursion($processed, $context); return $handler ? call_user_func_array($handler, array($processed)) : substr_replace($parsed->getText(), $processed->getContent(), strrpos($parsed->getText(), $parsed->getContent()), mb_strlen($parsed->getContent())); }
private function processHandler(ParsedShortcodeInterface $parsed, ProcessorContext $context, $handler) { $processed = ProcessedShortcode::createFromContext(clone $context); $content = $this->processRecursion($processed, $context); $processed = $processed->withContent($content); if ($handler) { return call_user_func_array($handler, array($processed)); } $state = $parsed->getText(); $length = mb_strlen($processed->getTextContent(), 'utf-8'); $offset = mb_strrpos($state, $processed->getTextContent(), 'utf-8'); return mb_substr($state, 0, $offset, 'utf-8') . $processed->getContent() . mb_substr($state, $offset + $length, mb_strlen($state, 'utf-8'), 'utf-8'); }