%pagesources %destsources);
our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
-my $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
+our $installdir=''; # INSTALLDIR_AUTOREPLACE done by Makefile, DNE
# Optimisation.
use Memoize;
my $sub=shift;
if (exists $hooks{$type}) {
- my @deferred;
+ my (@first, @middle, @last);
foreach my $id (keys %{$hooks{$type}}) {
- if ($hooks{$type}{$id}{last}) {
- push @deferred, $id;
- next;
+ if ($hooks{$type}{$id}{first}) {
+ push @first, $id;
+ }
+ elsif ($hooks{$type}{$id}{last}) {
+ push @last, $id;
+ }
+ else {
+ push @middle, $id;
}
- $sub->($hooks{$type}{$id}{call});
}
- foreach my $id (@deferred) {
+ foreach my $id (@first, @middle, @last) {
$sub->($hooks{$type}{$id}{call});
}
}
sub yesno ($) {
my $val=shift;
- return (defined $val && lc($val) eq gettext("yes"));
+ return (defined $val && (lc($val) eq gettext("yes") || lc($val) eq "yes" || $val eq "1"));
}
sub inject {
package IkiWiki::PageSpec;
+sub derel ($$) {
+ my $path=shift;
+ my $from=shift;
+
+ if ($path =~ m!^\./!) {
+ $from=~s#/?[^/]+$## if defined $from;
+ $path=~s#^\./##;
+ $path="$from/$path" if length $from;
+ }
+
+ return $path;
+}
+
sub match_glob ($$;@) {
my $page=shift;
my $glob=shift;
my %params=@_;
- my $from=exists $params{location} ? $params{location} : '';
-
- # relative matching
- if ($glob =~ m!^\./!) {
- $from=~s#/?[^/]+$##;
- $glob=~s#^\./##;
- $glob="$from/$glob" if length $from;
- }
+ $glob=derel($glob, $params{location});
my $regexp=IkiWiki::glob2re($glob);
if ($page=~/^$regexp$/i) {
my $link=lc(shift);
my %params=@_;
+ $link=derel($link, $params{location});
my $from=exists $params{location} ? $params{location} : '';
- # relative matching
- if ($link =~ m!^\.! && defined $from) {
- $from=~s#/?[^/]+$##;
- $link=~s#^\./##;
- $link="$from/$link" if length $from;
- }
-
my $links = $IkiWiki::links{$page};
return IkiWiki::FailReason->new("$page has no links") unless $links && @{$links};
my $bestlink = IkiWiki::bestlink($from, $link);
sub match_created_before ($$;@) {
my $page=shift;
my $testpage=shift;
+ my %params=@_;
+
+ $testpage=derel($testpage, $params{location});
if (exists $IkiWiki::pagectime{$testpage}) {
if ($IkiWiki::pagectime{$page} < $IkiWiki::pagectime{$testpage}) {
sub match_created_after ($$;@) {
my $page=shift;
my $testpage=shift;
+ my %params=@_;
+
+ $testpage=derel($testpage, $params{location});
if (exists $IkiWiki::pagectime{$testpage}) {
if ($IkiWiki::pagectime{$page} > $IkiWiki::pagectime{$testpage}) {