mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Math
synced 2024-11-30 18:35:12 +00:00
Treat \operatorname as a valid operator for limits
* Extend logic for checking for valid operators * Add tests Bug: T365170 Change-Id: I4d3762e3258c78ac5fae8b923f12aabcd2175f3d
This commit is contained in:
parent
4ce41fa717
commit
775fec5450
|
@ -128,9 +128,16 @@ class TexArray extends TexNode implements \ArrayAccess, \IteratorAggregate {
|
||||||
$tu = TexUtil::getInstance();
|
$tu = TexUtil::getInstance();
|
||||||
|
|
||||||
// Check whether the current node is a possible preceding literal
|
// Check whether the current node is a possible preceding literal
|
||||||
if ( !( $currentNode instanceof Literal
|
if ( !(
|
||||||
&& ( $tu->nullary_macro( trim( $currentNode->getArg() ) )
|
// logically superfluous brackets were inserted to improve readability
|
||||||
|| trim( $currentNode->getArg() ) == "\\lim" ) ) ) {
|
( $currentNode instanceof Literal &&
|
||||||
|
// Check if the current node is a nullary macro such as \iint, \sum, \prod, etc.
|
||||||
|
( $tu->nullary_macro( trim( $currentNode->getArg() ) )
|
||||||
|
// or a limit operator
|
||||||
|
|| ( trim( $currentNode->getArg() ) == "\\lim" ) ) ) ||
|
||||||
|
// or the special case of \operatorname
|
||||||
|
( $currentNode instanceof Fun1nb && $currentNode->getFname() == "\\operatorname" )
|
||||||
|
) ) {
|
||||||
return [ null, false ];
|
return [ null, false ];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,8 @@
|
||||||
namespace MediaWiki\Extension\Math\Tests\WikiTexVC\Nodes;
|
namespace MediaWiki\Extension\Math\Tests\WikiTexVC\Nodes;
|
||||||
|
|
||||||
use InvalidArgumentException;
|
use InvalidArgumentException;
|
||||||
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\DQ;
|
||||||
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\Fun1nb;
|
||||||
use MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal;
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\Literal;
|
||||||
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray;
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexArray;
|
||||||
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexNode;
|
use MediaWiki\Extension\Math\WikiTexVC\Nodes\TexNode;
|
||||||
|
@ -132,4 +134,21 @@ class TexArrayTest extends MediaWikiUnitTestCase {
|
||||||
$res = $ta->renderMML( [], [ 'squashLiterals' => true ] );
|
$res = $ta->renderMML( [], [ 'squashLiterals' => true ] );
|
||||||
$this->assertEquals( '<mi>a</mi><mi>γ</mi>', $res );
|
$this->assertEquals( '<mi>a</mi><mi>γ</mi>', $res );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSumInLimits() {
|
||||||
|
$ta = new TexArray();
|
||||||
|
$sum = new Literal( '\sum' );
|
||||||
|
$res = $ta->checkForLimits( $sum, new DQ( new Literal( '\limits' ), new Literal( 'n' ) ) );
|
||||||
|
$this->assertTrue( $res[1] );
|
||||||
|
$this->assertEquals( $sum, $res[0] );
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testCustomOpInLimits() {
|
||||||
|
$ta = new TexArray();
|
||||||
|
$custom = new Fun1nb( '\operatorname', new TexArray( new Literal( 'S' ) ) );
|
||||||
|
$res = $ta->checkForLimits( $custom, new DQ( new Literal( '\limits' ), new Literal( 'n' ) ) );
|
||||||
|
$this->assertTrue( $res[1] );
|
||||||
|
$this->assertEquals( $custom, $res[0] );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue