summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IkiWiki/Plugin/smiley.pm44
-rw-r--r--doc/ikiwiki.setup2
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}],
}