Exemplo n.º 1
0
 /**
  * @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));
             }
         }
     }
 }