Physikerwelt has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/120486

Change subject: Expiremental option MathML input
......................................................................

Expiremental option MathML input

* this change allows for MahML iput like
  it's used on PubMed.

See also:
Bug: 58201
Change-Id: I0b1085d2afa569fda000e96cc50c7bde303326b1
---
M MathMathML.php
M MathRenderer.php
M tests/MathMathMLTest.php
3 files changed, 52 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Math 
refs/changes/86/120486/1

diff --git a/MathMathML.php b/MathMathML.php
index 4dc630c..f2301eb 100644
--- a/MathMathML.php
+++ b/MathMathML.php
@@ -14,11 +14,34 @@
        protected $defaultAllowedRootElements = array( 'math' );
        protected $allowedRootElements = '';
        protected $hosts;
+       protected $inputType = 'tex';
+
+       /**
+        * @param string $inputType
+        */
+       public function setInputType($inputType)
+       {
+               $this->inputType = $inputType;
+       }
+
+       /**
+        * @return string
+        */
+       public function getInputType()
+       {
+               return $this->inputType;
+       }
 
        public function __construct( $tex = '', $params = array() ) {
                global $wgMathMathMLUrl;
                parent::__construct( $tex, $params );
                $this->hosts = $wgMathMathMLUrl;
+               if ( isset( $params['type'] ) ) {
+                       if( $params['type'] == 'pmml' ){
+                               $this->inputType = 'pmml';
+                               $this->setMathml( '<math>' . $tex . '</math>' );
+                       }
+               }
        }
 
        /**
@@ -164,12 +187,11 @@
         */
        public function getPostData() {
                $tex = $this->getTex();
-               if ( is_null( $this->getDisplaystyle() ) ) {
+               if ( $this->inputType == 'tex' && is_null( 
$this->getDisplaystyle() ) ) {
                        // default preserve the (broken) layout as it was
                        $tex = '{\\displaystyle ' . $tex . '}';
                }
-
-               if ( $this->getMode() == MW_MATH_LATEXML &&  $this->getMathml() 
) {
+               if (  $this->inputType == 'pmml' || $this->getMode() == 
MW_MATH_LATEXML &&  $this->getMathml() ) {
                        $out = 'type=mml&q=' . rawurlencode( $this->getMathml() 
);
                } else {
                        $out = 'type=tex&q=' . rawurlencode( $tex );
@@ -198,7 +220,9 @@
                        $result = json_decode( $res );
                        if ( $result && json_last_error() === JSON_ERROR_NONE ) 
{
                                if ( $result->success ) {
-                                       if ( $this->getMode() == 
MW_MATH_LATEXML || $this->isValidMathML( $result->mml ) ) {
+                                       if ( $this->getMode() == 
MW_MATH_LATEXML ||
+                                                       $this->inputType == 
'pmml' ||
+                                                       $this->isValidMathML( 
$result->mml ) ) {
                                                $xmlObject = new XmlTypeCheck( 
$result->svg, null, false );
                                                if ( ! $xmlObject->wellFormed ) 
{
                                                        $this->lastError = 
$this->getError( 'math_latexml_invalidxml', $host );
@@ -209,7 +233,7 @@
                                                if ( $wgMathDebug ) {
                                                        $this->setLog( 
$result->log );
                                                }
-                                               if ( $this->getMode() != 
MW_MATH_LATEXML ) {
+                                               if ( $this->getMode() != 
MW_MATH_LATEXML && $this->inputType != 'pmml') {
                                                        //add the inputhash 
used for the generation to the MathML element
                                                        $mml = '<math id="' . 
$this->getMd5() . '" ' . substr( $result->mml , 5 );
                                                        $this->setMathml( $mml 
);
@@ -217,6 +241,7 @@
                                                return true;
                                        } else {
                                                $this->lastError = 
$this->getError( 'math_unknown_error', $host );
+                                               return false;
                                        }
                                } else {
                                        // Do not print bad mathml. It's 
probably too verbose and might
diff --git a/MathRenderer.php b/MathRenderer.php
index 50c2a87..9508662 100644
--- a/MathRenderer.php
+++ b/MathRenderer.php
@@ -135,6 +135,13 @@
                if ( !in_array( $mode, $wgMathValidModes ) ) {
                        $mode = $wgDefaultUserOptions['math'];
                }
+               // Support of MathML input (experimental)
+               // Currently support for mode MW_MATH_MATHML only
+               if ( isset( $params['type'] ) ) {
+                       if( $params['type'] == 'pmml' ){
+                               $mode = MW_MATH_MATHML;
+                       }
+               }
                switch ( $mode ) {
                        case MW_MATH_SOURCE:
                        case MW_MATH_MATHJAX:
diff --git a/tests/MathMathMLTest.php b/tests/MathMathMLTest.php
index e073a60..60d03e3 100644
--- a/tests/MathMathMLTest.php
+++ b/tests/MathMathMLTest.php
@@ -149,6 +149,21 @@
                $this->assertEquals( $svgRef, $renderer->getSvg() );
        }
 
+       /**
+        * Checks the experimental option to 'render' MathML input
+        */
+       public function testPmmlInput(){
+               // sample from 'Navajo Coal Combustion and Respiratory Health 
Near Shiprock, New Mexico' in ''Journal of Environmental and Public Health'' , 
vol. 2010p.
+               // authors  Joseph E. Bunnell;  Linda V. Garcia;  Jill M. 
Furst;  Harry Lerch;  Ricardo A. Olea;  Stephen E. Suitt;  Allan Kolker
+               $inputSample = '<msub>  <mrow>  <mi> P</mi> </mrow>  <mrow>  
<mi> i</mi>  <mi> j</mi> </mrow> </msub>  <mo> =</mo>  <mfrac>  <mrow>  <mn> 
100</mn>  <msub>  <mrow>  <mi> d</mi> </mrow>  <mrow>  <mi> i</mi>  <mi> j</mi> 
</mrow> </msub> </mrow>  <mrow>  <mn> 6.75</mn>  <msub>  <mrow>  <mi> r</mi> 
</mrow>  <mrow>  <mi> j</mi> </mrow> </msub> </mrow> </mfrac>  <mo> ,</mo> 
</math>';
+               $attribs = array( 'type' => 'pmml' );
+               $renderer = new MathMathML( $inputSample , $attribs );
+               $this->assertEquals( 'pmml' , $renderer->getInputType(), 'Input 
type was not set correctly' );
+               $this->assertTrue($renderer->render(), 'Failed to render' );
+               $real = MathRenderer::renderMath( $inputSample, $attribs );
+               $expected = 'hash=5628b8248b79267ecac656102334d5e3&amp;mode=5';
+               $this->assertContains( $expected, $real, 'Link to SVG image 
missing');
+       }
 }
 
 /**

-- 
To view, visit https://gerrit.wikimedia.org/r/120486
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0b1085d2afa569fda000e96cc50c7bde303326b1
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Math
Gerrit-Branch: dev
Gerrit-Owner: Physikerwelt <w...@physikerwelt.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to