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

Revision: 93852
Author:   ialex
Date:     2011-08-03 20:28:33 +0000 (Wed, 03 Aug 2011)
Log Message:
-----------
Use the ParserFirstCallInit hook instead of an extension function to register 
parser hooks

Modified Paths:
--------------
    trunk/extensions/Multilang/Multilang.class.php
    trunk/extensions/Multilang/Multilang.php

Modified: trunk/extensions/Multilang/Multilang.class.php
===================================================================
--- trunk/extensions/Multilang/Multilang.class.php      2011-08-03 20:23:10 UTC 
(rev 93851)
+++ trunk/extensions/Multilang/Multilang.class.php      2011-08-03 20:28:33 UTC 
(rev 93852)
@@ -6,12 +6,12 @@
         * Alternative text blocks
         * Index is the language code to which it corresponds
         */
-       private $text = array();
+       private static $text = array();
        
        /**
         * Fallback language
         */
-       private $fallback = '';
+       private static $fallback = '';
 
        /**
         * Register a new alternative text block
@@ -22,11 +22,11 @@
         * @param $parser Parent parser
         * @return string
         */
-       public function languageBlock( $text, $args, &$parser ) {
+       public static function languageBlock( $text, $args, $parser ) {
                if( isset( $args['lang'] ) ) {
                        $lang = strtolower( $args['lang'] );
-                       $this->text[$lang] = $text;
-                       $this->updateFallback( $lang );
+                       self::$text[$lang] = $text;
+                       self::updateFallback( $lang );
                } else {
                        # Disaster! We *have* to know the language code, 
otherwise
                        # we have no idea when to show the text in question
@@ -43,11 +43,11 @@
         * @param $parser Parent parser
         * @return string
         */
-       public function outputBlock( $text, $args, &$parser ) {
+       public static function outputBlock( $text, $args, $parser ) {
                global $wgLang;
                # Cache is varied according to interface language...
                $lang = $wgLang->getCode();
-               $text = $this->getText( $lang );
+               $text = self::getText( $lang );
                $output = $parser->parse( $text, $parser->getTitle(), 
$parser->getOptions(), true, false );
                return $output->getText();
        }
@@ -59,8 +59,8 @@
         * @param $lang Language code
         * @return string
         */
-       private function getText( $lang ) {
-               return isset( $this->text[$lang] ) ? $this->text[$lang] : 
$this->getFallback();
+       private static function getText( $lang ) {
+               return isset( self::$text[$lang] ) ? self::$text[$lang] : 
self::getFallback();
        }
        
        /**
@@ -68,8 +68,8 @@
         *
         * @return string
         */
-       private function getFallback() {
-               return isset( $this->text[$this->fallback] ) ? 
$this->text[$this->fallback] : '';
+       private static function getFallback() {
+               return isset( self::$text[self::$fallback] ) ? 
self::$text[self::$fallback] : '';
        }
        
        /**
@@ -78,19 +78,28 @@
         *
         * @param $lang Language code
         */
-       private function updateFallback( $lang ) {
+       private static function updateFallback( $lang ) {
                global $wgContLang;
-               if( $this->fallback == '' || $lang == $wgContLang->getCode() ) {
-                       $this->fallback = $lang;
+               if( self::$fallback == '' || $lang == $wgContLang->getCode() ) {
+                       self::$fallback = $lang;
                }
        }
-       
+
        /**
+        * Set hooks on a Parser instance
+        */
+       public static function onParserFirstCallInit( $parser ) {
+               $parser->setHook( 'language', array( __CLASS__, 'languageBlock' 
) );
+               $parser->setHook( 'multilang', array( __CLASS__, 'outputBlock' 
) );
+               return true;
+       }
+
+       /**
         * Clear all internal state information
         */
-       public function clearState() {
-               $this->text = array();
-               $this->fallback = '';
+       public static function clearState() {
+               self::$text = array();
+               self::$fallback = '';
                return true;
        }
        

Modified: trunk/extensions/Multilang/Multilang.php
===================================================================
--- trunk/extensions/Multilang/Multilang.php    2011-08-03 20:23:10 UTC (rev 
93851)
+++ trunk/extensions/Multilang/Multilang.php    2011-08-03 20:28:33 UTC (rev 
93852)
@@ -8,28 +8,18 @@
  * @author Rob Church <robc...@gmail.com>
  */
  
-if( defined( 'MEDIAWIKI' ) ) {
+if( !defined( 'MEDIAWIKI' ) ) {
+       die;
+}
 
-       $wgExtensionCredits['parserhook'][] = array(
-               'path'           => __FILE__,
-               'name'           => 'Multilang',
-               'author'         => '',
-               'url'            => 
'http://www.mediawiki.org/wiki/Extension:Multilang',
-       );
+$wgExtensionCredits['parserhook'][] = array(
+       'path'           => __FILE__,
+       'name'           => 'Multilang',
+       'author'         => '',
+       'url'            => 'http://www.mediawiki.org/wiki/Extension:Multilang',
+);
 
-       $wgAutoloadClasses['Multilang'] = dirname( __FILE__ ) . 
'/Multilang.class.php';
-       $wgExtensionFunctions[] = 'efMultilang';
-       
-       function efMultilang() {
-               global $wgMultilang, $wgParser, $wgHooks;
-               # Use of a StubObject means we can have a single, persistent 
instance
-               # that will remember what's going on between parse runs, and we 
can
-               # defer initialisation until we need to call a hook function
-               $wgMultilang = new StubObject( 'wgMultilang', 'Multilang' );
-               $wgParser->setHook( 'language', array( &$wgMultilang, 
'languageBlock' ) );
-               $wgParser->setHook( 'multilang', array( &$wgMultilang, 
'outputBlock' ) );
-               $wgHooks['ParserClearState'][] = array( &$wgMultilang, 
'clearState' );
-       }
+$wgAutoloadClasses['Multilang'] = dirname( __FILE__ ) . '/Multilang.class.php';
 
-}
-
+$wgHooks['ParserClearState'][] = 'Multilang::clearState';
+$wgHooks['ParserFirstCallInit'][] = 'Multilang::onParserFirstCallInit';


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

Reply via email to