From a448b8632bab976473e7aebdc18347c9832d684e Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Sat, 26 Jan 2013 18:22:27 +0100 Subject: [PATCH] Generate aliases for case-mismatched page titles. If a page title does has a different case than an occurrence of the same word(s) on the page that is being edited, the extension will now automatically generate 'piped' links such as [[Linking titles|Linking Titles]]. --- LinkTitles.body.php | 22 +++++++++++++++++----- LinkTitles.php | 4 ++-- NEWS | 7 ++++++- release/LinkTitles-1.8.1.tar.gz | Bin 0 -> 10816 bytes 4 files changed, 25 insertions(+), 8 deletions(-) create mode 100644 release/LinkTitles-1.8.1.tar.gz diff --git a/LinkTitles.body.php b/LinkTitles.body.php index 71e4602..e99f4b8 100755 --- a/LinkTitles.body.php +++ b/LinkTitles.body.php @@ -25,10 +25,12 @@ } function dump($var) { - error_log(print_r($var, TRUE), 3, 'php://stderr'); + error_log(print_r($var, TRUE) . "\n", 3, 'php://stderr'); }; class LinkTitles { + static $st; + /// Setup function, hooks the extension's functions to MediaWiki events. public static function setup() { global $wgLinkTitlesParseOnEdit; @@ -79,11 +81,11 @@ global $wgLinkTitlesFirstOnly; global $wgLinkTitlesWordStartOnly; global $wgLinkTitlesWordEndOnly; - global $wgLinkTitlesIgnoreCase; + // global $wgLinkTitlesIgnoreCase; ( $wgLinkTitlesWordStartOnly ) ? $wordStartDelim = '\b' : $wordStartDelim = ''; ( $wgLinkTitlesWordEndOnly ) ? $wordEndDelim = '\b' : $wordEndDelim = ''; - ( $wgLinkTitlesIgnoreCase ) ? $regexModifier = 'i' : $regexModifier = ''; + // ( $wgLinkTitlesIgnoreCase ) ? $regexModifier = 'i' : $regexModifier = ''; // To prevent adding self-references, we now // extract the current page's title. @@ -146,11 +148,13 @@ $arr = preg_split( $delimiter, $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // dump( $arr ); $safeTitle = str_replace( '/', '\/', $title ); + LinkTitles::$st = $safeTitle; for ( $i = 0; $i < count( $arr ); $i+=2 ) { // even indexes will point to text that is not enclosed by brackets - $arr[$i] = preg_replace( '/(?= 0 ) && ( $count > 0 )) { break; }; @@ -160,6 +164,14 @@ }; // foreach $res as $row return true; } + + static function CallBack($matches) { + if ( strcmp(substr(LinkTitles::$st, 1), substr($matches[0], 1)) == 0 ) { + return '[[' . $matches[0] . ']]'; + } else { + return '[[' . LinkTitles::$st . '|' . $matches[0] . ']]'; + } + } } // vim: ts=2:sw=2:noet diff --git a/LinkTitles.php b/LinkTitles.php index 26b0308..2900938 100755 --- a/LinkTitles.php +++ b/LinkTitles.php @@ -42,14 +42,14 @@ $wgLinkTitlesFirstOnly = false; $wgLinkTitlesWordStartOnly = true; $wgLinkTitlesWordEndOnly = true; - $wgLinkTitlesIgnoreCase = true; +// $wgLinkTitlesIgnoreCase = true; $wgExtensionCredits['parserhook'][] = array( 'path' => __FILE__, 'name' => 'LinkTitles', 'author' => '[http://www.mediawiki.org/wiki/User:Bovender Daniel Kraus]', 'url' => 'http://www.mediawiki.org/wiki/Extension:LinkTitles', - 'version' => '1.7.0', + 'version' => '1.8.1', 'descriptionmsg' => 'linktitles-desc' ); diff --git a/NEWS b/NEWS index e23582d..49eb0d2 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,8 @@ +LinkTitles 1.8.1: 2013-01-26 +* The extension will now automatically generate aliases for case-mismatched + page titles. +* Fix version number confusion (1.7.0 in the extension vs. 1.8.0 on GitHub). + LinkTitles 1.7.0: 2013-01-22 * Added new option to do exact searches of page titles; the default is to do __case-insensitive__ searches as before ($wgLinkTitlesIgnoreCase). @@ -61,4 +66,4 @@ LinkTitles 0.0.2: 2012-05-20 LinkTitles 0.0.1: 2012-05-20 * Initial release. -# vim: flp=\*\s +# vim: fo=tqn:flp=\*\s diff --git a/release/LinkTitles-1.8.1.tar.gz b/release/LinkTitles-1.8.1.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4112164a64ffdcdb4630a0d051101ceab51a3d57 GIT binary patch literal 10816 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 K-sc1Wpa1|jx2D4Y literal 0 HcmV?d00001