Paladox has uploaded a new change for review.
https://gerrit.wikimedia.org/r/228282
Change subject: Add composer.json
......................................................................
Add composer.json
This file will be used for php code sniffer.
( i will do a follow up to this patch with php code sniffer )
Change-Id: Icb4b53973b19b6e5e799cca20ecdb63853bf5cb3
---
M HISTORY
M Math.hooks.php
M Math.php
M MathInputCheckTexvc.php
M MathLaTeXML.php
M MathMathML.php
M MathRenderer.php
M MathSource.php
M MathTexvc.php
M README
M SpecialMathShowImage.php
M SpecialMathStatus.php
A composer.json
A extension.json
M maintenance/MathGenerateTests.php
M modules/ext.math.js
M tests/MathCoverageTest.php
M tests/MathDatabaseTest.php
M tests/MathLaTeXMLDatabaseTest.php
M tests/MathRendererTest.php
M tests/MathSourceTest.php
A tests/MathUtilsTest.php
22 files changed, 510 insertions(+), 429 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Math
refs/changes/82/228282/1
diff --git a/HISTORY b/HISTORY
index 7b064ce..4cabf7f 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7,5 +7,5 @@
* $wgLaTeXMLTimeout was renamed to $wgMathLaTeXMLTimeout
* $wgMathValidModes is introduced:
It determines the selectable math rendering modes MW_MATH_(PNG|MATHML|...)
in user preferences.
-* $wgUseLaTeXML becomes unnecessary use $wgMathValidModes[] = MW_MATH_LATEXML;
+* $wgUseLaTeXML becomes unnecessary use $wgMathValidModes[] = 'latexml';
to enable the LaTeXML rendering mode.
diff --git a/Math.hooks.php b/Math.hooks.php
index 16a14b3..f21030c 100644
--- a/Math.hooks.php
+++ b/Math.hooks.php
@@ -11,6 +11,88 @@
class MathHooks {
const mathCacheKey = 'math=';
+ public static function mathConstantToString( $value, array $defs,
$prefix, $default ){
+ foreach ( $defs as $defKey => $defValue ) {
+ if( !defined( $defKey ) ) {
+ define( $defKey, $defValue );
+ } elseif ( $defValue !== constant( $defKey ) ) {
+ throw new Exception( 'Math constant "'. $defKey
. '" has unexpected value "' .
+ constant( $defKey ) . '" instead of "'
. $defValue );
+ }
+ }
+ $invDefs = array_flip( $defs );
+ if ( is_int( $value ) ){
+ if ( array_key_exists( $value , $invDefs ) ) {
+ $value = $invDefs[$value];
+ } else {
+ return $default;
+ }
+ }
+ if ( is_string( $value ) ){
+ $newValues = array();
+ foreach ( $defs as $k => $v ) {
+ $newValues[$k] = preg_replace_callback(
'/_(.)/', function ( $matches ) {
+ return strtoupper( $matches[1] );
+ }, strtolower( substr( $k, strlen( $prefix ) )
) );
+ }
+ if ( array_key_exists( $value, $defs ) ) {
+ return $newValues[$value];
+ } elseif (in_array( $value, $newValues) ){
+ return $value;
+ }
+ }
+ return $default;
+ }
+
+ public static function mathStyleToString( $style, $default =
'inlineDisplaystyle' ) {
+ $defs = array (
+ 'MW_MATHSTYLE_INLINE_DISPLAYSTYLE' => 0, // default
large operator inline
+ 'MW_MATHSTYLE_DISPLAY' => 1, // large
operators centered in a new line
+ 'MW_MATHSTYLE_INLINE' => 2, // small
operators inline
+ );
+ return self::mathConstantToString( $style, $defs, $prefix =
'MW_MATHSTYLE_', $default );
+ }
+
+ public static function mathCheckToString( $style, $default = 'always' )
{
+ $defs = array (
+ 'MW_MATH_CHECK_ALWAYS' => 0,
+ 'MW_MATH_CHECK_NEVER' => 1,
+ 'MW_MATH_CHECK_NEW' => 2,
+ );
+ return self::mathConstantToString( $style, $defs, $prefix =
'MW_MATH_CHECK_', $default );
+ }
+
+ public static function mathModeToString( $mode, $default = 'png' ) {
+// The following deprecated modes have been removed:
+// 'MW_MATH_SIMPLE' => 1
+// 'MW_MATH_HTML' => 2
+// 'MW_MATH_MODERN' => 4
+// 'MW_MATH_MATHJAX' => 6
+// 'MW_MATH_LATEXML_JAX' => 8
+
+ $defs = array (
+ 'MW_MATH_PNG' => 0,
+ 'MW_MATH_SOURCE' => 3,
+ 'MW_MATH_MATHML' => 5,
+ 'MW_MATH_LATEXML'=> 7 );
+
+ return self::mathConstantToString( $mode, $defs, $prefix =
'MW_MATH_', $default );
+ }
+
+ public static function mathModeToHashKey( $mode, $default = 0 ) {
+ $defs = array (
+ 'png' => 0,
+ 'source' => 3,
+ 'mathml' => 5,
+ 'latexml'=> 7 );
+
+ if ( array_key_exists( $mode, $defs ) ){
+ return $defs[$mode];
+ } else {
+ return $default;
+ }
+ }
+
/*
* Generate a user dependent hash cache key.
* The hash key depends on the rendering mode.
@@ -28,7 +110,8 @@
$user = $wgUser;
}
- $mathOption = $user->getOption( 'math' );
+ $mathString = self::mathModeToString( $user->getOption(
'math' ) );
+ $mathOption = self::mathModeToHashKey( $mathString, 0 );
// Check if the key already contains the math option
part
if (
!preg_match(
@@ -98,8 +181,7 @@
return '';
}
- $mode = (int)$parser->getUser()->getOption( 'math' );
-
+ $mode = self::mathModeToString( $parser->getUser()->getOption(
'math' ) );
// Indicate that this page uses math.
// This affects the page caching behavior.
if ( is_callable( 'ParserOptions::getMath' ) ) {
@@ -128,7 +210,7 @@
Hooks::run( 'MathFormulaPostRender',
array( $parser, &$renderer, &$renderedMath ) );//
Enables indexing of math formula
$parser->getOutput()->addModuleStyles( array( 'ext.math.styles'
) );
- if ( $mode == MW_MATH_MATHML ) {
+ if ( $mode == 'mathml' ) {
$parser->getOutput()->addModuleStyles( array(
'ext.math.desktop.styles' ) );
$parser->getOutput()->addModules( array(
'ext.math.scripts' ) );
}
@@ -146,7 +228,7 @@
* @return Boolean: true
*/
static function onGetPreferences( $user, &$defaultPreferences ) {
- global $wgMathValidModes, $wgDefaultUserOptions;
+ global $wgDefaultUserOptions;
$defaultPreferences['math'] = array(
'type' => 'radio',
'options' => array_flip( self::getMathNames() ),
@@ -155,12 +237,14 @@
);
// If the default option is not in the valid options the
// user interface throws an exception (BUG 64844)
- if ( ! in_array( $wgDefaultUserOptions['math'] ,
$wgMathValidModes ) ) {
+ $mode = MathHooks::mathModeToString(
$wgDefaultUserOptions['math'] );
+ if ( ! in_array( $mode , MathRenderer::getValidModes() ) ) {
LoggerFactory::getInstance( 'Math' )->error(
'Misconfiguration: '.
- "\$wgDefaultUserOptions['math'] is not in
\$wgMathValidModes.\n".
+ "\$wgDefaultUserOptions['math'] is not in " .
MathRenderer::getValidModes() . ".\n".
"Please check your LocalSetting.php file." );
// Display the checkbox in the first option.
- $wgDefaultUserOptions['math'] = $wgMathValidModes[0];
+ $validModes = MathRenderer::getValidModes();
+ $wgDefaultUserOptions['math'] = $validModes[0];
}
return true;
}
@@ -171,18 +255,9 @@
* @return array of strings
*/
public static function getMathNames() {
- global $wgMathValidModes;
- $MathConstantNames = array(
- MW_MATH_SOURCE => 'mw_math_source',
- MW_MATH_PNG => 'mw_math_png',
- MW_MATH_MATHML => 'mw_math_mathml',
- MW_MATH_LATEXML => 'mw_math_latexml',
- MW_MATH_LATEXML_JAX => 'mw_math_latexml_jax',
- MW_MATH_MATHJAX => 'mw_math_mathjax'
- );
$names = array();
- foreach ( $wgMathValidModes as $mode ) {
- $names[$mode] = wfMessage( $MathConstantNames[$mode]
)->escaped();
+ foreach ( MathRenderer::getValidModes() as $mode ) {
+ $names[ $mode ] = wfMessage( 'mw_math_' . $mode
)->escaped();
}
return $names;
@@ -198,7 +273,7 @@
global $wgUser;
# Don't generate TeX PNGs (the lack of a sensible current
directory causes errors anyway)
- $wgUser->setOption( 'math', MW_MATH_SOURCE );
+ $wgUser->setOption( 'math', 'source' );
return true;
}
@@ -211,7 +286,7 @@
* @return bool
*/
static function onLoadExtensionSchemaUpdates( $updater = null ) {
- global $wgMathValidModes;
+
if ( is_null( $updater ) ) {
throw new Exception( 'Math extension is only necessary
in 1.18 or above' );
}
@@ -225,7 +300,7 @@
}
$sql = __DIR__ . '/db/math.' . $type . '.sql';
$updater->addExtensionTable( 'math', $sql );
- if ( in_array( MW_MATH_LATEXML, $wgMathValidModes ) ) {
+ if ( in_array( 'latexml', MathRenderer::getValidModes() ) ) {
if ( in_array( $type, array( 'mysql', 'sqlite',
'postgres' ) ) ) {
$sql = __DIR__ . '/db/mathlatexml.' . $type .
'.sql';
$updater->addExtensionTable( 'mathlatexml',
$sql );
@@ -237,7 +312,7 @@
throw new Exception( "Math extension does not
currently support $type database for LaTeXML." );
}
}
- if ( in_array( MW_MATH_MATHML, $wgMathValidModes ) ) {
+ if ( in_array( 'mathml', MathRenderer::getValidModes() ) ) {
if ( in_array( $type, array( 'mysql', 'sqlite',
'postgres' ) ) ) {
$sql = __DIR__ . '/db/mathoid.' . $type .
'.sql';
$updater->addExtensionTable( 'mathoid', $sql );
@@ -284,4 +359,14 @@
global $wgOut;
$wgOut->addModules( array( 'ext.math.editbutton.enabler' ) );
}
+
+ public static function registerExtension() {
+ global $wgDefaultUserOptions, $wgMathValidModes,
$wgMathDisableTexFilter;
+ $wgMathValidModes = MathRenderer::getValidModes();
+ if ( $wgMathDisableTexFilter == true ){ //ensure backwards
compatibility
+ $wgMathDisableTexFilter = 1;
+ }
+ $wgMathDisableTexFilter = MathRenderer::getDisableTexFilter();
+ $wgDefaultUserOptions['math'] = self::mathModeToString(
$wgDefaultUserOptions['math'] );
+ }
}
diff --git a/Math.php b/Math.php
index 2b467e5..0b82fdd 100644
--- a/Math.php
+++ b/Math.php
@@ -1,300 +1,15 @@
<?php
-/**
- * MediaWiki math extension
- *
- * @file
- * @ingroup Extensions
- * @version 2.0
- * @author Tomasz Wegrzanowski
- * @author Brion Vibber
- * @author Moritz Schubotz
- * @author Derk-Jan Hartman
- * @copyright © 2002-2012 various MediaWiki contributors
- * @license GPLv2 license; info in main package.
- * @link http://www.mediawiki.org/wiki/Extension:Math Documentation
- * @see https://bugzilla.wikimedia.org/show_bug.cgi?id=14202
- */
-
-if ( !defined( 'MEDIAWIKI' ) ) {
- die( "This is not a valid entry point to MediaWiki.\n" );
-}
-
-// Extension credits that will show up on Special:Version
-$wgExtensionCredits['parserhook'][] = array(
- 'path' => __FILE__,
- 'name' => 'Math',
- 'version' => '2.0.0',
- 'author' => array(
- 'Tomasz Wegrzanowski',
- 'Brion Vibber',
- 'Moritz Schubotz',
- 'Derk-Jan Hartman',
- ),
- 'descriptionmsg' => 'math-desc',
- 'url' => 'https://www.mediawiki.org/wiki/Extension:Math',
-);
-
-/**@{
- * Maths constants
- */
-define( 'MW_MATH_PNG', 0 );
-define( 'MW_MATH_SIMPLE', 1 ); /// @deprecated
-define( 'MW_MATH_HTML', 2 ); /// @deprecated
-define( 'MW_MATH_SOURCE', 3 );
-define( 'MW_MATH_MODERN', 4 ); /// @deprecated
-define( 'MW_MATH_MATHML', 5 );
-define( 'MW_MATH_MATHJAX', 6 ); /// @deprecated
-define( 'MW_MATH_LATEXML', 7 ); /// new in 1.22
-define( 'MW_MATH_LATEXML_JAX', 8 ); /// new in 1.22
-/**@}*/
-
-/**@{
- * Mathstyle constants
- */
-define( 'MW_MATHSTYLE_INLINE_DISPLAYSTYLE', 0 ); //default large operator
inline
-define( 'MW_MATHSTYLE_DISPLAY', 1 ); // large operators centered in a new line
-define( 'MW_MATHSTYLE_INLINE', 2 ); // small operators inline
-// There is no style which renders small operators
-// but display the equation centered in a new line.
-/**@}*/
-
-/**@var array defines the mode allowed on the server */
-$wgMathValidModes = array( MW_MATH_PNG, MW_MATH_SOURCE, MW_MATH_MATHML );
-
-/*
- * The default rendering mode for anonymous users.
- * Valid options are defined in $wgMathValidModes.
- */
-$wgDefaultUserOptions['math'] = MW_MATH_PNG;
-
-/** Location of the texvc binary */
-$wgTexvc = __DIR__ . '/math/texvc';
-/**
- * Texvc background color
- * use LaTeX color format as used in \special function
- * for transparent background use value 'Transparent' for alpha transparency or
- * 'transparent' for binary transparency.
- */
-$wgTexvcBackgroundColor = 'transparent';
-
-/**
- * Normally when generating math images, we double-check that the
- * directories we want to write to exist, and that files that have
- * been generated still exist when we need to bring them up again.
- *
- * This lets us give useful error messages in case of permission
- * problems, and automatically rebuild images that have been lost.
- *
- * On a big site with heavy NFS traffic this can be slow and flaky,
- * so sometimes we want to short-circuit it by setting this to false.
- */
-$wgMathCheckFiles = true;
-
-/**
- * The URL path of the math directory. Defaults to "{$wgUploadPath}/math".
- *
- * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to
- * set up mathematical formula display.
- */
-$wgMathPath = false;
-
-/**
- * The name of a file backend ($wgFileBackends) to use for storing math
renderings.
- * Defaults to FSFileBackend using $wgMathDirectory as a base path.
- *
- * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to
- * set up mathematical formula display.
- */
-$wgMathFileBackend = false;
-
-/**
- * The filesystem path of the math directory.
- * Defaults to "{$wgUploadDirectory}/math".
- *
- * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to
- * set up mathematical formula display.
- */
-$wgMathDirectory = false;
-
-/**
- * The url of the mathoid server.
- *
- * Documentation: http://www.formulasearchengine.com/mathoid
- * Example value: http://mathoid.example.org:10042
- *
- * @todo Move documentation to mediawiki.org
- */
-$wgMathMathMLUrl = 'http://mathoid.testme.wmflabs.org';
-
-/**
- * The timeout for the HTTP-Request sent to the MathML to render an equation,
- * in seconds.
- */
-$wgMathMathMLTimeout = 20;
-
-/**
- * Use of LaTeXML for details see
- * <http://latexml.mathweb.org/help>
- *
- * If you want or need to run your own server, follow these installation
- * instructions and override $wgMathLaTeXMLUrl:
- * <http://www.formulasearchengine.com/LaTeXML>
- *
- * If you expect heavy load you can specify multiple servers. In that case one
- * server is randomly chosen for each rendering process. Specify the list of
- * servers in an array e.g $wgMathLaTeXMLUrl = array (
'http://latexml.example.com/convert',
- * 'http://latexml2.example.com/convert');
- */
-$wgMathLaTeXMLUrl = 'http://gw125.iu.xsede.org:8888'; // Sponsored by
https://www.xsede.org/
-
-/**
- * The timeout for the HTTP-Request sent to the LaTeXML to render an equation,
- * in seconds.
- */
-$wgMathLaTeXMLTimeout = 240;
-/**
- * Setting for the LaTeXML renderer.
- * See http://dlmf.nist.gov/LaTeXML/manual/commands/latexmlpost.xhtml for
details.
- */
-$wgMathDefaultLaTeXMLSetting = array(
- 'format' => 'xhtml',
- 'whatsin' => 'math',
- 'whatsout' => 'math',
- 'pmml',
- 'cmml',
- 'mathtex',
- 'nodefaultresources',
- 'preload' => array( 'LaTeX.pool',
- 'article.cls',
- 'amsmath.sty',
- 'amsthm.sty',
- 'amstext.sty',
- 'amssymb.sty',
- 'eucal.sty',
- '[dvipsnames]xcolor.sty',
- 'url.sty',
- 'hyperref.sty',
- '[ids]latexml.sty',
- 'texvc' ),
-);
-/**
- * The link to the texvccheck executable
- */
-$wgMathTexvcCheckExecutable = __DIR__ . '/texvccheck/texvccheck';
-
-/**@{
- * Math check constants
- */
-define( 'MW_MATH_CHECK_ALWAYS', 0 ); /// backwards compatible to false
-define( 'MW_MATH_CHECK_NEVER' , 1 ); /// backwards compatible to true
-define( 'MW_MATH_CHECK_NEW' , 2 );
-/**@}*/
-/**
- * Option to disable the TeX security filter:
- * In general every math object, which is rendered by the math extension has
its rendering cached in
- * a database.
- * MW_MATH_CHECK_ALWAYS: If set to MW_MATH_CHECK_ALWAYS only a subset of the
TeX commands is allowed.
- * See the Wikipedia page Help:Math for details about the allowed commands.
- * MW_MATH_CHECK_NONE: If set to MW_MATH_CHECK_NONE any TeX expression is
parsed.
- * This can be a potential security risk.
- * MW_MATH_CHECK_NEW checks only new equations. If the database does not yet
contain the given math object,
- * then it is passed through texvccheck.
- * Please make sure to truncate the database tables (math, mathoid,
mathlatexml) when switching from
- * MW_MATH_CHECK_NONE to MW_MATH_CHECK_NEW. Otherwise, unchecked content
contained in the database
- * will be displayed.
- */
-$wgMathDisableTexFilter = MW_MATH_CHECK_NEW;
-
-/** @var boolean $wgMathEnableExperimentalInputFormats enables experimental
MathML and AsciiMath input format support */
-$wgMathEnableExperimentalInputFormats = false;
-////////// end of config settings.
-
-$wgExtensionFunctions[] = 'MathHooks::setup';
-$wgHooks['ParserFirstCallInit'][] = 'MathHooks::onParserFirstCallInit';
-$wgHooks['GetPreferences'][] = 'MathHooks::onGetPreferences';
-$wgHooks['LoadExtensionSchemaUpdates'][] =
'MathHooks::onLoadExtensionSchemaUpdates';
-$wgHooks['ParserTestTables'][] = 'MathHooks::onParserTestTables';
-$wgHooks['UnitTestsList'][] = 'MathHooks::onRegisterUnitTests';
-$wgHooks['PageRenderingHash'][] = 'MathHooks::onPageRenderingHash';
-$wgHooks['EditPageBeforeEditToolbar'][] =
'MathHooks::onEditPageBeforeEditToolbar';
-
-$dir = __DIR__ . '/';
-$wgAutoloadClasses['MathHooks'] = $dir . 'Math.hooks.php';
-$wgAutoloadClasses['MathRenderer'] = $dir . 'MathRenderer.php';
-$wgAutoloadClasses['MathTexvc'] = $dir . 'MathTexvc.php';
-$wgAutoloadClasses['MathSource'] = $dir . 'MathSource.php';
-$wgAutoloadClasses['MathMathML'] = $dir . 'MathMathML.php';
-$wgAutoloadClasses['MathLaTeXML'] = $dir . 'MathLaTeXML.php';
-$wgAutoloadClasses['MathInputCheck'] = $dir . 'MathInputCheck.php';
-$wgAutoloadClasses['MathInputCheckTexvc'] = $dir . 'MathInputCheckTexvc.php';
-$wgAutoloadClasses['SpecialMathShowImage'] = $dir . 'SpecialMathShowImage.php';
-$wgAutoloadClasses['SpecialMathStatus'] = $dir . 'SpecialMathStatus.php';
-$wgMessagesDirs['Math'] = __DIR__ . '/i18n';
-$wgExtensionMessagesFiles['MathAlias'] = $dir . 'Math.alias.php';
-$wgExtensionMessagesFiles['MathAliasNoTranslate'] = $dir .
'Math.alias.noTranslate.php';
-
-$wgParserTestFiles[] = $dir . 'mathParserTests.txt';
-
-$wgSpecialPages['MathShowImage'] = 'SpecialMathShowImage';
-$wgSpecialPages['MathStatus'] = 'SpecialMathStatus';
-
-$wgResourceModules['ext.math.styles'] = array(
- 'position' => 'top',
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Math/modules',
- 'styles' => 'ext.math.css',
- 'targets' => array( 'desktop', 'mobile' ),
-);
-$wgResourceModules['ext.math.desktop.styles'] = array(
- 'position' => 'top',
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Math/modules',
- 'styles' => 'ext.math.desktop.css',
-);
-$wgResourceModules['ext.math.scripts'] = array(
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Math/modules',
- 'scripts' => 'ext.math.js',
-);
-
-
-$moduleTemplate = array(
- 'localBasePath' => __DIR__ . '/modules',
- 'remoteExtPath' => 'Math/modules',
-);
-
-$wgResourceModules['ext.math.editbutton.enabler'] = array(
- 'scripts' => 'ext.math.editbutton.js',
- 'messages' => array(
- 'math_tip',
- 'math_sample',
- ),
-) + $moduleTemplate;
-
-$wgResourceModules['ext.math.visualEditor'] = array(
- 'scripts' => array(
- 'VisualEditor/ve.dm.MWMathNode.js',
- 'VisualEditor/ve.ce.MWMathNode.js',
- 'VisualEditor/ve.ui.MWMathInspector.js',
- 'VisualEditor/ve.ui.MWMathInspectorTool.js',
- ),
- 'styles' => array(
- 'VisualEditor/ve.ce.MWMathNode.css',
- 'VisualEditor/ve.ui.MWMathIcons.css',
- 'VisualEditor/ve.ui.MWMathInspector.css',
- ),
- 'dependencies' => array(
- 'ext.visualEditor.mwcore',
- ),
- 'messages' => array(
- 'math-visualeditor-mwmathinspector-display',
- 'math-visualeditor-mwmathinspector-display-block',
- 'math-visualeditor-mwmathinspector-display-default',
- 'math-visualeditor-mwmathinspector-display-inline',
- 'math-visualeditor-mwmathinspector-id',
- 'math-visualeditor-mwmathinspector-title',
- ),
- 'targets' => array( 'desktop', 'mobile' ),
-) + $moduleTemplate;
-
-$wgVisualEditorPluginModules[] = 'ext.math.visualEditor';
+if ( function_exists( 'wfLoadExtension' ) ) {
+ wfLoadExtension( 'Math' );
+ // Keep i18n globals so mergeMessageFileList.php doesn't break
+ $wgMessagesDirs['Math'] = __DIR__ . '/i18n';
+ $wgExtensionMessagesFiles['Math'] = __DIR__ . '/Math.alias.php';
+ $wgExtensionMessagesFiles['MathAliasNoTranslate'] = __DIR__ .
'/Math.alias.noTranslate.php';
+ /* wfWarn(
+ 'Deprecated PHP entry point used for Math extension. Please use
wfLoadExtension instead, ' .
+ 'see https://www.mediawiki.org/wiki/Extension_registration for
more details.'
+ );*/
+ return;
+} else {
+ die( 'This version of the Math extension requires MediaWiki 1.25+' );
+}
\ No newline at end of file
diff --git a/MathInputCheckTexvc.php b/MathInputCheckTexvc.php
index 5845a7d..6d5ad66 100644
--- a/MathInputCheckTexvc.php
+++ b/MathInputCheckTexvc.php
@@ -62,14 +62,19 @@
*/
public function doValidCheck() {
global $wgMathTexvcCheckExecutable;
- if ( !is_executable( $wgMathTexvcCheckExecutable ) ) {
+ if ( $wgMathTexvcCheckExecutable === false ){
+ $texvcCheckExecutable = __DIR__ .
'/texvccheck/texvccheck';
+ } else {
+ $texvcCheckExecutable = $wgMathTexvcCheckExecutable;
+ }
+ if ( !is_executable( $texvcCheckExecutable ) ) {
$msg = 'Missing "texvccheck" executable. Please see
math/README to configure.';
trigger_error( $msg, E_USER_NOTICE );
LoggerFactory::getInstance( 'Math' )->error( $msg );
return true;
}
- $cmd = $wgMathTexvcCheckExecutable . ' ' . wfEscapeShellArg(
$this->inputTeX );
+ $cmd = $texvcCheckExecutable . ' ' . wfEscapeShellArg(
$this->inputTeX );
if ( wfIsWindows() ) {
# Invoke it within cygwin sh, because texvc expects sh
features in its default shell
diff --git a/MathLaTeXML.php b/MathLaTeXML.php
index 18cb595..5e07dfd 100644
--- a/MathLaTeXML.php
+++ b/MathLaTeXML.php
@@ -20,7 +20,7 @@
global $wgMathLaTeXMLUrl;
parent::__construct( $tex, $params );
$this->hosts = $wgMathLaTeXMLUrl;
- $this->setMode( MW_MATH_LATEXML );
+ $this->setMode( 'latexml' );
}
/**
* Converts an array with LaTeXML settings to a URL encoded String.
@@ -75,8 +75,8 @@
*/
public function getLaTeXMLPostData() {
$tex = $this->getTex();
- if ( $this->getMathStyle() == MW_MATHSTYLE_INLINE_DISPLAYSTYLE
) {
- // In MW_MATHSTYLE_INLINE_DISPLAYSTYLE the old
+ if ( $this->getMathStyle() == 'inlineDisplaystyle' ) {
+ // In 'inlineDisplaystyle' the old
// texvc behavior is reproduced:
// The equation is rendered in displaystyle
// (texvc used $$ $tex $$ to render)
@@ -117,7 +117,7 @@
if ( $this->isValidMathML( $jsonResult->result
) ) {
$this->setMathml( $jsonResult->result );
Hooks::run(
'MathRenderingResultRetrieved',
- array( &$renderer,
+ array( &$this,
&$jsonResult ) );//
Enables debugging of server results
return true;
} else {
@@ -184,7 +184,7 @@
public function calculateSvg() {
$renderer = new MathMathML( $this->getTex() );
$renderer->setMathml( $this->getMathml() );
- $renderer->setMode( MW_MATH_LATEXML );
+ $renderer->setMode( 'latexml' );
$res = $renderer->render( true );
if ( $res == true ) {
$this->setSvg( $renderer->getSvg() );
diff --git a/MathMathML.php b/MathMathML.php
index 432fa52..ffb6a16 100644
--- a/MathMathML.php
+++ b/MathMathML.php
@@ -38,7 +38,7 @@
public function __construct( $tex = '', $params = array() ) {
global $wgMathMathMLUrl;
parent::__construct( $tex, $params );
- $this->setMode( MW_MATH_MATHML );
+ $this->setMode( 'mathml' );
$this->hosts = $wgMathMathMLUrl;
if ( isset( $params['type'] ) ) {
if ( $params['type'] == 'pmml' ) {
@@ -174,7 +174,7 @@
$errormsg = $status->getHtml();
$error =
$this->getError(
'math_invalidresponse', $this->getModeStr(), $host, $errormsg,
- $this->getModeStr(
MW_MATH_MATHML ) );
+ $this->getModeStr( 'mathml' ) );
LoggerFactory::getInstance( 'Math' )->warning(
'NoResponse:' . var_export( array(
'post' => $post,
'host' => $host,
@@ -211,12 +211,12 @@
public function getPostData() {
$input = $this->getTex();
if ( $this->inputType == 'pmml' ||
- $this->getMode() == MW_MATH_LATEXML &&
$this->getMathml() ) {
+ $this->getMode() == 'latexml' && $this->getMathml() ) {
$out = 'type=mml&q=' . rawurlencode( $this->getMathml()
);
} elseif ( $this->inputType == 'ascii' ) {
$out = 'type=asciimath&q=' . rawurlencode( $input );
} else {
- if ( $this->getMathStyle() ==
MW_MATHSTYLE_INLINE_DISPLAYSTYLE ) {
+ if ( $this->getMathStyle() == 'inlineDisplaystyle' ) {
// default preserve the (broken) layout as it
was
$out = 'type=inline-TeX&q=' . rawurlencode(
'{\\displaystyle ' . $input . '}' );
} else {
@@ -332,7 +332,7 @@
public function correctSvgStyle( $svg, &$style ) {
if ( preg_match( '/style="([^"]*)"/', $svg, $styles ) ) {
$style .= ' ' . $styles[1]; // merge styles
- if ( $this->getMathStyle() === MW_MATHSTYLE_DISPLAY ) {
+ if ( $this->getMathStyle() === 'display' ) {
// TODO: Improve style cleaning
$style = preg_replace(
'/margin\-(left|right)\:\s*\d+(\%|in|cm|mm|em|ex|pt|pc|px)\;/', '', $style );
}
@@ -392,7 +392,7 @@
} else {
$class .= 'mathml-';
}
- if ( $this->getMathStyle() == MW_MATHSTYLE_DISPLAY ) {
+ if ( $this->getMathStyle() == 'display' ) {
$class .= 'display';
} else {
$class .= 'inline';
@@ -406,7 +406,7 @@
* @return string Html output that is embedded in the page
*/
public function getHtmlOutput() {
- if ( $this->getMathStyle() == MW_MATHSTYLE_DISPLAY ) {
+ if ( $this->getMathStyle() == 'display' ) {
$element = 'div';
} else {
$element = 'span';
@@ -420,7 +420,7 @@
// Remove displayStyle attributes set by the MathML converter
// (Beginning from Mathoid 0.2.5 block is the default layout.)
$mml = preg_replace(
'/(<math[^>]*)(display|mode)=["\'](inline|block)["\']/', '$1',
$this->getMathml() );
- if ( $this->getMathStyle() == MW_MATHSTYLE_DISPLAY ) {
+ if ( $this->getMathStyle() == 'display' ) {
$mml = preg_replace( '/<math/', '<math
display="block"', $mml );
}
$output .= Xml::tags( $element, array( 'class' =>
$this->getClassName(), 'style' => 'display: none;' ), $mml );
@@ -464,7 +464,7 @@
* @return bool
*/
private function processJsonResult( $jsonResult, $host ) {
- if ( $this->getMode() == MW_MATH_LATEXML || $this->inputType ==
'pmml' ||
+ if ( $this->getMode() == 'latexml' || $this->inputType ==
'pmml' ||
$this->isValidMathML( $jsonResult->mml )
) {
if ( isset( $jsonResult->svg ) ) {
@@ -479,7 +479,7 @@
LoggerFactory::getInstance( 'Math' )->error(
'Missing SVG property in JSON result.'
);
}
- if ( $this->getMode() != MW_MATH_LATEXML &&
$this->inputType != 'pmml' ) {
+ if ( $this->getMode() != 'latexml' && $this->inputType
!= 'pmml' ) {
$this->setMathml( $jsonResult->mml );
}
Hooks::run( 'MathRenderingResultRetrieved',
diff --git a/MathRenderer.php b/MathRenderer.php
index 396b9c7..2e000bf 100644
--- a/MathRenderer.php
+++ b/MathRenderer.php
@@ -31,8 +31,8 @@
/** @var string the original user input string (which was used to
calculate the inputhash) */
protected $userInputTex = '';
// FURTHER PROPERTIES OF THE MATHEMATICAL CONTENT
- /** @var
(MW_MATHSTYLE_INLINE_DISPLAYSTYLE|MW_MATHSTYLE_DISPLAY|MW_MATHSTYLE_INLINE) the
rendering style */
- protected $mathStyle = MW_MATHSTYLE_INLINE_DISPLAYSTYLE;
+ /** @var ('inlineDisplaystyle'|'display'|'inline') the rendering style
*/
+ protected $mathStyle = 'inlineDisplaystyle';
/** @var array with userdefined parameters passed to the extension (not
used) */
protected $params = array();
/** @var string a userdefined identifier to link to the equation. */
@@ -53,8 +53,8 @@
protected $md5 = '';
/** @var binary packed inputhash */
protected $inputHash = '';
- /** @var int rendering mode MW_MATH_(PNG|MATHML|SOURCE...) */
- protected $mode = MW_MATH_PNG;
+ /** @var string rendering mode */
+ protected $mode = 'png';
/**
* Constructs a base MathRenderer
@@ -76,10 +76,10 @@
*
* @param string $tex LaTeX markup
* @param array $params HTML attributes
- * @param int $mode constant indicating rendering mode
+ * @param string $mode constant indicating rendering mode
* @return string HTML for math tag
*/
- public static function renderMath( $tex, $params = array(), $mode =
MW_MATH_PNG ) {
+ public static function renderMath( $tex, $params = array(), $mode =
'png' ) {
$renderer = self::getRenderer( $tex, $params, $mode );
if ( $renderer->render() ) {
return $renderer->getHtmlOutput();
@@ -107,16 +107,16 @@
*
* @param string $tex LaTeX markup
* @param array $params HTML attributes
- * @param int $mode constant indicating rendering mode
+ * @param string $mode indicating rendering mode
* @return MathRenderer appropriate renderer for mode
*/
- public static function getRenderer( $tex, $params = array(), $mode =
MW_MATH_PNG ) {
- global $wgDefaultUserOptions, $wgMathValidModes,
$wgMathEnableExperimentalInputFormats;
+ public static function getRenderer( $tex, $params = array(), $mode =
'png' ) {
+ global $wgDefaultUserOptions,
$wgMathEnableExperimentalInputFormats;
$mathStyle = null;
if ( isset( $params['display'] ) ) {
$layoutMode = $params['display'];
if ( $layoutMode == 'block' ) {
- $mathStyle = MW_MATHSTYLE_DISPLAY;
+ $mathStyle = 'display';
// TODO: Implement caching for attributes of
the math tag
// Currently the key for the database entry
relating to an equation
// is md5($tex) the new option to determine if
the tex input
@@ -129,7 +129,7 @@
// be centered in a new line, or just in be
displayed in the current line.
$tex = '{\displaystyle ' . $tex . '}';
} elseif ( $layoutMode == 'inline' ) {
- $mathStyle = MW_MATHSTYLE_INLINE;
+ $mathStyle = 'inline';
$tex = '{\textstyle ' . $tex . '}';
}
}
@@ -137,29 +137,28 @@
if ( isset( $params['forcemathmode'] ) ) {
$mode = $params['forcemathmode'];
}
- if ( !in_array( $mode, $wgMathValidModes ) ) {
+ if ( !in_array( $mode, self::getValidModes() ) ) {
$mode = $wgDefaultUserOptions['math'];
}
- if ( $wgMathEnableExperimentalInputFormats === true && $mode ==
MW_MATH_MATHML &&
+ if ( $wgMathEnableExperimentalInputFormats === true && $mode ==
'mathml' &&
isset( $params['type'] ) ) {
// Support of MathML input (experimental)
- // Currently support for mode MW_MATH_MATHML only
+ // Currently support for mode 'mathml' only
if ( !in_array( $params['type'], array( 'pmml', 'ascii'
) ) ) {
unset( $params['type'] );
}
}
switch ( $mode ) {
- case MW_MATH_MATHJAX:
- case MW_MATH_SOURCE:
+ case 'source':
$renderer = new MathSource( $tex, $params );
break;
- case MW_MATH_PNG:
+ case 'png':
$renderer = new MathTexvc( $tex, $params );
break;
- case MW_MATH_LATEXML:
+ case 'latexml':
$renderer = new MathLaTeXML( $tex, $params );
break;
- case MW_MATH_MATHML:
+ case 'mathml':
default:
$renderer = new MathMathML( $tex, $params );
}
@@ -408,9 +407,9 @@
}
/**
- * gets the rendering mode MW_MATH_*
+ * Gets the rendering mode
*
- * @return int
+ * @return string
*/
public function getMode() {
return $this->mode;
@@ -418,12 +417,11 @@
/**
* Sets the rendering mode
- * @param int $newMode element of the array $wgMathValidModes
+ * @param string $newMode element of the array $wgMathValidModes
* @return bool
*/
public function setMode( $newMode ) {
- global $wgMathValidModes;
- if ( in_array( $newMode, $wgMathValidModes ) ) {
+ if ( in_array( $newMode, self::getValidModes() ) ) {
$this->mode = $newMode;
return true;
} else {
@@ -530,9 +528,9 @@
/**
*
- * @param
(MW_MATHSTYLE_INLINE_DISPLAYSTYLE|MW_MATHSTYLE_DISPLAY|MW_MATHSTYLE_INLINE)
$mathStyle
+ * @param ('inlineDisplaystyle'|'display'|'inline') $mathStyle
*/
- public function setMathStyle( $displayStyle = MW_MATHSTYLE_DISPLAY ) {
+ public function setMathStyle( $displayStyle = 'display' ) {
if ( $this->mathStyle !== $displayStyle ){
$this->changed = true;
}
@@ -541,7 +539,7 @@
/**
* Returns the value of the DisplayStyle attribute
- * @return
(MW_MATHSTYLE_INLINE_DISPLAYSTYLE|MW_MATHSTYLE_DISPLAY|MW_MATHSTYLE_INLINE) the
DisplayStyle
+ * @return ('inlineDisplaystyle'|'display'|'inline') the DisplayStyle
*/
public function getMathStyle() {
return $this->mathStyle;
@@ -560,12 +558,11 @@
* @return bool
*/
public function checkTex() {
- global $wgMathDisableTexFilter;
- if ( $this->texSecure || (int) $wgMathDisableTexFilter ==
MW_MATH_CHECK_NEVER ) {
+ if ( $this->texSecure || self::getDisableTexFilter() == 'never'
) {
// equation was already checked or checking is disabled
return true;
} else {
- if( (int) $wgMathDisableTexFilter == MW_MATH_CHECK_NEW
&& $this->mode != MW_MATH_SOURCE ){
+ if( self::getDisableTexFilter() == 'new' && $this->mode
!= 'source' ){
if( $this->readFromDatabase() ){
return true;
}
@@ -647,4 +644,14 @@
return $names[ $this->getMode() ];
}
+ public static function getValidModes(){
+ global $wgMathValidModes;
+ return array_map( "MathHooks::mathModeToString",
$wgMathValidModes );
+ }
+
+
+ public static function getDisableTexFilter(){
+ global $wgMathDisableTexFilter;
+ return MathHooks::mathCheckToString( $wgMathDisableTexFilter );
+ }
}
diff --git a/MathSource.php b/MathSource.php
index 77c84cc..47f77e6 100644
--- a/MathSource.php
+++ b/MathSource.php
@@ -25,7 +25,7 @@
*/
function __construct( $tex = '', $params = array() ) {
parent::__construct( $tex, $params );
- $this->setMode( MW_MATH_SOURCE );
+ $this->setMode( 'source' );
}
/**
@@ -36,7 +36,7 @@
function getHtmlOutput() {
# No need to render or parse anything more!
# New lines are replaced with spaces, which avoids confusing
our parser (bugs 23190, 22818)
- if ( $this->getMathStyle() == MW_MATHSTYLE_DISPLAY ) {
+ if ( $this->getMathStyle() == 'display' ) {
$class = 'mwe-math-fallback-source-display';
} else {
$class = 'mwe-math-fallback-source-inline';
diff --git a/MathTexvc.php b/MathTexvc.php
index d18702c..2f77c9b 100644
--- a/MathTexvc.php
+++ b/MathTexvc.php
@@ -143,7 +143,7 @@
'class' => 'mwe-math-fallback-image-inline tex',
'alt' => $this->getTex()
);
- if ( $this->getMathStyle() === MW_MATHSTYLE_DISPLAY ){
+ if ( $this->getMathStyle() === 'display' ){
// if DisplayStyle is true, the equation will be
centered in a new line
$attributes[ 'class' ] =
'mwe-math-fallback-image-display tex';
}
@@ -177,17 +177,21 @@
*/
public function callTexvc() {
global $wgTexvc, $wgTexvcBackgroundColor, $wgHooks;
-
+ if ( $wgTexvc === false ){
+ $texvc = __DIR__ . '/math/texvc';
+ } else {
+ $texvc = $wgTexvc;
+ }
$tmpDir = wfTempDir();
- if ( !is_executable( $wgTexvc ) ) {
+ if ( !is_executable( $texvc ) ) {
LoggerFactory::getInstance( 'Math' )->error(
- "$wgTexvc does not exist or is not executable."
);
+ "$texvc does not exist or is not executable." );
return $this->getError( 'math_notexvc' );
}
$escapedTmpDir = wfEscapeShellArg( $tmpDir );
- $cmd = $wgTexvc . ' ' .
+ $cmd = $texvc . ' ' .
$escapedTmpDir . ' ' .
$escapedTmpDir . ' ' .
wfEscapeShellArg( $this->getUserInputTex() ) . ' ' .
@@ -335,27 +339,7 @@
* @return string HTML string
*/
public function getHtmlOutput() {
- if ( $this->getMode() == MW_MATH_MATHML && $this->getMathml()
!= '' ) {
- return Xml::tags( 'math',
- $this->getAttributes( 'math',
- array( 'xmlns' =>
'http://www.w3.org/1998/Math/MathML' ) ),
- $this->mathml );
- }
- if ( ( $this->getMode() == MW_MATH_PNG ) || ( $this->getHtml()
== '' ) ||
- ( ( $this->getMode() == MW_MATH_SIMPLE ) && (
$this->getConservativeness() != self::CONSERVATIVE ) ) ||
- ( ( $this->getMode() == MW_MATH_MODERN ||
$this->getMode() == MW_MATH_MATHML ) && ( $this->getConservativeness() ==
self::LIBERAL ) )
- )
- {
- return $this->getMathImageHTML();
- } else {
- return Xml::tags( 'span',
- $this->getAttributes( 'span',
- array( 'class' => 'texhtml',
- 'dir' => 'ltr'
- ) ),
- $this->getHtml()
- );
- }
+ return $this->getMathImageHTML();
}
/**
diff --git a/README b/README
index 6fdf82e..6e48646 100644
--- a/README
+++ b/README
@@ -14,7 +14,7 @@
math tags to MathML. To use that feature you have to enable LaTeXML by setting
$wgMathUseLaTeXML = true;
It is possible to choose LaTeXML as default option (for anonymous user) by
setting
-$wgDefaultUserOptions['math'] = MW_MATH_LATEXML;
+$wgDefaultUserOptions['math'] = 'latexml';
in the LocalSettings.php file.
The LaTeXML option requires php5-curl to be installed. Without php5-curl no
proper
error handling can be guaranteed.
diff --git a/SpecialMathShowImage.php b/SpecialMathShowImage.php
index bffd4d2..6b6c956 100644
--- a/SpecialMathShowImage.php
+++ b/SpecialMathShowImage.php
@@ -7,7 +7,7 @@
class SpecialMathShowImage extends SpecialPage {
private $noRender = false;
private $renderer = null;
- private $mode = MW_MATH_MATHML;
+ private $mode = 'mathml';
function __construct() {
parent::__construct(
@@ -28,7 +28,7 @@
$out->setArticleRelated( false );
$out->setRobotPolicy( "noindex,nofollow" );
$out->disable();
- if ( $success && $this->mode == MW_MATH_PNG ) {
+ if ( $success && $this->mode == 'png' ) {
$request->response()->header( "Content-type:
image/png;" );
} else {
$request->response()->header( "Content-type:
image/svg+xml; charset=utf-8" );
@@ -40,7 +40,7 @@
}
function execute( $par ) {
- global $wgMathValidModes, $wgMathEnableExperimentalInputFormats;
+ global $wgMathEnableExperimentalInputFormats;
$request = $this->getRequest();
$hash = $request->getText( 'hash', '' );
$tex = $request->getText( 'tex', '' );
@@ -49,10 +49,10 @@
} else {
$asciimath = '';
}
- $this->mode = $request->getInt( 'mode', MW_MATH_MATHML );
- if ( !in_array( $this->mode, $wgMathValidModes ) ) {
+ $this->mode = $request->getInt( 'mode', 'mathml' );
+ if ( !in_array( $this->mode, MathRenderer::getValidModes() ) ) {
// Fallback to the default if an invalid mode was
specified
- $this->mode = MW_MATH_MATHML;
+ $this->mode = 'mathml';
}
if ( $hash === '' && $tex === '' && $asciimath === '' ) {
$this->setHeaders( false );
@@ -60,10 +60,10 @@
} else {
if ( $tex === '' && $asciimath === ''){
switch ( $this->mode ) {
- case MW_MATH_PNG:
+ case 'png':
$this->renderer =
MathTexvc::newFromMd5( $hash );
break;
- case MW_MATH_LATEXML:
+ case 'latexml':
$this->renderer =
MathLaTeXML::newFromMd5( $hash );
break;
default:
@@ -74,12 +74,12 @@
if ( $isInDatabase || $this->noRender ) {
$success = $isInDatabase;
} else {
- if ( $this->mode == MW_MATH_PNG ) {
+ if ( $this->mode == 'png' ) {
// get the texvc input from the
mathoid database table
// and render the conventional
way
$mmlRenderer =
MathMathML::newFromMd5( $hash );
$mmlRenderer->readFromDatabase();
- $this->renderer =
MathRenderer::getRenderer( $mmlRenderer->getUserInputTex(), array(),
MW_MATH_PNG );
+ $this->renderer =
MathRenderer::getRenderer( $mmlRenderer->getUserInputTex(), array(), 'png' );
$this->renderer->setMathStyle(
$mmlRenderer->getMathStyle() );
}
$success = $this->renderer->render();
@@ -92,7 +92,7 @@
$success = $this->renderer->render();
}
if ( $success ) {
- if ( $this->mode == MW_MATH_PNG ) {
+ if ( $this->mode == 'png' ) {
$output = $this->renderer->getPng();
} else {
$output = $this->renderer->getSvg();
diff --git a/SpecialMathStatus.php b/SpecialMathStatus.php
index 74bc8da..03119a1 100644
--- a/SpecialMathStatus.php
+++ b/SpecialMathStatus.php
@@ -34,10 +34,10 @@
foreach ( $enabledMathModes as $modeNr => $modeName ){
$out->addWikiText( "=== $modeName ===" );
switch( $modeNr ){
- case MW_MATH_MATHML:
+ case 'mathml':
$this->runMathMLTest( $modeName );
break;
- case MW_MATH_LATEXML:
+ case 'latexml':
$this->runMathLaTeXMLTest( $modeName );
}
}
@@ -58,7 +58,7 @@
}
public function testSpecialCaseText() {
- $renderer = MathRenderer::getRenderer( 'x^2+\text{a sample
Text}', array(), MW_MATH_MATHML );
+ $renderer = MathRenderer::getRenderer( 'x^2+\text{a sample
Text}', array(), 'mathml' );
$expected = 'a sample Text</mtext>';
$this->assertTrue( $renderer->render(), 'Rendering the input
"x^2+\text{a sample Text}"' );
$this->assertContains( $expected, $renderer->getHtmlOutput(),
'Comparing to the reference rendering' );
@@ -85,7 +85,7 @@
<use xlink:href="#E1-MJMATHI-62" x="1761" y="0"></use>
</g>
</svg>';
- $renderer = MathRenderer::getRenderer( "a+b", array(),
MW_MATH_MATHML );
+ $renderer = MathRenderer::getRenderer( "a+b", array(), 'mathml'
);
$this->assertTrue( $renderer->render( true ), "Rendering of a+b
in plain MathML mode" );
$real = str_replace( "\n", '', $renderer->getHtmlOutput() );
$expected = '<mo>+</mo>';
@@ -104,7 +104,7 @@
$renderer = new MathMathML( $inputSample, $attribs );
$this->assertEquals( 'pmml', $renderer->getInputType(),
'Checking if MathML input is supported' );
$this->assertTrue( $renderer->render(), 'Rendering Presentation
MathML sample' );
- $real = MathRenderer::renderMath( $inputSample, $attribs,
MW_MATH_MATHML );
+ $real = MathRenderer::renderMath( $inputSample, $attribs,
'mathml' );
$expected = 'hash=5628b8248b79267ecac656102334d5e3&mode=5';
$this->assertContains( $expected, $real, 'Checking if the link
to SVG image is correct' );
}
@@ -114,7 +114,7 @@
* i.e. if the span element is generated right.
*/
public function testLaTeXMLIntegration() {
- $renderer = MathRenderer::getRenderer( "a+b", array(),
MW_MATH_LATEXML );
+ $renderer = MathRenderer::getRenderer( "a+b", array(),
'latexml' );
$this->assertTrue( $renderer->render( true ), "Rendering of a+b
in LaTeXML mode" );
$expected = '<math xmlns="http://www.w3.org/1998/Math/MathML"
id="p1.1.m1.1" class="ltx_Math" alttext="{\displaystyle a+b}"
xref="p1.1.m1.1.cmml"><semantics id="p1.1.m1.1a" xref="p1.1.m1.1.cmml"><mrow
id="p1.1.m1.1.4" xref="p1.1.m1.1.4.cmml"><mi id="p1.1.m1.1.1"
xref="p1.1.m1.1.1.cmml">a</mi><mo id="p1.1.m1.1.2"
xref="p1.1.m1.1.2.cmml">+</mo><mi id="p1.1.m1.1.3"
xref="p1.1.m1.1.3.cmml">b</mi></mrow><annotation-xml encoding="MathML-Content"
id="p1.1.m1.1.cmml" xref="p1.1.m1.1"><apply id="p1.1.m1.1.4.cmml"
xref="p1.1.m1.1.4"><plus id="p1.1.m1.1.2.cmml" xref="p1.1.m1.1.2"/><ci
id="p1.1.m1.1.1.cmml" xref="p1.1.m1.1.1">a</ci><ci id="p1.1.m1.1.3.cmml"
xref="p1.1.m1.1.3">b</ci></apply></annotation-xml><annotation
encoding="application/x-tex" id="p1.1.m1.1b"
xref="p1.1.m1.1.cmml">{\displaystyle a+b}</annotation></semantics></math>';
$real = preg_replace( "/\n\s*/", '', $renderer->getHtmlOutput()
);
diff --git a/composer.json b/composer.json
new file mode 100644
index 0000000..3f36484
--- /dev/null
+++ b/composer.json
@@ -0,0 +1,10 @@
+{
+ "require-dev": {
+ "jakub-onderka/php-parallel-lint": "0.9.*",
+ },
+ "scripts": {
+ "test": [
+ "parallel-lint . --exclude vendor",
+ ]
+ }
+}
diff --git a/extension.json b/extension.json
new file mode 100644
index 0000000..6db5e6b
--- /dev/null
+++ b/extension.json
@@ -0,0 +1,174 @@
+{
+ "name": "Math",
+ "version": "2.0.0",
+ "author": [
+ "Tomasz Wegrzanowski",
+ "Brion Vibber",
+ "Moritz Schubotz",
+ "Derk-Jan Hartman"
+ ],
+ "url": "https://www.mediawiki.org/wiki/Extension:Math",
+ "descriptionmsg": "math-desc",
+ "callback": "MathHooks::registerExtension",
+ "type": "parserhook",
+ "AutoloadClasses": {
+ "MathHooks": "Math.hooks.php",
+ "MathRenderer": "MathRenderer.php",
+ "MathTexvc": "MathTexvc.php",
+ "MathSource": "MathSource.php",
+ "MathMathML": "MathMathML.php",
+ "MathLaTeXML": "MathLaTeXML.php",
+ "MathInputCheck": "MathInputCheck.php",
+ "MathInputCheckTexvc": "MathInputCheckTexvc.php",
+ "SpecialMathShowImage": "SpecialMathShowImage.php",
+ "SpecialMathStatus": "SpecialMathStatus.php"
+ },
+ "DefaultUserOptions": {
+ "math": "png"
+ },
+ "ExtensionFunctions": [
+ "MathHooks::setup"
+ ],
+ "ExtensionMessagesFiles": {
+ "MathAlias": "Math.alias.php",
+ "MathAliasNoTranslate": "Math.alias.noTranslate.php"
+ },
+ "Hooks": {
+ "ParserFirstCallInit": [
+ "MathHooks::onParserFirstCallInit"
+ ],
+ "GetPreferences": [
+ "MathHooks::onGetPreferences"
+ ],
+ "LoadExtensionSchemaUpdates": [
+ "MathHooks::onLoadExtensionSchemaUpdates"
+ ],
+ "ParserTestTables": [
+ "MathHooks::onParserTestTables"
+ ],
+ "UnitTestsList": [
+ "MathHooks::onRegisterUnitTests"
+ ],
+ "PageRenderingHash": [
+ "MathHooks::onPageRenderingHash"
+ ],
+ "EditPageBeforeEditToolbar": [
+ "MathHooks::onEditPageBeforeEditToolbar"
+ ]
+ },
+ "config": {
+ "MathCheckFiles": true,
+ "MathDefaultLaTeXMLSetting": {
+ "format": "xhtml",
+ "whatsin": "math",
+ "whatsout": "math",
+ "0": "pmml",
+ "1": "cmml",
+ "2": "mathtex",
+ "3": "nodefaultresources",
+ "preload": [
+ "LaTeX.pool",
+ "article.cls",
+ "amsmath.sty",
+ "amsthm.sty",
+ "amstext.sty",
+ "amssymb.sty",
+ "eucal.sty",
+ "[dvipsnames]xcolor.sty",
+ "url.sty",
+ "hyperref.sty",
+ "[ids]latexml.sty",
+ "texvc"
+ ]
+ },
+ "MathDirectory": false,
+ "MathDisableTexFilter": "new",
+ "MathEnableExperimentalInputFormats": false,
+ "MathFileBackend": false,
+ "MathLaTeXMLTimeout": 240,
+ "MathLaTeXMLUrl": "http://gw125.iu.xsede.org:8888",
+ "MathMathMLTimeout": 20,
+ "MathMathMLUrl": "http://mathoid.testme.wmflabs.org",
+ "MathPath": false,
+ "MathTexvcCheckExecutable": false,
+ "MathValidModes": [
+ "png",
+ "source",
+ "mathml"
+ ],
+ "Texvc": false,
+ "TexvcBackgroundColor": "transparent"
+ },
+ "VisualEditorPluginModules": [
+ "ext.math.visualEditor"
+ ],
+ "MessagesDirs": {
+ "Math": [
+ "i18n"
+ ]
+ },
+ "ParserTestFiles": [
+ "mathParserTests.txt"
+ ],
+ "ResourceModules": {
+ "ext.math.styles": {
+ "position": "top",
+ "styles": "ext.math.css",
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ },
+ "ext.math.desktop.styles": {
+ "position": "top",
+ "styles": "ext.math.desktop.css"
+ },
+ "ext.math.scripts": {
+ "scripts": "ext.math.js"
+ },
+ "ext.math.editbutton.enabler": {
+ "scripts": "ext.math.editbutton.js",
+ "messages": [
+ "math_tip",
+ "math_sample"
+ ]
+ },
+ "ext.math.visualEditor": {
+ "scripts": [
+ "VisualEditor/ve.dm.MWMathNode.js",
+ "VisualEditor/ve.ce.MWMathNode.js",
+ "VisualEditor/ve.ui.MWMathInspector.js",
+ "VisualEditor/ve.ui.MWMathInspectorTool.js"
+ ],
+ "styles": [
+ "VisualEditor/ve.ce.MWMathNode.css",
+ "VisualEditor/ve.ui.MWMathIcons.css",
+ "VisualEditor/ve.ui.MWMathInspector.css"
+ ],
+ "dependencies": [
+ "ext.visualEditor.mwcore"
+ ],
+ "messages": [
+ "math-visualeditor-mwmathinspector-display",
+
"math-visualeditor-mwmathinspector-display-block",
+
"math-visualeditor-mwmathinspector-display-default",
+
"math-visualeditor-mwmathinspector-display-inline",
+ "math-visualeditor-mwmathinspector-id",
+ "math-visualeditor-mwmathinspector-title"
+ ],
+ "targets": [
+ "desktop",
+ "mobile"
+ ]
+ }
+ },
+ "ResourceFileModulePaths": {
+ "localBasePath": "modules",
+ "remoteExtPath": "Math/modules"
+ },
+ "SpecialPages": {
+ "MathShowImage": "SpecialMathShowImage",
+ "MathStatus": "SpecialMathStatus"
+ },
+ "manifest_version": 1
+}
diff --git a/maintenance/MathGenerateTests.php
b/maintenance/MathGenerateTests.php
index a8f984c..a575753 100644
--- a/maintenance/MathGenerateTests.php
+++ b/maintenance/MathGenerateTests.php
@@ -78,7 +78,7 @@
}
$i = 0;
foreach ( array_slice( $allEquations, $offset, $length, true )
as $input ) {
- $output = MathRenderer::renderMath( $input[1],
$input[2], MW_MATH_PNG );
+ $output = MathRenderer::renderMath( $input[1],
$input[2], 'png' );
$output = preg_replace(
'#src="(.*?)/(([a-f]|\d)*).png"#', 'src="\2.png"', $output );
$parserTests[] = array( (string)$input[1], $output );
$i++;
diff --git a/modules/ext.math.js b/modules/ext.math.js
index 815a8f1..bf4b326 100644
--- a/modules/ext.math.js
+++ b/modules/ext.math.js
@@ -1,7 +1,6 @@
( function ( $ ) {
'use strict';
- // The MW_MATH_PNG and MW_MATH_MATHML constants are taken from Math.php
- var MW_MATH_PNG = 0, MW_MATH_MATHML = 5, img, url;
+ var img, url;
// If MathPlayer is installed we show the MathML rendering.
if (navigator.userAgent.indexOf('MathPlayer') > -1) {
@@ -17,7 +16,7 @@
// Create a new PNG image to use as the fallback.
img = document.createElement('img');
url =
this.style.backgroundImage.match(/url\('?([^']*)'?\)/)[1];
- img.setAttribute( 'src', url.replace('mode=' +
MW_MATH_MATHML, 'mode=' + MW_MATH_PNG) );
+ img.setAttribute( 'src', url.replace('mode=' +
'mathml', 'mode=' + 'png') );
img.setAttribute( 'class', 'tex
mwe-math-fallback-image-' + ($( this
).hasClass('mwe-math-fallback-image-inline') ? 'inline' : 'display') );
img.setAttribute( 'aria-hidden', 'true' );
this.parentNode.insertBefore( img, this );
diff --git a/tests/MathCoverageTest.php b/tests/MathCoverageTest.php
index f02c52e..7782e20 100644
--- a/tests/MathCoverageTest.php
+++ b/tests/MathCoverageTest.php
@@ -70,7 +70,7 @@
// TODO: Link to the wikipage that contains the reference
rendering
$this->assertEquals(
$this->normalize( $output ),
- $this->normalize( MathRenderer::renderMath( $input,
array(), MW_MATH_PNG ) ),
+ $this->normalize( MathRenderer::renderMath( $input,
array(), 'png' ) ),
"Failed to render $input"
);
}
diff --git a/tests/MathDatabaseTest.php b/tests/MathDatabaseTest.php
index b4e4685..2e7b9e6 100644
--- a/tests/MathDatabaseTest.php
+++ b/tests/MathDatabaseTest.php
@@ -78,7 +78,7 @@
* @covers MathHooks::onLoadExtensionSchemaUpdates
*/
public function testCreateTable() {
- $this->setMwGlobals( 'wgMathValidModes', array( MW_MATH_PNG ) );
+ $this->setMwGlobals( 'wgMathValidModes', array( 'png' ) );
$this->db->dropTable( "math", __METHOD__ );
$dbu = DatabaseUpdater::newForDB( $this->db );
$dbu->doUpdates( array( "extensions" ) );
diff --git a/tests/MathLaTeXMLDatabaseTest.php
b/tests/MathLaTeXMLDatabaseTest.php
index fc7d2e0..79efaad 100644
--- a/tests/MathLaTeXMLDatabaseTest.php
+++ b/tests/MathLaTeXMLDatabaseTest.php
@@ -77,7 +77,7 @@
* @covers MathHooks::onLoadExtensionSchemaUpdates
*/
public function testCreateTable() {
- $this->setMwGlobals( 'wgMathValidModes', array( MW_MATH_LATEXML
) );
+ $this->setMwGlobals( 'wgMathValidModes', array( 'latexml' ) );
$this->db->dropTable( "mathlatexml", __METHOD__ );
$dbu = DatabaseUpdater::newForDB( $this->db );
$dbu->doUpdates( array( "extensions" ) );
diff --git a/tests/MathRendererTest.php b/tests/MathRendererTest.php
index 74ea51a..9a293d6 100644
--- a/tests/MathRendererTest.php
+++ b/tests/MathRendererTest.php
@@ -65,7 +65,7 @@
}
public function testCheckingAlways() {
- $this->setMwGlobals( "wgMathDisableTexFilter",
MW_MATH_CHECK_ALWAYS );
+ $this->setMwGlobals( "wgMathDisableTexFilter", 'always' );
$renderer =
$this->getMockBuilder( 'MathRenderer' )->setMethods(
array(
'render',
@@ -84,7 +84,7 @@
}
public function testCheckingNever() {
- $this->setMwGlobals( "wgMathDisableTexFilter",
MW_MATH_CHECK_NEVER );
+ $this->setMwGlobals( "wgMathDisableTexFilter", 'never' );
$renderer =
$this->getMockBuilder( 'MathRenderer' )->setMethods(
array(
'render',
@@ -100,7 +100,7 @@
}
public function testCheckingNewUnknown() {
- $this->setMwGlobals( "wgMathDisableTexFilter",
MW_MATH_CHECK_NEW );
+ $this->setMwGlobals( "wgMathDisableTexFilter", 'new' );
$renderer =
$this->getMockBuilder( 'MathRenderer' )->setMethods(
array(
'render',
@@ -119,7 +119,7 @@
}
public function testCheckingNewKnown() {
- $this->setMwGlobals( "wgMathDisableTexFilter",
MW_MATH_CHECK_NEW );
+ $this->setMwGlobals( "wgMathDisableTexFilter", 'new' );
$renderer =
$this->getMockBuilder( 'MathRenderer' )->setMethods(
array(
'render',
diff --git a/tests/MathSourceTest.php b/tests/MathSourceTest.php
index 8bfe92a..7656330 100644
--- a/tests/MathSourceTest.php
+++ b/tests/MathSourceTest.php
@@ -10,7 +10,7 @@
* i.e. if the span element is generated right.
*/
public function testBasics() {
- $real = MathRenderer::renderMath( "a+b", array(),
MW_MATH_SOURCE );
+ $real = MathRenderer::renderMath( "a+b", array(), 'source' );
$this->assertEquals(
'<span class="mwe-math-fallback-source-inline tex"
dir="ltr">$ a+b $</span>',
$real,
@@ -22,7 +22,7 @@
* Checks if newlines are converted to spaces correctly.
*/
public function testNewLines() {
- $real = MathRenderer::renderMath( "a\n b", array(),
MW_MATH_SOURCE );
+ $real = MathRenderer::renderMath( "a\n b", array(), 'source' );
$this->assertSame(
'<span class="mwe-math-fallback-source-inline tex"
dir="ltr">$ a b $</span>',
$real,
diff --git a/tests/MathUtilsTest.php b/tests/MathUtilsTest.php
new file mode 100644
index 0000000..6dd5eb0
--- /dev/null
+++ b/tests/MathUtilsTest.php
@@ -0,0 +1,102 @@
+<?php
+/**
+ * Test Math utility functions.
+ *
+ * @group Math
+ */
+class MathUtilsTest extends MediaWikiTestCase {
+
+ public function testMathModeToString() {
+ $default = 'png-testing'; // use a different string for testing
only
+ $testCases = array(
+ 'MW_MATH_SIMPLE' => $default,
+ 'MW_MATH_HTML' => $default,
+ 'MW_MATH_MODERN' => $default,
+ 'MW_MATH_MATHJAX' => $default,
+ 'MW_MATH_LATEXML_JAX' => $default,
+ 'MW_MATH_PNG' => 'png',
+ 'MW_MATH_SOURCE' => 'source',
+ 'MW_MATH_MATHML' => 'mathml',
+ 'MW_MATH_LATEXML' => 'latexml',
+ 1 => $default,
+ 2 => $default,
+ 4 => $default,
+ 6 => $default,
+ 8 => $default,
+ 0 => 'png',
+ 3 => 'source',
+ 5 => 'mathml',
+ 7 => 'latexml',
+ 'png' => 'png',
+ 'source' => 'source',
+ 'mathml' => 'mathml',
+ 'latexml' => 'latexml',
+ );
+ foreach ( $testCases as $input => $expected ){
+ $real = MathHooks::mathModeToString( $input, $default );
+ $this->assertEquals( $expected, $real, "Conversion math
mode $input -> $expected" );
+ }
+ }
+
+ public function testMathStyleToString() {
+ $default = 'inlineDisplaystyle-test';
+ $testCases = array(
+ 'MW_MATHSTYLE_INLINE_DISPLAYSTYLE' =>
'inlineDisplaystyle',
+ 'MW_MATHSTYLE_DISPLAY' => 'display',
+ 'MW_MATHSTYLE_INLINE' => 'inline',
+ 0 =>
'inlineDisplaystyle',
+ 1 => 'display',
+ 2 => 'inline',
+ 'inlineDisplaystyle' =>
'inlineDisplaystyle',
+ 'display' => 'display',
+ 'inline' => 'inline',
+ );
+ foreach ( $testCases as $input => $expected ){
+ $real = MathHooks::mathStyleToString( $input, $default
);
+ $this->assertEquals( $expected, $real, "Conversion in
math style" );
+ }
+ }
+
+ public function testMathCheckToString() {
+ $default = 'always-default';
+ $testCases = array(
+ 'MW_MATH_CHECK_ALWAYS' => 'always',
+ 'MW_MATH_CHECK_NEVER' => 'never',
+ 'MW_MATH_CHECK_NEW' => 'new',
+ 0 => 'always',
+ 1 => 'never',
+ 2 => 'new',
+ 'always' => 'always',
+ 'never' => 'never',
+ 'new' => 'new',
+ true => 'never',
+ false => 'always'
+ );
+
+ foreach ( $testCases as $input => $expected ){
+ $real = MathHooks::mathCheckToString( $input, $default
);
+ $this->assertEquals( $expected, $real, "Conversion in
math check method" );
+ }
+ }
+
+ public function testMathModeToHash() {
+ $default = 0;
+ $testCases = array (
+ 'png' => 0,
+ 'source' => 3,
+ 'mathml' => 5,
+ 'latexml'=> 7,
+ 'invalid'=> $default);
+
+ foreach ( $testCases as $input => $expected ){
+ $real = MathHooks::mathModeToHashKey( $input, $default
);
+ $this->assertEquals( $expected, $real, "Conversion to
hash key" );
+ }
+ }
+
+ public function testGetMathNames() {
+ $real = MathHooks::getMathNames();
+ $this->assertEquals( 'PNG images', $real['png'] );
+ }
+
+}
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/228282
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Icb4b53973b19b6e5e799cca20ecdb63853bf5cb3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Math
Gerrit-Branch: master
Gerrit-Owner: Paladox <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits