Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
NoInclude
0.00% covered (danger)
0.00%
0 / 40
0.00% covered (danger)
0.00%
0 / 6
240
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 type
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 name
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 toEnd
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 ackEnd
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 transformation
0.00% covered (danger)
0.00%
0 / 35
0.00% covered (danger)
0.00%
0 / 1
110
1<?php
2declare( strict_types = 1 );
3
4namespace Wikimedia\Parsoid\Wt2Html\TT;
5
6use Wikimedia\Parsoid\Tokens\EOFTk;
7use Wikimedia\Parsoid\Utils\PHPUtils;
8use Wikimedia\Parsoid\Utils\TokenUtils;
9use Wikimedia\Parsoid\Wt2Html\TokenTransformManager;
10
11/**
12 * Simple noinclude implementation.
13 * Strips all tokens in noinclude sections.
14 */
15class NoInclude extends TokenCollector {
16    /**
17     * @param TokenTransformManager $manager manager environment
18     * @param array $options options
19     */
20    public function __construct( TokenTransformManager $manager, array $options ) {
21        parent::__construct( $manager, $options );
22    }
23
24    /**
25     * @return string
26     */
27    protected function type(): string {
28        return 'tag';
29    }
30
31    /**
32     * @return string
33     */
34    protected function name(): string {
35        return 'noinclude';
36    }
37
38    /**
39     * @return bool
40     */
41    protected function toEnd(): bool {
42        return true;    // Match the end-of-input if </noinclude> is missing.
43    }
44
45    /**
46     * @return bool
47     */
48    protected function ackEnd(): bool {
49        return true;
50    }
51
52    /**
53     * @param array $collection
54     * @return TokenHandlerResult
55     */
56    protected function transformation( array $collection ): TokenHandlerResult {
57        $start = array_shift( $collection );
58        $sc = TokenUtils::getTokenType( $start );
59
60        // A stray end tag.
61        if ( $sc === 'EndTagTk' ) {
62            $meta = TokenCollector::buildMetaToken( $this->manager, 'mw:Includes/NoInclude',
63                true, ( $start->dataParsoid->tsr ?? null ), null );
64            return new TokenHandlerResult( [ $meta ] );
65        }
66
67        // Handle self-closing tag case specially!
68        if ( $sc === 'SelfclosingTagTk' ) {
69            return ( $this->options['isInclude'] ) ?
70                new TokenHandlerResult( [] ) :
71                new TokenHandlerResult( [
72                    TokenCollector::buildMetaToken(
73                        $this->manager,
74                        'mw:Includes/NoInclude',
75                        false,
76                        ( $start->dataParsoid->tsr ?? null ),
77                        null )
78                ] );
79        }
80
81        $tokens = [];
82        $end = array_pop( $collection );
83        $eof = $end instanceof EOFTk;
84
85        if ( empty( $this->options['isInclude'] ) ) {
86            // Content is preserved
87            // Add meta tags for open and close
88            $startTSR = $start->dataParsoid->tsr ?? null;
89            $endTSR = $end->dataParsoid->tsr ?? null;
90            $tokens[] = TokenCollector::buildMetaToken( $this->manager, 'mw:Includes/NoInclude',
91                false, $startTSR, null );
92
93            PHPUtils::pushArray( $tokens, $collection );
94            if ( $end && !$eof ) {
95                $tokens[] = TokenCollector::buildMetaToken( $this->manager, 'mw:Includes/NoInclude',
96                    true, $endTSR, null );
97            }
98        } elseif ( !$this->options['inTemplate'] ) {
99            // Content is stripped
100            $tokens[] = TokenCollector::buildStrippedMetaToken( $this->manager,
101                'mw:Includes/NoInclude', $start, $eof ? null : $end );
102        }
103
104        // Preserve EOF
105        if ( $eof ) {
106            $tokens[] = $end;
107        }
108
109        return new TokenHandlerResult( $tokens );
110    }
111}