(bug 5167) Add SUBPAGENAMEE
[lhc/web/wiklou.git] / includes / MagicWord.php
index 7d38b0e..b48b574 100644 (file)
@@ -21,6 +21,7 @@ $magicWords = array(
        'MAG_CURRENTMONTHNAMEGEN',
        'MAG_CURRENTMONTHABBREV',
        'MAG_CURRENTDAY',
+       'MAG_CURRENTDAY2',
        'MAG_CURRENTDAYNAME',
        'MAG_CURRENTYEAR',
        'MAG_CURRENTTIME',
@@ -68,6 +69,9 @@ $magicWords = array(
        'MAG_UC',
        'MAG_FULLPAGENAME',
        'MAG_FULLPAGENAMEE',
+       'MAG_RAW',
+       'MAG_SUBPAGENAME',
+       'MAG_SUBPAGENAMEE',
 );
 if ( ! defined( 'MEDIAWIKI_INSTALL' ) )
        wfRunHooks( 'MagicWordMagicWords', array( &$magicWords ) );
@@ -81,6 +85,7 @@ $wgVariableIDs = array(
        MAG_CURRENTMONTHNAMEGEN,
        MAG_CURRENTMONTHABBREV,
        MAG_CURRENTDAY,
+       MAG_CURRENTDAY2,
        MAG_CURRENTDAYNAME,
        MAG_CURRENTYEAR,
        MAG_CURRENTTIME,
@@ -99,6 +104,8 @@ $wgVariableIDs = array(
        MAG_CURRENTWEEK,
        MAG_CURRENTDOW,
        MAG_REVISIONID,
+       MAG_SUBPAGENAME,
+       MAG_SUBPAGENAMEE
 );
 if ( ! defined( 'MEDIAWIKI_INSTALL' ) )
        wfRunHooks( 'MagicWordwgVariableIDs', array( &$wgVariableIDs ) );
@@ -107,12 +114,12 @@ if ( ! defined( 'MEDIAWIKI_INSTALL' ) )
  * This class encapsulates "magic words" such as #redirect, __NOTOC__, etc.
  * Usage:
  *     if (MagicWord::get( MAG_REDIRECT )->match( $text ) )
- * 
- * Possible future improvements: 
+ *
+ * Possible future improvements:
  *   * Simultaneous searching for a number of magic words
  *   * $wgMagicWords in shared memory
  *
- * Please avoid reading the data out of one of these objects and then writing 
+ * Please avoid reading the data out of one of these objects and then writing
  * special case code. If possible, add another match()-like function here.
  *
  * @package MediaWiki
@@ -123,7 +130,7 @@ class MagicWord {
         */
        var $mId, $mSynonyms, $mCaseSensitive, $mRegex;
        var $mRegexStart, $mBaseRegex, $mVariableRegex;
-       var $mModified; 
+       var $mModified;
        /**#@-*/
 
        function MagicWord($id = 0, $syn = '', $cs = false) {
@@ -143,7 +150,7 @@ class MagicWord {
         */
        function &get( $id ) {
                global $wgMagicWords;
-               
+
                if ( !is_array( $wgMagicWords ) ) {
                        wfDebugDieBacktrace( "Incorrect initialisation order, \$wgMagicWords does not exist\n" );
                }
@@ -154,33 +161,38 @@ class MagicWord {
                }
                return $wgMagicWords[$id];
        }
-       
+
        # Initialises this object with an ID
        function load( $id ) {
-               global $wgContLang;             
+               global $wgContLang;
                $this->mId = $id;
                $wgContLang->getMagic( $this );
        }
-       
+
        /**
         * Preliminary initialisation
-        * @private
+        * @access private
         */
        function initRegex() {
                #$variableClass = Title::legalChars();
                # This was used for matching "$1" variables, but different uses of the feature will have
                # different restrictions, which should be checked *after* the MagicWord has been matched,
                # not here. - IMSoP
-               $escSyn = array_map( 'preg_quote', $this->mSynonyms );
+               
+               $escSyn = array();
+               foreach ( $this->mSynonyms as $synonym )
+                       // In case a magic word contains /, like that's going to happen;)
+                       $escSyn[] = preg_quote( $synonym, '/' );
                $this->mBaseRegex = implode( '|', $escSyn );
+               
                $case = $this->mCaseSensitive ? '' : 'i';
                $this->mRegex = "/{$this->mBaseRegex}/{$case}";
                $this->mRegexStart = "/^(?:{$this->mBaseRegex})/{$case}";
                $this->mVariableRegex = str_replace( "\\$1", "(.*?)", $this->mRegex );
-               $this->mVariableStartToEndRegex = str_replace( "\\$1", "(.*?)", 
+               $this->mVariableStartToEndRegex = str_replace( "\\$1", "(.*?)",
                        "/^(?:{$this->mBaseRegex})$/{$case}" );
        }
-       
+
        /**
         * Gets a regex representing matching the word
         */
@@ -191,6 +203,18 @@ class MagicWord {
                return $this->mRegex;
        }
 
+       /**
+        * Gets the regexp case modifier to use, i.e. i or nothing, to be used if
+        * one is using MagicWord::getBaseRegex(), otherwise it'll be included in
+        * the complete expression
+        */
+       function getRegexCase() {
+               if ( $this->mRegex === '' )
+                       $this->initRegex();
+
+               return $this->mCaseSensitive ? '' : 'i';
+       }
+
        /**
         * Gets a regex matching the word, if it is at the string start
         */
@@ -210,7 +234,7 @@ class MagicWord {
                }
                return $this->mBaseRegex;
        }
-               
+
        /**
         * Returns true if the text contains the word
         * @return bool
@@ -265,14 +289,14 @@ class MagicWord {
                $wgMagicFound = false;
                $text = preg_replace_callback( $this->getRegexStart(), 'pregRemoveAndRecord', $text );
                return $wgMagicFound;
-       }               
+       }
 
 
        /**
         * Replaces the word with something else
         */
        function replace( $replacement, $subject ) {
-               $res = preg_replace( $this->getRegex(), $replacement, $subject );
+               $res = preg_replace( $this->getRegex(), wfRegexReplacement( $replacement ), $subject );
                $this->mModified = !($res === $subject);
                return $res;
        }
@@ -294,7 +318,7 @@ class MagicWord {
        function getVariableRegex()     {
                if ( $this->mVariableRegex == '' ) {
                        $this->initRegex();
-               } 
+               }
                return $this->mVariableRegex;
        }
 
@@ -304,7 +328,7 @@ class MagicWord {
        function getVariableStartToEndRegex() {
                if ( $this->mVariableStartToEndRegex == '' ) {
                        $this->initRegex();
-               } 
+               }
                return $this->mVariableStartToEndRegex;
        }
 
@@ -316,7 +340,7 @@ class MagicWord {
        }
 
        /**
-        * Returns true if the last call to replace() or substituteCallback() 
+        * Returns true if the last call to replace() or substituteCallback()
         * returned a modified text, otherwise false.
         */
        function getWasModified(){
@@ -328,7 +352,7 @@ class MagicWord {
         * This method uses the php feature to do several replacements at the same time,
         * thereby gaining some efficiency. The result is placed in the out variable
         * $result. The return value is true if something was replaced.
-        * @static 
+        * @static
         **/
        function replaceMultiple( $magicarr, $subject, &$result ){
                $search = array();
@@ -356,7 +380,7 @@ class MagicWord {
 
 /**
  * Used in matchAndRemove()
- * @private
+ * @access private
  **/
 function pregRemoveAndRecord( $match ) {
        global $wgMagicFound;