public function evaluate()
{
$rendererPath = sprintf('%s/renderer', $this->path);
$canRenderWithRenderer = $this->tsRuntime->canRender($rendererPath);
$renderPath = $this->getRenderPath();
if ($canRenderWithRenderer) {
$renderedElement = $this->tsRuntime->evaluate($rendererPath, $this);
} elseif ($renderPath !== null) {
if (substr($renderPath, 0, 1) === '/') {
$renderedElement = $this->tsRuntime->render(substr($renderPath, 1));
} else {
$renderedElement = $this->tsRuntime->render($this->path . '/' . str_replace('.', '/', $renderPath));
}
} else {
$renderedElement = $this->tsRuntime->render(sprintf('%s/element<%s>', $this->path, $this->getType()));
}
return $renderedElement;
}