From 3cf3ea5f0b47ec61f2eabb2161a31eebc20fc6fb Mon Sep 17 00:00:00 2001 From: Philip Tzou Date: Sun, 29 Mar 2009 08:55:45 +0000 Subject: [PATCH 1/1] 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]]. --- RELEASE-NOTES | 3 ++ includes/parser/CoreParserFunctions.php | 11 ++++++- languages/Language.php | 11 +++++++ languages/LanguageConverter.php | 41 +++++++++++++++++-------- languages/messages/MessagesEn.php | 1 + 5 files changed, 53 insertions(+), 14 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 72e967c1cf..82df8fe4d4 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -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. diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index 774e96a7fd..f7368f3988 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -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 ); + } } diff --git a/languages/Language.php b/languages/Language.php index 8853aced5b..3fe2cf2499 100644 --- a/languages/Language.php +++ b/languages/Language.php @@ -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 diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index dcfb8bae13..d1c61ed6c9 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -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 ''; + } } /** diff --git a/languages/messages/MessagesEn.php b/languages/messages/MessagesEn.php index 31249571c5..e330cc7112 100644 --- a/languages/messages/MessagesEn.php +++ b/languages/messages/MessagesEn.php @@ -339,6 +339,7 @@ $magicWords = array( 'staticredirect' => array( 1, '__STATICREDIRECT__' ), 'protectionlevel' => array( 1, 'PROTECTIONLEVEL' ), 'formatdate' => array( 0, 'formatdate', 'dateformat' ), + 'groupconvert' => array( 0, 'GROUPCONVERT:', 'GC:' ), ); /** -- 2.20.1