From 78737cbfbf91c7b31ed5d216a23de8d360a76392 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Sat, 3 Mar 2012 11:27:59 -0400 Subject: [PATCH] shortcut: Support Wikipedia's form of url-encoding for unicode characters I think it's the wrong encoding, seems like mojibake to me, but it works now. Closes: #661198 --- IkiWiki/Plugin/shortcut.pm | 18 ++++++++++++++---- debian/changelog | 2 ++ doc/shortcuts.mdwn | 8 +++++--- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/IkiWiki/Plugin/shortcut.pm b/IkiWiki/Plugin/shortcut.pm index 0cedbe447..98df143ab 100644 --- a/IkiWiki/Plugin/shortcut.pm +++ b/IkiWiki/Plugin/shortcut.pm @@ -73,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; diff --git a/debian/changelog b/debian/changelog index 0e1749bf9..bac4874c7 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,6 +4,8 @@ ikiwiki (3.20120203) UNRELEASED; urgency=low * openid-jquery.js: Update URL of Wordpress favicon. Closes: #660549 * Drop the version attribute on the generator tag in Atom feeds to make builds more reproducible. Closes: #661569 (Paul Wise) + * shortcut: Support Wikipedia's form of url-encoding for unicode + characters, which involves mojibake. Closes: #661198 -- Joey Hess Wed, 08 Feb 2012 16:07:00 -0400 diff --git a/doc/shortcuts.mdwn b/doc/shortcuts.mdwn index 07210f9bf..722c6b141 100644 --- a/doc/shortcuts.mdwn +++ b/doc/shortcuts.mdwn @@ -15,7 +15,7 @@ This page controls what shortcut links the wiki supports. * [[!shortcut name=archive url="http://web.archive.org/*/%S"]] * [[!shortcut name=gmap url="https://maps.google.com/maps?q=%s"]] * [[!shortcut name=gmsg url="https://groups.google.com/groups?selm=%s"]] -* [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%s"]] +* [[!shortcut name=wikipedia url="https://en.wikipedia.org/wiki/%W"]] * [[!shortcut name=wikitravel url="https://wikitravel.org/en/%s"]] * [[!shortcut name=wiktionary url="https://en.wiktionary.org/wiki/%s"]] * [[!shortcut name=debbug url="http://bugs.debian.org/%S" desc="Debian bug #%s"]] @@ -69,8 +69,10 @@ This page controls what shortcut links the wiki supports. To add a new shortcut, use the `shortcut` [[ikiwiki/directive]]. In the url, "%s" is replaced with the text passed to the named shortcut, after [[!wikipedia url_encoding]] -it, and '%S' is replaced with the raw, non-encoded text. The optional -`desc` parameter controls the description of the link. +it, and '%S' is replaced with the raw, non-encoded text. +Additionally, `%W` is replaced with the text encoded just right for +Wikipedia. The optional `desc` parameter controls the description of +the link. Remember that the `name` you give the shortcut will become a new [[ikiwiki/directive]]. Avoid using a `name` that conflicts