fix encoding issues with link conversion
authorJoey Hess <joey@kodama.kitenet.net>
Thu, 24 Jul 2008 16:36:10 +0000 (12:36 -0400)
committerJoey Hess <joey@kodama.kitenet.net>
Thu, 24 Jul 2008 16:36:10 +0000 (12:36 -0400)
Have to convert link text to page name going in.
And on the way out, need to replace spaces with underscores in the link
text, which is not normally done with titles.

IkiWiki/Plugin/link.pm
t/renamepage.t

index 529610710064e0a99c5ae29239f9a713534762fa..2ea6aa19eebbfdb17b0a1859eb79ca511ced8504 100644 (file)
@@ -90,8 +90,9 @@ sub renamepage (@) { #{{{
        $params{content} =~ s{(?<!\\)$link_regexp}{
                my $linktext=$2;
                my $link=$linktext;
-               if (bestlink($page, $2) eq $old) {
+               if (bestlink($page, IkiWiki::linkpage($linktext)) eq $old) {
                        $link=IkiWiki::pagetitle($new, 1);
+                       $link=~s/ /_/g;
                        if ($linktext =~ m/.*\/*?[A-Z]/) {
                                # preserve leading cap of last component
                                my @bits=split("/", $link);
index 1a607370b785baf4b669a58c92c8b5c6bb140a15..a706cbb46a15466c0adf9e579a0aeabf12f01ec6 100755 (executable)
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 use warnings;
 use strict;
-use Test::More tests => 20;
+use Test::More tests => 21;
 use Encode;
 
 BEGIN { use_ok("IkiWiki"); }
@@ -45,6 +45,7 @@ is(try("z", "foo" => "bar", "[[!moo ]]"), "[[!moo ]]"); # preprocessor directive
 is(try("bugs", "bugs/foo" => "wishlist/bar", "[[foo]]"), "[[wishlist/bar]]"); # subpage link
 is(try("z", "foo_bar" => "bar", "[[foo_bar]]"), "[[bar]]"); # old link with underscore
 is(try("z", "foo" => "bar_foo", "[[foo]]"), "[[bar_foo]]"); # new link with underscore
+is(try("z", "foo_bar" => "bar_foo", "[[foo_bar]]"), "[[bar_foo]]"); # both with underscore
 is(try("z", "foo" => "bar__".ord("(")."__", "[[foo]]"), "[[bar(]]"); # new link with escaped chars
-is(try("z", "foo__".ord("(")."__" => "bar", "[[foo(]]"), "[[bar(]]"); # old link with escaped chars
+is(try("z", "foo__".ord("(")."__" => "bar(", "[[foo(]]"), "[[bar(]]"); # old link with escaped chars
 is(try("z", "foo__".ord("(")."__" => "bar__".ord(")")."__", "[[foo(]]"), "[[bar)]]"); # both with escaped chars