Merge "Reduce some code duplication"
[lhc/web/wiklou.git] / includes / parser / Parser.php
index 2066580..cf174ec 100644 (file)
@@ -119,203 +119,102 @@ class Parser {
        const TOC_START = '<mw:toc>';
        const TOC_END = '</mw:toc>';
 
-       # Persistent
+       # Persistent:
+       var $mTagHooks = array();
+       var $mTransparentTagHooks = array();
+       var $mFunctionHooks = array();
+       var $mFunctionSynonyms = array( 0 => array(), 1 => array() );
+       var $mFunctionTagHooks = array();
+       var $mStripList = array();
+       var $mDefaultStripList = array();
+       var $mVarCache = array();
+       var $mImageParams = array();
+       var $mImageParamsMagicArray = array();
+       var $mMarkerIndex = 0;
+       var $mFirstCall = true;
 
-       /** @var array */
-       public $mTagHooks = array();
-
-       /** @var array */
-       public $mTransparentTagHooks = array();
-
-       /** @var array */
-       public $mFunctionHooks = array();
-
-       /** @var array */
-       protected $mFunctionSynonyms = array( 0 => array(), 1 => array() );
-
-       /** @var array */
-       protected $mFunctionTagHooks = array();
-
-       /** @var array */
-       protected $mStripList = array();
+       # Initialised by initialiseVariables()
 
        /**
-        * @var array
-        * @todo Unused?
+        * @var MagicWordArray
         */
-       private $mDefaultStripList = array();
-
-       /** @var array */
-       protected $mVarCache = array();
-
-       /** @var array */
-       protected $mImageParams = array();
-
-       /** @var array */
-       protected $mImageParamsMagicArray = array();
-
-       /** @var int */
-       public $mMarkerIndex = 0;
+       var $mVariables;
 
-       /** @var bool */
-       protected $mFirstCall = true;
-
-       # Initialised by initialiseVariables()
-
-       /** @var MagicWordArray */
-       public $mVariables;
-
-       /** @var MagicWordArray */
-       protected $mSubstWords;
-
-       # Initialised in constructor
-
-       /** @var array */
-       protected $mConf;
-
-       /** @var Parser */
-       public $mPreprocessor;
-
-       /** @var string */
-       protected $mExtLinkBracketedRegex;
-
-       /** @var string */
-       protected $mUrlProtocols;
+       /**
+        * @var MagicWordArray
+        */
+       var $mSubstWords;
+       var $mConf, $mPreprocessor, $mExtLinkBracketedRegex, $mUrlProtocols; # Initialised in constructor
 
        # Cleared with clearState():
-
-       /** @var ParserOutput */
-       public $mOutput;
-
-       /** @var int */
-       protected $mAutonumber;
-
-       /** @var bool */
-       protected $mDTopen;
-
-       /** @var StripState */
-       public $mStripState;
-
        /**
-        * @var array
-        * @todo Unused?
+        * @var ParserOutput
         */
-       private $mIncludeCount;
+       var $mOutput;
+       var $mAutonumber, $mDTopen;
 
        /**
-        * @var bool
-        * @todo Unused?
+        * @var StripState
         */
-       private $mArgStack;
-
-       /** @var string */
-       protected $mLastSection;
-
-       /** @var bool */
-       protected $mInPre;
-
-       /** @var LinkHolderArray */
-       protected $mLinkHolders;
-
-       /** @var int */
-       protected $mLinkID;
-
-       /** @var array */
-       protected $mIncludeSizes;
-
-       /** @var int */
-       public $mPPNodeCount;
-
-       /** @var int */
-       public $mGeneratedPPNodeCount;
-
-       /** @var int */
-       public $mHighestExpansionDepth;
-
-       /** @var bool|string */
-       protected $mDefaultSort;
-
-       /** @var array Empty-frame expansion cache */
-       protected $mTplExpandCache;
-
-       /** @var array */
-       protected $mTplRedirCache;
-
-       /** @var array */
-       protected $mTplDomCache;
-
-       /** @var array */
-       public $mHeadings;
+       var $mStripState;
 
-       /** @var array */
-       protected $mDoubleUnderscores;
-
-       /** @var int Number of expensive parser function calls */
-       protected $mExpensiveFunctionCount;
-
-       /** @var bool */
-       protected $mShowToc;
+       var $mIncludeCount, $mArgStack, $mLastSection, $mInPre;
+       /**
+        * @var LinkHolderArray
+        */
+       var $mLinkHolders;
 
-       /** @var bool */
-       protected $mForceTocPosition;
+       var $mLinkID;
+       var $mIncludeSizes, $mPPNodeCount, $mGeneratedPPNodeCount, $mHighestExpansionDepth;
+       var $mDefaultSort;
+       var $mTplRedirCache, $mTplDomCache, $mHeadings, $mDoubleUnderscores;
+       var $mExpensiveFunctionCount; # number of expensive parser function calls
+       var $mShowToc, $mForceTocPosition;
 
-       /** @var User User object; only used when doing pre-save transform */
-       protected $mUser;
+       /**
+        * @var User
+        */
+       var $mUser; # User object; only used when doing pre-save transform
 
        # Temporary
        # These are variables reset at least once per parse regardless of $clearState
 
-       /** @var ParserOptions */
-       public $mOptions;
-
-       /** @var Title Title context, used for self-link rendering and similar things */
-       public $mTitle;
-
-       /** @var array Shortcut alias, see setOutputType() */
-       public $ot;
-
-       /** @var string The timestamp of the specified revision ID */
-       public $mRevisionTimestamp;
-
-       /** @var string */
-       public $mUniqPrefix;
-
        /**
-        * @var boolean Recursive call protection.
-        * This variable should be treated as if it were private.
+        * @var ParserOptions
         */
-       public $mInParse = false;
-
-       /** @var int Output type, one of the OT_xxx constants */
-       protected $mOutputType;
+       var $mOptions;
 
-       /** @var Revision The revision object of the specified revision ID */
-       protected $mRevisionObject;
-
-       /** @var int ID to display in {{REVISIONID}} tags */
-       protected $mRevisionId;
-
-       /** @var string User to display in {{REVISIONUSER}} tag */
-       protected $mRevisionUser;
-
-       /** @var int Size to display in {{REVISIONSIZE}} variable */
-       protected $mRevisionSize;
+       /**
+        * @var Title
+        */
+       var $mTitle;        # Title context, used for self-link rendering and similar things
+       var $mOutputType;   # Output type, one of the OT_xxx constants
+       var $ot;            # Shortcut alias, see setOutputType()
+       var $mRevisionObject; # The revision object of the specified revision ID
+       var $mRevisionId;   # ID to display in {{REVISIONID}} tags
+       var $mRevisionTimestamp; # The timestamp of the specified revision ID
+       var $mRevisionUser; # User to display in {{REVISIONUSER}} tag
+       var $mRevisionSize; # Size to display in {{REVISIONSIZE}} variable
+       var $mRevIdForTs;   # The revision ID which was used to fetch the timestamp
+       var $mInputSize = false; # For {{PAGESIZE}} on current page.
 
-       /** @var bool|int For {{PAGESIZE}} on current page. */
-       protected $mInputSize = false;
+       /**
+        * @var string
+        */
+       var $mUniqPrefix;
 
        /**
         * @var array Array with the language name of each language link (i.e. the
         * interwiki prefix) in the key, value arbitrary. Used to avoid sending
         * duplicate language links to the ParserOutput.
         */
-       protected $mLangLinkLanguages;
+       var $mLangLinkLanguages;
 
        /**
-        * @var int The revision ID which was used to fetch the timestamp
-        * @todo Unused?
+        * @var boolean Recursive call protection.
+        * This variable should be treated as if it were private.
         */
-       private $mRevIdForTs;
+       public $mInParse = false;
 
        /**
         * @param array $conf
@@ -421,7 +320,7 @@ class Parser {
                $this->mStripState = new StripState( $this->mUniqPrefix );
 
                # Clear these on every parse, bug 4549
-               $this->mTplExpandCache = $this->mTplRedirCache = $this->mTplDomCache = array();
+               $this->mTplRedirCache = $this->mTplDomCache = array();
 
                $this->mShowToc = true;
                $this->mForceTocPosition = false;
@@ -3662,12 +3561,7 @@ class Parser {
                                $text = $newFrame->expand( $text, PPFrame::RECOVER_ORIG );
                        } elseif ( $titleText !== false && $newFrame->isEmpty() ) {
                                # Expansion is eligible for the empty-frame cache
-                               if ( isset( $this->mTplExpandCache[$titleText] ) ) {
-                                       $text = $this->mTplExpandCache[$titleText];
-                               } else {
-                                       $text = $newFrame->expand( $text );
-                                       $this->mTplExpandCache[$titleText] = $text;
-                               }
+                               $text = $newFrame->cachedExpand( $titleText, $text );
                        } else {
                                # Uncached expansion
                                $text = $newFrame->expand( $text );
@@ -6400,4 +6294,25 @@ class Parser {
 
                return $recursiveCheck;
        }
+
+       /**
+        * Strip outer <p></p> tag from the HTML source of a single paragraph.
+        *
+        * Returns original HTML if the <p/> tag has any attributes, if there's no wrapping <p/> tag,
+        * or if there is more than one <p/> tag in the input HTML.
+        *
+        * @param string $html
+        * @return string
+        * @since 1.24
+        */
+       public static function stripOuterParagraph( $html ) {
+               $m = array();
+               if ( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $html, $m ) ) {
+                       if ( strpos( $m[1], '</p>' ) === false ) {
+                               $html = $m[1];
+                       }
+               }
+
+               return $html;
+       }
 }