/** * @param TemplateSegment $segment * @throws JigException */ public function addSegment(TemplateSegment $segment) { $segmentText = $segment->getOriginalText(); if ($this->literalMode === self::LITERAL_TEMPLATE && strncmp($segmentText, '/literal', mb_strlen('/literal')) === 0) { $segment->setIsJigCommand(true); $this->processLiteralEnd(); return; } if ($this->literalMode === self::LITERAL_PHP && strncmp($segmentText, '/php', mb_strlen('/php')) === 0) { $segment->setIsJigCommand(true); $this->processPHPEnd(); $this->processLiteralEnd(); return; } foreach ($this->compileBlockFunctions as $blockName => $blockFunctions) { if (strncmp($segmentText, '/' . $blockName, mb_strlen('/' . $blockName)) === 0) { $segment->setIsJigCommand(true); call_user_func($blockFunctions[1], $this, $segmentText); return; } } $segmentTextMatch = preg_match('#/\\w*#', $segmentText); if ($segmentTextMatch !== 0 && $segmentTextMatch !== false) { $blockName = substr($segmentText, 1); $knownBlocks = $this->parsedTemplate->getKnownRenderBlocks(); if (in_array($blockName, $knownBlocks, true) === true) { $segment->setIsJigCommand(true); $this->addCode("\$this->endRenderBlock('{$blockName}');"); return; } } //Anything that exits literal mode (i.e. /literal or /php) must be above this if ($this->literalMode !== null) { $this->addLineInternal($segment->getRawString()); return; } if ($segment instanceof TextTemplateSegment) { $this->changeOutputMode(self::MODE_TEMPLATE); $this->addLineInternal($segment->getTextString($this->parsedTemplate)); } else { if ($segment instanceof CodeTemplateSegment) { $this->parseJigSegment($segment); } else { if ($segment instanceof CommentTemplateSegment) { $this->addCode($segment->getCommentString($this->parsedTemplate)); } else { throw new \Jig\JigException("Unknown Segment type " . get_class($segment)); } } } }