Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (danger)
50.00%
3 / 6
CRAP
94.40% covered (success)
94.40%
388 / 411
Preprocessor_Hash
0.00% covered (danger)
0.00%
0 / 1
50.00% covered (danger)
50.00%
3 / 6
130.87
94.40% covered (success)
94.40%
388 / 411
 __construct
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
2 / 2
 newFrame
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 newCustomFrame
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 1
 newPartNodeArray
0.00% covered (danger)
0.00%
0 / 1
12
0.00% covered (danger)
0.00%
0 / 13
 preprocessToObj
0.00% covered (danger)
0.00%
0 / 1
119
97.69% covered (success)
97.69%
380 / 389
 addLiteral
100.00% covered (success)
100.00%
1 / 1
3
100.00% covered (success)
100.00%
5 / 5
<?php
/**
 * Preprocessor using PHP arrays
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @file
 * @ingroup Parser
 */
/**
 * Differences from DOM schema:
 *   * attribute nodes are children
 *   * "<h>" nodes that aren't at the top are replaced with <possible-h>
 *
 * Nodes are stored in a recursive array data structure. A node store is an
 * array where each element may be either a scalar (representing a text node)
 * or a "descriptor", which is a two-element array where the first element is
 * the node name and the second element is the node store for the children.
 *
 * Attributes are represented as children that have a node name starting with
 * "@", and a single text node child.
 *
 * @todo: Consider replacing descriptor arrays with objects of a new class.
 * Benchmark and measure resulting memory impact.
 *
 * @ingroup Parser
 */
// phpcs:ignore Squiz.Classes.ValidClassName.NotCamelCaps
class Preprocessor_Hash extends Preprocessor {
    public const CACHE_PREFIX = 'preprocess-hash';
    public const CACHE_VERSION = 2;
    /**
     * @param Parser $parser
     */
    public function __construct( $parser ) {
        $this->parser = $parser;
    }
    /**
     * @return PPFrame_Hash
     */
    public function newFrame() {
        return new PPFrame_Hash( $this );
    }
    /**
     * @param array $args
     * @return PPCustomFrame_Hash
     */
    public function newCustomFrame( $args ) {
        return new PPCustomFrame_Hash( $this, $args );
    }
    /**
     * @param array $values
     * @return PPNode_Hash_Array
     */
    public function newPartNodeArray( $values ) {
        $list = [];
        foreach ( $values as $k => $val ) {
            if ( is_int( $k ) ) {
                $store = [ [ 'part', [
                    [ 'name', [ [ '@index', [ $k ] ] ] ],
                    [ 'value', [ strval( $val ) ] ],
                ] ] ];
            } else {
                $store = [ [ 'part', [
                    [ 'name', [ strval( $k ) ] ],
                    '=',
                    [ 'value', [ strval( $val ) ] ],
                ] ] ];
            }
            $list[] = new PPNode_Hash_Tree( $store, 0 );
        }
        $node = new PPNode_Hash_Array( $list );
        return $node;
    }
    /**
     * Preprocess some wikitext and return the document tree.
     *
     * @param string $text The text to parse
     * @param int $flags Bitwise combination of:
     *    Parser::PTD_FOR_INCLUSION    Handle "<noinclude>" and "<includeonly>" as if the text is being
     *                                 included. Default is to assume a direct page view.
     *
     * The generated DOM tree must depend only on the input text and the flags.
     * The DOM tree must be the same in OT_HTML and OT_WIKI mode, to avoid a regression of T6899.
     *
     * Any flag added to the $flags parameter here, or any other parameter liable to cause a
     * change in the DOM tree for a given text, must be passed through the section identifier
     * in the section edit link and thus back to extractSections().
     *
     * @throws MWException
     * @return PPNode_Hash_Tree
     */
    public function preprocessToObj( $text, $flags = 0 ) {