*/
use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
/**
* Class for handling an array of magic words
/** @var array */
public $names = [];
+ /** @var MagicWordFactory */
+ private $factory;
+
/** @var array */
private $hash;
/**
* @param array $names
+ * @param MagicWordFactory|null $factory
*/
- public function __construct( $names = [] ) {
+ public function __construct( $names = [], MagicWordFactory $factory = null ) {
$this->names = $names;
+ $this->factory = $factory;
+ if ( !$factory ) {
+ $this->factory = MediaWikiServices::getInstance()->getMagicWordFactory();
+ }
}
/**
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 ) {
$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+
public function getDoubleUnderscoreArray() {
if ( is_null( $this->mDoubleUnderscoreArray ) ) {
Hooks::run( 'GetDoubleUnderscoreIDs', [ &$this->mDoubleUnderscoreIDs ] );
- $this->mDoubleUnderscoreArray = new MagicWordArray( $this->mDoubleUnderscoreIDs );
+ $this->mDoubleUnderscoreArray = $this->newArray( $this->mDoubleUnderscoreIDs );
}
return $this->mDoubleUnderscoreArray;
}
+
+ /**
+ * Get a new MagicWordArray with provided $names
+ *
+ * @param array $names
+ * @return MagicWordArray
+ */
+ public function newArray( array $names = [] ) : MagicWordArray {
+ return new MagicWordArray( $names, $this );
+ }
}
public static function urlencode( $parser, $s = '', $arg = null ) {
static $magicWords = null;
if ( is_null( $magicWords ) ) {
- $magicWords = new MagicWordArray( [ 'url_path', 'url_query', 'url_wiki' ] );
+ $magicWords =
+ $parser->getMagicWordFactory()->newArray( [ 'url_path', 'url_query', 'url_wiki' ] );
}
switch ( $magicWords->matchStartToEnd( $arg ) ) {
// Encode as though it's a wiki page, '_' for ' '.
static $magicWords = null;
if ( is_null( $magicWords ) ) {
- $magicWords = new MagicWordArray( [ 'displaytitle_noerror', 'displaytitle_noreplace' ] );
+ $magicWords = $parser->getMagicWordFactory()->newArray(
+ [ 'displaytitle_noerror', 'displaytitle_noreplace' ] );
}
$arg = $magicWords->matchStartToEnd( $uarg );
global $wgContLang;
static $magicWords = null;
if ( is_null( $magicWords ) ) {
- $magicWords = new MagicWordArray( [
+ $magicWords = $parser->getMagicWordFactory()->newArray( [
'pagesincategory_all',
'pagesincategory_pages',
'pagesincategory_subcats',
public static function defaultsort( $parser, $text, $uarg = '' ) {
static $magicWords = null;
if ( is_null( $magicWords ) ) {
- $magicWords = new MagicWordArray( [ 'defaultsort_noerror', 'defaultsort_noreplace' ] );
+ $magicWords = $parser->getMagicWordFactory()->newArray(
+ [ 'defaultsort_noerror', 'defaultsort_noreplace' ] );
}
$arg = $magicWords->matchStartToEnd( $uarg );
$variableIDs = $this->magicWordFactory->getVariableIDs();
$substIDs = $this->magicWordFactory->getSubstIDs();
- $this->mVariables = new MagicWordArray( $variableIDs );
- $this->mSubstWords = new MagicWordArray( $substIDs );
+ $this->mVariables = $this->magicWordFactory->newArray( $variableIDs );
+ $this->mSubstWords = $this->magicWordFactory->newArray( $substIDs );
}
/**
unset( $paramMap['img_width'] );
}
- $mwArray = new MagicWordArray( array_keys( $paramMap ) );
+ $mwArray = $this->magicWordFactory->newArray( array_keys( $paramMap ) );
$label = '';
$alt = '';
}
}
$this->mImageParams[$handlerClass] = $paramMap;
- $this->mImageParamsMagicArray[$handlerClass] = new MagicWordArray( array_keys( $paramMap ) );
+ $this->mImageParamsMagicArray[$handlerClass] =
+ $this->magicWordFactory->newArray( array_keys( $paramMap ) );
}
return [ $this->mImageParams[$handlerClass], $this->mImageParamsMagicArray[$handlerClass] ];
}