http://www.mediawiki.org/wiki/Special:Code/MediaWiki/85723

Revision: 85723
Author:   ashley
Date:     2011-04-09 15:13:22 +0000 (Sat, 09 Apr 2011)
Log Message:
-----------
Math extension:
*coding style tweaks
*documentation
*check for MediaWiki environment in the main setup file
*add extension credits
*add i18n file (only English at the moment); messages from core MessagesEn.php

This is a follow-up to Brion's r85706.

Modified Paths:
--------------
    trunk/extensions/Math/Math.body.php
    trunk/extensions/Math/Math.hooks.php
    trunk/extensions/Math/Math.php

Added Paths:
-----------
    trunk/extensions/Math/Math.i18n.php

Modified: trunk/extensions/Math/Math.body.php
===================================================================
--- trunk/extensions/Math/Math.body.php 2011-04-09 14:43:12 UTC (rev 85722)
+++ trunk/extensions/Math/Math.body.php 2011-04-09 15:13:22 UTC (rev 85723)
@@ -5,7 +5,7 @@
  * (c) 2002-2011 Tomasz Wegrzanowski, Brion Vibber, and other MediaWiki 
contributors
  * GPLv2 license; info in main package.
  *
- * Contain everything related to <math> </math> parsing
+ * Contains everything related to <math> </math> parsing
  * @file
  * @ingroup Parser
  */
@@ -27,7 +27,7 @@
        var $mathml = '';
        var $conservativeness = 0;
 
-       function __construct( $tex, $params=array() ) {
+       function __construct( $tex, $params = array() ) {
                $this->tex = $tex;
                $this->params = $params;
        }
@@ -80,46 +80,46 @@
                        $contents = wfShellExec( $cmd );
                        wfDebug( "TeX output:\n $contents\n---\n" );
 
-                       if (strlen($contents) == 0) {
+                       if ( strlen( $contents ) == 0 ) {
                                return $this->_error( 'math_unknown_error' );
                        }
 
-                       $retval = substr ($contents, 0, 1);
+                       $retval = substr( $contents, 0, 1 );
                        $errmsg = '';
-                       if (($retval == 'C') || ($retval == 'M') || ($retval == 
'L')) {
-                               if ($retval == 'C') {
+                       if ( ( $retval == 'C' ) || ( $retval == 'M' ) || ( 
$retval == 'L' ) ) {
+                               if ( $retval == 'C' ) {
                                        $this->conservativeness = 2;
-                               } else if ($retval == 'M') {
+                               } elseif ( $retval == 'M' ) {
                                        $this->conservativeness = 1;
                                } else {
                                        $this->conservativeness = 0;
                                }
-                               $outdata = substr ($contents, 33);
+                               $outdata = substr( $contents, 33 );
 
-                               $i = strpos($outdata, "\000");
+                               $i = strpos( $outdata, "\000" );
 
-                               $this->html = substr($outdata, 0, $i);
-                               $this->mathml = substr($outdata, $i+1);
-                       } else if (($retval == 'c') || ($retval == 'm') || 
($retval == 'l'))  {
-                               $this->html = substr ($contents, 33);
-                               if ($retval == 'c') {
+                               $this->html = substr( $outdata, 0, $i );
+                               $this->mathml = substr( $outdata, $i + 1 );
+                       } elseif ( ( $retval == 'c' ) || ( $retval == 'm' ) || 
( $retval == 'l' ) ) {
+                               $this->html = substr( $contents, 33 );
+                               if ( $retval == 'c' ) {
                                        $this->conservativeness = 2;
-                               } else if ($retval == 'm') {
+                               } elseif ( $retval == 'm' ) {
                                        $this->conservativeness = 1;
                                } else {
                                        $this->conservativeness = 0;
                                }
                                $this->mathml = null;
-                       } else if ($retval == 'X') {
+                       } elseif ( $retval == 'X' ) {
                                $this->html = null;
-                               $this->mathml = substr ($contents, 33);
+                               $this->mathml = substr( $contents, 33 );
                                $this->conservativeness = 0;
-                       } else if ($retval == '+') {
+                       } elseif ( $retval == '+' ) {
                                $this->html = null;
                                $this->mathml = null;
                                $this->conservativeness = 0;
                        } else {
-                               $errbit = htmlspecialchars( substr($contents, 
1) );
+                               $errbit = htmlspecialchars( substr( $contents, 
1 ) );
                                switch( $retval ) {
                                        case 'E':
                                                $errmsg = $this->_error( 
'math_lexing_error', $errbit );
@@ -136,16 +136,16 @@
                        }
 
                        if ( !$errmsg ) {
-                                $this->hash = substr ($contents, 1, 32);
+                               $this->hash = substr( $contents, 1, 32 );
                        }
 
                        wfRunHooks( 'MathAfterTexvc', array( &$this, &$errmsg ) 
);
 
                        if ( $errmsg ) {
-                                return $errmsg;
+                               return $errmsg;
                        }
 
-                       if (!preg_match("/^[a-f0-9]{32}$/", $this->hash)) {
+                       if ( !preg_match( "/^[a-f0-9]{32}$/", $this->hash ) ) {
                                return $this->_error( 'math_unknown_error' );
                        }
 
@@ -175,19 +175,22 @@
 
                        # Now save it back to the DB:
                        if ( !wfReadOnly() ) {
-                               $outmd5_sql = pack('H32', $this->hash);
+                               $outmd5_sql = pack( 'H32', $this->hash );
 
-                               $md5_sql = pack('H32', $this->md5); # Binary 
packed, not hex
+                               $md5_sql = pack( 'H32', $this->md5 ); # Binary 
packed, not hex
 
                                $dbw = wfGetDB( DB_MASTER );
-                               $dbw->replace( 'math', array( 'math_inputhash' 
),
-                                 array(
-                                       'math_inputhash' => 
$dbw->encodeBlob($md5_sql),
-                                       'math_outputhash' => 
$dbw->encodeBlob($outmd5_sql),
-                                       'math_html_conservativeness' => 
$this->conservativeness,
-                                       'math_html' => $this->html,
-                                       'math_mathml' => $this->mathml,
-                                 ), __METHOD__
+                               $dbw->replace(
+                                       'math',
+                                       array( 'math_inputhash' ),
+                                       array(
+                                               'math_inputhash' => 
$dbw->encodeBlob( $md5_sql ),
+                                               'math_outputhash' => 
$dbw->encodeBlob( $outmd5_sql ),
+                                               'math_html_conservativeness' => 
$this->conservativeness,
+                                               'math_html' => $this->html,
+                                               'math_mathml' => $this->mathml,
+                                       ),
+                                       __METHOD__
                                );
                        }
                        
@@ -204,7 +207,7 @@
        }
 
        function _error( $msg, $append = '' ) {
-               $mf   = htmlspecialchars( wfMsg( 'math_failure' ) );
+               $mf = htmlspecialchars( wfMsg( 'math_failure' ) );
                $errmsg = htmlspecialchars( wfMsg( $msg ) );
                $source = htmlspecialchars( str_replace( "\n", ' ', $this->tex 
) );
                return "<strong class='error'>$mf ($errmsg$append): 
$source</strong>\n";
@@ -215,16 +218,22 @@
 
                $this->md5 = md5( $this->tex );
                $dbr = wfGetDB( DB_SLAVE );
-               $rpage = $dbr->selectRow( 'math',
-                       array( 
'math_outputhash','math_html_conservativeness','math_html','math_mathml' ),
-                       array( 'math_inputhash' => $dbr->encodeBlob(pack("H32", 
$this->md5))), # Binary packed, not hex
+               $rpage = $dbr->selectRow(
+                       'math',
+                       array(
+                               'math_outputhash', 
'math_html_conservativeness', 'math_html',
+                               'math_mathml'
+                       ),
+                       array(
+                               'math_inputhash' => $dbr->encodeBlob( pack( 
"H32", $this->md5 ) ) # Binary packed, not hex
+                       ),
                        __METHOD__
                );
 
                if( $rpage !== false ) {
                        # Tailing 0x20s can get dropped by the database, add it 
back on if necessary:
-                       $xhash = unpack( 'H32md5', 
$dbr->decodeBlob($rpage->math_outputhash) . "                " );
-                       $this->hash = $xhash ['md5'];
+                       $xhash = unpack( 'H32md5', $dbr->decodeBlob( 
$rpage->math_outputhash ) . "                " );
+                       $this->hash = $xhash['md5'];
 
                        $this->conservativeness = 
$rpage->math_html_conservativeness;
                        $this->html = $rpage->math_html;
@@ -261,11 +270,11 @@
                                } elseif( !is_dir( $hashpath ) || !is_writable( 
$hashpath ) ) {
                                        return false;
                                }
-                               if ( function_exists( "link" ) ) {
-                                       return link ( $wgMathDirectory . 
"/{$this->hash}.png",
+                               if ( function_exists( 'link' ) ) {
+                                       return link( $wgMathDirectory . 
"/{$this->hash}.png",
                                                        $hashpath . 
"/{$this->hash}.png" );
                                } else {
-                                       return rename ( $wgMathDirectory . 
"/{$this->hash}.png",
+                                       return rename( $wgMathDirectory . 
"/{$this->hash}.png",
                                                        $hashpath . 
"/{$this->hash}.png" );
                                }
                        }
@@ -286,9 +295,11 @@
                                        array( 'xmlns' => 
'http://www.w3.org/1998/Math/MathML' ) ),
                                $this->mathml );
                }
-               if (($this->mode == MW_MATH_PNG) || ($this->html == '') ||
-                  (($this->mode == MW_MATH_SIMPLE) && ($this->conservativeness 
!= 2)) ||
-                  (($this->mode == MW_MATH_MODERN || $this->mode == 
MW_MATH_MATHML) && ($this->conservativeness == 0))) {
+               if ( ( $this->mode == MW_MATH_PNG ) || ( $this->html == '' ) ||
+                       ( ( $this->mode == MW_MATH_SIMPLE ) && ( 
$this->conservativeness != 2 ) ) ||
+                       ( ( $this->mode == MW_MATH_MODERN || $this->mode == 
MW_MATH_MATHML ) && ( $this->conservativeness == 0 ) )
+               )
+               {
                        return $this->_linkToMathImage();
                } else {
                        return Xml::tags( 'span',
@@ -296,11 +307,12 @@
                                        array( 'class' => 'texhtml',
                                                'dir' => 'ltr'
                                        ) ),
-                               $this->html );
+                               $this->html
+                       );
                }
        }
 
-       function _attribs( $tag, $defaults=array(), $overrides=array() ) {
+       function _attribs( $tag, $defaults = array(), $overrides = array() ) {
                $attribs = Sanitizer::validateTagAttributes( $this->params, 
$tag );
                $attribs = Sanitizer::mergeAttributes( $defaults, $attribs );
                $attribs = Sanitizer::mergeAttributes( $attribs, $overrides );
@@ -315,9 +327,13 @@
                                'img',
                                array(
                                        'class' => 'tex',
-                                       'alt' => $this->tex ),
+                                       'alt' => $this->tex
+                               ),
                                array(
-                                       'src' => $url ) ) );
+                                       'src' => $url
+                               )
+                       )
+               );
        }
 
        function _mathImageUrl() {
@@ -328,21 +344,22 @@
        
        function _getHashPath() {
                global $wgMathDirectory;
-               $path = $wgMathDirectory .'/' . $this->_getHashSubPath();
+               $path = $wgMathDirectory . '/' . $this->_getHashSubPath();
                wfDebug( "TeX: getHashPath, hash is: $this->hash, path is: 
$path\n" );
                return $path;
        }
        
        function _getHashSubPath() {
-               return substr($this->hash, 0, 1)
-                                       .'/'. substr($this->hash, 1, 1)
-                                       .'/'. substr($this->hash, 2, 1);
+               return substr( $this->hash, 0, 1)
+                                       . '/' . substr( $this->hash, 1, 1 )
+                                       . '/' . substr( $this->hash, 2, 1 );
        }
 
-       public static function renderMath( $tex, $params=array(), ParserOptions 
$parserOptions = null ) {
+       public static function renderMath( $tex, $params = array(), 
ParserOptions $parserOptions = null ) {
                $math = new MathRenderer( $tex, $params );
-               if ( $parserOptions )
+               if ( $parserOptions ) {
                        $math->setOutputMode( $parserOptions->getMath() );
+               }
                return $math->render();
        }
 }

Modified: trunk/extensions/Math/Math.hooks.php
===================================================================
--- trunk/extensions/Math/Math.hooks.php        2011-04-09 14:43:12 UTC (rev 
85722)
+++ trunk/extensions/Math/Math.hooks.php        2011-04-09 15:13:22 UTC (rev 
85723)
@@ -7,30 +7,55 @@
  */
 
 class MathHooks {
+       /**
+        * Set up $wgMathPath and $wgMathDirectory globals if they're not 
already
+        * set.
+        */
        static function setup() {
                global $wgMathPath, $wgMathDirectory;
                global $wgUploadPath, $wgUploadDirectory;
-               if ( $wgMathPath === false ) $wgMathPath = 
"{$wgUploadPath}/math";
-               if ( $wgMathDirectory === false ) $wgMathDirectory = 
"{$wgUploadDirectory}/math";
+               if ( $wgMathPath === false ) {
+                       $wgMathPath = "{$wgUploadPath}/math";
+               }
+               if ( $wgMathDirectory === false ) {
+                       $wgMathDirectory = "{$wgUploadDirectory}/math";
+               }
        }
 
-       static function onParserFirstCallInit($parser)
-       {
+       /**
+        * Register the <math> tag with the Parser.
+        *
+        * @param $parser Object: instance of Parser
+        * @return Boolean: true
+        */
+       static function onParserFirstCallInit( $parser ) {
                $parser->setHook( 'math', array( 'MathHooks', 'mathTagHook' ) );
                return true;
        }
 
        /**
-        * @param  $content
-        * @param  $attributes
+        * Callback function for the <math> parser hook.
+        *
+        * @param $content
+        * @param $attributes
         * @param $parser Parser
         * @return
         */
        static function mathTagHook( $content, $attributes, $parser ) {
                global $wgContLang;
-               return $wgContLang->armourMath( MathRenderer::renderMath( 
$content, $attributes, $parser->getOptions() ) );
+               $renderedMath = MathRenderer::renderMath(
+                       $content, $attributes, $parser->getOptions()
+               );
+               return $wgContLang->armourMath( $renderedMath );
        }
 
+       /**
+        * Add the new math rendering options to Special:Preferences.
+        *
+        * @param $user Object: current User object
+        * @param $defaultPreferences Object: Preferences object
+        * @return Boolean: true
+        */
        static function onGetPreferences( $user, &$defaultPreferences ) {
                global $wgLang;
                $defaultPreferences['math'] = array(

Added: trunk/extensions/Math/Math.i18n.php
===================================================================
--- trunk/extensions/Math/Math.i18n.php                         (rev 0)
+++ trunk/extensions/Math/Math.i18n.php 2011-04-09 15:13:22 UTC (rev 85723)
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Internationalization file for the Math extension.
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/** English */
+$messages['en'] = array(
+       // Edit toolbar stuff shown on ?action=edit (example text & tooltip)
+       'math_sample' => 'Insert formula here',
+       'math_tip' => 'Mathematical formula (LaTeX)',
+
+       // Header on Special:Preferences (or something)
+       'prefs-math' => 'Math',
+
+       // Math options
+       'mw_math_png' => 'Always render PNG',
+       'mw_math_simple' => 'HTML if very simple or else PNG',
+       'mw_math_html' => 'HTML if possible or else PNG',
+       'mw_math_source' => 'Leave it as TeX (for text browsers)',
+       'mw_math_modern' => 'Recommended for modern browsers',
+       'mw_math_mathml' => 'MathML if possible (experimental)',
+
+       // Math errors
+       'math_failure' => 'Failed to parse',
+       'math_unknown_error' => 'unknown error',
+       'math_unknown_function' => 'unknown function',
+       'math_lexing_error' => 'lexing error',
+       'math_syntax_error' => 'syntax error',
+       'math_image_error' => 'PNG conversion failed; check for correct 
installation of latex and dvipng (or dvips + gs + convert)',
+       'math_bad_tmpdir' => 'Cannot write to or create math temp directory',
+       'math_bad_output' => 'Cannot write to or create math output directory',
+       'math_notexvc' => 'Missing texvc executable; please see math/README to 
configure.',
+);
\ No newline at end of file


Property changes on: trunk/extensions/Math/Math.i18n.php
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: trunk/extensions/Math/Math.php
===================================================================
--- trunk/extensions/Math/Math.php      2011-04-09 14:43:12 UTC (rev 85722)
+++ trunk/extensions/Math/Math.php      2011-04-09 15:13:22 UTC (rev 85723)
@@ -2,21 +2,41 @@
 /**
  * MediaWiki math extension
  *
- * (c) 2002-2011 various MediaWiki contributors
- * GPLv2 license; info in main package.
+ * @file
+ * @ingroup Extensions
+ * @version 1.0
+ * @author Tomasz Wegrzanowski
+ * @author Brion Vibber
+ * @copyright © 2002-2011 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(
+       'name' => 'Math',
+       'version' => '1.0',
+       'author' => array( 'Tomasz Wegrzanowski', 'Brion Vibber', '...' ),
+       'description' => 'Render mathematical formulas between 
<code>&lt;math&gt;</code> ... <code>&lt;/math&gt;</code> tags',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:Math',
+);
+
 /** For back-compat */
 $wgUseTeX = true;
 
 /** Location of the texvc binary */
 $wgTexvc = dirname( __FILE__ ) . '/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.
-  */
+ * 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';
 
 /**
@@ -32,14 +52,13 @@
  */
 $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;
+$wgMathPath = false;
 
 /**
  * The filesystem path of the math directory.
@@ -48,7 +67,7 @@
  * See http://www.mediawiki.org/wiki/Manual:Enable_TeX for details about how to
  * set up mathematical formula display.
  */
-$wgMathDirectory    = false;
+$wgMathDirectory = false;
 
 
 ////////// end of config settings.
@@ -58,7 +77,10 @@
 $wgHooks['ParserFirstCallInit'][] = 'MathHooks::onParserFirstCallInit';
 $wgHooks['GetPreferences'][] = 'MathHooks::onGetPreferences';
 
-$wgAutoloadClasses['MathHooks'] = dirname( __FILE__ ) . '/Math.hooks.php';
-$wgAutoloadClasses['MathRenderer'] = dirname( __FILE__ ) . '/Math.body.php';
+$dir = dirname( __FILE__ ) . '/';
+$wgAutoloadClasses['MathHooks'] = $dir . 'Math.hooks.php';
+$wgAutoloadClasses['MathRenderer'] = $dir . 'Math.body.php';
 
-$wgParserTestFiles[] = dirname( __FILE__ ) . "/mathParserTests.txt";
+$wgExtensionMessagesFiles['Math'] = $dir . 'Math.i18n.php';
+
+$wgParserTestFiles[] = $dir . 'mathParserTests.txt';
\ No newline at end of file


_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to