var $mFlags;
var $mDescCodeSep = ':',$mDescVarSep = ';';
var $mUcfirst = false;
+ var $mGroups = array();
const CACHE_VERSION_KEY = 'VERSION 6';
return $this->mPreferredVariant;
}
- # FIXME rewrite code for parsing http header. The current code
- # is written specific for detecting zh- variants
if( !$this->mPreferredVariant ) {
// see if some supported language variant is set in the
// http header, but we don't set the mPreferredVariant
// variable in case this is called before the user's
// preference is loaded
- $pv=$this->mMainLanguageCode;
- if(array_key_exists('HTTP_ACCEPT_LANGUAGE', $_SERVER)) {
- $header = str_replace( '_', '-', strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"]));
- $zh = strstr($header, $pv.'-');
- if($zh) {
- $ary = split("[,;]",$zh);
- $pv = $ary[0];
+ if( array_key_exists( 'HTTP_ACCEPT_LANGUAGE', $_SERVER ) ) {
+ $acceptLanguage = strtolower( $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
+
+ // explode by comma
+ $result = explode(',', $acceptLanguage);
+
+ $languages = array();
+
+ foreach( $result as $elem ) {
+ // if $elem likes 'zh-cn;q=0.9'
+ if(($posi = strpos( $elem, ';' )) !== false ) {
+ // get the real language code likes 'zh-cn'
+ $languages[] = substr( $elem, 0, $posi );
+ }
+ else {
+ $languages[] = $elem;
+ }
+ }
+
+ foreach( $languages as $language ) {
+ // strip whitespace
+ $language = trim( $language );
+ if( in_array( $language, $this->mVariants ) ) {
+ return $language;
+ break;
+ }
}
}
- // don't try to return bad variant
- if(in_array( $pv, $this->mVariants ))
- return $pv;
}
return $this->mMainLanguageCode;
* @public
*/
function parserConvert( $text, &$parser ) {
- global $wgDisableLangConversion;
+ global $wgUser, $wgEnableVariants;
+
+ /* disable entire conversion engine if the user had been disabled it */
+ $variantConv = $wgUser->getOption( 'variantconversion' );
+ if ( ( $wgEnableVariants == true ) && ( $variantConv == 0 ) ) {
+ $wgEnableVariants = false;
+ }
+
/* 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;
}
- if ( $wgDisableLangConversion )
+ if ( !$wgEnableVariants )
return $text;
$text = $this->convert( $text );
* @public
*/
function findVariantLink( &$link, &$nt, $ignoreOtherCond = false ) {
- global $wgDisableLangConversion, $wgDisableTitleConversion, $wgRequest, $wgUser;
+ global $wgEnableVariants, $wgDisableTitleConversion, $wgRequest, $wgUser;
$isredir = $wgRequest->getText( 'redirect', 'yes' );
$action = $wgRequest->getText( 'action' );
$linkconvert = $wgRequest->getText( 'linkconvert', 'yes' );
- $disableLinkConversion = $wgDisableLangConversion || $wgDisableTitleConversion;
+ $disableLinkConversion = !$wgEnableVariants || $wgDisableTitleConversion;
$linkBatch = new LinkBatch();
$ns=NS_MAIN;
* 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;
// 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();
* 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();
$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 ) {
}
}
-
// parse the mappings in this page
$blocks = explode($this->mMarkup['begin'], $txt);
array_shift($blocks);
* @public
*/
function armourMath($text){
+ // we need to convert '-{' and '}-' to '-{' and '}-'
+ // to avoid a unwanted '}-' appeared after the math-image.
+ $text = strtr( $text, array('-{' => '-{', '}-' => '}-') );
$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 '';
+ }
}
/**