diff options
-rw-r--r-- | IkiWiki/Plugin/smiley.pm | 44 | ||||
-rw-r--r-- | doc/ikiwiki.setup | 2 |
2 files changed, 45 insertions, 1 deletions
diff --git a/IkiWiki/Plugin/smiley.pm b/IkiWiki/Plugin/smiley.pm new file mode 100644 index 000000000..5f05e3a4c --- /dev/null +++ b/IkiWiki/Plugin/smiley.pm @@ -0,0 +1,44 @@ +#!/usr/bin/perl +package IkiWiki::Plugin::smiley; + +use warnings; +use strict; +use IkiWiki; + +my %smileys; +my $smiley_regexp; + +sub import { #{{{ + IkiWiki::hook(type => "checkconfig", id => "smiley", call => \&setup); +} # }}} + +sub setup () { #{{{ + my $list=IkiWiki::readfile(IkiWiki::srcfile("smileys.mdwn")); + while ($list =~ m/^\s*\*\s+\\([^\s]+)\s+\[\[([^]]+)\]\]/mg) { + $smileys{$1}=$2; + } + + if (! %smileys) { + IkiWiki::debug("failed to parse any smileys, disabling plugin"); + return; + } + + IkiWiki::hook(type => "filter", id => "smiley", call => \&filter); + # sort and reverse so that substrings come after longer strings + # that contain them, in most cases. + $smiley_regexp='('.join('|', map { quotemeta } + reverse sort keys %smileys).')'; + #IkiWiki::debug($smiley_regexp); +} #}}} + +sub filter (@) { #{{{ + my %params=@_; + + $params{content} =~ s{(?<=\s)(\\?)$smiley_regexp(?=\s)}{ + $1 ? $2 : IkiWiki::htmllink($params{page}, $smileys{$2}, 0, 0, $2) + }egs; + + return $params{content}; +} # }}} + +1 diff --git a/doc/ikiwiki.setup b/doc/ikiwiki.setup index 3bc15891e..3e0e1599e 100644 --- a/doc/ikiwiki.setup +++ b/doc/ikiwiki.setup @@ -51,5 +51,5 @@ use IkiWiki::Setup::Standard { # Sanitize html? sanitize => 1, # To change the enabled plugins, edit this list - #plugin => [qw{pagecount inline brokenlinks hyperestraier}], + #plugin => [qw{pagecount inline brokenlinks hyperestraier smiley}], } |