Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 40 |
|
0.00% |
0 / 6 |
CRAP | |
0.00% |
0 / 1 |
NoInclude | |
0.00% |
0 / 40 |
|
0.00% |
0 / 6 |
240 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
type | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
name | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
toEnd | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
ackEnd | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 | |||
transformation | |
0.00% |
0 / 35 |
|
0.00% |
0 / 1 |
110 |
1 | <?php |
2 | declare( strict_types = 1 ); |
3 | |
4 | namespace Wikimedia\Parsoid\Wt2Html\TT; |
5 | |
6 | use Wikimedia\Parsoid\Tokens\EOFTk; |
7 | use Wikimedia\Parsoid\Utils\PHPUtils; |
8 | use Wikimedia\Parsoid\Utils\TokenUtils; |
9 | use Wikimedia\Parsoid\Wt2Html\TokenTransformManager; |
10 | |
11 | /** |
12 | * Simple noinclude implementation. |
13 | * Strips all tokens in noinclude sections. |
14 | */ |
15 | class 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 | } |