Update MagicWordArray to use MagicWordFactory
authorAryeh Gregor <ayg@aryeh.name>
Wed, 25 Jul 2018 12:22:00 +0000 (15:22 +0300)
committerAryeh Gregor <ayg@aryeh.name>
Tue, 31 Jul 2018 18:40:21 +0000 (21:40 +0300)
Bug: T200247
Change-Id: Ie5a60b81382d7299beadc691fe4d27e931ebe0ed

includes/MagicWordArray.php
includes/MagicWordFactory.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php

index 4010ec7..20ac680 100644 (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+
index 11ed0a7..15a7678 100644 (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 );
+       }
 }
index c0747f2..3c47de3 100644 (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 );
 
index 92cbcbc..2778ea6 100644 (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] ];
        }