X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/4763514861457c295cadb7dbc7c0697ce682004f..fae3cef41a55dace8545429c0139d01b93c69307:/IkiWiki/Plugin/link.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm index 24579057c..48691d973 100644 --- a/IkiWiki/Plugin/link.pm +++ b/IkiWiki/Plugin/link.pm @@ -3,17 +3,27 @@ package IkiWiki::Plugin::link; use warnings; use strict; -use IkiWiki 2.00; +use IkiWiki 3.00; my $link_regexp; -sub import { #{{{ +sub import { + hook(type => "getsetup", id => "link", call => \&getsetup); hook(type => "checkconfig", id => "link", call => \&checkconfig); hook(type => "linkify", id => "link", call => \&linkify); hook(type => "scan", id => "link", call => \&scan); -} # }}} + hook(type => "renamelink", id => "link", call => \&renamelink); +} -sub checkconfig () { #{{{ +sub getsetup () { + return + plugin => { + safe => 1, + rebuild => 1, + }, +} + +sub checkconfig () { if ($config{prefix_directives}) { $link_regexp = qr{ \[\[(?=[^!]) # beginning of link @@ -48,9 +58,9 @@ sub checkconfig () { #{{{ \]\] # end of link }x, } -} #}}} +} -sub linkify (@) { #{{{ +sub linkify (@) { my %params=@_; my $page=$params{page}; my $destpage=$params{destpage}; @@ -59,25 +69,55 @@ sub linkify (@) { #{{{ defined $2 ? ( $1 ? "[[$2|$3".($4 ? "#$4" : "")."]]" - : htmllink($page, $destpage, IkiWiki::linkpage($3), - anchor => $4, linktext => IkiWiki::pagetitle($2))) + : htmllink($page, $destpage, linkpage($3), + anchor => $4, linktext => pagetitle($2))) : ( $1 ? "[[$3".($4 ? "#$4" : "")."]]" - : htmllink($page, $destpage, IkiWiki::linkpage($3), + : htmllink($page, $destpage, linkpage($3), anchor => $4)) }eg; return $params{content}; -} #}}} +} -sub scan (@) { #{{{ +sub scan (@) { my %params=@_; my $page=$params{page}; my $content=$params{content}; while ($content =~ /(?<!\\)$link_regexp/g) { - push @{$links{$page}}, IkiWiki::linkpage($2); + push @{$links{$page}}, linkpage($2); } -} # }}} +} + +sub renamelink (@) { + my %params=@_; + my $page=$params{page}; + my $old=$params{oldpage}; + my $new=$params{newpage}; + + $params{content} =~ s{(?<!\\)$link_regexp}{ + my $linktext=$2; + my $link=$linktext; + if (bestlink($page, linkpage($linktext)) eq $old) { + $link=pagetitle($new, 1); + $link=~s/ /_/g; + if ($linktext =~ m/.*\/*?[A-Z]/) { + # preserve leading cap of last component + my @bits=split("/", $link); + $link=join("/", @bits[0..$#bits-1], ucfirst($bits[$#bits])); + } + if (index($linktext, "/") == 0) { + # absolute link + $link="/$link"; + } + } + defined $1 + ? ( "[[$1|$link".($3 ? "#$3" : "")."]]" ) + : ( "[[$link". ($3 ? "#$3" : "")."]]" ) + }eg; + + return $params{content}; +} 1