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
This commit is contained in:
physikerwelt (Moritz Schubotz) 2014-11-18 10:09:29 +01:00 committed by Physikerwelt
parent 29fb1f58a2
commit 1c9383d985
3 changed files with 23 additions and 11 deletions

View file

@ -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() {

View file

@ -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;

View file

@ -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 );
}