/** * @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; }
/** * @param $templateName * @return string */ public static function getCompiledFilenameInternal($templateName, JigConverter $jigConverter, JigConfig $jigConfig) { $className = $jigConverter->getClassNameFromFilename($templateName); $compiledFilename = $jigConfig->getCompiledFilenameFromClassname($className); return $compiledFilename; }
function prepareJigConverter(JigConverter $jigConverter, $injector) { $jigConverter->addDefaultHelper('Jig\\TemplateHelper\\DebugHelper'); }
/** * @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; }
/** * @param JigConverter $jigConverter * @param $segmentText */ public function bindTestEnd(JigConverter $jigConverter, $segmentText) { $jigConverter->addText("Segment text was " . $segmentText); $jigConverter->addText("This is the end"); }