]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blob - vendor/wikimedia/remex-html/RemexHtml/TreeBuilder/InTemplate.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / wikimedia / remex-html / RemexHtml / TreeBuilder / InTemplate.php
1 <?php
2
3 namespace RemexHtml\TreeBuilder;
4 use RemexHtml\Tokenizer\Attributes;
5
6 /**
7  * The "in template" insertion mode
8  */
9 class InTemplate extends InsertionMode {
10         public function characters( $text, $start, $length, $sourceStart, $sourceLength ) {
11                 $this->dispatcher->inBody->characters(
12                         $text, $start, $length, $sourceStart, $sourceLength );
13         }
14
15         public function startTag( $name, Attributes $attrs, $selfClose, $sourceStart, $sourceLength ) {
16                 $dispatcher = $this->dispatcher;
17
18                 switch ( $name ) {
19                 case 'base':
20                 case 'basefont':
21                 case 'bgsound':
22                 case 'link':
23                 case 'meta':
24                 case 'noframes':
25                 case 'script':
26                 case 'style':
27                 case 'template':
28                 case 'title':
29                         $dispatcher->inHead->startTag(
30                                 $name, $attrs, $selfClose, $sourceStart, $sourceLength );
31                         return;
32
33                 case 'caption':
34                 case 'colgroup':
35                 case 'tbody':
36                 case 'tfoot':
37                 case 'thead':
38                         $mode = Dispatcher::IN_TABLE;
39                         break;
40
41                 case 'col':
42                         $mode = Dispatcher::IN_COLUMN_GROUP;
43                         break;
44
45                 case 'tr':
46                         $mode = Dispatcher::IN_TABLE_BODY;
47                         break;
48
49                 case 'td':
50                 case 'th':
51                         $mode = Dispatcher::IN_ROW;
52                         break;
53
54                 default:
55                         $mode = Dispatcher::IN_BODY;
56                         break;
57                 }
58
59                 $dispatcher->templateModeStack->pop();
60                 $dispatcher->templateModeStack->push( $mode );
61                 $dispatcher->switchMode( $mode )
62                         ->startTag( $name, $attrs, $selfClose, $sourceStart, $sourceLength );
63         }
64
65         public function endTag( $name, $sourceStart, $sourceLength ) {
66                 $dispatcher = $this->dispatcher;
67
68                 switch ( $name ) {
69                 case 'template':
70                         $dispatcher->inHead->endTag( $name, $sourceStart, $sourceLength );
71                         break;
72
73                 default:
74                         $this->builder->error( "unexpected </$name> in template, ignoring", $sourceStart );
75                         return;
76                 }
77         }
78
79         public function endDocument( $pos ) {
80                  $builder = $this->builder;
81                  $stack = $builder->stack;
82                  $dispatcher = $this->dispatcher;
83
84                  if ( !$stack->hasTemplate() ) {
85                          $builder->stopParsing( $pos );
86                          return;
87                  }
88
89                  $builder->error( "unexpected end of file in template", $pos );
90                  $builder->popAllUpToName( 'template', $pos, 0 );
91                  $builder->afe->clearToMarker();
92                  $dispatcher->templateModeStack->pop();
93                  $dispatcher->reset()
94                          ->endDocument( $pos );
95         }
96 }