Example #1
0
File: Jig.php Project: PeeHaa/Jig
 /**
  * @param $templateString
  * @param $cacheName
  * @return mixed
  */
 public function getParsedTemplateFromString($templateString, $cacheName)
 {
     $templateString = str_replace("\r\n", "\n", $templateString);
     $lines = explode("\n", $templateString);
     $terminatedLines = [];
     foreach ($lines as $line) {
         $terminatedLines[] = $line . "\n";
     }
     $parsedTemplate = $this->jigConverter->createFromLines($terminatedLines);
     $parsedTemplate->setTemplateName($cacheName);
     $fqcn = $this->jigConfig->getFQCNFromTemplateName($parsedTemplate->getTemplateName());
     if (class_exists($fqcn, true)) {
         return $fqcn;
     }
     $templateDependencies = $parsedTemplate->getTemplateDependencies();
     foreach ($templateDependencies as $templateDependency) {
         $this->compile($templateDependency);
     }
     //This has to be after checking the dependencies are compiled
     //to ensure the getDependency function is available.
     $outputFilename = $parsedTemplate->saveCompiledTemplate($this->jigConfig->templateCompileDirectory, $this->jigConfig->getFQCNFromTemplateName($cacheName));
     //This is very stupid. We should be able to auto-load the class
     //if and only if it is required. But the Composer autoloader caches
     //the 'class doesn't exist' result from earlier, which means we
     //have to load it by hand.
     /** @noinspection PhpIncludeInspection */
     require $outputFilename;
     return $fqcn;
 }
Example #2
0
File: Jig.php Project: PeeHaa/Jig
 /**
  * @param $templateName
  * @return string
  */
 public static function getCompiledFilenameInternal($templateName, JigConverter $jigConverter, JigConfig $jigConfig)
 {
     $className = $jigConverter->getClassNameFromFilename($templateName);
     $compiledFilename = $jigConfig->getCompiledFilenameFromClassname($className);
     return $compiledFilename;
 }
Example #3
0
function prepareJigConverter(JigConverter $jigConverter, $injector)
{
    $jigConverter->addDefaultHelper('Jig\\TemplateHelper\\DebugHelper');
}
Example #4
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;
 }
Example #5
0
 /**
  * @param JigConverter $jigConverter
  * @param $segmentText
  */
 public function bindTestEnd(JigConverter $jigConverter, $segmentText)
 {
     $jigConverter->addText("Segment text was " . $segmentText);
     $jigConverter->addText("This is the end");
 }