* Support default arguments for template arguments in the form of {{{argument|default...
authorÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Tue, 20 Sep 2005 19:34:30 +0000 (19:34 +0000)
committerÆvar Arnfjörð Bjarmason <avar@users.mediawiki.org>
Tue, 20 Sep 2005 19:34:30 +0000 (19:34 +0000)
includes/Parser.php

index d33ece0..936ee8f 100644 (file)
@@ -1965,6 +1965,7 @@ class Parser
                wfProfileIn( $fname );
 
                $titleChars = Title::legalChars();
+               $dtitleChars = "$titleChars|{}\[\]"; // [] so that {{{arg|[[foo|bar]]}} will work
 
                # This function is called recursively. To keep track of arguments we need a stack:
                array_push( $this->mArgStack, $args );
@@ -1972,9 +1973,12 @@ class Parser
                # Variable substitution
                $text = preg_replace_callback( "/{{([$titleChars]*?)}}/", array( &$this, 'variableSubstitution' ), $text );
 
-               if ( $this->mOutputType == OT_HTML || $this->mOutputType == OT_WIKI ) {
+               if ( $this->mOutputType == OT_WIKI ) {
                        # Argument substitution
-                       $text = preg_replace_callback( "/{{{([$titleChars]*?)}}}/", array( &$this, 'argSubstitution' ), $text );
+                       $text = preg_replace_callback( "/{{{([$dtitleChars]*?)}}}/", array( &$this, 'argSubstitution' ), $text );
+               } elseif ( $this->mOutputType == OT_HTML ) {
+                       # Argument substitution + default argument substitution
+                       $text = preg_replace_callback( "/{{{([$dtitleChars]*?)}}}/", array( &$this, 'argSubstitutionWDefaults' ), $text );
                }
                # Template substitution
                $regex = '/(\\n|{)?{{(['.$titleChars.']*)(\\|.*?|)}}/s';
@@ -2419,6 +2423,31 @@ class Parser
                if ( array_key_exists( $arg, $inputArgs ) ) {
                        $text = $inputArgs[$arg];
                }
+               
+               return $text;
+       }
+
+       /**
+        * Triple brace replacement with default arguments-- used for template arguments
+        * @access private
+        */
+       function argSubstitutionWDefaults( $matches ) {
+               $arg = trim( $matches[1] );
+               
+               if ( strpos( $arg, '|' ) !== false ) {
+                       list( $arg, $default ) = explode( '|', $arg, 2 );
+                       $arg = rtrim( $arg );
+                       $default = ltrim( $default );
+               } else 
+                       $default = null;
+
+               $text = $matches[0];
+               $inputArgs = end( $this->mArgStack );
+
+               if ( array_key_exists( $arg, $inputArgs ) ) {
+                       $text = $inputArgs[$arg];
+               } else if ( $default !== null )
+                       $text = $default;
 
                return $text;
        }