diff options
author | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-05-04 04:33:56 +0000 |
---|---|---|
committer | joey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071> | 2006-05-04 04:33:56 +0000 |
commit | ecfd8bcae6ce5c5a5005e47030f6fcd9545b81c6 (patch) | |
tree | ddf6bef2e80954bd7a227615ee510adc19f24233 /IkiWiki | |
parent | be56970d0565cc259bf28b1a3aa9582269c8d41f (diff) |
update
Diffstat (limited to 'IkiWiki')
-rw-r--r-- | IkiWiki/Plugin/smiley.pm | 44 |
1 files changed, 44 insertions, 0 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 |