* (bug 845) [[#foo|]], [[/bar|]] should be equivalent to [[#foo|foo]], [[/bar|bar]] (new use of "pipe trick")
* (bug 21660) Support full-width commas for pipe trick
* (bug 7264) Magic word to give Page Title as if pipe-trick performed on it {{pipetrick:}}
+* (bug 20339) Allow using the pipe trick in log reasons
=== Languages updated in 1.16 ===
# Handle link renaming [[foo|text]] will show link as "text"
if( $match[3] != "" ) {
$text = $match[3];
+ if( $match[1] === "" && $this->commentContextTitle ) {
+ $match[1] = Linker::getPipeTrickLink( $text, $this->commentContextTitle );
+ }
+ } elseif( $match[2] == "|" ) {
+ $text = Linker::getPipeTrickText( $match[1] );
} else {
$text = $match[1];
}
return $ret;
}
+ /**
+ * Returns valid title characters and namespace characters for pipe trick.
+ *
+ * FIXME: the namespace characters should not be specified like this...
+ */
+ static function getPipeTrickCharacterClasses() {
+ global $wgLegalTitleChars;
+ return array( "[$wgLegalTitleChars]", '[ _0-9A-Za-z\x80-\xff-]' );
+ }
+
+ /**
+ * From the [[title|]] return link-text as though the used typed [[title|link-text]]
+ *
+ * For most links this be as though the user typed [[ns:title|title]]
+ * However [[ns:title (context)|]], [[ns:title, context|]] and [[ns:title (context), context|]]
+ * [[#title (context)|]] [[../context/title (context), context|]]
+ * all return the |title]] with no context or indicative punctuation.
+ *
+ * @param string $link from [[$link|]]
+ * @return string $text for [[$link|$text]]
+ */
+ static function getPipeTrickText( $link ) {
+ static $rexps = FALSE;
+ if( !$rexps ) {
+ list( $tc, $nc ) = Linker::getPipeTrickCharacterClasses();
+ $rexps = array (
+ # try this first, to turn "[[A, B (C)|]]" into "A, B"
+ "/^(:?$nc+:|[:#\/]|$tc+\\/|)($tc+?)( \\($tc+\\)| ($tc+))$/", # [[ns:page (context)|]]
+ "/^(:?$nc+:|[:#\/]|$tc+\\/|)($tc+?)( \\($tc+\\)| ($tc+)|)((?:,|,) $tc+|)$/", # [[ns:page (context), context|]]
+ );
+ }
+ $text = urldecode( $link );
+
+ for( $i = 0; $i < count( $rexps ); $i++) {
+ if( preg_match( $rexps[$i], $text, $m ) )
+ return $m[2];
+ }
+ return $text;
+ }
+
+ /**
+ * From the [[|link-text]] return the title as though the user typed [[title|link-text]]
+ *
+ * On most pages this will return link-text or "" if the link-text is not a valid title
+ * On pages like [[ns:title (context)]] and [[ns:title, context]] it will act like
+ * [[ns:link-text (context)|link-text]] and [[ns:link-text, context|link-text]]
+ *
+ * @param string $text from [[|$text]]
+ * @param Title $title to resolve the link against
+ * @return string $link for [[$link|$text]]
+ */
+ static function getPipeTrickLink( $text, $title ) {
+ static $rexps = FALSE, $tc;
+ if( !$rexps ) {
+ list( $tc, $nc ) = Linker::getPipeTrickCharacterClasses();
+ $rexps = array (
+ "/^($nc+:|)$tc+?( \\($tc+\\)| ($tc+))$/", # [[ns:page (context)|]]
+ "/^($nc+:|)$tc+?(?:(?: \\($tc+\\)| ($tc+)|)((?:,|,) $tc+|))$/" # [[ns:page (context), context|]]
+ );
+ }
+
+ if( !preg_match( "/^$tc+$/", $text ) )
+ return '';
+
+ $t = $title->getText();
+
+ for( $i = 0; $i < count( $rexps ); $i++) {
+ if( preg_match( $rexps[$i], $t, $m ) )
+ return "$m[1]$text$m[2]";
+ }
+ return $text;
+ }
+
/**
* Wrap a comment in standard punctuation and formatting if
* it's non-empty, otherwise return empty string.
return Linker::normalizeSubpageLink( $this->mTitle, $target, $text );
}
- /**
- * Returns valid title characters and namespace characters for pipe trick.
- *
- * FIXME: the namespace characters should not be specified like this...
- */
- static function getPipeTrickCharacterClasses() {
- global $wgLegalTitleChars;
- return array( "[$wgLegalTitleChars]", '[ _0-9A-Za-z\x80-\xff-]' );
- }
-
/**
* From the [[title|]] return link-text as though the used typed [[title|link-text]]
- *
- * For most links this be as though the user typed [[ns:title|title]]
- * However [[ns:title (context)|]], [[ns:title, context|]] and [[ns:title (context), context|]]
- * [[#title (context)|]] [[../context/title (context), context|]]
- * all return the |title]] with no context or indicative punctuation.
+ * @param string $link from [[$link|]]
+ * @return string $text for [[$link|$text]]
*/
function getPipeTrickText( $link ) {
- static $rexps = FALSE;
- if( !$rexps ) {
- list( $tc, $nc ) = Parser::getPipeTrickCharacterClasses();
- $rexps = array (
- # try this first, to turn "[[A, B (C)|]]" into "A, B"
- "/^(:?$nc+:|[:#\/]|$tc+\\/|)($tc+?)( \\($tc+\\)| ($tc+))$/", # [[ns:page (context)|]]
- "/^(:?$nc+:|[:#\/]|$tc+\\/|)($tc+?)( \\($tc+\\)| ($tc+)|)((?:,|,) $tc+|)$/", # [[ns:page (context), context|]]
- );
- }
- $text = urldecode( $link );
-
- for( $i = 0; $i < count( $rexps ); $i++) {
- if( preg_match( $rexps[$i], $text, $m ) )
- return $m[2];
- }
- return $text;
+ return Linker::getPipeTrickText( $link );
}
/**
* From the [[|link-text]] return the title as though the user typed [[title|link-text]]
- *
- * On most pages this will return link-text or "" if the link-text is not a valid title
- * On pages like [[ns:title (context)]] and [[ns:title, context]] it will act like
- * [[ns:link-text (context)|link-text]] and [[ns:link-text, context|link-text]]
+ * @param string $text from [[|$text]]
+ * @param Title $title to resolve the link against
+ * @return string $link for [[$link|$text]]
*/
function getPipeTrickLink( $text ) {
- static $rexps = FALSE, $tc;
- if( !$rexps ) {
- list( $tc, $nc ) = Parser::getPipeTrickCharacterClasses();
- $rexps = array (
- "/^($nc+:|)$tc+?( \\($tc+\\)| ($tc+))$/", # [[ns:page (context)|]]
- "/^($nc+:|)$tc+?(?:(?: \\($tc+\\)| ($tc+)|)((?:,|,) $tc+|))$/" # [[ns:page (context), context|]]
- );
- }
-
- if( !preg_match( "/^$tc+$/", $text ) )
- return '';
-
- $t = $this->mTitle->getText();
-
- for( $i = 0; $i < count( $rexps ); $i++) {
- if( preg_match( $rexps[$i], $t, $m ) )
- return "$m[1]$text$m[2]";
- }
- return $text;
+ return Linker::getPipeTrickLink( $text, $this->mTitle );
}
/**#@+
# Links of the form [[|<blah>]] or [[<blah>|]] perform pipe tricks
# Note this only allows the # in the one position it works.
- list( $tc, $nc ) = Parser::getPipeTrickCharacterClasses();
- $pipeTrickRe = "/\[\[(?:(\\|)($tc+)|(#?$tc+)\\|)\]\]/";
+ global $wgLegalTitleChars;
+ $pipeTrickRe = "/\[\[(?:(\\|)([$wgLegalTitleChars]+)|(#?[$wgLegalTitleChars]+)\\|)\]\]/";
$text = preg_replace_callback( $pipeTrickRe, array( $this, 'pstPipeTrickCallback' ), $text );
# Trim trailing whitespace
<a href="/wiki/Main_Page#section" title="Main Page">#section</a>
!! end
+!! test
+Edit comment with pipe trick
+!! options
+comment
+title=[[Article (context)]]
+!! input
+[[Hello (World)|]] [[|Entry]]
+!! result
+<a href="/index.php?title=Hello_(World)&action=edit&redlink=1" class="new" title="Hello (World) (page does not exist)">Hello</a> <a href="/index.php?title=Entry_(context)&action=edit&redlink=1" class="new" title="Entry (context) (page does not exist)">Entry</a>
+!! end
+
!!article
MediaWiki:bad image list
!!text
!! end
+
TODO:
more images
more tables