X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/5c2f6cb8935f828274511ba5ca0d92b586632740..fb2e00014da40d677f79b6b07e05ae821e7e10e5:/IkiWiki/Plugin/shortcut.pm

diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm
index 0e7cbd4d1..98df143ab 100644
--- a/IkiWiki/Plugin/shortcut.pm
+++ b/IkiWiki/Plugin/shortcut.pm
@@ -16,18 +16,25 @@ sub getsetup () {
 		plugin => {
 			safe => 1,
 			rebuild => undef,
+			section => "widget",
 		},
 }
 
 sub checkconfig () {
-	if (defined $config{srcdir}) {
+	if (defined $config{srcdir} && length $config{srcdir}) {
 		# Preprocess the shortcuts page to get all the available shortcuts
 		# defined before other pages are rendered.
-		my $srcfile=srcfile("shortcuts.mdwn", 1);
+		my $srcfile=srcfile("shortcuts.".$config{default_pageext}, 1);
 		if (! defined $srcfile) {
-			error(gettext("shortcut plugin will not work without a shortcuts.mdwn"));
+			$srcfile=srcfile("shortcuts.mdwn", 1);
+		}
+		if (! defined $srcfile) {
+			print STDERR sprintf(gettext("shortcut plugin will not work without %s"),
+				"shortcuts.".$config{default_pageext})."\n";
+		}
+		else {
+			IkiWiki::preprocess("shortcuts", "shortcuts", readfile($srcfile));
 		}
-		IkiWiki::preprocess("shortcuts", "shortcuts", readfile($srcfile));
 	}
 }
 
@@ -66,11 +73,21 @@ sub shortcut_expand ($$@) {
 	add_depends($params{destpage}, "shortcuts");
 
 	my $text=join(" ", @params);
-	my $encoded_text=$text;
-	$encoded_text=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
 	
-	$url=~s{\%([sS])}{
-		$1 eq 's' ? $encoded_text : $text
+	$url=~s{\%([sSW])}{
+		if ($1 eq 's') {
+			my $t=$text;
+			$t=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
+			$t;
+		}
+		elsif ($1 eq 'S') {
+			$text;
+		}
+		elsif ($1 eq 'W') {
+			my $t=Encode::encode_utf8($text);
+			$t=~s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg;
+			$t;
+		}
 	}eg;
 
 	$text=~s/_/ /g;