nginxsonarrradarrplexorganizrdashboardbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpcserverhomepagesabnzbdheimdallembycouchpotatonzbget
		
		
		
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							55 lines
						
					
					
						
							1.6 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							55 lines
						
					
					
						
							1.6 KiB
						
					
					
				
								<?php declare(strict_types=1);
							 | 
						|
								
							 | 
						|
								namespace PhpParser\Parser;
							 | 
						|
								
							 | 
						|
								use PhpParser\Error;
							 | 
						|
								use PhpParser\ErrorHandler;
							 | 
						|
								use PhpParser\Parser;
							 | 
						|
								
							 | 
						|
								class Multiple implements Parser
							 | 
						|
								{
							 | 
						|
								    /** @var Parser[] List of parsers to try, in order of preference */
							 | 
						|
								    private $parsers;
							 | 
						|
								
							 | 
						|
								    /**
							 | 
						|
								     * Create a parser which will try multiple parsers in an order of preference.
							 | 
						|
								     *
							 | 
						|
								     * Parsers will be invoked in the order they're provided to the constructor. If one of the
							 | 
						|
								     * parsers runs without throwing, it's output is returned. Otherwise the exception that the
							 | 
						|
								     * first parser generated is thrown.
							 | 
						|
								     *
							 | 
						|
								     * @param Parser[] $parsers
							 | 
						|
								     */
							 | 
						|
								    public function __construct(array $parsers) {
							 | 
						|
								        $this->parsers = $parsers;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    public function parse(string $code, ErrorHandler $errorHandler = null) {
							 | 
						|
								        if (null === $errorHandler) {
							 | 
						|
								            $errorHandler = new ErrorHandler\Throwing;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        list($firstStmts, $firstError) = $this->tryParse($this->parsers[0], $errorHandler, $code);
							 | 
						|
								        if ($firstError === null) {
							 | 
						|
								            return $firstStmts;
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        for ($i = 1, $c = count($this->parsers); $i < $c; ++$i) {
							 | 
						|
								            list($stmts, $error) = $this->tryParse($this->parsers[$i], $errorHandler, $code);
							 | 
						|
								            if ($error === null) {
							 | 
						|
								                return $stmts;
							 | 
						|
								            }
							 | 
						|
								        }
							 | 
						|
								
							 | 
						|
								        throw $firstError;
							 | 
						|
								    }
							 | 
						|
								
							 | 
						|
								    private function tryParse(Parser $parser, ErrorHandler $errorHandler, $code) {
							 | 
						|
								        $stmts = null;
							 | 
						|
								        $error = null;
							 | 
						|
								        try {
							 | 
						|
								            $stmts = $parser->parse($code, $errorHandler);
							 | 
						|
								        } catch (Error $error) {}
							 | 
						|
								        return [$stmts, $error];
							 | 
						|
								    }
							 | 
						|
								}
							 | 
						|
								
							 |