Update MagicWordArray to use MagicWordFactory

Bug: T200247
Change-Id: Ie5a60b81382d7299beadc691fe4d27e931ebe0ed
This commit is contained in:
Aryeh Gregor 2018-07-25 15:22:00 +03:00
parent 72ab013be0
commit 5a16d92e04
4 changed files with 35 additions and 12 deletions

View file

@ -23,6 +23,7 @@
*/
use MediaWiki\Logger\LoggerFactory;
use MediaWiki\MediaWikiServices;
/**
* Class for handling an array of magic words
@ -32,6 +33,9 @@ class MagicWordArray {
/** @var array */
public $names = [];
/** @var MagicWordFactory */
private $factory;
/** @var array */
private $hash;
@ -41,9 +45,14 @@ class MagicWordArray {
/**
* @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();
}
}
/**
@ -75,7 +84,7 @@ class MagicWordArray {
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 ) {
@ -97,7 +106,7 @@ class MagicWordArray {
$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+

View file

@ -254,8 +254,18 @@ class MagicWordFactory {
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 );
}
}

View file

@ -171,7 +171,8 @@ class CoreParserFunctions {
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 ' '.
@ -393,7 +394,8 @@ class CoreParserFunctions {
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 );
@ -743,7 +745,7 @@ class CoreParserFunctions {
global $wgContLang;
static $magicWords = null;
if ( is_null( $magicWords ) ) {
$magicWords = new MagicWordArray( [
$magicWords = $parser->getMagicWordFactory()->newArray( [
'pagesincategory_all',
'pagesincategory_pages',
'pagesincategory_subcats',
@ -980,7 +982,8 @@ class CoreParserFunctions {
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 );

View file

@ -2881,8 +2881,8 @@ class Parser {
$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 );
}
/**
@ -5066,7 +5066,7 @@ class Parser {
unset( $paramMap['img_width'] );
}
$mwArray = new MagicWordArray( array_keys( $paramMap ) );
$mwArray = $this->magicWordFactory->newArray( array_keys( $paramMap ) );
$label = '';
$alt = '';
@ -5185,7 +5185,8 @@ class Parser {
}
}
$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] ];
}