Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.88% covered (success)
94.88%
408 / 430
42.86% covered (danger)
42.86%
3 / 7
CRAP
0.00% covered (danger)
0.00%
0 / 1
Preprocessor_Hash
94.88% covered (success)
94.88%
408 / 430
42.86% covered (danger)
42.86%
3 / 7
128.13
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 newFrame
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 newCustomFrame
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 newPartNodeArray
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 1
12
 preprocessToObj
95.24% covered (success)
95.24%
20 / 21
0.00% covered (danger)
0.00%
0 / 1
5
 buildDomTreeArrayFromText
98.45% covered (success)
98.45%
381 / 387
0.00% covered (danger)
0.00%
0 / 1
112
 addLiteral
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2/**
3 * Preprocessor using PHP arrays
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @file
21 * @ingroup Parser
22 */
23
24use MediaWiki\Parser\Parser;
25
26/**
27 * Differences from DOM schema:
28 *   * attribute nodes are children
29 *   * "<h>" nodes that aren't at the top are replaced with <possible-h>
30 *
31 * Nodes are stored in a recursive array data structure. A node store is an
32 * array where each element may be either a scalar (representing a text node)
33 * or a "descriptor", which is a two-element array where the first element is
34 * the node name and the second element is the node store for the children.
35 *
36 * Attributes are represented as children that have a node name starting with
37 * "@", and a single text node child.
38 *
39 * @todo: Consider replacing descriptor arrays with objects of a new class.
40 * Benchmark and measure resulting memory impact.
41 *
42 * @ingroup Parser
43 */
44// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
45class Preprocessor_Hash extends Preprocessor {
46    /** Cache format version */
47    protected const CACHE_VERSION = 4;
48
49    /** @var int|false Min wikitext size for which to cache DOM tree */
50    protected $cacheThreshold;
51
52    /**
53     * @see Preprocessor::__construct()
54     * @param Parser $parser
55     * @param WANObjectCache|null $wanCache
56     * @param array $options Additional options include:
57     *   - cacheThreshold: min text size for which to cache DOMs. [Default: false]
58     */
59    public function __construct(
60        Parser $parser,
61        WANObjectCache $wanCache = null,
62        array $options = []
63    ) {
64        parent::__construct( $parser, $wanCache, $options );
65
66        $this->cacheThreshold = $options['cacheThreshold'] ?? false;
67    }
68
69    /**
70     * @return PPFrame_Hash
71     */
72    public function newFrame() {