diff options
Diffstat (limited to '.library/IkiWiki/Plugin/license.pm')
-rw-r--r-- | .library/IkiWiki/Plugin/license.pm | 70 |
1 files changed, 20 insertions, 50 deletions
diff --git a/.library/IkiWiki/Plugin/license.pm b/.library/IkiWiki/Plugin/license.pm index e608461f..651c039a 100644 --- a/.library/IkiWiki/Plugin/license.pm +++ b/.library/IkiWiki/Plugin/license.pm @@ -1,7 +1,7 @@ # A plugin for ikiwiki to implement adding a footer with licensing information -# to every rendered page. +# based on a default value taken out of a file. -# Copyright © 2007 Thomas Schwinge <tschwinge@gnu.org> +# Copyright © 2007, 2008 Thomas Schwinge <tschwinge@gnu.org> # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by the @@ -17,13 +17,13 @@ # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -# A footer with licensing information will be added to every rendered page if -# either (a) a file `license.mdwn' is found (using the same rules as for the -# sidebar plugin) or (b) (which be used to override (a)) a statement à la -# ``[[license text=WHATEVER]]'' is found in the source page. +# Unless overridden with the `meta' plugin, a footer with licensing information +# will be added to every page using a source file `license' (e.g., +# `license.mdwn') (using the same ``locating rules'' as for the sidebar +# plugin). # # The state which page's license text was gathered from which source is not -# tracked, so you'll need a full wiki-rebuild if (a)'s files are changed. +# tracked, so you'll need a full wiki-rebuild if the `license' file is changed. package IkiWiki::Plugin::license; @@ -31,59 +31,29 @@ use warnings; use strict; use IkiWiki 2.00; -sub import -{ - hook (type => "preprocess", id => "license", call => \&preprocess); - hook (type => "pagetemplate", id => "license", call => \&pagetemplate); -} - -my %text; +my %license; -sub preprocess (@) +sub import { - my %params = @_; - my $page = $params {page}; - - # We don't return any text here, but record the passed text. - $text {$page} = $params {text}; - return ""; + hook (type => "scan", id => "license", call => \&scan); } -sub pagetemplate (@) +sub scan (@) { my %params = @_; - my $page = $params {page}; - my $destpage = $params {destpage}; + my $page = $params{page}; - my $template = $params {template}; + return if defined $pagestate{$page}{meta}{license}; - if ($template->query (name => "license")) - { - my $content; - my $pagetype; - if (defined $text {$page}) - { - $pagetype = pagetype ($pagesources {$page}); - $content = $text {$page}; - } - else - { - my $license_page = bestlink ($page, "license") || return; - my $license_file = $pagesources {$license_page} || return; - $pagetype = pagetype ($license_file); - $content = readfile (srcfile ($license_file)); - } + my $content; + my $license_page = bestlink ($page, "license") || return; + my $license_file = $pagesources{$license_page} || return; - if (defined $content && length $content) - { - $template->param (license => - IkiWiki::htmlize ($destpage, $pagetype, - IkiWiki::linkify ($page, $destpage, - IkiWiki::preprocess ($page, $destpage, - IkiWiki::filter ($page, $destpage, $content))))); + # Only an optimization to avoid reading the same file again and again. + $license{$license_file} = readfile (srcfile ($license_file)) + unless defined $license{$license_file}; - } - } + $pagestate{$page}{meta}{license} = $license{$license_file}; } 1 |