<?php 
 
/* 
 * This file is part of the Symfony package. 
 * 
 * (c) Fabien Potencier <fabien@symfony.com> 
 * 
 * For the full copyright and license information, please view the LICENSE 
 * file that was distributed with this source code. 
 */ 
 
namespace Symfony\Bundle\FrameworkBundle\Templating; 
 
@trigger_error('The '.TemplateNameParser::class.' class is deprecated since version 4.3 and will be removed in 5.0; use Twig instead.', \E_USER_DEPRECATED); 
 
use Symfony\Component\HttpKernel\KernelInterface; 
use Symfony\Component\Templating\TemplateNameParser as BaseTemplateNameParser; 
use Symfony\Component\Templating\TemplateReferenceInterface; 
 
/** 
 * TemplateNameParser converts template names from the short notation 
 * "bundle:section:template.format.engine" to TemplateReferenceInterface 
 * instances. 
 * 
 * @author Fabien Potencier <fabien@symfony.com> 
 * 
 * @deprecated since version 4.3, to be removed in 5.0; use Twig instead. 
 */ 
class TemplateNameParser extends BaseTemplateNameParser 
{ 
    protected $kernel; 
    protected $cache = []; 
 
    public function __construct(KernelInterface $kernel) 
    { 
        $this->kernel = $kernel; 
    } 
 
    /** 
     * {@inheritdoc} 
     */ 
    public function parse($name) 
    { 
        if ($name instanceof TemplateReferenceInterface) { 
            return $name; 
        } elseif (isset($this->cache[$name])) { 
            return $this->cache[$name]; 
        } 
 
        // normalize name 
        $name = preg_replace('#/{2,}#', '/', str_replace('\\', '/', $name)); 
 
        if (false !== strpos($name, '..')) { 
            throw new \RuntimeException(sprintf('Template name "%s" contains invalid characters.', $name)); 
        } 
 
        if (!preg_match('/^(?:([^:]*):([^:]*):)?(.+)\.([^\.]+)\.([^\.]+)$/', $name, $matches) || 0 === strpos($name, '@')) { 
            return parent::parse($name); 
        } 
 
        $template = new TemplateReference($matches[1], $matches[2], $matches[3], $matches[4], $matches[5]); 
 
        if ($template->get('bundle')) { 
            try { 
                $this->kernel->getBundle($template->get('bundle')); 
            } catch (\Exception $e) { 
                throw new \InvalidArgumentException(sprintf('Template name "%s" is not valid.', $name), 0, $e); 
            } 
        } 
 
        return $this->cache[$name] = $template; 
    } 
}