diff options
author | Joey Hess <joey@kodama.kitenet.net> | 2008-02-11 22:48:27 -0500 |
---|---|---|
committer | Joey Hess <joey@kodama.kitenet.net> | 2008-02-11 22:48:27 -0500 |
commit | 4763514861457c295cadb7dbc7c0697ce682004f (patch) | |
tree | 159272cf44815ca8ffa24a363c24d2a5b384c94b /IkiWiki/Plugin | |
parent | 5163646e264633480d8562f2419bdaca597148c1 (diff) |
* Add the linkify and scan hooks. These hooks can be used to implement
custom, first-class types of wikilinks.
* Move standard wikilink implementation to a new wikilink plugin, which
will of course be enabled by default.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r-- | IkiWiki/Plugin/link.pm | 83 | ||||
-rw-r--r-- | IkiWiki/Plugin/skeleton.pm | 16 |
2 files changed, 99 insertions, 0 deletions
diff --git a/IkiWiki/Plugin/link.pm b/IkiWiki/Plugin/link.pm new file mode 100644 index 000000000..24579057c --- /dev/null +++ b/IkiWiki/Plugin/link.pm @@ -0,0 +1,83 @@ +#!/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 diff --git a/IkiWiki/Plugin/skeleton.pm b/IkiWiki/Plugin/skeleton.pm index 0e7f2e014..17a2162ff 100644 --- a/IkiWiki/Plugin/skeleton.pm +++ b/IkiWiki/Plugin/skeleton.pm @@ -14,6 +14,8 @@ sub import { #{{{ hook(type => "needsbuild", id => "skeleton", call => \&needsbuild); hook(type => "preprocess", id => "skeleton", call => \&preprocess); hook(type => "filter", id => "skeleton", call => \&filter); + hook(type => "linkify", id => "skeleton", call => \&linkify); + hook(type => "scan", id => "skeleton", call => \&scan); hook(type => "htmlize", id => "skeleton", call => \&htmlize); hook(type => "sanitize", id => "skeleton", call => \&sanitize); hook(type => "format", id => "skeleton", call => \&format); @@ -57,6 +59,20 @@ sub filter (@) { #{{{ return $params{content}; } # }}} +sub linkify (@) { #{{{ + my %params=@_; + + debug("skeleton plugin running as linkify"); + + return $params{content}; +} # }}} + +sub scan (@) { #{{{a + my %params=@_; + + debug("skeleton plugin running as scan"); +} # }}} + sub htmlize (@) { #{{{ my %params=@_; |