diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-07-23 18:57:27 -0400 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-07-23 18:57:27 -0400 |
commit | 8b063a24d909bfac056668f00513bf92f6f17817 (patch) | |
tree | 63a84e358354011f2e7ef8029028e771770762bb | |
parent | 4691a2ad39cce273231fddd9a589b4f8fdc1b063 (diff) |
case preservation
-rw-r--r-- | IkiWiki/Plugin/link.pm | 15 | ||||
-rwxr-xr-x | t/renamepage.t | 4 |
2 files changed, 13 insertions, 6 deletions
diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index 51afaec9e..e20109888 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -11,6 +11,7 @@ sub import { #{{{ hook(type => "checkconfig", id => "link", call => \&checkconfig); hook(type => "linkify", id => "link", call => \&linkify); hook(type => "scan", id => "link", call => \&scan); + hook(type => "renamepage", id => "link", call => \&renamepage); } # }}} sub checkconfig () { #{{{ @@ -87,13 +88,17 @@ sub renamepage (@) { #{{{ my $new=$params{newpage}; $params{content} =~ s{(?<!\\)$link_regexp}{ - my $link=$2; + my $linktext=$2; + my $link=$linktext; if (bestlink($page, $2) eq $old) { - if (index($2, "/") == 0) { - $link="/$new"; + $link=$new; + if ($linktext =~ m/\/*?[A-Z]/) { + # preserve leading cap + $link=ucfirst($link); } - else { - $link=$new; + if (index($linktext, "/") == 0) { + # absolute link + $link="/$link"; } } defined $1 diff --git a/t/renamepage.t b/t/renamepage.t index ce62bf468..b16ca3d23 100755 --- a/t/renamepage.t +++ b/t/renamepage.t @@ -1,7 +1,7 @@ #!/usr/bin/perl use warnings; use strict; -use Test::More tests => 11; +use Test::More tests => 14; use Encode; BEGIN { use_ok("IkiWiki"); } @@ -34,6 +34,8 @@ is(try("z", "foo" => "bar", "[[xxx]]"), "[[xxx]]"); # unrelated link is(try("z", "foo" => "bar", "[[bar]]"), "[[bar]]"); # link already to new page is(try("z", "foo" => "bar", "[[foo]]"), "[[bar]]"); # basic conversion to new page name is(try("z", "foo" => "bar", "[[/foo]]"), "[[/bar]]"); # absolute link +is(try("z", "foo" => "bar", "[[Foo]]"), "[[Bar]]"); # preserve case +is(try("z", "foo" => "bar", "[[/Foo]]"), "[[/Bar]]"); # preserve case w/absolute is(try("z", "foo" => "bar", "[[foo]] [[xxx]]"), "[[bar]] [[xxx]]"); # 2 links, 1 converted is(try("z", "foo" => "bar", "[[xxx|foo]]"), "[[xxx|bar]]"); # conversion w/text is(try("z", "foo" => "bar", "[[foo#anchor]]"), "[[bar#anchor]]"); # with anchor |