X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FCollation.php;h=0c510b7830709269dae43c3ceb3a3e389d9430d4;hb=41a09896c1fea6edc6716f1882708fbd68358ebe;hp=e6c98f1f5c152e7543832b376eac1dec7578bf9f;hpb=99ee7b7cf65820ebefefc06a2da0d5770ecd2f40;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/Collation.php b/includes/Collation.php index e6c98f1f5c..0c510b7830 100644 --- a/includes/Collation.php +++ b/includes/Collation.php @@ -23,21 +23,22 @@ abstract class Collation { switch( $collationName ) { case 'uppercase': return new UppercaseCollation; + case 'identity': + return new IdentityCollation; case 'uca-default': return new IcuCollation( 'root' ); default: # Provide a mechanism for extensions to hook in. - if ( class_exists( $collationName ) ) { - $collationObject = new $collationName; - if ( $collationObject instanceof Collation ) { - return $collationObject; - } else { - throw new MWException( __METHOD__.": collation type \"$collationName\"" - . " is not a subclass of Collation." ); - } - } else { - throw new MWException( __METHOD__.": unknown collation type \"$collationName\"" ); + + $collationObject = null; + wfRunHooks( 'Collation::factory', array( $collationName, &$collationObject ) ); + + if ( $collationObject instanceof Collation ) { + return $collationObject; } + + // If all else fails... + throw new MWException( __METHOD__.": unknown collation type \"$collationName\"" ); } } @@ -100,6 +101,30 @@ class UppercaseCollation extends Collation { } } +/** + * Collation class that's essentially a no-op. + * + * Does sorting based on binary value of the string. + * Like how things were pre 1.17. + */ +class IdentityCollation extends Collation { + + function getSortKey( $string ) { + return $string; + } + + function getFirstLetter( $string ) { + global $wgContLang; + // Copied from UppercaseCollation. + // I'm kind of unclear on when this could happen... + if ( $string[0] == "\0" ) { + $string = substr( $string, 1 ); + } + return $wgContLang->firstChar( $string ); + } +} + + class IcuCollation extends Collation { var $primaryCollator, $mainCollator, $locale; var $firstLetterData;