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