r48984 - Code Review

From MediaWiki.org

Jump to: navigation, search
Repository:MediaWiki
Revision:r48983 | r48984 (on ViewVC) | r48985 >
Date:08:55, 29 March 2009
Author:philip
Status:reverted (Comments)
Tags:
Comment:Add group convertsion support for LanguageConverter. New magic word "{{GROUPCONVERT:xxx}}" enabled for this new feature. You can set related conversion rules in [[MediaWiki:Groupconversiontable-xxx]].
Modified paths:

Diff [purge]

Index: trunk/phase3/includes/parser/CoreParserFunctions.php
===================================================================
--- trunk/phase3/includes/parser/CoreParserFunctions.php	(revision 48983)
+++ trunk/phase3/includes/parser/CoreParserFunctions.php	(revision 48984)
@@ -68,6 +68,7 @@
 		$parser->setFunctionHook( 'subjectpagenamee', array( __CLASS__, 'subjectpagenamee' ), SFH_NO_HASH );
 		$parser->setFunctionHook( 'tag',              array( __CLASS__, 'tagObj'           ), SFH_OBJECT_ARGS );
 		$parser->setFunctionHook( 'formatdate',		  array( __CLASS__, 'formatDate'	   ) );
+		$parser->setFunctionHook( 'groupconvert', 	  array( __CLASS__, 'groupconvert'	   ), SFH_NO_HASH );
 
 		if ( $wgAllowDisplayTitle ) {
 			$parser->setFunctionHook( 'displaytitle', array( __CLASS__, 'displaytitle' ), SFH_NO_HASH );
@@ -104,7 +105,7 @@
 		$date = $df->reformat( $pref, $date, array('match-whole') );
 		return $date;
 	}
-
+	
 	static function ns( $parser, $part1 = '' ) {
 		global $wgContLang;
 		if ( intval( $part1 ) || $part1 == "0" ) {
@@ -616,4 +617,12 @@
 		);
 		return $parser->extensionSubstitution( $params, $frame );
 	}
+	
+	/**
+	 * magic word call for a group convert from LanguageConverter.
+	 */
+	public static function groupconvert( $parser, $group ) {
+		global $wgContLang;
+		return $wgContLang->groupConvert( $group );
+	}
 }
Index: trunk/phase3/languages/LanguageConverter.php
===================================================================
--- trunk/phase3/languages/LanguageConverter.php	(revision 48983)
+++ trunk/phase3/languages/LanguageConverter.php	(revision 48984)
@@ -34,6 +34,7 @@
 	var $mFlags;
 	var $mDescCodeSep = ':',$mDescVarSep = ';';
 	var $mUcfirst = false;
+	var $mGroups = array();
 
 	const CACHE_VERSION_KEY = 'VERSION 6';
 
@@ -414,7 +415,7 @@
 		global $wgDisableLangConversion;
 		/* don't do anything if this is the conversion table */
 		if ( $parser->getTitle()->getNamespace() == NS_MEDIAWIKI &&
-				 strpos($parser->mTitle->getText(), "Conversiontable") !== false ) 
+				 strpos($parser->mTitle->getText(), 'onversiontable') !== false ) 
 		{
 			return $text;
 		}
@@ -663,7 +664,7 @@
 	 * load conversion tables either from the cache or the disk
 	 * @private
 	 */
-	function loadTables($fromcache=true) {
+	function loadTables( $fromcache = true ) {
 		global $wgMemc;
 		if( $this->mTablesLoaded )
 			return;
@@ -681,9 +682,14 @@
 			// we will first load the default tables
 			// then update them using things in MediaWiki:Zhconversiontable/*
 			$this->loadDefaultTables();
-			foreach($this->mVariants as $var) {
-				$cached = $this->parseCachedTable($var);
-				$this->mTables[$var]->mergeArray($cached);
+			foreach( $this->mVariants as $var ) {
+				$cached = $this->parseCachedTable( $var );
+				// load group convert table, e.g. [[MediaWiki:Groupconversiontable-StarTrek]].
+				foreach( $this->mGroups as $group ) {
+					$cachedgroup = $this->parseCachedTable( $var, '', true, "Groupconversiontable-$group" );
+					$cached = array_merge( $cached, $cachedgroup );
+				}
+				$this->mTables[$var]->mergeArray( $cached );
 			}
 
 			$this->postLoadTables();
@@ -731,24 +737,24 @@
 	 *	and will be parsed recursively if $recursive=true
 	 *
 	 */
-	function parseCachedTable($code, $subpage='', $recursive=true) {
+	function parseCachedTable($code, $subpage='', $recursive=true, $table='Conversiontable') {
 		global $wgMessageCache;
 		static $parsed = array();
 
 		if(!is_object($wgMessageCache))
 			return array();
 
-		$key = 'Conversiontable/'.$code;
+		$key = "$table/".$code;
 		if($subpage)
 			$key .= '/' . $subpage;
 
 		if(array_key_exists($key, $parsed))
 			return array();
-
+		
 		if ( strpos( $code, '/' ) === false ) {
-			$txt = $wgMessageCache->get( 'Conversiontable', true, $code );
+			$txt = $wgMessageCache->get( $table, true, $code );
 		} else {
-			$title = Title::makeTitleSafe( NS_MEDIAWIKI, "Conversiontable/$code" );
+			$title = Title::makeTitleSafe( NS_MEDIAWIKI, "$table/$code" );
 			if ( $title && $title->exists() ) {
 				$article = new Article( $title );
 				$txt = $article->getContents();
@@ -756,10 +762,9 @@
 				$txt = '';
 			}
 		}
-
 		// get all subpage links of the form
 		// [[MediaWiki:conversiontable/zh-xx/...|...]]
-		$linkhead = $this->mLangObj->getNsText(NS_MEDIAWIKI) . ':Conversiontable';
+		$linkhead = $this->mLangObj->getNsText(NS_MEDIAWIKI) . ":$table";
 		$subs = explode('[[', $txt);
 		$sublinks = array();
 		foreach( $subs as $sub ) {
@@ -778,7 +783,6 @@
 			}
 		}
 
-
 		// parse the mappings in this page
 		$blocks = explode($this->mMarkup['begin'], $txt);
 		array_shift($blocks);
@@ -869,6 +873,17 @@
 		$ret = $this->mMarkup['begin'] . 'R|' . $text . $this->mMarkup['end'];
 		return $ret;
 	}
+	
+	/**
+	 * Callback function for magicword 'groupconvert'
+	 *
+	 * @param string $group: the group name called for
+	 * @return blank string
+	 */
+	function groupConvert( $group ) {
+		$this->mGroups[] = $group;
+		return '';
+	}
 }
 
 /**
Index: trunk/phase3/languages/messages/MessagesEn.php
===================================================================
--- trunk/phase3/languages/messages/MessagesEn.php	(revision 48983)
+++ trunk/phase3/languages/messages/MessagesEn.php	(revision 48984)
@@ -339,6 +339,7 @@
 	'staticredirect'         => array( 1,    '__STATICREDIRECT__'     ),
 	'protectionlevel'        => array( 1,    'PROTECTIONLEVEL'        ),
 	'formatdate'             => array( 0,    'formatdate', 'dateformat' ),
+	'groupconvert'           => array( 0,    'GROUPCONVERT:', 'GC:'   ),
 );
 
 /**
Index: trunk/phase3/languages/Language.php
===================================================================
--- trunk/phase3/languages/Language.php	(revision 48983)
+++ trunk/phase3/languages/Language.php	(revision 48984)
@@ -46,6 +46,7 @@
 	function convertCategoryKey( $key ) {return $key; }
 	function convertLinkToAllVariants($text){ return array( $this->mLang->getCode() => $text); }
 	function armourMath($text){ return $text; }
+	function groupConvert($group) {return '';}
 }
 
 /**
@@ -2290,6 +2291,16 @@
 	function markNoConversion( $text, $noParse=false ) {
 		return $this->mConverter->markNoConversion( $text, $noParse );
 	}
+	
+	/**
+	 * Callback function for magicword 'groupconvert'
+	 *
+	 * @param string $group: the group name called for
+	 * @return blank string
+	 */
+	function groupConvert( $group ) {
+		return $this->mConverter->groupConvert( $group );
+	}
 
 	/**
 	 * A regular expression to match legal word-trailing characters
Index: trunk/phase3/RELEASE-NOTES
===================================================================
--- trunk/phase3/RELEASE-NOTES	(revision 48983)
+++ trunk/phase3/RELEASE-NOTES	(revision 48984)
@@ -154,6 +154,9 @@
 * Add CSS defintion of the 'wikitable' class to shared.css
 * (bug 17163) Added MediaWiki:Talkpage which will be displayed when viewing talk
   pages
+* Add group convertsion support for LanguageConverter. New magic word "{{GROUPCONVERT:xxx}}"
+  enabled for this new feature. You can set related conversion rules in
+  [[MediaWiki:Groupconversiontable-xxx]].
 
 === Bug fixes in 1.15 ===
 * (bug 16968) Special:Upload no longer throws useless warnings.

Follow-up revisions

RevisionCommit summaryAuthorDate
r48985Follow up on r48984, RELEASE-NOTES modified.philip09:20, 29 March 2009
r51405Reverted r48984. Fragile, doesn't work if memcached is enabled. See CodeReview.tstarling14:51, 3 June 2009
r51406Follow-up to r51405 (Reverted r48984).siebrand15:02, 3 June 2009

Comments

#Comment by Tim Starling (Talk | contribs)   08:21, 19 May 2009

I don't see how this could work. Isn't loadTables() called before mGroups is filled?

#Comment by PhiLiP (Talk | contribs)   17:28, 19 May 2009

loadTables() called after mGroups is filled. I have tested it on my own MediaWiki server (and passed) before I commit it.

#Comment by Tim Starling (Talk | contribs)   14:48, 3 June 2009

Only because of luck, not good design. If any extension calls $wgParser->parse() before the primary wikitext is parsed, this will break. It's broken with memcached enabled, because the current set of group conversion tables is saved into memcached, merged with the default tables, and then used for every page regardless of the groups that that page defines. So it won't work on Wikimedia.

Status & tagging log

Views
Toolbox