Merge "Make math usable without RESTbase"
This commit is contained in:
commit
301e049171
|
@ -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' );
|
||||
}
|
||||
|
|
|
@ -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' ) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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 )
|
||||
);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue