X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/78323806ee775b8f0384255ba7cecf1e74e75e4f..cd62acfb4710ffd85ea1e2635541889083267f77:/IkiWiki/Plugin/camelcase.pm?ds=sidebyside diff --git a/IkiWiki/Plugin/camelcase.pm b/IkiWiki/Plugin/camelcase.pm index dc89f1b90..f9ee30fe2 100644 --- a/IkiWiki/Plugin/camelcase.pm +++ b/IkiWiki/Plugin/camelcase.pm @@ -6,31 +6,68 @@ use warnings; use strict; use IkiWiki 2.00; -sub import { #{{{ - hook(type => "filter", id => "camelcase", call => \&filter); -} # }}} +# This regexp is based on the one in Text::WikiFormat. +my $link_regexp=qr{ + (? "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, + }, + camelcase_ignore => { + type => "string", + example => [], + description => "list of words to not turn into links", + safe => 1, + rebuild => undef, # might change links + }, +} + +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{ - (?=]) # try to avoid expanding non-links - # with a zero width negative lookbehind for - # characters that suggest it's not a link - \b # word boundry - ( - (?: - [A-Z] # Uppercase start - [a-z0-9] # followed by lowercase - \w* # and rest of word - ) - {2,} # repeated twice - ) - }{[[$1]]}gx; + $params{content}=~s{$link_regexp}{ + ignored($1) ? $1 : 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) unless ignored($1) + } +} + +sub ignored ($) { + my $word=lc shift; + grep { $word eq lc $_ } @{$config{'camelcase_ignore'}} +} 1