From: Philip Tzou Date: Fri, 27 Nov 2009 17:25:59 +0000 (+0000) Subject: Some performance improvements in LanguageConverter.php. X-Git-Tag: 1.31.0-rc.0~38695 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/compta/banques/ajouter.php?a=commitdiff_plain;h=8e1827292a01ef1ff07d94b70d7b558209764996;p=lhc%2Fweb%2Fwiklou.git Some performance improvements in LanguageConverter.php. --- diff --git a/languages/LanguageConverter.php b/languages/LanguageConverter.php index e722673df6..62095405d4 100644 --- a/languages/LanguageConverter.php +++ b/languages/LanguageConverter.php @@ -307,13 +307,26 @@ class LanguageConverter { // enable convertsion of 'xxxxtranslate($m[0], $toVariant); + // Let's convert the trtext only once, + // it would give us more performance improvement + $notrtext[] = $mark; + $trtext .= $m[0] . $trtextmark; $mstart = $m[1] + strlen($m[0]); } + $notrtext[] = ''; + $trtext = $this->translate( $trtext, $toVariant ); + $trtext = StringUtils::explode( $trtextmark, $trtext ); + foreach( $trtext as $t ) { + $ret .= array_shift($notrtext); + $ret .= $t; + } wfProfileOut( $fname ); return $ret; } @@ -329,9 +342,13 @@ class LanguageConverter { */ function translate( $text, $variant ) { wfProfileIn( __METHOD__ ); - if( !$this->mTablesLoaded ) - $this->loadTables(); - $text = $this->mTables[$variant]->replace( $text ); + // If $text is empty or only includes spaces, do nothing + // Otherwise translate it + if( trim($text) ) { + if( !$this->mTablesLoaded ) + $this->loadTables(); + $text = $this->mTables[$variant]->replace( $text ); + } wfProfileOut( __METHOD__ ); return $text; } @@ -407,7 +424,7 @@ class LanguageConverter { $action = $convRule->getRulesAction(); foreach( $convTable as $variant => $pair ) { if( !in_array( $variant, $this->mVariants ) )continue; - if( $action=="add" ) { + if( $action == 'add' ) { foreach( $pair as $from => $to ) { // to ensure that $from and $to not be left blank // so $this->translate() could always return a string @@ -416,7 +433,7 @@ class LanguageConverter { $this->mTables[$variant]->setPair( $from, $to ); } } - elseif ( $action == "remove" ) { + elseif ( $action == 'remove' ) { $this->mTables[$variant]->removeArray( $pair ); } } @@ -877,8 +894,9 @@ class LanguageConverter { class ConverterRule { var $mText; // original text in -{text}- var $mConverter; // LanguageConverter object - var $mManualCodeError='code error!'; - var $mRuleDisplay = '',$mRuleTitle=false; + var $mManualCodeError = 'code error!'; + var $mRuleDisplay = ''; + var $mRuleTitle = false; var $mRules = '';// string : the text of the rules var $mRulesAction = 'none'; var $mFlags = array(); @@ -893,11 +911,11 @@ class ConverterRule { * @param object $converter a LanguageConverter object * @access public */ - function __construct($text,$converter){ + function __construct( $text, $converter ){ $this->mText = $text; - $this->mConverter=$converter; - foreach($converter->mVariants as $v){ - $this->mConvTable[$v]=array(); + $this->mConverter = $converter; + foreach( $converter->mVariants as $v ){ + $this->mConvTable[$v] = array(); } } @@ -908,11 +926,11 @@ class ConverterRule { * @return string Translated text * @public */ - function getTextInBidtable($variants){ - if(is_string($variants)){ $variants=array($variants); } - if(!is_array($variants)) return false; - foreach ($variants as $variant){ - if(array_key_exists($variant, $this->mBidtable)){ + function getTextInBidtable( $variants ){ + if( is_string( $variants ) ){ $variants = array( $variants ); } + if( !is_array( $variants ) ) return false; + foreach( $variants as $variant ){ + if( array_key_exists( $variant, $this->mBidtable ) ){ return $this->mBidtable[$variant]; } } @@ -1026,7 +1044,7 @@ class ConverterRule { continue;// syntax error, skip $to = trim($v[1]); $v = trim($v[0]); - $u = explode($markup['unidsep'], $v); + $u = explode($markup['unidsep'], $v, 2); // if $to is empty, strtr() could return a wrong result if( count($u) == 1 && $to && in_array( $v, $variants ) ) { $bidtable[$v] = $to; @@ -1069,13 +1087,13 @@ class ConverterRule { * Parse rules conversion * @private */ - function getRuleConvertedStr($variant,$doConvert){ + function getRuleConvertedStr( $variant, $doConvert ){ $bidtable = $this->mBidtable; $unidtable = $this->mUnidtable; if( count($bidtable) + count($unidtable) == 0 ){ return $this->mRules; - } elseif ($doConvert){// the text converted + } elseif ( $doConvert ){// the text converted // display current variant in bidirectional array $disp = $this->getTextInBidtable($variant); // or display current variant in fallbacks @@ -1144,9 +1162,9 @@ class ConverterRule { fill to convert tables */ $allow_unid = $manLevel[$v]=='bidirectional' || $manLevel[$v]=='unidirectional'; - if($allow_unid && array_key_exists($v,$unidtable)){ - $ct=$this->mConvTable[$v]; - $this->mConvTable[$v] = array_merge($ct,$unidtable[$v]); + if( $allow_unid && array_key_exists( $v, $unidtable ) ){ + $ct = $this->mConvTable[$v]; + $this->mConvTable[$v] = array_merge($ct, $unidtable[$v]); } } }