From 9e887423d4458cbe64014e26ca0a26007824ae32 Mon Sep 17 00:00:00 2001 From: Philip Tzou Date: Fri, 10 Jul 2009 11:45:08 +0000 Subject: [PATCH] (bug 19620) Allow to convert a string immediately after a new rule added. --- languages/LanguageConverter.php | 59 ++++++++++----------------------- 1 file changed, 17 insertions(+), 42 deletions(-) diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index 57af7bcab1..07f16194ac 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -21,8 +21,6 @@ class LanguageConverter { var $mVariants, $mVariantFallbacks, $mVariantNames; var $mTablesLoaded = false; var $mTables; - var $mManualAddTables; - var $mManualRemoveTables; var $mNamespaceTables; var $mTitleDisplay=''; var $mDoTitleConvert=true, $mDoContentConvert=true; @@ -88,8 +86,6 @@ class LanguageConverter { $this->mManualLevel[$v]=array_key_exists($v,$manualLevel) ?$manualLevel[$v] :'bidirectional'; - $this->mManualAddTables[$v] = array(); - $this->mManualRemoveTables[$v] = array(); $this->mNamespaceTables[$v] = array(); $this->mFlags[$v] = $v; } @@ -374,7 +370,7 @@ class LanguageConverter { * prepare manual conversion table * @private */ - function prepareManualConv( $convRule ){ + function applyManualConv( $convRule ){ // use syntax -{T|zh:TitleZh;zh-tw:TitleTw}- for custom conversion in title $title = $convRule->getTitle(); if( $title ){ @@ -385,41 +381,23 @@ class LanguageConverter { //apply manual conversion table to global table $convTable = $convRule->getConvTable(); $action = $convRule->getRulesAction(); - foreach( $convTable as $v => $t ) { - if( !in_array( $v, $this->mVariants ) )continue; + foreach( $convTable as $variant => $pair ) { + if( !in_array( $variant, $this->mVariants ) )continue; if( $action=="add" ) { - foreach( $t as $from => $to ) { + foreach( $pair as $from => $to ) { // to ensure that $from and $to not be left blank // so $this->translate() could always return a string if ( $from || $to ) // more efficient than array_merge(), about 2.5 times. - $this->mManualAddTables[$v][$from] = $to; + $this->mTables[$variant]->setPair( $from, $to ); } } elseif ( $action == "remove" ) { - foreach ( $t as $from=>$to ) { - if ( $from || $to ) - $this->mManualRemoveTables[$v][$from] = $to; - } + $this->mTables[$variant]->removeArray( $pair ); } } } - /** - * apply manual conversion from $this->mManualAddTables and $this->mManualRemoveTables - * @private - */ - function applyManualConv(){ - //apply manual conversion table to global table - foreach($this->mVariants as $v) { - if (count($this->mManualAddTables[$v]) > 0) { - $this->mTables[$v]->mergeArray($this->mManualAddTables[$v]); - } - if (count($this->mManualRemoveTables[$v]) > 0) - $this->mTables[$v]->removeArray($this->mManualRemoveTables[$v]); - } - } - /** * Convert text using a parser object for context * @public @@ -530,28 +508,25 @@ class LanguageConverter { $tarray = StringUtils::explode( $this->mMarkup['end'], $text ); $text = ''; - $marks = array(); foreach ( $tarray as $txt ) { + $marked = explode( $this->mMarkup['begin'], $txt, 2 ); + + if( $this->mDoContentConvert ) + // Bug 19620: should convert a string immediately after a new rule added. + $text .= $this->autoConvert( $marked[0], $plang ); + if ( array_key_exists( 1, $marked ) ) { $crule = new ConverterRule($marked[1], $this); $crule->parse( $plang ); - $marked[1] = $crule->getDisplay(); - $this->prepareManualConv( $crule ); + $text .= $crule->getDisplay(); + $this->applyManualConv( $crule ); } else - $marked[0] .= $this->mMarkup['end']; - array_push( $marks, $marked ); - } - $this->applyManualConv(); - foreach ( $marks as $marked ) { - if( $this->mDoContentConvert ) - $text .= $this->autoConvert( $marked[0], $plang ); - else - $text .= $marked[0]; - if( array_key_exists( 1, $marked ) ) - $text .= $marked[1]; + $text .= $this->mMarkup['end']; + } + // Remove the last delimiter (wasn't real) $text = substr( $text, 0, -strlen( $this->mMarkup['end'] ) ); -- 2.20.1