MediaWiki  master
Collation.php
Go to the documentation of this file.
1 <?php
24 
29 abstract class Collation {
30  private static $instance;
31 
36  public static function singleton() {
37  if ( !self::$instance ) {
38  global $wgCategoryCollation;
39  self::$instance = self::factory( $wgCategoryCollation );
40  }
41  return self::$instance;
42  }
43 
50  public static function factory( $collationName ) {
51  switch ( $collationName ) {
52  case 'uppercase':
53  return new UppercaseCollation;
54  case 'numeric':
55  return new NumericUppercaseCollation(
56  MediaWikiServices::getInstance()->getContentLanguage() );
57  case 'identity':
58  return new IdentityCollation;
59  case 'uca-default':
60  return new IcuCollation( 'root' );
61  case 'uca-default-u-kn':
62  return new IcuCollation( 'root-u-kn' );
63  case 'xx-uca-ckb':
64  return new CollationCkb;
65  case 'uppercase-ab':
66  return new AbkhazUppercaseCollation;
67  case 'uppercase-ba':
68  return new BashkirUppercaseCollation;
69  default:
70  $match = [];
71  if ( preg_match( '/^uca-([A-Za-z@=-]+)$/', $collationName, $match ) ) {
72  return new IcuCollation( $match[1] );
73  }
74 
75  # Provide a mechanism for extensions to hook in.
76  $collationObject = null;
77  Hooks::runner()->onCollation__factory( $collationName, $collationObject );
78 
79  if ( $collationObject instanceof self ) {
80  return $collationObject;
81  }
82 
83  // If all else fails...
84  throw new MWException( __METHOD__ . ": unknown collation type \"$collationName\"" );
85  }
86  }
87 
101  abstract public function getSortKey( $string );
102 
128  abstract public function getFirstLetter( $string );
129 
130 }
AbkhazUppercaseCollation
Definition: AbkhazUppercaseCollation.php:25
CollationCkb
Workaround for the lack of support of Sorani Kurdish / Central Kurdish language ('ckb') in ICU.
Definition: CollationCkb.php:30
MediaWiki\MediaWikiServices
MediaWikiServices is the service locator for the application scope of MediaWiki.
Definition: MediaWikiServices.php:146
Collation\getSortKey
getSortKey( $string)
Given a string, convert it to a (hopefully short) key that can be used for efficient sorting.
UppercaseCollation
Definition: UppercaseCollation.php:25
Collation\getFirstLetter
getFirstLetter( $string)
Given a string, return the logical "first letter" to be used for grouping on category pages and so on...
Collation
Definition: Collation.php:29
Collation\singleton
static singleton()
Definition: Collation.php:36
MWException
MediaWiki exception.
Definition: MWException.php:26
NumericUppercaseCollation
Collation that orders text with numbers "naturally", so that 'Foo 1' < 'Foo 2' < 'Foo 12'.
Definition: NumericUppercaseCollation.php:35
Hooks\runner
static runner()
Get a HookRunner instance for calling hooks using the new interfaces.
Definition: Hooks.php:171
IdentityCollation
Collation class that's essentially a no-op.
Definition: IdentityCollation.php:31
BashkirUppercaseCollation
Definition: BashkirUppercaseCollation.php:25
$wgCategoryCollation
$wgCategoryCollation
Specify how category names should be sorted, when listed on a category page.
Definition: DefaultSettings.php:8035
Collation\$instance
static $instance
Definition: Collation.php:30
Collation\factory
static factory( $collationName)
Definition: Collation.php:50
IcuCollation
Definition: IcuCollation.php:26