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