shortcut: Support Wikipedia's form of url-encoding for unicode characters
authorJoey Hess <joey@kitenet.net>
Sat, 3 Mar 2012 15:27:59 +0000 (11:27 -0400)
committerJoey Hess <joey@kitenet.net>
Sat, 3 Mar 2012 15:27:59 +0000 (11:27 -0400)
I think it's the wrong encoding, seems like mojibake to me, but it works
now. Closes: #661198

IkiWiki/Plugin/shortcut.pm
debian/changelog
doc/shortcuts.mdwn

index 0cedbe447480f7f7e01a24476c1cc40e856bccc5..98df143ab27e34506217f770d40c03e554dcd386 100644 (file)
@@ -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;
index 0e1749bf902011eda8e2f26983dcb93bc2a90518..bac4874c73e72d22c44749abb01526eb8fe8bbd6 100644 (file)
@@ -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 <joeyh@debian.org>  Wed, 08 Feb 2012 16:07:00 -0400
 
index 07210f9bfe88092cdcfd5a09c66f37923653cbcb..722c6b141b06aee390b82cf10e216f5dfdbfbb4b 100644 (file)
@@ -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