public function compile($name)
{
foreach ($this->onCompile ?: [] as $cb) {
call_user_func(Helpers::checkCallback($cb), $this);
}
$this->onCompile = [];
$source = $this->getLoader()->getContent($name);
try {
$tokens = $this->getParser()->setContentType($this->contentType)->parse($source);
$code = $this->getCompiler()->setContentType($this->contentType)->compile($tokens, $this->getTemplateClass($name));
} catch (\Exception $e) {
if (!$e instanceof CompileException) {
$e = new CompileException("Thrown exception '{$e->getMessage()}'", NULL, $e);
}
$line = isset($tokens) ? $this->getCompiler()->getLine() : $this->getParser()->getLine();
throw $e->setSource($source, $line, $name);
}
if (!preg_match('#\\n|\\?#', $name)) {
$code = "<?php\n// source: {$name}\n?>" . $code;
}
$code = PhpHelpers::reformatCode($code);
return $code;
}