From 297db86c0e3f2442ab30cae2ac79e1e1d077d4e4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=C3=86var=20Arnfj=C3=B6r=C3=B0=20Bjarmason?= Date: Tue, 10 Jan 2006 00:21:27 +0000 Subject: [PATCH] * 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 --- languages/LanguageUtf8.php | 64 +++++++++++++++++++++++++------------- 1 file changed, 42 insertions(+), 22 deletions(-) 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 ) { -- 2.20.1