From: Ævar Arnfjörð Bjarmason Date: Tue, 10 Jan 2006 00:21:27 +0000 (+0000) Subject: * Performance hack for domas: Only call the mb_ functions or do the expensive X-Git-Tag: 1.6.0~646 X-Git-Url: http://git.cyclocoop.org/%22.%24h.%22?a=commitdiff_plain;h=297db86c0e3f2442ab30cae2ac79e1e1d077d4e4;p=lhc%2Fweb%2Fwiklou.git * Performance hack for domas: Only call the mb_ functions or do the expensive table lookups if we're dealing with a multibyte string, otherwise call strtolower(), ucfirst() and friends --- diff --git a/languages/LanguageUtf8.php b/languages/LanguageUtf8.php index 5687069a84..d738624b77 100644 --- a/languages/LanguageUtf8.php +++ b/languages/LanguageUtf8.php @@ -43,39 +43,59 @@ class LanguageUtf8 extends Language { # it should be dealt with in Language classes. function ucfirst( $str ) { - return $this->uc( $str, true ); + return LanguageUtf8::uc( $str, true ); } function uc( $str, $first = false ) { if ( function_exists( 'mb_strtoupper' ) ) - return $first ? mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ) : mb_strtoupper( $str ); - else { - global $wikiUpperChars; - $x = $first ? '^' : ''; - return preg_replace( - "/$x([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/e", - "strtr( \"\$1\" , \$wikiUpperChars )", - $str - ); - } + if ( $first ) + if ( LanguageUtf8::isMultibyte( $str ) ) + return mb_strtoupper( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); + else + return ucfirst( $str ); + else + return LanguageUtf8::isMultibyte( $str ) ? mb_strtoupper( $str ) : strtoupper( $str ); + else + if ( LanguageUtf8::isMultibyte( $str ) ) { + global $wikiUpperChars; + $x = $first ? '^' : ''; + return preg_replace( + "/$x([a-z]|[\\xc0-\\xff][\\x80-\\xbf]*)/e", + "strtr( \"\$1\" , \$wikiUpperChars )", + $str + ); + } else + return $first ? ucfirst( $str ) : strtoupper( $str ); } function lcfirst( $str ) { - return $this->lc( $str, true ); + return LanguageUtf8::lc( $str, true ); } function lc( $str, $first = false ) { if ( function_exists( 'mb_strtolower' ) ) - return $first ? mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ) : mb_strtolower( $str ); - else { - global $wikiLowerChars; - $x = $first ? '^' : ''; - return preg_replace( - "/$x([A-Z]|[\\xc0-\\xff][\\x80-\\xbf]*)/e", - "strtr( \"\$1\" , \$wikiLowerChars )", - $str - ); - } + if ( $first ) + if ( LanguageUtf8::isMultibyte( $str ) ) + return mb_strtolower( mb_substr( $str, 0, 1 ) ) . mb_substr( $str, 1 ); + else + return strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ); + else + return LanguageUtf8::isMultibyte( $str ) ? mb_strtolower( $str ) : strtolower( $str ); + else + if ( LanguageUtf8::isMultibyte( $str ) ) { + global $wikiLowerChars; + $x = $first ? '^' : ''; + return preg_replace( + "/$x([A-Z]|[\\xc0-\\xff][\\x80-\\xbf]*)/e", + "strtr( \"\$1\" , \$wikiLowerChars )", + $str + ); + } else + return $first ? strtolower( substr( $str, 0, 1 ) ) . substr( $str, 1 ) : strtolower( $str ); + } + + function isMultibyte( $str ) { + return (bool)preg_match( '/^[\x80-\xff]/', $str ); } function stripForSearch( $string ) {