]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InSelectInTable.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / remex-html / RemexHtml / TreeBuilder / InSelectInTable.php
1 <?php
2
3 namespace RemexHtml\TreeBuilder;
4 use RemexHtml\Tokenizer\Attributes;
5
6 /**
7  * The "in select in table" insertion mode
8  */
9 class InSelectInTable extends InsertionMode {
10         public function characters( $text, $start, $length, $sourceStart, $sourceLength ) {
11                 $this->dispatcher->inSelect->characters(
12                         $text, $start, $length, $sourceStart, $sourceLength );
13         }
14
15         public function startTag( $name, Attributes $attrs, $selfClose, $sourceStart, $sourceLength ) {
16                 $builder = $this->builder;
17                 $stack = $builder->stack;
18                 $dispatcher = $this->dispatcher;
19
20                 switch ( $name ) {
21                 case 'caption':
22                 case 'table':
23                 case 'tbody':
24                 case 'tfoot':
25                 case 'thead':
26                 case 'tr':
27                 case 'td':
28                 case 'th':
29                         $builder->error( "unexpected <$name> in select in table, closing select",
30                                 $sourceStart );
31                         $builder->popAllUpToName( 'select', $sourceStart, 0 );
32                         $dispatcher->reset()
33                                 ->startTag( $name, $attrs, $selfClose, $sourceStart, $sourceLength );
34                         break;
35
36                 default:
37                         $dispatcher->inSelect->startTag(
38                                 $name, $attrs, $selfClose, $sourceStart, $sourceLength );
39                 }
40         }
41
42         public function endTag( $name, $sourceStart, $sourceLength ) {
43                 $builder = $this->builder;
44                 $stack = $builder->stack;
45                 $dispatcher = $this->dispatcher;
46
47                 switch ( $name ) {
48                 case 'caption':
49                 case 'table':
50                 case 'tbody':
51                 case 'tfoot':
52                 case 'thead':
53                 case 'tr':
54                 case 'td':
55                 case 'th':
56                         if ( !$stack->isInTableScope( $name ) ) {
57                                 $builder->error( "unexpected </$name> in select in table, ignoring",
58                                         $sourceStart );
59                                 return;
60                         }
61                         $builder->error( "unexpected </$name> in select in table, closing select",
62                                 $sourceStart );
63                         $builder->popAllUpToName( 'select', $sourceStart, 0 );
64                         $dispatcher->reset()
65                                 ->endTag( $name, $sourceStart, $sourceLength );
66                         break;
67
68                 default:
69                         $dispatcher->inSelect->endTag( $name, $sourceStart, $sourceLength );
70                 }
71         }
72
73         public function endDocument( $pos ) {
74                 $this->dispatcher->inSelect->endDocument( $pos );
75         }
76 }