From 5a16d92e04ec29aa5f617e452f8eb515416e0fcb Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Wed, 25 Jul 2018 15:22:00 +0300 Subject: [PATCH] Update MagicWordArray to use MagicWordFactory Bug: T200247 Change-Id: Ie5a60b81382d7299beadc691fe4d27e931ebe0ed --- includes/MagicWordArray.php | 15 ++++++++++++--- includes/MagicWordFactory.php | 12 +++++++++++- includes/parser/CoreParserFunctions.php | 11 +++++++---- includes/parser/Parser.php | 9 +++++---- 4 files changed, 35 insertions(+), 12 deletions(-) diff --git a/includes/MagicWordArray.php b/includes/MagicWordArray.php index 4010ec7585..20ac680a98 100644 --- a/includes/MagicWordArray.php +++ b/includes/MagicWordArray.php @@ -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+ diff --git a/includes/MagicWordFactory.php b/includes/MagicWordFactory.php index 11ed0a7a02..15a7678ffe 100644 --- a/includes/MagicWordFactory.php +++ b/includes/MagicWordFactory.php @@ -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 ); + } } diff --git a/includes/parser/CoreParserFunctions.php b/includes/parser/CoreParserFunctions.php index c0747f2118..3c47de3f45 100644 --- a/includes/parser/CoreParserFunctions.php +++ b/includes/parser/CoreParserFunctions.php @@ -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 ); diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 92cbcbcb89..2778ea6965 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -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] ]; } -- 2.20.1