summaryrefslogtreecommitdiff
path: root/IkiWiki/Plugin
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-06-02 04:49:12 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2006-06-02 04:49:12 +0000
commitd534483b9befc360b3d973091b1b7f5692f15a6e (patch)
treef5071940e2966f935e78bc90755c200145179166 /IkiWiki/Plugin
parentf1b3b728c1bc1e1bd821d362b4936990c1ab6bc9 (diff)
* Reorganised the doc wiki's todo/* pages, using a link/tag to flag
* Allow pagetemplate plugins to override *anything* in the template. * Add a meta plugin, which allows specifying various metadata about pages, like license and author. It also allows for inserting html link and meta tags into html, overriding the title, and adding hidden WikiLinks, which can be useful when using link-based globbing for page categorisation. * Remove preprocessor directives from inlined pages. * Allow simple preprocessor directive values to be specified w/o quotes.
Diffstat (limited to 'IkiWiki/Plugin')
-rw-r--r--IkiWiki/Plugin/inline.pm2
-rw-r--r--IkiWiki/Plugin/meta.pm61
2 files changed, 62 insertions, 1 deletions
diff --git a/IkiWiki/Plugin/inline.pm b/IkiWiki/Plugin/inline.pm
index 6ecdf0d38..b22109a93 100644
--- a/IkiWiki/Plugin/inline.pm
+++ b/IkiWiki/Plugin/inline.pm
@@ -100,7 +100,7 @@ sub get_inline_content ($$) { #{{{
my $file=$pagesources{$page};
my $type=pagetype($file);
if ($type ne 'unknown') {
- return htmlize($type, linkify($page, $parentpage, readfile(srcfile($file))));
+ return htmlize($type, preprocess($page, linkify($page, $parentpage, readfile(srcfile($file))), 1));
}
else {
return "";
diff --git a/IkiWiki/Plugin/meta.pm b/IkiWiki/Plugin/meta.pm
new file mode 100644
index 000000000..8244cf718
--- /dev/null
+++ b/IkiWiki/Plugin/meta.pm
@@ -0,0 +1,61 @@
+#!/usr/bin/perl
+# Ikiwiki metadata plugin.
+package IkiWiki::Plugin::meta;
+
+use warnings;
+use strict;
+use IkiWiki;
+
+my %meta;
+my %title;
+
+sub import { #{{{
+ IkiWiki::hook(type => "preprocess", id => "meta",
+ call => \&preprocess);
+ IkiWiki::hook(type => "pagetemplate", id => "meta",
+ call => \&pagetemplate);
+} # }}}
+
+sub preprocess (@) { #{{{
+ if (! @_) {
+ return "";
+ }
+ my %params=@_;
+ my $key=shift;
+ my $value=$params{$key};
+ delete $params{$key};
+ my $page=$params{page};
+ delete $params{page};
+
+ if ($key eq 'link') {
+ if (%params) {
+ $meta{$page}='' unless exists $meta{$page};
+ $meta{$page}.="<link href=\"$value\" ".
+ join(" ", map { "$_=\"$params{$_}\"" } keys %params).
+ " />\n";
+ }
+ else {
+ # hidden WikiLink
+ push @{$IkiWiki::links{$page}}, $value;
+ }
+ }
+ elsif ($key eq 'title') {
+ $title{$page}=$value;
+ }
+ else {
+ $meta{$page}='' unless exists $meta{$page};
+ $meta{$page}.="<meta name=\"$key\" content=\"$value\" />\n";
+ }
+
+ return "";
+} # }}}
+
+sub pagetemplate ($$) { #{{{
+ my $page=shift;
+ my $template=shift;
+
+ $template->param(meta => $meta{$page}) if exists $meta{$page};
+ $template->param(title => $title{$page}) if exists $title{$page};
+} # }}}
+
+1