/**
  * Parse the given template and return it.
  *
  * Will cache the results for one call.
  *
  * @param string $templatePathAndFilename absolute filename of the template to be parsed
  * @return \F3\Fluid\Core\Parser\ParsedTemplateInterface the parsed template tree
  * @throws \F3\Fluid\View\Exception\InvalidTemplateResourceException
  * @author Sebastian Kurfürst <*****@*****.**>
  */
 protected function parseTemplate($templatePathAndFilename)
 {
     $templateSource = \F3\FLOW3\Utility\Files::getFileContents($templatePathAndFilename, FILE_TEXT);
     if ($templateSource === FALSE) {
         throw new \F3\Fluid\View\Exception\InvalidTemplateResourceException('"' . $templatePathAndFilename . '" is not a valid template resource URI.', 1257246929);
     }
     return $this->templateParser->parse($templateSource);
 }
 /**
  * Render the given template file with the given variables
  *
  * @param string $templatePathAndFilename
  * @param array $contextVariables
  * @return string
  * @author Christopher Hlubek <*****@*****.**>
  */
 protected function renderTemplate($templatePathAndFilename, $contextVariables)
 {
     $templateSource = \F3\FLOW3\Utility\Files::getFileContents($templatePathAndFilename, FILE_TEXT);
     if ($templateSource === FALSE) {
         throw new \F3\Fluid\Core\RuntimeException('The template file "' . $templatePathAndFilename . '" could not be loaded.', 1225709595);
     }
     $parsedTemplate = $this->templateParser->parse($templateSource);
     $renderingContext = $this->buildRenderingContext($contextVariables);
     return $parsedTemplate->render($renderingContext);
 }