Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
70.00% covered (warning)
70.00%
28 / 40
70.00% covered (warning)
70.00%
7 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
Lr
70.00% covered (warning)
70.00%
28 / 40
70.00% covered (warning)
70.00%
7 / 10
24.80
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
1
 getLeft
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getRight
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getArg
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 inCurlies
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 render
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 renderMML
76.19% covered (warning)
76.19%
16 / 21
0.00% covered (danger)
0.00%
0 / 1
4.22
 mmlTranslate
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
12
 containsFunc
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 extractIdentifiers
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2
3declare( strict_types = 1 );
4
5namespace MediaWiki\Extension\Math\WikiTexVC\Nodes;
6
7use MediaWiki\Extension\Math\WikiTexVC\MMLmappings\BaseMethods;
8use MediaWiki\Extension\Math\WikiTexVC\MMLmappings\TexConstants\TexClass;
9use MediaWiki\Extension\Math\WikiTexVC\MMLnodes\MMLmo;
10use MediaWiki\Extension\Math\WikiTexVC\MMLnodes\MMLmrow;
11
12class Lr extends TexNode {
13
14    /** @var string */
15    private $left;
16    /** @var string */
17    private $right;
18    /** @var TexArray */
19    private $arg;
20
21    public function __construct( string $left, string $right, TexArray $arg ) {
22        parent::__construct( $left, $right, $arg );
23        $this->left = $left;
24        $this->right = $right;
25        $this->arg = $arg;
26    }
27
28    /**
29     * @return string
30     */
31    public function getLeft(): string {
32        return $this->left;
33    }
34
35    /**
36     * @return string
37     */
38    public function getRight(): string {
39        return $this->right;
40    }
41
42    /**
43     * @return TexArray
44     */
45    public function getArg(): TexArray {
46        return $this->arg;
47    }
48
49    /** @inheritDoc */
50    public function inCurlies() {
51        return '{' . $this->render() . '}';
52    }
53
54    /** @inheritDoc */
55    public function render() {
56        return '\\left' . $this->left . $this->arg->render() . '\\right' . $this->right;
57    }
58
59    /** @inheritDoc */
60    public function renderMML( $arguments = [], &$state = [] ) {
61        // TBD  set attributes for right AND left correctly
62        $rightAttrs = [];
63        if ( $this->right == "." ) {
64            $rightAttrs = [ "fence" => "true", "stretchy" => "true", "symmetric" => "true" ];
65        }
66
67        $bm = new BaseMethods();
68        $left = $bm->checkAndParseDelimiter( $this->left, $this, [], null, true,
69            TexClass::OPEN );
70        if ( !$left ) {
71            $moLeft = new MMLmo( TexClass::OPEN, [] );
72            $left = $moLeft->encapsulateRaw( $this->right );
73        }
74        $right = $bm->checkAndParseDelimiter( $this->right, $this, $rightAttrs, null, true,
75            TexClass::CLOSE );
76        if ( !$right ) {
77            $moRight = new MMLmo( TexClass::CLOSE, $rightAttrs );
78            $right = $moRight->encapsulateRaw( $this->right );
79        }
80        // Don't apply outer ' inside the LR structure
81        unset( $state['deriv'] );
82        $inner = $this->getArg()->renderMML( [], $state );
83        $mrow = new MMLmrow( TexClass::INNER );
84        return $mrow->encapsulateRaw(
85            $left . $inner .
86            $right
87        );
88    }
89
90    private function mmlTranslate( string $input ): string {
91        switch ( trim( $input ) ) {
92            case "\\vert":
93                return "|";
94            default:
95                return $input;
96        }
97    }
98
99    /** @inheritDoc */
100    public function containsFunc( $target, $args = null ) {
101        if ( $args == null ) {
102            $args = [ '\\left', '\\right', $this->arg ];
103        }
104        return parent::containsFunc( $target, $args );
105    }
106
107    /** @inheritDoc */
108    public function extractIdentifiers( $args = null ) {
109        if ( $args == null ) {
110            $args = [ $this->arg ];
111        }
112        return parent::extractIdentifiers( $args );
113    }
114
115}