summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-05-04 04:33:56 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-05-04 04:33:56 +0000
commitecfd8bcae6ce5c5a5005e47030f6fcd9545b81c6 (patch)
treeddf6bef2e80954bd7a227615ee510adc19f24233 /IkiWiki/Plugin
parentbe56970d0565cc259bf28b1a3aa9582269c8d41f (diff)
update
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/smiley.pm44
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