From: Joey Hess <joey@kodama.kitenet.net>
Date: Thu, 24 Jul 2008 16:36:10 +0000 (-0400)
Subject: fix encoding issues with link conversion
X-Git-Tag: 2.55~42^2
X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/commitdiff_plain/c2f621cb1c2eb8bb898acfbfac059c5ee2d9568e?ds=inline

fix encoding issues with link conversion

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.
---

diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm
index 529610710..2ea6aa19e 100644
--- a/IkiWiki/Plugin/link.pm
+++ b/IkiWiki/Plugin/link.pm
@@ -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);
diff --git a/t/renamepage.t b/t/renamepage.t
index 1a607370b..a706cbb46 100755
--- a/t/renamepage.t
+++ b/t/renamepage.t
@@ -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