Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F1431878
CollationFactory.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
CollationFactory.php
View Options
<?php
/**
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along
* with this program; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
* http://www.gnu.org/copyleft/gpl.html
*
* @file
*/
namespace
MediaWiki\Collation
;
use
Collation
;
use
InvalidArgumentException
;
use
MediaWiki\Config\ServiceOptions
;
use
MediaWiki\HookContainer\HookContainer
;
use
MediaWiki\HookContainer\HookRunner
;
use
MediaWiki\MainConfigNames
;
use
Wikimedia\ObjectFactory\ObjectFactory
;
/**
* Common factory to construct collation classes.
*
* @since 1.37
*/
class
CollationFactory
{
/**
* @internal For use by ServiceWiring
*/
public
const
CONSTRUCTOR_OPTIONS
=
[
MainConfigNames
::
CategoryCollation
,
];
private
const
CORE_COLLATIONS
=
[
'uppercase'
=>
[
'class'
=>
\UppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
'numeric'
=>
[
'class'
=>
\NumericUppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
'ContentLanguage'
,
]
],
'identity'
=>
[
'class'
=>
\IdentityCollation
::
class
,
'services'
=>
[
'ContentLanguage'
,
]
],
'uca-default'
=>
[
'class'
=>
\IcuCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
],
'args'
=>
[
'root'
,
]
],
'uca-default-u-kn'
=>
[
'class'
=>
\IcuCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
],
'args'
=>
[
'root-u-kn'
,
]
],
'xx-uca-ckb'
=>
[
'class'
=>
\CollationCkb
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
'uppercase-ab'
=>
[
'class'
=>
\AbkhazUppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
'uppercase-ba'
=>
[
'class'
=>
\BashkirUppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
'uppercase-smn'
=>
[
'class'
=>
\InariSaamiUppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
'uppercase-ckb'
=>
[
'class'
=>
\CentralKurdishUppercaseCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
]
],
];
/** @var ServiceOptions */
private
$options
;
/** @var ObjectFactory */
private
$objectFactory
;
/** @var HookRunner */
private
$hookRunner
;
/**
* @param ServiceOptions $options
* @param ObjectFactory $objectFactory
* @param HookContainer $hookContainer
*/
public
function
__construct
(
ServiceOptions
$options
,
ObjectFactory
$objectFactory
,
HookContainer
$hookContainer
)
{
$options
->
assertRequiredOptions
(
self
::
CONSTRUCTOR_OPTIONS
);
$this
->
options
=
$options
;
$this
->
objectFactory
=
$objectFactory
;
$this
->
hookRunner
=
new
HookRunner
(
$hookContainer
);
}
public
function
getCategoryCollation
():
Collation
{
return
$this
->
makeCollation
(
$this
->
getDefaultCollationName
()
);
}
public
function
getDefaultCollationName
():
string
{
return
$this
->
options
->
get
(
MainConfigNames
::
CategoryCollation
);
}
public
function
makeCollation
(
string
$collationName
):
Collation
{
if
(
isset
(
self
::
CORE_COLLATIONS
[
$collationName
]
)
)
{
return
$this
->
instantiateCollation
(
self
::
CORE_COLLATIONS
[
$collationName
]
);
}
if
(
preg_match
(
'/^uca-([A-Za-z@=-]+)$/'
,
$collationName
,
$match
)
)
{
return
$this
->
instantiateCollation
(
[
'class'
=>
\IcuCollation
::
class
,
'services'
=>
[
'LanguageFactory'
,
],
'args'
=>
[
$match
[
1
],
]
]
);
}
elseif
(
preg_match
(
'/^remote-uca-([A-Za-z@=-]+)$/'
,
$collationName
,
$match
)
)
{
return
$this
->
instantiateCollation
(
[
'class'
=>
\RemoteIcuCollation
::
class
,
'services'
=>
[
'ShellboxClientFactory'
],
'args'
=>
[
$match
[
1
]
]
]
);
}
// Provide a mechanism for extensions to hook in.
$collationObject
=
null
;
$this
->
hookRunner
->
onCollation__factory
(
$collationName
,
$collationObject
);
if
(
!
$collationObject
instanceof
Collation
)
{
throw
new
InvalidArgumentException
(
__METHOD__
.
": unknown collation type
\"
$collationName
\"
"
);
}
return
$collationObject
;
}
/**
* @param array $spec
* @return Collation
*/
private
function
instantiateCollation
(
$spec
):
Collation
{
return
$this
->
objectFactory
->
createObject
(
$spec
,
[
'assertClass'
=>
Collation
::
class
]
);
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sat, May 16, 21:10 (1 d, 16 h)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
0a/2e/742f3f48e28b5b3090b209c5f244
Default Alt Text
CollationFactory.php (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment