use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
- bestlink htmllink readfile writefile pagetype srcfile pagename
- displaytime will_render gettext urlto targetpage
- add_underlay pagetitle titlepage linkpage newpagefile
- inject
+ pagespec_match_list bestlink htmllink readfile writefile
+ pagetype srcfile pagename displaytime will_render gettext urlto
+ targetpage add_underlay pagetitle titlepage linkpage
+ newpagefile inject
%config %links %pagestate %wikistate %renderedfiles
%pagesources %destsources);
our $VERSION = 3.00; # plugin interface version, next is ikiwiki version
default => [qr/(^|\/)\.\.(\/|$)/, qr/^\./, qr/\/\./,
qr/\.x?html?$/, qr/\.ikiwiki-new$/,
qr/(^|\/).svn\//, qr/.arch-ids\//, qr/{arch}\//,
- qr/(^|\/)_MTN\//,
+ qr/(^|\/)_MTN\//, qr/(^|\/)_darcs\//,
qr/\.dpkg-tmp$/],
description => "regexps of source files to ignore",
safe => 0,
$code.="IkiWiki::PageSpec::match_$1(\$page, ".safequote($2).", \@_)";
}
else {
- $code.="IkiWiki::FailReason->new(".safequote(qq{unknown function in pagespec "$word"}).")";
+ $code.="IkiWiki::ErrorReason->new(".safequote(qq{unknown function in pagespec "$word"}).")";
}
}
else {
}
my $sub=pagespec_translate($spec);
- return IkiWiki::FailReason->new("syntax error in pagespec \"$spec\"")
+ return IkiWiki::ErrorReason->new("syntax error in pagespec \"$spec\"")
if $@ || ! defined $sub;
return $sub->($page, @params);
}
+sub pagespec_match_list ($$;@) {
+ my $pages=shift;
+ my $spec=shift;
+ my @params=@_;
+
+ my $sub=pagespec_translate($spec);
+ error "syntax error in pagespec \"$spec\""
+ if $@ || ! defined $sub;
+
+ my @ret;
+ my $r;
+ foreach my $page (@$pages) {
+ $r=$sub->($page, @params);
+ push @ret, $page if $r;
+ }
+
+ if (! @ret && defined $r && $r->isa("IkiWiki::ErrorReason")) {
+ error(sprintf(gettext("cannot match pages: %s"), $r));
+ }
+ else {
+ return @ret;
+ }
+}
+
sub pagespec_valid ($) {
my $spec=shift;
return bless \$value, $class;
}
+package IkiWiki::ErrorReason;
+
+our @ISA = 'IkiWiki::FailReason';
+
package IkiWiki::SuccessReason;
use overload (
my %params=@_;
if (! exists $params{user}) {
- return IkiWiki::FailReason->new("no user specified");
+ return IkiWiki::ErrorReason->new("no user specified");
}
if (defined $params{user} && lc $params{user} eq lc $user) {
my %params=@_;
if (! exists $params{user}) {
- return IkiWiki::FailReason->new("no user specified");
+ return IkiWiki::ErrorReason->new("no user specified");
}
if (defined $params{user} && IkiWiki::is_admin($params{user})) {
my %params=@_;
if (! exists $params{ip}) {
- return IkiWiki::FailReason->new("no IP specified");
+ return IkiWiki::ErrorReason->new("no IP specified");
}
if (defined $params{ip} && lc $params{ip} eq lc $ip) {