X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/dae0f48e91304afcb6ebe0936360e51b22a56548..e82c6b1908b21b5e4246767d6a87fe46245e5e29:/IkiWiki/Plugin/camelcase.pm diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index 0bb35b6e2..7881becd5 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -2,22 +2,60 @@ # CamelCase links package IkiWiki::Plugin::camelcase; -use IkiWiki; use warnings; use strict; +use IkiWiki 2.00; + +# This regexp is based on the one in Text::WikiFormat. +my $link_regexp=qr{ + (? "filter", id => "camelcase", call => \&filter); + hook(type => "getsetup", id => "camelcase", call => \&getsetup); + hook(type => "linkify", id => "camelcase", call => \&linkify); + hook(type => "scan", id => "camelcase", call => \&scan); } # }}} -sub filter (@) { #{{{ +sub getsetup () { #{{{ + return + plugin => { + safe => 1, + rebuild => undef, + }; +} #}}} + +sub linkify (@) { #{{{ my %params=@_; + my $page=$params{page}; + my $destpage=$params{destpage}; - # Make CamelCase links work by promoting them to fullfledged - # WikiLinks. This regexp is based on the one in Text::WikiFormat. - $params{content}=~s#(?=])\b((?:[A-Z][a-z0-9]\w*){2,})#[[$1]]#g; + $params{content}=~s{$link_regexp}{ + htmllink($page, $destpage, linkpage($1)) + }eg; return $params{content}; } #}}} +sub scan (@) { #{{{ + my %params=@_; + my $page=$params{page}; + my $content=$params{content}; + + while ($content =~ /$link_regexp/g) { + push @{$links{$page}}, linkpage($1); + } +} + 1