From 493a7ac9f010d220b26b82e09c6a8c472ad015ea Mon Sep 17 00:00:00 2001 From: "Moritz Schubotz (physikerwelt)" Date: Sun, 22 Oct 2023 11:41:39 +0200 Subject: [PATCH] native: Add onMathRenderingResultRetrieved hook Allow in depth analysis of rendering results in native mode with the same mechanism that is also used for other rendering modes. Change-Id: I4927f9bc683445f83ef7c29dc2a9298aa85ff4d0 --- src/InputCheck/LocalChecker.php | 28 +++++++++++++++++++++++++--- src/MathNativeMML.php | 2 ++ 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/InputCheck/LocalChecker.php b/src/InputCheck/LocalChecker.php index fba9a5484..0b79454e7 100644 --- a/src/InputCheck/LocalChecker.php +++ b/src/InputCheck/LocalChecker.php @@ -3,7 +3,10 @@ namespace MediaWiki\Extension\Math\InputCheck; use Exception; +use MediaWiki\Extension\Math\Hooks\HookRunner; +use MediaWiki\Extension\Math\MathRenderer; use MediaWiki\Extension\Math\TexVC\TexVC; +use MediaWiki\HookContainer\HookContainer; use Message; use WANObjectCache; @@ -20,6 +23,8 @@ class LocalChecker extends BaseChecker { private bool $purge = false; private bool $isChecked = false; + private ?MathRenderer $context = null; + private ?HookContainer $hookContainer = null; public function __construct( WANObjectCache $cache, $tex = '', string $type = 'tex' ) { $this->cache = $cache; @@ -120,16 +125,33 @@ class LocalChecker extends BaseChecker { // @codeCoverageIgnoreEnd } if ( $result['status'] === '+' ) { - return [ + $result['mathml'] = $result['input']->renderMML(); + $out = [ 'status' => '+', 'output' => $result['output'], - 'mathml' => $result['input']->renderMML() + 'mathml' => $result['mathml'] ]; } else { - return [ + $out = [ 'status' => $result['status'], 'error' => $result['error'], ]; } + if ( $this->context !== null && $this->hookContainer !== null ) { + $resultObject = (object)$result; + ( new HookRunner( $this->hookContainer ) )->onMathRenderingResultRetrieved( + $this->context, + $resultObject + ); + } + return $out; + } + + public function setContext( ?MathRenderer $renderer ): void { + $this->context = $renderer; + } + + public function setHookContainer( ?HookContainer $hookContainer ): void { + $this->hookContainer = $hookContainer; } } diff --git a/src/MathNativeMML.php b/src/MathNativeMML.php index 904a2f12a..9af1f601d 100644 --- a/src/MathNativeMML.php +++ b/src/MathNativeMML.php @@ -29,6 +29,8 @@ class MathNativeMML extends MathMathML { protected function doRender(): StatusValue { $checker = $this->getChecker(); $checker->setPurge( $this->isPurge() ); + $checker->setContext( $this ); + $checker->setHookContainer( MediaWikiServices::getInstance()->getHookContainer() ); $presentation = $checker->getPresentationMathMLFragment(); $config = MediaWikiServices::getInstance()->getMainConfig(); $attributes = [ 'class' => 'mwe-math-element' ];