示例#1
0
 /**
  * @param $textLine
  */
 private function addLineInternal($textLine)
 {
     if ($this->activeBlock !== null) {
         $this->activeBlock[] = $textLine;
     } else {
         $this->parsedTemplate->addTextLine($textLine);
     }
 }
示例#2
0
 public function testGlobalNamespaceClassName()
 {
     $classname = 'Foo';
     $fqcn = \Jig\Converter\ParsedTemplate::getFQCN('', $classname);
     $this->assertEquals($classname, $fqcn);
     $result = \Jig\Converter\ParsedTemplate::getClassName($classname);
     $this->assertEquals($classname, $result);
 }
示例#3
0
 /**
  * @param ParsedTemplate $parsedTemplate
  * @param array $extraFilters
  * @return string
  * @throws JigException
  */
 public function getCodeString(ParsedTemplate $parsedTemplate, $flags = 0)
 {
     $filters = $this->filters;
     if (($flags & self::NO_FILTER) !== 0) {
         $filters[] = JigConverter::FILTER_NONE;
     }
     if (count($filters) === 0) {
         $filters[] = JigConverter::FILTER_HTML;
     }
     $code = "<?php ";
     if (($flags & self::REMOVE_IF) !== 0) {
         $code .= substr($this->text, 3);
     } else {
         $code .= $this->text;
     }
     $code .= " ?>";
     $parser = new PHPParser_Parser(new PHPParser_Lexer());
     try {
         $this->statements = $parser->parse($code);
     } catch (PHPParser_Error $parserError) {
         $message = sprintf("Failed to parse code: [%s] error is %s", $parserError->getRawLine(), $parserError->getRawMessage());
         throw new JigException($message, 0, $parserError);
     }
     $printer = new TemplatePrinter($parsedTemplate);
     $segmentText = $printer->prettyPrint($this->statements);
     $segmentText = substr($segmentText, 0, strrpos($segmentText, ';'));
     $filters = array_merge($filters, $printer->getFilters());
     if ($printer->hasAssignment() === true) {
         $this->hasAssignment = true;
         return $segmentText . "; ";
     }
     $this->hasAssignment = false;
     foreach ($filters as $filterName) {
         switch ($filterName) {
             case JigConverter::FILTER_NONE:
                 break 2;
             case JigConverter::FILTER_HTML:
                 $segmentText = '$this->escaper->escapeHTML(' . $segmentText . ')';
                 break 2;
             case JigConverter::FILTER_HTML_ATTR:
                 $segmentText = '$this->escaper->escapeHTMLAttribute(' . $segmentText . ')';
                 break 2;
             case JigConverter::FILTER_JS:
                 $segmentText = '$this->escaper->escapeJavascript(' . $segmentText . ')';
                 break 2;
             case JigConverter::FILTER_CSS:
                 $segmentText = '$this->escaper->escapeCSS(' . $segmentText . ')';
                 break 2;
             case JigConverter::FILTER_URL:
                 $segmentText = '$this->escaper->escapeURLComponent(' . $segmentText . ')';
                 break 2;
         }
         foreach ($parsedTemplate->getPlugins() as $pluginClasname) {
             $filterList = $pluginClasname::getFilterList();
             if (in_array($filterName, $filterList, true) === true) {
                 $filterParam = JigConverter::convertClassnameToParam($pluginClasname);
                 $segmentText = sprintf("\$this->%s->callFilter('%s', %s)", $filterParam, $filterName, $segmentText);
                 continue 2;
             }
         }
         throw new JigException("Template is trying to use filter '{$filterName}', which is not known.", JigException::UNKNOWN_FILTER);
     }
     if (($flags & self::NO_OUTPUT) === 0) {
         $segmentText = "echo " . $segmentText . "";
     }
     if (($flags & self::NO_PHP) === 0) {
         $segmentText = $segmentText . "; ";
     }
     return $segmentText;
 }