*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
/**
* Class for handling an array of magic words
* @ingroup Parser
*/
class MagicWordArray {
- /** @var array */
+ /** @var string[] */
public $names = [];
+ /** @var MagicWordFactory */
+ private $factory;
+
/** @var array */
private $hash;
private $regex;
/**
- * @param array $names
+ * @param string[] $names
+ * @param MagicWordFactory|null $factory
*/
- public function __construct( $names = [] ) {
+ public function __construct( $names = [], MagicWordFactory $factory = null ) {
$this->names = $names;
+ $this->factory = $factory ?: MediaWikiServices::getInstance()->getMagicWordFactory();
}
/**
/**
* Add a number of magic words by name
*
- * @param array $names
+ * @param string[] $names
*/
public function addArray( $names ) {
$this->names = array_merge( $this->names, array_values( $names ) );
*/
public function getHash() {
if ( is_null( $this->hash ) ) {
- global $wgContLang;
$this->hash = [ 0 => [], 1 => [] ];
foreach ( $this->names as $name ) {
- $magic = MagicWord::get( $name );
+ $magic = $this->factory->get( $name );
$case = intval( $magic->isCaseSensitive() );
foreach ( $magic->getSynonyms() as $syn ) {
if ( !$case ) {
- $syn = $wgContLang->lc( $syn );
+ $syn = $this->factory->getContentLanguage()->lc( $syn );
}
$this->hash[$case][$syn] = $name;
}
/**
* Get the base regex
- * @return array
+ * @return string[]
*/
public function getBaseRegex() {
if ( is_null( $this->baseRegex ) ) {
$this->baseRegex = [ 0 => '', 1 => '' ];
$allGroups = [];
foreach ( $this->names as $name ) {
- $magic = MagicWord::get( $name );
+ $magic = $this->factory->get( $name );
$case = intval( $magic->isCaseSensitive() );
foreach ( $magic->getSynonyms() as $i => $syn ) {
// Group name must start with a non-digit in PCRE 8.34+
/**
* Get an unanchored regex that does not match parameters
- * @return array
+ * @return string[]
*/
public function getRegex() {
if ( is_null( $this->regex ) ) {
/**
* Get a regex for matching variables with parameters
*
- * @return string
+ * @return string[]
*/
public function getVariableRegex() {
return str_replace( "\\$1", "(.*?)", $this->getRegex() );
/**
* Get a regex anchored to the start of the string that does not match parameters
*
- * @return array
+ * @return string[]
*/
public function getRegexStart() {
$base = $this->getBaseRegex();
/**
* Get an anchored regex for matching variables with parameters
*
- * @return array
+ * @return string[]
*/
public function getVariableStartToEndRegex() {
$base = $this->getBaseRegex();
/**
* @since 1.20
- * @return array
+ * @return string[]
*/
public function getNames() {
return $this->names;
if ( isset( $hash[1][$text] ) ) {
return $hash[1][$text];
}
- global $wgContLang;
- $lc = $wgContLang->lc( $text );
- if ( isset( $hash[0][$lc] ) ) {
- return $hash[0][$lc];
- }
- return false;
+ $lc = $this->factory->getContentLanguage()->lc( $text );
+ return $hash[0][$lc] ?? false;
}
/**