getContentLanguage() ); case 'identity': return new IdentityCollation; case 'uca-default': return new IcuCollation( 'root' ); case 'uca-default-u-kn': return new IcuCollation( 'root-u-kn' ); case 'xx-uca-ckb': return new CollationCkb; case 'uppercase-ab': return new AbkhazUppercaseCollation; case 'uppercase-ba': return new BashkirUppercaseCollation; default: $match = []; if ( preg_match( '/^uca-([A-Za-z@=-]+)$/', $collationName, $match ) ) { return new IcuCollation( $match[1] ); } # Provide a mechanism for extensions to hook in. $collationObject = null; Hooks::run( 'Collation::factory', [ $collationName, &$collationObject ] ); if ( $collationObject instanceof self ) { return $collationObject; } // If all else fails... throw new MWException( __METHOD__ . ": unknown collation type \"$collationName\"" ); } } /** * Given a string, convert it to a (hopefully short) key that can be used * for efficient sorting. A binary sort according to the sortkeys * corresponds to a logical sort of the corresponding strings. Current * code expects that a line feed character should sort before all others, but * has no other particular expectations (and that one can be changed if * necessary). * * @since 1.16.3 * * @param string $string UTF-8 string * @return string Binary sortkey */ abstract function getSortKey( $string ); /** * Given a string, return the logical "first letter" to be used for * grouping on category pages and so on. This has to be coordinated * carefully with convertToSortkey(), or else the sorted list might jump * back and forth between the same "initial letters" or other pathological * behavior. For instance, if you just return the first character, but "a" * sorts the same as "A" based on getSortKey(), then you might get a * list like * * == A == * * [[Aardvark]] * * == a == * * [[antelope]] * * == A == * * [[Ape]] * * etc., assuming for the sake of argument that $wgCapitalLinks is false. * * @since 1.16.3 * * @param string $string UTF-8 string * @return string UTF-8 string corresponding to the first letter of input */ abstract function getFirstLetter( $string ); }