Add group convertsion support for LanguageConverter. New magic word "{{GROUPCONVERT...
authorPhilip Tzou <philip@users.mediawiki.org>
Sun, 29 Mar 2009 08:55:45 +0000 (08:55 +0000)
committerPhilip Tzou <philip@users.mediawiki.org>
Sun, 29 Mar 2009 08:55:45 +0000 (08:55 +0000)
RELEASE-NOTES
includes/parser/CoreParserFunctions.php
languages/Language.php
languages/LanguageConverter.php
languages/messages/MessagesEn.php

index 72e967c..82df8fe 100644 (file)
@@ -154,6 +154,9 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN
 * 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.
index 774e96a..f7368f3 100644 (file)
@@ -68,6 +68,7 @@ class CoreParserFunctions {
                $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 @@ class CoreParserFunctions {
                $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 @@ class CoreParserFunctions {
                );
                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 8853ace..3fe2cf2 100644 (file)
@@ -46,6 +46,7 @@ class FakeConverter {
        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 @@ class Language {
        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 dcfb8ba..d1c61ed 100644 (file)
@@ -34,6 +34,7 @@ class LanguageConverter {
        var $mFlags;
        var $mDescCodeSep = ':',$mDescVarSep = ';';
        var $mUcfirst = false;
+       var $mGroups = array();
 
        const CACHE_VERSION_KEY = 'VERSION 6';
 
@@ -414,7 +415,7 @@ class LanguageConverter {
                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 @@ class LanguageConverter {
         * 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 @@ class LanguageConverter {
                        // 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 @@ class LanguageConverter {
         *      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 @@ class LanguageConverter {
                                $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 @@ class LanguageConverter {
                        }
                }
 
-
                // parse the mappings in this page
                $blocks = explode($this->mMarkup['begin'], $txt);
                array_shift($blocks);
@@ -869,6 +873,17 @@ class LanguageConverter {
                $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 3124957..e330cc7 100644 (file)
@@ -339,6 +339,7 @@ $magicWords = array(
        'staticredirect'         => array( 1,    '__STATICREDIRECT__'     ),
        'protectionlevel'        => array( 1,    'PROTECTIONLEVEL'        ),
        'formatdate'             => array( 0,    'formatdate', 'dateformat' ),
+       'groupconvert'           => array( 0,    'GROUPCONVERT:', 'GC:'   ),
 );
 
 /**