- #!/usr/bin/perl
- package IkiWiki::Plugin::link;
- use warnings;
- use strict;
- use IkiWiki 2.00;
- my $link_regexp;
- sub import { #{{{
- hook(type => "checkconfig", id => "link", call => \&checkconfig);
- hook(type => "linkify", id => "link", call => \&linkify);
- hook(type => "scan", id => "link", call => \&scan);
- } # }}}
- sub checkconfig () { #{{{
- if ($config{prefix_directives}) {
- $link_regexp = qr{
- \[\[(?=[^!]) # beginning of link
- (?:
- ([^\]\|]+) # 1: link text
- \| # followed by '|'
- )? # optional
-
- ([^\n\r\]#]+) # 2: page to link to
- (?:
- \# # '#', beginning of anchor
- ([^\s\]]+) # 3: anchor text
- )? # optional
-
- \]\] # end of link
- }x;
- }
- else {
- $link_regexp = qr{
- \[\[ # beginning of link
- (?:
- ([^\]\|\n\s]+) # 1: link text
- \| # followed by '|'
- )? # optional
- ([^\s\]#]+) # 2: page to link to
- (?:
- \# # '#', beginning of anchor
- ([^\s\]]+) # 3: anchor text
- )? # optional
- \]\] # end of link
- }x,
- }
- } #}}}
- sub linkify (@) { #{{{
- my %params=@_;
- my $page=$params{page};
- my $destpage=$params{destpage};
- $params{content} =~ s{(\\?)$link_regexp}{
- defined $2
- ? ( $1
- ? "[[$2|$3".($4 ? "#$4" : "")."]]"
- : htmllink($page, $destpage, IkiWiki::linkpage($3),
- anchor => $4, linktext => IkiWiki::pagetitle($2)))
- : ( $1
- ? "[[$3".($4 ? "#$4" : "")."]]"
- : htmllink($page, $destpage, IkiWiki::linkpage($3),
- anchor => $4))
- }eg;
-
- return $params{content};
- } #}}}
- sub scan (@) { #{{{
- my %params=@_;
- my $page=$params{page};
- my $content=$params{content};
- while ($content =~ /(?<!\\)$link_regexp/g) {
- push @{$links{$page}}, IkiWiki::linkpage($2);
- }
- } # }}}
- 1
|