Merge "Make math usable without RESTbase"

This commit is contained in:
jenkins-bot 2015-12-12 19:38:16 +00:00 committed by Gerrit Code Review
commit 301e049171
5 changed files with 53 additions and 15 deletions

View File

@ -38,6 +38,17 @@ class MathInputCheckRestbase extends MathInputCheck {
if ( isset( $e->error->message ) ){
if ( $e->error->message === 'Illegal TeX function' ) {
return $errorRenderer->getError( 'math_unknown_function', $e->error->found );
} elseif ( preg_match( '/Math extension/', $e->error->message ) ) {
$names = MathHooks::getMathNames();
$mode = $names['mathml'];
try {
$host = $this->restbaseInterface->getUrl( '' );
}
catch ( Exception $ignore ) {
$host = 'invalid';
}
$msg = $e->error->message;
return $errorRenderer->getError( 'math_invalidresponse', $mode, $host, $msg );
}
return $errorRenderer->getError( 'math_syntax_error' );
}

View File

@ -86,7 +86,7 @@ class MathMathML extends MathRenderer {
* @see MathRenderer::render()
*/
public function render( $forceReRendering = false ) {
if ( $this->inputType == 'tex' ) {
if ( $this->inputType == 'tex' && $this->mode == 'mathml' ) {
$tex = $this->getTex();
$displaystyle = false;
if ( $this->getMathStyle() == 'inlineDisplaystyle' ) {

View File

@ -573,14 +573,16 @@ abstract class MathRenderer {
}
}
$checker = new MathInputCheckRestbase( $this->userInputTex );
if ( $checker->isValid() ) {
$this->setTex( $checker->getValidTex() );
$this->texSecure = true;
return true;
} else {
$this->lastError = $checker->getError();
return false;
try {
if ( $checker->isValid() ) {
$this->setTex( $checker->getValidTex() );
$this->texSecure = true;
return true;
}
} catch ( MWException $e ) {
}
$this->lastError = $checker->getError();
return false;
}
}

View File

@ -43,7 +43,7 @@ class MathRestbaseInterface {
$this->calculateHash();
$request = array(
'method' => 'GET',
'url' => self::getUrl( "media/math/render/$type/{$this->hash}" )
'url' => $this->getUrl( "media/math/render/$type/{$this->hash}" )
);
$serviceClient = $this->getServiceClient();
$response = $serviceClient->run( $request );
@ -83,6 +83,9 @@ class MathRestbaseInterface {
if ( isset( $json->detail ) && isset( $json->detail->success ) ) {
$this->success = $json->detail->success;
$this->error = $json->detail;
} else {
$this->success = false;
$this->setErrorMessage( 'Math extension cannot connect to Restbase.' );
}
return false;
}
@ -104,7 +107,7 @@ class MathRestbaseInterface {
'body' => $post
);
$serviceClient = $this->getServiceClient();
$request['url'] = self::getUrl( "media/math/check/{$this->type}" );
$request['url'] = $this->getUrl( "media/math/check/{$this->type}" );
$response = $serviceClient->run( $request );
if ( $response['code'] === 200 ) {
$res = $response['body'];
@ -156,7 +159,7 @@ class MathRestbaseInterface {
* @return string
* @throws MWException
*/
private static function getUrl( $path, $internal = true ) {
public function getUrl( $path, $internal = true ) {
global $wgVirtualRestConfig, $wgMathFullRestbaseURL, $wgVisualEditorFullRestbaseURL;
if ( $internal && isset( $wgVirtualRestConfig['modules']['restbase'] ) ) {
return "/mathoid/local/v1/$path";
@ -167,8 +170,9 @@ class MathRestbaseInterface {
if ( $wgVisualEditorFullRestbaseURL ) {
return "{$wgVisualEditorFullRestbaseURL}v1/$path";
}
throw new MWException( 'Math extension can not find Restbase URL.'.
' Please specify $wgMathFullRestbaseURL.' );
$msg = 'Math extension can not find Restbase URL. Please specify $wgMathFullRestbaseURL.';
$this->setErrorMessage( $msg );
throw new MWException( $msg );
}
/**
@ -190,7 +194,7 @@ class MathRestbaseInterface {
try {
$request = array(
'method' => 'GET',
'url' => self::getUrl( '?spec' )
'url' => $this->getUrl( '?spec' )
);
} catch ( Exception $e ) {
return false;
@ -244,7 +248,7 @@ class MathRestbaseInterface {
*/
public function getFullSvgUrl() {
$this->calculateHash();
return self::getUrl( "media/math/render/svg/{$this->hash}", false );
return $this->getUrl( "media/math/render/svg/{$this->hash}", false );
}
/**
@ -289,4 +293,11 @@ class MathRestbaseInterface {
return $this->type;
}
private function setErrorMessage( $msg ) {
$this->error = (object)array(
'error' =>
(object)array( 'message' => $msg )
);
}
}

View File

@ -465,4 +465,18 @@ class MathTexvc extends MathRenderer {
public function setOutputHash( $hash ) {
$this->hash = $hash;
}
/**
* Skip tex check for texvc rendering mode.
* Checking the tex code in texvc mode just adds a dependency to the
* texvccheck binary which does not improve security since the same
* checks are performed by texvc anyhow. Especially given the fact that
* texvccheck was derived from texvc.
* @return bool
*/
public function checkTex() {
return true;
}
}