]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - vendor/wikimedia/css-sanitizer/src/Parser/TokenListTokenizer.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / css-sanitizer / src / Parser / TokenListTokenizer.php
1 <?php
2 /**
3  * @file
4  * @license https://opensource.org/licenses/Apache-2.0 Apache-2.0
5  */
6
7 namespace Wikimedia\CSS\Parser;
8
9 use Wikimedia\CSS\Util;
10 use Wikimedia\CSS\Objects\Token;
11 use Wikimedia\CSS\Objects\TokenList;
12
13 /**
14  * Tokenizer that just returns a predefined list of tokens
15  */
16 class TokenListTokenizer implements Tokenizer {
17
18         /** @var Token[] */
19         protected $tokens;
20
21         /** @var Token */
22         protected $eof;
23
24         /**
25          * @param Token[]|TokenList $tokens Tokens to return
26          * @param Token|null $eof Token to copy as EOF
27          */
28         public function __construct( $tokens, Token $eof = null ) {
29                 if ( $tokens instanceof TokenList ) {
30                         $this->tokens = $tokens->toTokenArray();
31                 } elseif ( is_array( $tokens ) ) {
32                         Util::assertAllInstanceOf( $tokens, Token::class, '$tokens' );
33                         $this->tokens = $tokens;
34                 } else {
35                         throw new \InvalidArgumentException( '$tokens must be a TokenList or an array of tokens' );
36                 }
37
38                 if ( $eof && $eof->type() === Token::T_EOF ) {
39                         $this->eof = $eof;
40                 } else {
41                         $data = [];
42                         if ( $eof ) {
43                                 $data['position'] = $eof->getPosition();
44                         }
45                         $this->eof = new Token( Token::T_EOF, $data );
46                 }
47         }
48
49         public function getParseErrors() {
50                 return [];
51         }
52
53         public function clearParseErrors() {
54         }
55
56         public function consumeToken() {
57                 return array_shift( $this->tokens ) ?: $this->eof;
58         }
59
60 }