__NUMBERHEADINGS__

Bug 361: URL inside a URL breaks parsing edit

Bug 361: URL inside a URL breaks parsing

This testcase in parserTests.txt not passed in MediaWiki 1.5.2:


!! test
External links: old URL-in-URL bug, mixed protocols
!! input
And again with mixed protocols: [ftp://example.com?url=http://example.com link]
!! result
<p>And again with mixed protocols: <a href="ftp://example.com?url=http://example.com" class='external text' title="ftp://example.com?url=http://example.com" rel="nofollow">link</a>
</p>
!!end

Fixed like this:


--- mediawiki-1.5.2/includes/Parser.php	2005-11-14 00:14:23.171875000 +0800
+++ mediawiki/includes/Parser.php	2005-11-13 17:32:23.562500000 +0800
@@ -1157,6 +1164,17 @@
 		while ( $i < count( $bits ) ){
 			$protocol = $bits[$i++];
 			$remainder = $bits[$i++];
+			/* Fix BUG 361: URL within URL. (by johnson@worldhello.net) */
+			while ( !preg_match('/[\s]+$/', $remainder) ) {
+				if( $i < count( $bits) )
+				{
+					$remainder .= $bits[$i++];
+				}
+				else
+				{
+					break;
+				}				
+			}
 
 			if ( preg_match( '/^('.EXT_LINK_URL_CLASS.'+)(.*)$/s', $remainder, $m ) ) {
 				# Found some characters after the protocol that look promising

table_with_no_data edit

This testcase in parserTests.txt not passed in MediaWiki 1.5.2:


# This should not produce <table></table> as <table><tr><td></td></tr></table>
# is the bare minimun required by the spec, see:
# http://www.w3.org/TR/xhtml-modularization/dtd_module_defs.html#a_module_Basic_Tables
!! test
A table with no data.
!! input
{||}
!! result
!! end

Fixed like this:


--- mediawiki-1.5.2/includes/Parser.php	2005-11-14 00:16:44.359375000 +0800
+++ mediawiki/includes/Parser.php	2005-11-13 17:32:23.562500000 +0800
@@ -767,7 +767,14 @@
 		{
 			if ( array_pop ( $td ) ) $t[] = '</td>' ;
 			if ( array_pop ( $tr ) ) $t[] = '</tr>' ;
-			$t[] = '</table>' ;
+			if ( stristr($t[count($t)-1], "<table") )
+			{
+				array_pop($t);
+			}
+			else
+			{
+				$t[] = '</table>' ;
+			}
 		}
 
 		$t = implode ( "\n" , $t ) ;

Texvc works under Windows edit

for MediaWiki 1.6.x edit


Index: includes/Math.php
===================================================================
--- includes/Math.php	(revision 51)
+++ includes/Math.php	(working copy)
@@ -53,16 +53,35 @@
 			if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
 				return $this->_error( 'math_notexvc' );
 			}
-			$cmd = $wgTexvc . ' ' .
-					escapeshellarg( $wgTmpDirectory ).' '.
-					escapeshellarg( $wgTmpDirectory ).' '.
-					escapeshellarg( $this->tex ).' '.
+			
+			if ( wfIsWindows() ) {
+				$dict_dir_from = array("\\");
+				$dict_dir_to   = array("/");
+				# NOTICE: escapeshellarg does not work in Windows/DOS prompt enviroment;
+				# DOS escape char is ^. Command "echo |" should write as "echo ^|", and "echo ^" should be "echo ^^"
+				$dict_math_from = array("^");
+				$dict_math_to   = array("^^");
+				
+				$cmd = str_replace( $dict_dir_from, $dict_dir_to, $wgTexvc) . ' ' . 
+					escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+					escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+					escapeshellarg( str_replace( $dict_math_from,$dict_math_to,$this->tex ) ).' '.
 					escapeshellarg( $wgInputEncoding );
 
-			if ( wfIsWindows() ) {
 				# Invoke it within cygwin sh, because texvc expects sh features in its default shell
-				$cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+				# Windows has a command convert.exe which conflict with ImageMagick's. So add a PATH definition before $cmd;
+				$cmd = "PATH=\"/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:\$PATH\"; "
+				       	.$cmd;
+ 				$cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
 			}
+			else
+			{
+				$cmd = $wgTexvc . ' ' .
+					escapeshellarg( $wgTmpDirectory ).' '.
+					escapeshellarg( $wgTmpDirectory ).' '.
+					escapeshellarg( $this->tex ).' '.
+					escapeshellarg( $wgInputEncoding );					
+ 			} 
 
 			wfDebug( "TeX: $cmd\n" );
 			$contents = `$cmd`;

for MediaWiki 1.5.x edit


--- mediawiki-1.5.2/includes/Math.php	2005-11-13 17:00:37.234375000 +0800
+++ mediawiki/includes/Math.php	2005-11-13 17:32:23.328125000 +0800
@@ -60,15 +60,34 @@
 			if( function_exists( 'is_executable' ) && !is_executable( $wgTexvc ) ) {
 				return $this->_error( 'math_notexvc' );
 			}
-			$cmd = $wgTexvc . ' ' . 
+			
+			if ( wfIsWindows() ) {
+				$dict_dir_from = array("\\");
+				$dict_dir_to   = array("/");
+				# NOTICE: escapeshellarg does not work in Windows/DOS prompt enviroment;
+				# DOS escape char is ^. Command "echo |" should write as "echo ^|", and "echo ^" should be "echo ^^"
+				$dict_math_from = array("^");
+				$dict_math_to   = array("^^");
+				
+				$cmd = str_replace( $dict_dir_from, $dict_dir_to, $wgTexvc) . ' ' . 
+					escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgTmpDirectory ) ).' '.
+					escapeshellarg( str_replace( $dict_dir_from, $dict_dir_to, $wgMathDirectory ) ).' '.
+					escapeshellarg( str_replace( $dict_math_from,$dict_math_to,$this->tex ) ).' '.
+					escapeshellarg( $wgInputEncoding );
+
+				# Invoke it within cygwin sh, because texvc expects sh features in its default shell
+				# Windows has a command convert.exe which conflict with ImageMagick's. So add a PATH definition before $cmd;
+				$cmd = "PATH=\"/sbin:/usr/sbin:/usr/local/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:\$PATH\"; "
+				       	.$cmd;
+ 				$cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+			}
+			else
+			{
+				$cmd = $wgTexvc . ' ' . 
 					escapeshellarg( $wgTmpDirectory ).' '.
 					escapeshellarg( $wgMathDirectory ).' '.
 					escapeshellarg( $this->tex ).' '.
-					escapeshellarg( $wgInputEncoding );
-					
-			if ( wfIsWindows() ) {
-				# Invoke it within cygwin sh, because texvc expects sh features in its default shell
-				$cmd = 'sh -c ' . wfEscapeShellArg( $cmd );
+					escapeshellarg( $wgInputEncoding );					
 			} 
 
 			wfDebug( "TeX: $cmd\n" );

SpecialPage order by key edit

In my chinese translation wiki, I don't like the way what SpecialSpecialpage shows.


--- mediawiki-1.5.2/includes/SpecialSpecialpages.php	2005-11-13 17:00:37.937500000 +0800
+++ mediawiki/includes/SpecialSpecialpages.php	2005-11-13 17:32:24.234375000 +0800
@@ -58,7 +58,7 @@
 	
 	/** Sort */
 	if ( $wgSortSpecialPages ) {
-		ksort( $sortedPages );
+		asort( $sortedPages );
 	}
 
 	/** Now output the HTML */

list without listitems edit

Synopsis List without real content means a line begins with "*","#",":", but nothing else. like

*subitem has no content
*****

It will be badly rendered.

  • subitem has no content

Bugfix:


Index: maintenance/parserTests.txt
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/maintenance/parserTests.txt,v
retrieving revision 1.11
diff -u -r1.11 parserTests.txt
--- maintenance/parserTests.txt	17 Nov 2005 08:51:25 -0000	1.11
+++ maintenance/parserTests.txt	26 Nov 2005 14:37:39 -0000
@@ -35,6 +35,63 @@
 ###
 
 !! test
+list without title, 1
+!! input
+#item
+##subitem1
+##
+##subitem3
+######
+!! result
+<ol><li>item
+<ol><li>subitem1
+</li><li>subitem3
+</li></ol>
+</li></ol>
+
+!! end
+
+!! test
+list without title, 2
+!! input
+######
+!! result
+!! end
+
+
+!! test
+list without title, 3
+!! input
+*item
+**
+**subitem2
+**subitem3
+*******
+
+#item
+##subitem1
+##
+##subitem3
+######
+
+end.
+!! result
+<ul><li>item
+<ul><li>subitem2
+</li><li>subitem3
+</li></ul>
+</li></ul>
+<ol><li>item
+<ol><li>subitem1
+</li><li>subitem3
+</li></ol>
+</li></ol>
+<p>end.
+</p>
+!! end
+
+
+!! test
 indent <pre> block test
 !! input
 #indent <pre> block
Index: includes/Parser.php
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/includes/Parser.php,v
retrieving revision 1.17
diff -u -r1.17 Parser.php
--- includes/Parser.php	25 Nov 2005 14:48:11 -0000	1.17
+++ includes/Parser.php	26 Nov 2005 14:38:20 -0000
@@ -1754,6 +1754,10 @@
 
 				# Bugfix 1115, 1581(3989): Newline as list item terminator is troublesome, by JiangXin (http://www.worldhello.net).
 				if ( $prefixLength > 0 ) {
+					if ( strlen($oLine) == $prefixLength ) {
+						$prefixLength = isset($pref2)? strlen($pref2) : 0;
+						continue;
+					}
 					$firstline = true;
 					$in_pre = false;
 					for($i++; $oLine2 = $textLines[$i], $i < count($textLines); $i++) {


add default parameter support for Template (Mediawiki 1.6 may already support) edit

usage: See test cases in Index: maintenance/parserTests.txt in the following differs.

code:


Index: includes/Parser.php
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/includes/Parser.php,v
retrieving revision 1.19
diff -u -r1.19 Parser.php
--- includes/Parser.php	26 Nov 2005 14:40:35 -0000	1.19
+++ includes/Parser.php	27 Nov 2005 06:44:27 -0000
@@ -2092,7 +2092,7 @@
 
 		if ( $this->mOutputType == OT_HTML || $this->mOutputType == OT_WIKI ) {
 			# Argument substitution
-			$text = preg_replace_callback( "/{{{([$titleChars]*?)}}}/", array( &$this, 'argSubstitution' ), $text );
+			$text = preg_replace_callback( "/{{{([$titleChars]*?)(?:(?:\|)([$titleChars]*))?}}}/", array( &$this, 'argSubstitution' ), $text );
 		}
 		# Template substitution
 		$regex = '/(\\n|{)?{{(['.$titleChars.']*)(\\|.*?|)}}/s';
@@ -2534,7 +2534,16 @@
 		$inputArgs = end( $this->mArgStack );
 
 		if ( array_key_exists( $arg, $inputArgs ) ) {
-			$text = $inputArgs[$arg];
+			if ( empty($inputArgs[$arg]) )
+			{
+				if ( isset($matches[2]) ) {
+					$text = $matches[2];
+				} else {
+					$text = $inputArgs[$arg];
+				}
+			} else {
+				$text = $inputArgs[$arg];
+			}
 		}
 
 		return $text;
Index: maintenance/parserTests.txt
===================================================================
RCS file: /user/jiangxin/project/wiki/mediawiki/src/maintenance/parserTests.txt,v
retrieving revision 1.12
diff -u -r1.12 parserTests.txt
--- maintenance/parserTests.txt	26 Nov 2005 14:40:35 -0000	1.12
+++ maintenance/parserTests.txt	27 Nov 2005 06:44:32 -0000
@@ -443,6 +443,40 @@
 </p>
 !! end
 
+!! article
+Template:param_with_default_test
+!! text
+This is a test template with parameter.
+* arg1: {{{1}}}
+* arg2: {{{2|arg2 has this default value}}}
+* arg3: {{{3|arg3 has this default value}}}
+* name: {{{name|r u jiangxin?}}}
+* gender:  {{{gender|girl or boy?}}}
+* age:  {{{age|put your age here...}}}
+* job:  {{{job}}}
+* salary:  {{{salary}}}
+
+!! endarticle
+
+!! test
+Template param_with_default_test
+!! input
+{{param_with_default_test|hi|2=|name=|age=MyAge|salary=Not tell you}}
+!! result
+<p>This is a test template with parameter.
+</p>
+<ul><li> arg1: hi
+</li><li> arg2: arg2 has this default value
+</li><li> arg3: {{{3|arg3 has this default value}}}
+</li><li> name: r u jiangxin?
+</li><li> gender:  {{{gender|girl or boy?}}}
+</li><li> age:  MyAge
+</li><li> job:  {{{job}}}
+</li><li> salary:  Not tell you
+</li></ul>
+
+!! end
+
 
 ###
 ### Basic tests

others edit