From ca32f08966f1b51fcb19460f0996bb0c4048e6fe Mon Sep 17 00:00:00 2001 From: Pierre Schmitz Date: Sat, 3 Dec 2011 13:29:22 +0100 Subject: Update to MediaWiki 1.18.0 * also update ArchLinux skin to chagnes in MonoBook * Use only css to hide our menu bar when printing --- includes/parser/Preprocessor_Hash.php | 214 +++++++++++++++++++++++++++------- 1 file changed, 173 insertions(+), 41 deletions(-) (limited to 'includes/parser/Preprocessor_Hash.php') diff --git a/includes/parser/Preprocessor_Hash.php b/includes/parser/Preprocessor_Hash.php index 6cb2febc..c2d7d3d8 100644 --- a/includes/parser/Preprocessor_Hash.php +++ b/includes/parser/Preprocessor_Hash.php @@ -5,7 +5,7 @@ * @file * @ingroup Parser */ - + /** * Differences from DOM schema: * * attribute nodes are children @@ -13,22 +13,36 @@ * @ingroup Parser */ class Preprocessor_Hash implements Preprocessor { + /** + * @var Parser + */ var $parser; - + const CACHE_VERSION = 1; function __construct( $parser ) { $this->parser = $parser; } + /** + * @return PPFrame_Hash + */ function newFrame() { return new PPFrame_Hash( $this ); } + /** + * @param $args + * @return PPCustomFrame_Hash + */ function newCustomFrame( $args ) { return new PPCustomFrame_Hash( $this, $args ); } + /** + * @param $values array + * @return PPNode_Hash_Array + */ function newPartNodeArray( $values ) { $list = array(); @@ -76,16 +90,15 @@ class Preprocessor_Hash implements Preprocessor { * cache may be implemented at a later date which takes further advantage of these strict * dependency requirements. * - * @private + * @return PPNode_Hash_Tree */ function preprocessToObj( $text, $flags = 0 ) { wfProfileIn( __METHOD__ ); - - + // Check cache. global $wgMemc, $wgPreprocessorCacheThreshold; - - $cacheable = strlen( $text ) > $wgPreprocessorCacheThreshold; + + $cacheable = $wgPreprocessorCacheThreshold !== false && strlen( $text ) > $wgPreprocessorCacheThreshold; if ( $cacheable ) { wfProfileIn( __METHOD__.'-cacheable' ); @@ -272,7 +285,7 @@ class Preprocessor_Hash implements Preprocessor { // Search backwards for leading whitespace $wsStart = $i ? ( $i - strspn( $revText, ' ', strlen( $text ) - $i ) ) : 0; // Search forwards for trailing whitespace - // $wsEnd will be the position of the last space + // $wsEnd will be the position of the last space (or the '>' if there's none) $wsEnd = $endPos + 2 + strspn( $text, ' ', $endPos + 3 ); // Eat the line if possible // TODO: This could theoretically be done if $wsStart == 0, i.e. for comments at @@ -302,13 +315,11 @@ class Preprocessor_Hash implements Preprocessor { if ( $stack->top ) { $part = $stack->top->getCurrentPart(); - if ( isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 ) { - // Comments abutting, no change in visual end - $part->commentEnd = $wsEnd; - } else { + if ( ! (isset( $part->commentEnd ) && $part->commentEnd == $wsStart - 1 )) { $part->visualEnd = $wsStart; - $part->commentEnd = $endPos; } + // Else comments abutting, no change in visual end + $part->commentEnd = $endPos; } $i = $endPos + 1; $inner = substr( $text, $startPos, $endPos - $startPos + 1 ); @@ -348,8 +359,8 @@ class Preprocessor_Hash implements Preprocessor { } else { $attrEnd = $tagEndPos; // Find closing tag - if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", - $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) ) + if ( preg_match( "/<\/" . preg_quote( $name, '/' ) . "\s*>/i", + $text, $matches, PREG_OFFSET_CAPTURE, $tagEndPos + 1 ) ) { $inner = substr( $text, $tagEndPos + 1, $matches[0][1] - $tagEndPos - 1 ); $i = $matches[0][1] + strlen( $matches[0][0] ); @@ -414,9 +425,7 @@ class Preprocessor_Hash implements Preprocessor { extract( $stack->getFlags() ); $i += $count; } - } - - elseif ( $found == 'line-end' ) { + } elseif ( $found == 'line-end' ) { $piece = $stack->top; // A heading must be open, otherwise \n wouldn't have been in the search list assert( $piece->open == "\n" ); @@ -478,9 +487,7 @@ class Preprocessor_Hash implements Preprocessor { // another heading. Infinite loops are avoided because the next iteration MUST // hit the heading open case above, which unconditionally increments the // input pointer. - } - - elseif ( $found == 'open' ) { + } elseif ( $found == 'open' ) { # count opening brace characters $count = strspn( $text, $curChar, $i ); @@ -491,7 +498,7 @@ class Preprocessor_Hash implements Preprocessor { 'open' => $curChar, 'close' => $rule['end'], 'count' => $count, - 'lineStart' => ($i > 0 && $text[$i-1] == "\n"), + 'lineStart' => ($i == 0 || $text[$i-1] == "\n"), ); $stack->push( $piece ); @@ -502,9 +509,7 @@ class Preprocessor_Hash implements Preprocessor { $accum->addLiteral( str_repeat( $curChar, $count ) ); } $i += $count; - } - - elseif ( $found == 'close' ) { + } elseif ( $found == 'close' ) { $piece = $stack->top; # lets check if there are enough characters for closing brace $maxCount = $piece->count; @@ -644,16 +649,12 @@ class Preprocessor_Hash implements Preprocessor { } else { $accum->addAccum( $element ); } - } - - elseif ( $found == 'pipe' ) { + } elseif ( $found == 'pipe' ) { $findEquals = true; // shortcut for getFlags() $stack->addPart(); $accum =& $stack->getAccum(); ++$i; - } - - elseif ( $found == 'equals' ) { + } elseif ( $found == 'equals' ) { $findEquals = false; // shortcut for getFlags() $accum->addNodeWithText( 'equals', '=' ); $stack->getCurrentPart()->eqpos = $accum->lastNode; @@ -676,7 +677,7 @@ class Preprocessor_Hash implements Preprocessor { $rootNode = new PPNode_Hash_Tree( 'root' ); $rootNode->firstChild = $stack->rootAccum->firstNode; $rootNode->lastChild = $stack->rootAccum->lastNode; - + // Cache if ($cacheable) { $cacheValue = sprintf( "%08d", self::CACHE_VERSION ) . serialize( $rootNode ); @@ -685,7 +686,7 @@ class Preprocessor_Hash implements Preprocessor { wfProfileOut( __METHOD__.'-cacheable' ); wfDebugLog( "Preprocessor", "Saved preprocessor Hash to memcached (key $cacheKey)" ); } - + wfProfileOut( __METHOD__ ); return $rootNode; } @@ -714,6 +715,8 @@ class PPDStackElement_Hash extends PPDStackElement { /** * Get the accumulator that would result if the close is not found. + * + * @return PPDAccum_Hash */ function breakSyntax( $openingCount = false ) { if ( $this->open == "\n" ) { @@ -818,7 +821,21 @@ class PPDAccum_Hash { * @ingroup Parser */ class PPFrame_Hash implements PPFrame { - var $preprocessor, $parser, $title; + + /** + * @var Parser + */ + var $parser; + + /** + * @var Preprocessor + */ + var $preprocessor; + + /** + * @var Title + */ + var $title; var $titleCache; /** @@ -850,6 +867,11 @@ class PPFrame_Hash implements PPFrame { /** * Create a new child frame * $args is optionally a multi-root PPNode or array containing the template arguments + * + * @param $args PPNode_Hash_Array|array + * @param $title Title|false + * + * @return PPTemplateFrame_Hash */ function newChild( $args = false, $title = false ) { $namedArgs = array(); @@ -880,14 +902,19 @@ class PPFrame_Hash implements PPFrame { return new PPTemplateFrame_Hash( $this->preprocessor, $this, $numberedArgs, $namedArgs, $title ); } + /** + * @throws MWException + * @param $root + * @param $flags int + * @return string + */ function expand( $root, $flags = 0 ) { static $expansionDepth = 0; if ( is_string( $root ) ) { return $root; } - if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->getMaxPPNodeCount() ) - { + if ( ++$this->parser->mPPNodeCount > $this->parser->mOptions->getMaxPPNodeCount() ) { return 'Node-count limit exceeded'; } if ( $expansionDepth > $this->parser->mOptions->getMaxPPExpandDepth() ) { @@ -1016,7 +1043,7 @@ class PPFrame_Hash implements PPFrame { $serial = count( $this->parser->mHeadings ) - 1; $marker = "{$this->parser->mUniqPrefix}-h-$serial-" . Parser::MARKER_SUFFIX; $s = substr( $s, 0, $bits['level'] ) . $marker . substr( $s, $bits['level'] ); - $this->parser->mStripState->general->setPair( $marker, '' ); + $this->parser->mStripState->addGeneral( $marker, '' ); $out .= $s; } else { # Expand in virtual stack @@ -1050,6 +1077,11 @@ class PPFrame_Hash implements PPFrame { return $outStack[0]; } + /** + * @param $sep + * @param $flags + * @return string + */ function implodeWithFlags( $sep, $flags /*, ... */ ) { $args = array_slice( func_get_args(), 2 ); @@ -1077,6 +1109,7 @@ class PPFrame_Hash implements PPFrame { /** * Implode with no flags specified * This previously called implodeWithFlags but has now been inlined to reduce stack depth + * @return string */ function implode( $sep /*, ... */ ) { $args = array_slice( func_get_args(), 1 ); @@ -1105,6 +1138,8 @@ class PPFrame_Hash implements PPFrame { /** * Makes an object that, when expand()ed, will be the same as one obtained * with implode() + * + * @return PPNode_Hash_Array */ function virtualImplode( $sep /*, ... */ ) { $args = array_slice( func_get_args(), 1 ); @@ -1132,6 +1167,8 @@ class PPFrame_Hash implements PPFrame { /** * Virtual implode with brackets + * + * @return PPNode_Hash_Array */ function virtualBracketedImplode( $start, $sep, $end /*, ... */ ) { $args = array_slice( func_get_args(), 3 ); @@ -1162,6 +1199,10 @@ class PPFrame_Hash implements PPFrame { return 'frame{}'; } + /** + * @param $level bool + * @return array|bool|String + */ function getPDBK( $level = false ) { if ( $level === false ) { return $this->title->getPrefixedDBkey(); @@ -1170,31 +1211,50 @@ class PPFrame_Hash implements PPFrame { } } + /** + * @return array + */ function getArguments() { return array(); } + /** + * @return array + */ function getNumberedArguments() { return array(); } + /** + * @return array + */ function getNamedArguments() { return array(); } /** * Returns true if there are no arguments in this frame + * + * @return bool */ function isEmpty() { return true; } + /** + * @param $name + * @return bool + */ function getArgument( $name ) { return false; } /** * Returns true if the infinite loop check is OK, false if a loop is detected + * + * @param $title Title + * + * @return bool */ function loopCheck( $title ) { return !isset( $this->loopCheckHash[$title->getPrefixedDBkey()] ); @@ -1202,6 +1262,8 @@ class PPFrame_Hash implements PPFrame { /** * Return true if the frame is a template frame + * + * @return bool */ function isTemplate() { return false; @@ -1216,6 +1278,13 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { var $numberedArgs, $namedArgs, $parent; var $numberedExpansionCache, $namedExpansionCache; + /** + * @param $preprocessor + * @param $parent + * @param $numberedArgs array + * @param $namedArgs array + * @param $title Title + */ function __construct( $preprocessor, $parent = false, $numberedArgs = array(), $namedArgs = array(), $title = false ) { parent::__construct( $preprocessor ); @@ -1252,11 +1321,16 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { } /** * Returns true if there are no arguments in this frame + * + * @return bool */ function isEmpty() { return !count( $this->numberedArgs ) && !count( $this->namedArgs ); } + /** + * @return array + */ function getArguments() { $arguments = array(); foreach ( array_merge( @@ -1266,7 +1340,10 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { } return $arguments; } - + + /** + * @return array + */ function getNumberedArguments() { $arguments = array(); foreach ( array_keys($this->numberedArgs) as $key ) { @@ -1274,7 +1351,10 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { } return $arguments; } - + + /** + * @return array + */ function getNamedArguments() { $arguments = array(); foreach ( array_keys($this->namedArgs) as $key ) { @@ -1283,6 +1363,10 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { return $arguments; } + /** + * @param $index + * @return array|bool + */ function getNumberedArgument( $index ) { if ( !isset( $this->numberedArgs[$index] ) ) { return false; @@ -1294,6 +1378,10 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { return $this->numberedExpansionCache[$index]; } + /** + * @param $name + * @return bool + */ function getNamedArgument( $name ) { if ( !isset( $this->namedArgs[$name] ) ) { return false; @@ -1306,6 +1394,10 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { return $this->namedExpansionCache[$name]; } + /** + * @param $name + * @return array|bool + */ function getArgument( $name ) { $text = $this->getNumberedArgument( $name ); if ( $text === false ) { @@ -1316,6 +1408,8 @@ class PPTemplateFrame_Hash extends PPFrame_Hash { /** * Return true if the frame is a template frame + * + * @return bool */ function isTemplate() { return true; @@ -1350,10 +1444,17 @@ class PPCustomFrame_Hash extends PPFrame_Hash { return $s; } + /** + * @return bool + */ function isEmpty() { return !count( $this->args ); } + /** + * @param $index + * @return bool + */ function getArgument( $index ) { if ( !isset( $this->args[$index] ) ) { return false; @@ -1390,6 +1491,11 @@ class PPNode_Hash_Tree implements PPNode { } } + /** + * @param $name + * @param $text + * @return PPNode_Hash_Tree + */ static function newWithText( $name, $text ) { $obj = new self( $name ); $obj->addChild( new PPNode_Hash_Text( $text ) ); @@ -1405,6 +1511,9 @@ class PPNode_Hash_Tree implements PPNode { } } + /** + * @return PPNode_Hash_Array + */ function getChildren() { $children = array(); for ( $child = $this->firstChild; $child; $child = $child->nextSibling ) { @@ -1431,9 +1540,24 @@ class PPNode_Hash_Tree implements PPNode { return $children; } - function getLength() { return false; } - function item( $i ) { return false; } + /** + * @return bool + */ + function getLength() { + return false; + } + /** + * @param $i + * @return bool + */ + function item( $i ) { + return false; + } + + /** + * @return string + */ function getName() { return $this->name; } @@ -1443,6 +1567,8 @@ class PPNode_Hash_Tree implements PPNode { * name PPNode name * index String index * value PPNode value + * + * @return array */ function splitArg() { $bits = array(); @@ -1474,6 +1600,8 @@ class PPNode_Hash_Tree implements PPNode { /** * Split an node into an associative array containing name, attr, inner and close * All values in the resulting array are PPNodes. Inner and close are optional. + * + * @return array */ function splitExt() { $bits = array(); @@ -1499,6 +1627,8 @@ class PPNode_Hash_Tree implements PPNode { /** * Split an node + * + * @return array */ function splitHeading() { if ( $this->name !== 'h' ) { @@ -1523,6 +1653,8 @@ class PPNode_Hash_Tree implements PPNode { /** * Split a