From 1c9383d985238223cadba55aeca4e532cfc203da Mon Sep 17 00:00:00 2001 From: "physikerwelt (Moritz Schubotz)" Date: Tue, 18 Nov 2014 10:09:29 +0100 Subject: [PATCH] LaTeXML: prevent automatic rerendering of SVG MathMathML::renderingRequired called the getSvg function in MathLaTeXML that caused an automatic rerendering of the SVG image if it was not cached. That this rendering is triggered from the function renderingRequired is contra intutive and should be avoided. Change-Id: Ifa14f50193a05b3058624a18974c56897fcec09e --- MathLaTeXML.php | 18 ++++++++++++------ MathMathML.php | 6 +++--- MathRenderer.php | 10 ++++++++-- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/MathLaTeXML.php b/MathLaTeXML.php index 4915058..8df9251 100644 --- a/MathLaTeXML.php +++ b/MathLaTeXML.php @@ -178,7 +178,7 @@ class MathLaTeXML extends MathMathML { * No cache is used. * @return boolean */ - public function calulateSvg() { + public function calculateSvg() { $renderer = new MathMathML( $this->getTex() ); $renderer->setMathml( $this->getMathml() ); $renderer->setMode( MW_MATH_LATEXML ); @@ -192,16 +192,22 @@ class MathLaTeXML extends MathMathML { return $res; } + /** * Gets the SVG image - * Lazy evaluation: If no SVG image exists it's generated on the fly + * + * @param string $render if set to 'render' (default) and no SVG image exists, the function + * tries to generate it on the fly. + * Otherwise, if set to 'cached', and there is no SVG in the database + * cache, an empty string is returned. + * * @return string XML-Document of the rendered SVG */ - public function getSvg() { - if ( $this->isPurge() || $this->svg == '' ) { - $this->calulateSvg(); + public function getSvg( $render = 'render' ) { + if ( $render == 'render' && ( $this->isPurge() || $this->svg == '' ) ) { + $this->calculateSvg(); } - return $this->svg; + return parent::getSvg( $render ); } protected function getMathTableName() { diff --git a/MathMathML.php b/MathMathML.php index 03c648c..b42e7d8 100644 --- a/MathMathML.php +++ b/MathMathML.php @@ -107,7 +107,7 @@ class MathMathML extends MathRenderer { if ( $dbres ) { if ( $this->isValidMathML( $this->getMathml() ) ) { wfDebugLog( 'Math', 'Valid MathML entry found in database.' ); - if ( $this->getSvg() ) { + if ( $this->getSvg( 'cached' ) ) { wfDebugLog( 'Math', 'SVG-fallback found in database.' ); return false; } else { @@ -214,8 +214,8 @@ class MathMathML extends MathRenderer { // default preserve the (broken) layout as it was $out = 'type=inline-TeX&q=' .rawurlencode( '{\\displaystyle ' . $input . '}' ); } else { - $out = 'type=tex&q=' . rawurlencode( $input ); - } + $out = 'type=tex&q=' . rawurlencode( $input ); + } } wfDebugLog( 'Math', 'Get post data: ' . $out ); return $out; diff --git a/MathRenderer.php b/MathRenderer.php index 7139da0..7e69eb1 100644 --- a/MathRenderer.php +++ b/MathRenderer.php @@ -671,10 +671,16 @@ abstract class MathRenderer { } /** + * Gets the SVG image * - * @return type + * @param string $render if set to 'render' (default) and no SVG image exists, the function + * tries to generate it on the fly. + * Otherwise, if set to 'cached', and there is no SVG in the database + * cache, an empty string is returned. + * + * @return string XML-Document of the rendered SVG */ - public function getSvg() { + public function getSvg( $render = 'render' ) { // Spaces will prevent the image from being displayed correctly in the browser return trim( $this->svg ); }